文章目录
- 操作系统
- 1. 操作系统的特征:
- 2. 进程与线程的关系以及区别
- 3. 简述进程和程序的区别
- 4. 进程的常见状态?以及各种状态之间的转换条件?
- 5. 进程的调度算法有哪些?
- 6. 什么是死锁?产生条件?如何避免死锁?
- 7. 进程间通信有哪些方式?它们的区别?
- 8. 同步与异步是什么?有什么区别?
- 9. 并发与并行的区别?
- 10. 中断与异常的区别?
- 11. 中断的处理过程是怎样的?
- 12. 将用户源程序变为可在内存中执行的程序的步骤?
- 13. 程序有哪几种装入方式?又有哪几种链接方式?
- 14. 虚拟存储器的主要特征是什么?
- 15. 缺页中断的处理过程与一般中断相似。
- 16. 什么是 DMA 方式?它与中断方式的主要区别是什么?
- 17. 试比较分页与分段有何区别?
- 18. 在交互式系统中,非剥夺是不是一个好的策略?为什么?
- 19. 解释一下管程
操作系统
1. 操作系统的特征:
并发、共享、虚拟、异步。
区别进程的特征:动态性、并发性、独立性、异步性。
2. 进程与线程的关系以及区别
-
定义:
- 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
- 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
-
关系:一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
-
区别:
1、进程(Process)是系统进行资源分配和调度的基本单位,线程(Thread)是CPU调度和分派的基本单位;
2、线程依赖于进程而存在,一个进程至少有一个线程;
3、进程有自己的独立地址空间,线程共享所属进程的地址空间;
4、进程是拥有系统资源的一个独立单位,而线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),和其他线程共享本进程的相关资源如内存、I/O、cpu等;
5、在进程切换时,涉及到整个当前进程CPU环境的保存、环境的设置以及新被调度运行的CPU环境的设置,而线程切换只需保存和设置少量的寄存器的内容,并不涉及存储器管理方面的操作,可见,进程切换的开销远大于线程切换的开销;
6、线程之间的通信更方便,同一进程下的线程共享全局变量等数据,而进程之间的通信需要以进程间通信(IPC)的方式进行;
7、多线程程序只要有一个线程崩溃,整个程序就崩溃了,但多进程程序中一个进程崩溃并不会对其它进程造成影响,因为进程有自己的独立地址空间,因此多进程更加健壮
- 总结:简而言之,一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
- 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
- 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
3. 简述进程和程序的区别
-
进程是程序及其数据在计算机上的一次运行活动,是一个动态的概念。进程的运行实体是程序,离开程序的进程没有存在的意义。从静态的角度看,进程是由程序、数据和进程控制块(PCB)三部分组成的。而程序是一组有序的指令集,是一种静态的概念。
-
进程是程序的一次执行过程,它是动态地创建和消亡的,具有一定的生命周期,是暂时存在的;而程序则是一组代码的集合,是永久存在的,可长期保存。
-
一个进程可以执行一个或几个程序,一个程序也可构成多个进程。进程可以创建进程,而程序不可能形成新的程序。
-
进程与程序的组成不同。进程的组成包括程序、数据、PCB。
4. 进程的常见状态?以及各种状态之间的转换条件?
-
创建态:进程正在被创建,尚未转到就绪态。创建进程需要多个步骤:
- 首先申请一个空白PCB,并向PCB中填写用于控制和管理进程的信息。
- 然后为该进程分配运行时所必须的资源。
- 最后把进程转入就绪态并插入就绪队列。
- 但是,如果进程所需的资源尚不能得到满足,如内存不足,则创建工作尚未完成,进程此时所处的状态称为创建态。
-
就绪态:进程获得了除处理机外的一切所需资源,一旦得到处理机,便可立即运行。系统处于中处于就绪态的进程可能有多个,通常将它们排成一个队列,称为就绪队列。
-
运行态:进程正在处理机上运行。在单处理机中,每个时刻只有一个进程处于运行态。
-
阻塞态:进程正在等待某一事件而暂停运行,如果等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。系统通常将处于阻塞态的进程也排成一个队列,设置根据阻塞原因的不同,设置多个阻塞队列。
-
就绪态->运行态:处于就绪态的进程被调度后,获得处理机资源(分配处理机时间片)。
-
运行态->就绪态:处于运行态的进程在时间片用完后,不得不让出处理机,从而进程由运行态转为就绪态。此外,在可剥夺的操作系统中,当有更高优先级的进程就绪时,调度程序将正在执行的进程转换为就绪态,让更高优先级的进程执行。
-
运行态->阻塞态:进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(如I/O操作的完成)时,它就从运行态转换为阻塞态。进程以系统调用的形式请求操作系统提供服务,这是一种特殊的、由运行用户态程序调用操作系统内核的过程的形式。
-
阻塞态->就绪态:进程等待的事件到来时,如I/O操作结束或中断结束时,中断处理程序必须把相应的状态由阻塞态转化为就绪态。
5. 进程的调度算法有哪些?
1、先来先服务(FCFS):此算法的原则是按照作业到达后备作业队列(或进程进入就绪队列)的先后次序选择作业(或进程)
2、短作业优先(SJF:Shortest Process First):这种算法主要用于作业调度,它从作业后备序列中挑选所需运行时间最短的作业进入主存运行。
3、时间片轮转调度算法:当某个进程执行的时间片用完时,调度程序便终止该进程的执行,并将它送到就绪队列的末尾,等待分配下一时间片再执行。然后把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证队列中的所有进程,在已给定的时间内,均能获得一时间片处理机执行时间。
4、高响应比优先:按照高响应比(已等待时间+要求运行时间)/要求运行时间 优先的原则,在每次选择作业投入运行时,先计算此时后备作业队列中每个作业的响应比RP。选择最大的作业投入运行。
5、优先权调度算法:按照进程的优先权大小来调度。使高优先权进程得到优先处理的调度策略称为优先权调度算法。注意:优先数越多,优先权越小。
6、多级队列调度算法:多队列调度是根据作业的性质和类型的不同,将就绪队列再分为若干个队列,所有的作业(进程)按其性质排入相应的队列中,而不同的就绪队列采用不同的调度算法。
6. 什么是死锁?产生条件?如何避免死锁?
-
死锁的概念:在2个或多个并发进程中,如果每个进程持有某有资源而又都等待别的进程释放它或他们现在保持的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗地讲,就是2个或多个进程被无限期地阻塞、相互等待的一种状态。
-
死锁产生的原因:系统资源不足,进程推进顺序非法。
-
死锁产生的必要条件:
- 互斥条件。
- 不剥夺条件。
- 请求并保持条件。
- 循环等待条件。
-
死锁的解除和预防:理解了死锁的原因,以及产生死锁的四个必要条件,就可以最大可能地避免和预防和解锁死锁。所以在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。对资源的分配要给予合理规划。
-
处理死锁的基本方法:
①预防死锁:设置某些限制,破坏产生死锁的四个必要条件中的一个或几个。
②避免死锁(银行家算法):该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的的四个必要条件,而是在资源的动态分配过程中,用 某种方法去防止系统进入不安全状态,从而避免发生死锁。
③死锁的检测及解除:无须采取任何限制性措施,允许进程在运行过程中发生死锁。通过系统的检测机构及时地检测出死锁的发生,然后采取某些措施解除死锁。
7. 进程间通信有哪些方式?它们的区别?
进程通信是指进程之间的信息交换。PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方式主要有以下三类:
- 共享存储:
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。在对共享空间进行写/读操作时,需要使用同步互斥工具(如P操作、V操作),对共享空间的写读进行控制。共享存储又分为两种:低级方式的共享是基于数据结构的共享;高级方式的共享则是基于存储区的共享。
- 消息传递:
在消息传递系统中,进程间的数据交换以格式化的信息(Message)为单位。进程通过系统提供的发送消息和接受消息两个原语进行数据交换。又分直接通信方式、间接通信方式。
- 管道通信:
管道通信是一种半双工通信,某一时刻只能单向传输
- 几种方式的比较:
- 管道:速度慢、容量有限
- 消息队列:容量收到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题。
- 信号量:不能传递复杂信息,只能用来同步。
- 共享内存:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全。
8. 同步与异步是什么?有什么区别?
-
同步:
- 同步的定义:是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么,这个进程将会一直等待下去,直到收到返回信息才继续执行下去。
- 特点:同步是阻塞模式;同步是按顺序执行,执行完一个再执行下一个,需要等待,协调运行;
-
异步:
-
异步的定义:是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
-
特点:异步是非阻塞模式,无需等待;异步是彼此独立,在等待某事件的过程中,继续做自己的事,不需要等待这一事件完成后再工作。线程是异步实现的一个方式。
-
同步与异步的优缺点:同步可以避免出现死锁,读脏数据的发生。一般共享某一资源的时候,如果每个人都有修改权限,同时修改一个文件,有可能使一个读取另一个人已经删除了内容,就会出错,同步就不会出错。但,同步需要等待资源访问结束,浪费时间,效率低。异步可以提高效率,但,安全性较低。
-
同步机制的4个准则
1、空闲让进:当无进程处于临界区,可允许一个请求进入临界区的进程立即进入自己的临界区
2、忙则等待:当已有进程进入自己的临界区,所有企图进入临界区的进程必须等待
3、有限等待:对要求访问临界资源的进程,应保证该进程能在有限时间内进入自己的临界区
4、让权等待:当进程不能进入自己的临界区,应释放处理机
9. 并发与并行的区别?
- 并发:是指两个或多个事件在同一时间间隔内发生。
- 并行:是指系统具有同时进行运算或操作的特征,在同一时刻内能完成两种或两种以上的工作。
10. 中断与异常的区别?
- 中断:也成外中断,是指来自CPU执行指令外部的时间,通常用于信息输入/输出,如设备发出的I/O结束中断,表示设备输入/输出处理已经完成。时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。
- 异常:也成内中断,是指来自CPU执行指令内部的事件,如程序的非法操作码、地址越界、运算溢出、虚存系统的缺页、陷入指令引起的事件。异常不能被屏蔽,一旦出现,就应立即处理。
11. 中断的处理过程是怎样的?
12. 将用户源程序变为可在内存中执行的程序的步骤?
- 编译。由编译程序将用户源代码编译成若干目标模块。
- 链接。由链接程序将编译后形成的一组目标模块及它们所需要的库函数连接在一起,形成一个完整的装入模块。
- 装入。由装入程序将装入模块装入内存中运行。
13. 程序有哪几种装入方式?又有哪几种链接方式?
- 链接方式:静态链接、装入时动态链接、运行时动态链接。
- 装入方式:绝对装入、静态重定位、动态重定位。
14. 虚拟存储器的主要特征是什么?
-
多次性:作业无须一次调入,允许分多次调入内存;
-
对换性:作业在运行过程中无须常驻内存,可以根据需要进行换入换出;
-
虚拟性:从逻辑上扩充内存容量。
15. 缺页中断的处理过程与一般中断相似。
主要区别:
1、在指令执行期间产生和处理中断信号。
2、一条指令在执行期间可能产生多次缺页中断。
16. 什么是 DMA 方式?它与中断方式的主要区别是什么?
DMA方式是指内存与外设只需要在DMA控制器的控制下进行数据传输,而不需要进行CPU的干预。
与中断方式的主要区别是:
1、中断方式在每个数据需要传输时都需要中断CPU,而DMA方式是在所要求传送的一批数据全部传送完毕时才中断CPU;
2、中断方式中数据传输是在中断处理时由CPU控制完成的,而DMA方式中数据传输是在DMA控制器控制下完成的。
17. 试比较分页与分段有何区别?
1、页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页的目的是满足系统管理的需要。段是信息的逻辑单位,分段的目的是为了更好地实现地址共享,满足用户地需要。
2、页地大小固定,将逻辑地址划分为页号和页内地址是由机器硬件实现地。而段的长度确不固定,决定于用户所编写地程序。
3、分页的地址空间是一维的,分段的地址空间是二维的。
18. 在交互式系统中,非剥夺是不是一个好的策略?为什么?
在分时系统中不剥夺并不是一个好的策略。因为在分时系统中,除了交互性以外,及时性是很重要的性能因素。当一个作业被阻塞后,CPU就完全空闲了,别的用户的及时性就无法保证了,而完全可以把这些时间分配给别的作业运行。以提高整体的吞吐量。
19. 解释一下管程
管程是由一组局部变量、对局部变量进行操作的一组过程和对局部变量进行初始化的语句序列组成。
引入的原因是因为P/V操作太过分散,对它的维护很麻烦且容易造成死锁。
管程的特点是:
1、管程的过程只能访问管程的局部变量,管程的局部变量只能由其过程来访问;
2、任何时刻只能有一个进程进入管程执行;
3、进程只能通过管程提供的过程入口进入管程。