操作系统:计算机硬件与用户之间的中介。为了高效、为了方便。
1.进程:
进程:执行中的程序。
进程状态:新建、运行、等待、就绪、终止。等待:进程等待某个事件的发生。(I/O完成或收到信号);就绪:进程等待分配处理器;
precess control block(PCB)进程控制块:表示一个进程。
进程调度:调度队列:进程加入系统,加到作业队列;进程驻留在内存中就绪和等待运行,保存在就绪队列。调度程序:短期调度,中期调度,长期调度;短期调度:CPU调度,从准备执行的进程中选择进程,分配CPU时间。
长期调度:作业调度,从缓冲池中选择进程,装入内存准备执行,控制多道程序设计的程度,即内存中的进程数量。
中期调度:将进程从内存或CPU竞争中移出,降低多道程序设计的程度,之后进程能被重新调入内存,从中断处继续执行。
进程通信:共享内存和消息传递。共享内存:生产者-消费者问题,生产者进程产生信息以供消费者消费。缓冲区驻留在生产者进程和消费者进程的共享内存区域内,生产者与消费者异步进行。
消息传递系统:进程间通过通信链路通信,对称寻址和非对称寻址。对称寻址:发送进程和接受进程必须命名对方以便通信,非对称寻址:发送者命名接收者,接收者不需要命名发送者。
同步和异步:阻塞和非阻塞,阻塞发送:发送进程阻塞,直到消息被接收。非阻塞发送:发送进程发送消息并继续操作。阻塞接收:接收者阻塞,直到有消息可用。非阻塞接收:接收者收到一个有效消息或空消息。
缓冲:零容量,有限容量,无限容量。零容量:链路中不能有任何消息处于等待,发送者必须阻塞,直到接收者接收到信息。
2.线程:
线程:CPU使用的基本单元,他与属于统一进程的其他线程共享代码段、数据段和其他操作系统资源,如打开文件和信号。
多线程:响应度高,资源共享,经济,多处理器体系结构的利用。
多对一模型,一对一模型,多对多模型。多对一模型:多个用户线程映射到一个内核线程,内核线程一次只能运行一个用户线程,用户线程阻塞,整个进程会阻塞。
一对一模型:内核线程开销会影响应用程序的性能。
多对多模型:并发性强,程序性能高。
3.CPU调度:
抢占调度:非抢占和抢占。非抢占调度:CPU分配给一个进程,该进程一直使用CPU,直到进程终止或切换到等待状态。抢占调度对访问共享数据是有代价的。
调度准则:CPU利用率,吞吐量,周转时间,等待时间,响应时间。吞吐量:一个时间单元内所完进程的数量。周转时间:从进程提交到进程完成的时间段。等待时间:进程在就绪队列中等待所花的时间。
响应时间:从提交请求到产生第一响应的时间。
调度算法:first-come, first-served(FCFS)先到先服务调度算法,shortest-job-first(SJF)最短作业优先调度算法,priority scheduling algorithm 优先级调度算法,round-robin(RR)scheduling algorithm轮转调度算法。
FCFS:非抢占。RR:抢占式。
4.进程同步:
临界区:该区进程可能改变共同变量、更新一个表、写一个文件等。没有两个进程可同时在临界区内执行。进入区:每个进程必须请求允许进入其临界区。退出区:临界区之后。剩余区:其他代码。
临界区问题解答满足要求:互斥,前进,有限等待。互斥:如果进程P在其临界区内执行,那么其他进程都不能在其临界区内执行。
前进:如果没有进程在其临界区内执行且有进程需进入临界区, 那么只有那些不在剩余区内执行的进程可参加选择,以确定谁能下一个进入临界区,且这种选择不能无限推迟。
有限等待:从一个进程做出进入临界区的请求,直到该请求允许为止,其他进程允许进入其临界区的次数有上限,即请求不能无限拒绝。
信号量:信号量初始化为可用资源数量。当每个线程需要使用资源时,需要对该信号量执行acquire()操作(减少信号量的计数), 当线程释放资源时,需要对该信号量执行release()操作(增加信号量的计数)。
acquire() { while value <= 0//忙等 ; value--; } release() { value++; }
acquire() { value--; if(value < 0) { add this process to list block; } } release() { value++; if(value <= 0 ) { remove a process P from list; wakeup(P); } }
5.死锁:
死锁:某个进程申请资源,如果资源不可用,那么该进程进入等待状态。如果所申请的资源被其他等待进程占有,那么该等待进程有可能再也无法改变其状态。
死锁特征:必要条件:互斥,占有并等待,非抢占,循环等待。互斥:至少有一个资源必须处于非共享模式,即一次只有一个进程使用。如果另一进程申请该资源,那么申请进程必须等到该资源被释放为止。
占有并等待:一个进程必须占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有。
非抢占:资源不能被抢占,即资源只能被进程在完成任务后自愿释放。
循环等待:有一组等待进程,P0->P1->...->PN->P0。
资源分配图:P->R申请边,R->P分配边。
死锁处理方法:预防或避免死锁,检测死锁并恢复,忽略死锁问题。死锁预防:避免互斥:共享资源不要求互斥访问。
避免占有并等待:当一个进程申请一个资源时,他不能占有其他资源。协议1:每个进程在执行前申请并获得所有资源并使用它们。协议2:一个进程可申请一些资源并使用它们,在它申请更多资源之前,必须释放其现已分配的所有资源。
避免非抢占:如果一个进程占有资源并申请另一个不能立即分配的资源,那么其现已分配的资源都可被抢占。
避免循环等待:对所有资源类型进行完全排序,且要求每个进程按递增顺序来申请资源。
死锁避免:获得以后如何申请资源的附加信息。
银行家算法:
死锁检测:每种资源类型只有单个实例:在资源分配图中,删除所有资源类型节点,合并适当边,得到等待图、当且仅当等待图中有一个环时,系统中存在死锁。
每种资源类型可有多个实例:类似于银行家算法。Available:表示各种资源的可用实例;Allocation:表示当前各进程的资源分配情况;Request:表示当前各进程的资源请求情况。
应用检测算法:因素:1.死锁可能发生的频率,2.当死锁发生时,受影响的进程个数。
死锁恢复:进程终止,资源抢占。