1、知道什么是前驱图:有向、无环;前驱图的表示方式有两种:箭头、集合
2、程序顺序执行的特征:顺序性、封闭性、可再现性;程序并发执行的特征:间断性、失去封闭性、不可在现性。失去封闭性和不可在现行是我们不希望看到的,对程序设计是不利的
3、进程:由程序段、数据段、PCB(进程控制块)组成,PCB中包含了一些进程的关键信息,例如ID号、进程状态等等。
4、区分进程和程序:a、进程是动态的,是活的,由程序调入内存产生,执行完或特殊情况消亡,程序是死的。b、进程是可以并发的,程序不可以。c、进程是分配资源的最小单位、独立单位、基本单位。d、一个程序可能会对应多个进程,一个进程可以为多个程序服务
5、进程的三个基本状态:就绪、执行、阻塞。正在被CPU执行的,称为执行态,以单核CPU为例,所有的进程只能有一个进程处于执行态。除了CPU之外,其余资源都准备好了,叫就绪态(万事具备只欠东风,万事是所有资源,东风就是CPU)。因为I/O、分配资源不够,成为阻塞态。(万事具备,只欠东风,万事都没具备,给了东风也没用)
6、三个基本状态之间的转换:自己去看课本,深入理解三个状态的含义,自然能够正确画出关系转换图。
7、此外还可以有创建状态、终止状态。创建是一个过程,如果一个进程一直处于创建态,一定是没有分配完全进程运行所需的必要资源。终止是说进程消亡,要回收进程创建之初为其分配的资源。
8、引入挂起状态:挂起是将进程由内存调入外存。原因有:a、终端用户请求,例如程序员写程序,一般都是写一段调试一段,调试的时候,我们就需要把进程挂起,暂时不去执行它。b、父进程的请求:当爹的让儿子暂停,儿子不得不从。c、负荷调节的需要,当内存不够用了,怎么办?可以将一些暂时执行不到的进程调出内存,进入外存,空出这部分内存,执行比较重要的进程。
d、操作系统的需要,有时候为了某些需要,操作系统有权利挂起某些进程。其实挂起的原因可以说是什么可以使进程挂起。
9、引入挂起之后,进程的状态分为:执行态、活动阻塞、活动就绪、静止阻塞、静止就绪。活动的是在内存里,静止的是在外存中。静止的就是挂起状态。
10、引入挂起状态后,进程状态之间的转换把握好几点:a、挂起态(静止态)的要想被CPU调度,必须要先进入内存,变为活动态。b、只能从活动就绪队列里取出一个进程,被CPU调度,变为执行态,也就是说执行态的进程只有一个来源。c、活动就绪(阻塞)挂起后变为静止就绪(阻塞),反过来是激活。说白了,挂起就是进程内存到外存,激活是外存进入内存。d、再和前边三种基本的状态转换联系起来,就没有问题了
11、计算机中的资源都是以链表的形式表示(指针)。有内存表、设备表、文件表、进程表。PCB实际上就是一种数据结构,通过链表的形式,表明进程需要的资源等一些信息。操作系统管理PCB,就是管理进程需要的资源组成的资源表。
12、PCB的作用:a、作为独立运行基本单位的标志:进程是否存在,就是看进程的PCB是否存在,操作系统感知进程,就是感知PCB。进程产生要创建PCB,进程消亡要回收PCB,也就是回收PCB占用的空间资源。b、能实现间断性运行方式:操作系统的异步性是由于进程的异步性,走走停停。要想停了继续走,就需要PCB里存储进程离开CPU时的现场信息,其实就是汇编里讲到的保护现场和恢复现场。
c、提供进程管理所需要的信息:进程除了PCB还有程序、数据,程序和数据在内存中的什么位置?会在PCB里给出,也就是说,根据PCB的一些信息是可以找到该进程的程序和数据。进程被调度需要什么资源?也在PCB中由。此外还有访问IO、文件的一些信息。d、提供进程调度所需要的信息:进程的ID、进程状态、进程优先级等等。e、实现与其他进程的同步与通信:与其他进程通信需要的信息,也在PCB中,例如后边提到的信号量
13、进程控制块中(PCB)的信息:a、进程标识符,有内部标识符和外部标识符。内部标识符是给OS用的,外部标识符是给用户看的。类似咱们人的身份证号和学号,身份证号是给国家看的,是国家分配的,学号是在学校中用的。b、处理机状态:为了进程离开CPU时,能保存现场状态。c、进程调度信息:进程的状态(就绪还是阻塞)、进程优先级(在某些算法中,优先级越高的进程越优先被调度)、调度算法相关信息(在用某些算法时需要进程的一些信息,比如等待时间越长的进程越优先被执行,这时候等待时间会在PCB中体现)、事件:进程阻塞的原因。
d、进程控制信息:进程需要的程序和数据在内存或外存的地址、与其他进程通信的必要信息、进程所需资源清单、本进程的下一个进程PCB的地址。(这里充分体现了数据结构:链表。进程如何排好队?就是靠这种链表机制,每一个表就是PCB,每一个表中会存放下一个PCB的首地址。可以是就绪队列、阻塞队列等)
14、PCB的组织方式:线性、链接、索引。线性是所有的进程PCB在一张表中,链接是分队列,阻塞一队,就绪一队这样。索引是为这些PCB再创建一张表,表中有PCB所在位置的指针。相当于为PCB的地址做了一张表。PCB的顺序是在这个表里体现,而不是像刚才的链接方式一样,下一个PCB的地址放在上一个PCB中。
15、进程控制:进程创建、终止、状态转换
16、进程控制一般由OS内核来实现。什么是OS内核?是操作系统中距离硬件最近的一层软件,相当于操作系统和硬件之间的大门,也是操作系统中非常重要的一部分,很多功能都需要由OS内核来实现。OS内核包含了一些使用频率比较高的模块,例如时钟管理、设备驱动等等,为了提高OS的效率,他们常驻内存。
17、OS内核有什么功能?支撑、资源管理。支撑:中断处理(在汇编中的很多操作需要中断实现,比如输入和输出等。还有键盘、鼠标这些IO设备都要依靠中断机制)、时钟管理(计算机方方面面都要用到时钟,比如分时系统中的时间片)、原语操作(进程的状态转换依靠原语,原语是说不能中断的代码)。资源管理:进程管理(进程创建、终止、状态转换等)、存储器管理(关于内存的一些东西,比如虚拟内存,内存分配回收等。说白了就是处理和内存相关的事物。)、设备管理(前边提到的驱动程序等)
18、什么事件可以引起进程的创建?a、用户登录(在分时系统中,每一个终端有一个进程,根据操作可以再由该进程创建子进程、孙进程);b、作业调度(由外存进入内存);c、提供服务(用户使用打印机,内核会为这个请求建立进程,当然使用完毕会终止进程);d、应用请求,由用户自己创建
19、进程的创建过程:a、申请空白PCB(每一个进程的标志就是PCB是否存在);b、为新进程分配其运行所需的资源(可以缩减为能够跑起来的资源,在执行过程中可能再次因为某些资源不够阻塞);c、初始化进程控制块PCB(aa、ID号父进程ID号这些标识信息;PC指向要执行的代码的入口地址,也就是第一行的位置,栈指针指向栈顶;设置进程状态是静止就绪还是活动就绪);d、将新进程插入就绪队列(资源给足之后,就差处理机了,就可以放入就绪队列了)。进程的创建时调用Creat原语实现的,由OS内核创建的。
20、进程的终止原因:正常结束(类似于人的正常死亡,寿命到了,比如打印机请求,用完了打印机需要终止打印请求进程);异常结束(属于内部原因,比如人暴病死亡);外部终止(外部原因,比如出车祸、地震等自然灾害)。不需要把课本中每一个详细的事件都说出来,但是举出一个终止的例子要能分清属于三种里边的哪一种。
21、进程的终止过程:修改进程状态、终止由该进程创建的子孙进程、回收全部资源、从相关队列中移除
22、引起进程阻塞与唤醒的事件:a、向系统请求资源失败(例如进程申请使用打印机,打印机正在被其他的进程占用,打印机是一种临界资源,这时进程就要阻塞起来。等打印机空闲了,再分配给该进程,进程唤醒,由从阻塞变为就绪)b、等待某种操作完成(例如IO操作,IO操作没有完成,进程处于阻塞状态,IO操作完成,进程唤醒,由从阻塞变为就绪)c、新数据尚未到(例如y=a+b,其中a是通过某一进程计算出来的,a没有计算完,计算y的进程需要阻塞,a计算完了,计算y的进程唤醒由阻塞变为就绪)d、无新工作可做(例如某个进程用于两个进程间的相互通信,当没有通信发生时,该进程就要阻塞起来,当有了通信消息了,又由阻塞便为就绪)
23、阻塞通过原语block完成的,过程分为四部:a、保护现场(为了进程再次唤醒占领CPU时,恢复离开时CPU的样子)b、修改进程状态(在进程的PCB中有进程状态的相关信息,代表进程处于何种状态,当进程要变为阻塞之后,要修改这个信息,同样唤醒也需要修改)c、插入相关队列(进程变为阻塞之后,要把进程放置阻塞队列中)d、转进程调度(CPU空闲,需要从就绪队列中根据某个算法选中一个进程占领CPU)
24、进程的阻塞是主动,而不是被动,也就是说阻塞是由进程本身发起的,不是由外部发起的。唤醒时被动的,唤醒原语是写在其他进程中的。
25、进程的唤醒过程:a、从阻塞队列摘下,或者说从阻塞队列剔除掉;b、修改进程状态为就绪状态;c、加入到就绪队列里边;d、CPU从就绪队列中根据某个算法选出一个进程占领CPU
26、唤醒是原语weakup完成的,阻塞时原语block完成的。这是一对原语,在程序要成对出现,如果只有block,没有weakup或缺少weakup,这个进程可能会永远不会被调度,成为”死进程“。
27、挂起是原语suspend,激活是原语active。进程的挂起和激活与进程的阻塞和唤醒类似,过程也类似,大致就是从原队列剔除,修改进程状态,加入新队列。
28、什么是进程间的同步?进程之间的关系有两种,一种是间接制约,一种是直接制约。间接制约是由与共享某个资源引起的,比如两个进程访问打印机这种临界资源。直接制约是由于进程之间相互合作引起的制约。例如进程A进程B通过管道相互通信,管道在这里可以暂时理解为缓冲区,进程A向缓冲区发送数据,进程B从缓冲区取走数据,如果进程A没有向缓冲区发送数据,进程B是去走不了的。像这种制约关系就是进程间的同步。所以说进程间的同步可以理解为为了完成某一个任务,必须按照一定的先后次序执行。
29、什么是临界资源?打印机就是一种临界资源。一个进程用完了,另外一个进程才可以用。不然就会出现一张纸上有两个打印机打印的东西。
30、课本从生产者-消费者模型引出临界资源。生产者-消费者模型是说有一个缓冲池,生产者生产了产品放入缓冲池,消费者消费从缓冲池中取走产品。代表池中产品数量的counter++或counter--是非原语操作,转成机器语言后是三行代码。如果counter++和counter--并发执行,会出现不可再现性。如何解决呢?把counter当作临界资源,++时不能插入--操作,相当于是生产的时候不能消费,消费的时候不能生产。
31、所以把访问临界资源的步骤分为四个:a、进入区(检查临界资源是否正在被使用,如果正在被使用就等待,如果没有被使用就可以进入下一步。同时修改临界资源状态由未访问改为正在访问)b、临界区(对临界资源进行操作的代码)c、退出区(修改临界资源使用状态,由正在访问修改为未访问)d、剩余区(其余部分的代码)
32、如何保证多个进程互斥的访问临界资源呢?原则由四个:空闲让进(资源空闲,就可以被进程使用)、忙则等待(资源正在被使用,需要等待,而不能同时访问)、有限等待(等待临界资源的进程不能一直等,一定要有一个时间限制,否则这个进程就变为了”死进程“,永远不会被CPU再次调度)、让权等待(权是指占领CPU的权利,如果进程不能访问临界资源,要把CPU释放,让其他进程使用。否则会造成既不释放CPU,又不能访问临界资源的情况,课本中叫”忙等“。忙是指一直在检测临界资源的访问状态,循环检测,一直检测。如果释放CPU等于是提高了CPU的执行效率,在”忙等“的这个时间CPU可以处理其他任务,执行其他进程。)
33、如何保证多个进程互斥的访问临界资源呢?可以通过硬件、软件的方法实现。硬件同步机制有关中断、TS指令、SWAP指令。虽然用代码实现,看起来像软件方法,实际是计算机硬件完成的,属于硬件方法。
34、关中断,也叫做中断屏蔽,原理是计算机中的进程调度要依靠中断,如果不允许中断,也就不会发生进程切换。在进入临界区之前关闭中断,在剩余区打开中断。缺点:a、 滥用关中断权力可能导致严重后果(开关中断属于比较权限比较高的指令,一般CPU在内核态完成,如果把权限下放到用户态,用户可以任意开关中断,就可能造成很严重的问题。);b、关中断时间过长,会影响系统效率,限制了处理器交叉执行程序的能力(限制了并发效率,成了串行);c、关中断方法也不适用于多CPU 系统(一个CPU对应一个中断屏蔽位,多个CPU就有多个中断屏蔽位。即使关闭了一个CPU,另外的CPU中断屏蔽位不关闭,也可能造成其他CPU的进程访问临界资源,不满足忙则等待)
35、TS指令,叫做Test-and-Set指令,也是标志位的思想。大概思想是写一个函数,函数的形参是资源状态,返回值是资源原状态,中间会把资源状态强制设为True,意思是正在忙。在进入区,用while循环循环条件是函数返回值,函数返回False,while循环中止,会进入临界区。函数的过程是一个原子操作,不允许中断。这种方式不像软件那样麻烦,但是仍然存在不满足让权等待的问题,碰到资源忙的情况下,也会在While中一直循环,到时间片用完。
36、Swap指令和TS思想基本一致,也是通过while循环检查资源的使用状态,同样不满足让权等待的原则。
37、软件方法课本没有提到,有单标志法(违背空闲让进,如果一个进程一直不进入临界区,另外一个进程永远不会进入临界区)、双标志先检查法(违反了忙则等待原则,有可能两个进程同时进入临界区)、双标志后检查法(违反了空闲让进和有限等待原则,有可能两个进程都不能进入临界区)、peterson算法(解决了刚才的问题,但是不能遵守让权等待,会消耗CPU的时间片检查标志位)。