操作系统1课程总结(进程的描述与控制,处理机调度与死锁)

来源:互联网 发布:网络销售的工作怎么样 编辑:程序博客网 时间:2024/05/21 00:16

[1]操作系统引论

OS的目标

方便、有效、可扩充、开放

OS的作用

提供接口、资源管理、扩充(抽象)

OS发展过程

①没有操作系统的计算机,从人工操作方式->脱机输入输出
②单道批处理系统:自动性、顺序性、单道性
③多道批处理系统:多道性、无序性、调度性、并发性、成批性。追求吞吐量。
④分时系统:交互性、并发性、独立性、及时性。追求快速响应。
⑤实时系统:实时性、高可靠性、并发性、独立性。追求非常高的可靠性、时效性。

OS四大特性

并发、共享、虚拟、异步

OS五大功能

①处理机管理:进程控制、进程同步、进程通信、调度
②存储器管理:内存分配、内存保护、地址映射、内存扩充
③设备管理:缓冲管理、设备分配、设备处理
④文件管理:文件存储空间的管理、目录管理、文件读写管理和保护
⑤提供接口:用户接口(联机、脱机、图形)、程序接口(系统调用)

OS体系结构

①传统结构:无结构->模块化->分层式
②现代结构:微内核

微内核结构的优点

①提高系统可扩展性
②增强系统可靠性
③可移植性强
④提供了对分布式系统的支持
⑤融入了面向对象技术

[2]进程的描述与控制

进程概念

进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。进程由程序段、数据段、PCB组成。

进程三种基本状态

这里写图片描述

PCB中的信息

①进程标识符
②处理机状态
③进程调度信息
④进程控制信息

PCB的组织方式

线性方式、链接方式、索引方式

一些原语

创建creat、终止exit、阻塞block、唤醒wakeup、挂起suspend、激活active。
这里写图片描述

核心态和用户态

①系统态:能执行一切指令(包括特权指令),访问所有寄存器和存储器,也称为管态。
②用户态:具有较低特权,也称为目态。

进程的终止

正常结束、异常结束、外界干预

同步机制应遵循的原则(进入临界区的约定)

空闲让进、忙则等待、有限等待、让权等待。

记录型信号量

每个信号量对象中有一个整数成员变量和一个等待队列。
P(wait)操作:整数变量减1以表示需要1个资源,如果减完后这个量小于0,说明没有拿到,自我阻塞(调用block)到等待队列去。
V(signal)操作:整数变量加1以表示释放1个资源,如果释放完后这个量小于等于0,说明队列中有进程在等,唤醒(调用wakeup)队列中的一个进程。

管程

代表共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程,所组成的管理程序,共同构成的一个操作系统的资源管理模块。
这里写图片描述

生产者-消费者问题

semaphore mutex=1;//互斥信号量:保护缓冲区semaphore empty=n;//空缓冲区空间数目semaphore full=0;//满缓冲区空间数目

生产者进程:

do{    P(empty);    P(mutex);    //生产    V(mutex);    V(full);}while(true);

消费者进程:

do{    P(full);    P(mutex);    //消费    V(mutex);    V(empty);}while(true);

哲学家进餐问题

这里写图片描述

semaphore cp[5]={1,1,1,1,1};//五根筷子

哲学家i执行的程序,五个哲学家并发:

do{    P(cp[i]);//右边筷子    P(cp[(i+1)%5]);//左边筷子    //进餐    V(cp[i]);//右边筷子    V(cp[(i+1)%5]);//左边筷子    //思考}while(true);

读者-写者问题

从读者进程去考虑:只要有一个读者在读,就不允许写者去写;而没有读者在读时,还需要确保没有写者在写,才能读。
因此可以设定一个”读者数目”的信号量,一个”确保没有写者在写”的信号量。

int readcount;//读者数目semaphore wmutex=1;//读写竞争以了解对方是否在做

对于readcount,因为可能有多个读者进程,需要用互斥信号量夹起来保护:

semaphore rmutex=1;

从写者进程去考虑:只要没有读者在读,就可以去写了。
这只需要竞争那个”没有写者在写”的信号量。

读者进程:

do{    P(rmutex);    if(0==readcount)//如果没有读者在读        P(wmutex);//那么写者才有可能在写,要确保写者完    readcount++;//记录读者数量+1    V(rmutex);    //读    P(rmutex);    readcount--;//读完后,记录读者数量-1    if(0==readcount)//如果此时已经没有读者在读了        V(wmutex);//唤醒一个正在等待的写者    V(rmutex);}while(true);

写者进程:

do{    P(wmutex);//确保没有读者在读/写者在写    //写    V(wmutex);//唤醒一个正在等待的写者/读者}while(true);

线程

引入线程,使进程作为拥有资源的基本单位,而线程作为独立调度(运行)的基本单位,减轻之前进程切换的负担。线程控制块:TCB。

线程实现方式

①内核支持线程KST
在内核的支持下运行,创建等都在内核空间实现。但用户进程的线程需要在用户态运行,所以切换时需要从核心态转入用户态,开销比较大。调度以线程为单位执行。
②用户级线程ULT
在用户空间实现,创建等都无需内核的支持。但其调度仍是以进程为单位进行的,共用进程的时间片。(A进程中有1个线程,B进程中有100个线程,则A中线程的运行时间是B中各线程运行时间的100倍)
③组合方式
由ULT和KST的连接方式不同,形成三种模型:多对一模式、一对多模式、多对多模式。

[3]处理机调度与死锁

处理机调度的层次

①高级调度:调度对象是作业(针对内存),后备队列(外存)->就绪队列(内存)。用于多道批处理OS,在分时和实时OS中没有。
②低级调度:调度对象是进程(针对处理机),就绪队列(内存)->执行状态(内存)。即根据调度算法决定就绪队列中哪个进程获得处理机。
③中级调度,调度对象是进程(针对内存),静止(外存)<->活动(内存)。即把那些暂时不能运行的进程调至外存等待,提高内存应用率和系统吞吐量。

一些计算的量

这里写图片描述

批处理系统中的作业

作业:在批处理系统中以作业为基本单位从外存调入内存。
作业步:若干个相对独立又相互关联的顺序加工步骤,上一个作业步的输出作为下一个作业步的输入。
JCB:作业控制块。

作业三阶段三状态

提交->①收容阶段(后备状态)->②运行阶段(运行状态)->③完成阶段(完成状态)

作业调度算法

①先来先服务(FCFS):普通的队列。
②短作业优先(SJF):相当于最小堆每次取堆顶,效率最高。
③优先级调度(PSA):基于作业的紧迫程度。
④高响应比优先(HRRN):FCFS和SJF的折衷,即既考虑等待时间又考虑运行时间。
这里写图片描述

分时系统进程调度算法

①轮转法(RR):时间片固定,时间片的选取应略大于一次典型的交互所需的时间。如果时间片内执行完,立即取下一个就绪的进程。如果时间片结束,将其送往就绪队列末尾,并取下一就绪的进程。
这里写图片描述
使用了时间片,显然是一种可抢占的调度方式——时间片完即刻被抢占。

②优先级调度算法:把处理机分配给就绪队列中优先级最高的进程。

[1]非抢占式优先级调度算法:一旦分配给就绪队列中优先级最高的进程,除非该进程发生某些事件放弃处理机,否则一直执行下去。
[2]抢占式优先级调度算法:每当出现新的就绪进程,就和处理机上的进程优先级比较,若更高则抢占之。显然适合实时性要求较高的系统。

此外优先级还分为静态的和动态的,动态的优先级可以随着进程推进或等待时间增加而改变。

③多队列调度算法:即把一个就绪队列拆成多个,不同类型或性质的进程分配在不同的就绪队列中,各个队列之间也可设置优先级。
这里写图片描述

④多级反馈队列:该方式集合了前面所述的调度方式的一些优点。越靠上的队列优先级越高,时间片越小;越靠下的队列优先级越低,时间片越大(可能是翻倍),最后一个队列采用RR方式。上级队列出来的进程,在时间片内未能执行完,则进入下一级的队列(对于最后一个队列的进程也就是进入自己队列)。
这里写图片描述
对每个队列而言,只有上面的队列都为空时才能运行本队列的进程,如果处理机正在运行i队列出来的进程时,有新的进程进入上面的任一队列,都要把该进程放回本队列(i队列)的末尾,转而执行新加入的那个更高优先级队列中的进程。

实时系统进程调度

实时任务有哪些:

HRT:硬实时任务,必须立刻执行。
SRT:软实时任务,有一定容忍度,在一定时间内一定要执行好。

实时系统的要求:
一般采用抢占式调度机制(非抢占适用于对实时性要求不高的系统),对中断要能快速响应,对任务要有快速分派能力,系统处理能力要够强,实时任务也必须提供必要信息(如截止时间)。

非抢占式调度算法:
非抢占式轮转调度、非抢占式优先调度。

抢占式调度算法:
基于时钟中断的(时钟中断发生且不在临界区时抢占)、立即抢占的(只要不在临界区就抢占)。

以上这四种算法实时性依次增高。

两个具体的算法:
①最早截止时间优先(EDF)算法:具有最早deadline的排在队列队首/最小堆堆顶。
②最低松弛度优先(LLF)算法:必须开始的最晚时间越小,越优先。
这里写图片描述
可见松弛度虽是动态变化的,但对于队列中既存的进程,松弛度优先顺序并不会有改变(因为减掉的”当前时间”始终是一致的)。

优先级倒置和动态优先级继承

优先级倒置是因为低优先级进程用P操作拿到临界区资源后,在V操作释放前就被中间优先级的进程抢占,导致高优先级进程即便抢占了中间优先级进程,也因为无法拿到临界区资源而被自己的P操作阻塞,只能等到中间优先级进程全部执行完(这个过程可能非常长),才能让低优先级进程用V操作释放资源以使高优先级进程执行:
这里写图片描述
动态优先级继承可以较好的解决这个问题,在高优先级进程P操作发现有低优先级进程在使用而阻塞自己的同时,让这个低优先级进程继承自己的优先级,直到它用V操作退出临界区,这之间就不会有中间优先级的进程来骚扰了:
这里写图片描述

死锁

两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。

引起死锁的原因

①竞争不可抢占性资源(一旦系统把某资源分配给该进程后,就不能将它强行收回)
②竞争可消耗资源(临时资源,在进程运行期间由进程动态地创建和消耗的)
③进程推进顺序不当(进入不安全区后仍然保持各自的资源就会出现死锁)
这里写图片描述

产生死锁的必要条件

①互斥条件:在一段时间内,某资源只能被一个进程占用。
②请求和保持条件:拿到一部分资源后,对其它资源的申请使自己阻塞,但对已经获得的资源扔保持不放。
③不可抢占条件:进程已经获得的资源在使用完之前不能被抢占。
④循环等待条件:发生死锁时必然存在一个进程等待其它进程占有的资源的循环链。

预防死锁

在四个必要条件中,互斥条件是非共享设备必须的,不能破坏,还应加以保持。
①破坏”请求和保持”条件:可以一次性拿完需要的全部资源,或者运行中逐步释放已经用完的资源。
②破坏”不可抢占”条件:进程获得了一部分资源,而剩下的资源获取不了,则已占有的资源也可被抢占掉。
②破坏”循环等待”条件:对所有资源排序编号,申请资源时按序号递增的顺序申请。

避免死锁的银行家算法

这里写图片描述
如果进程提出申请,如进程P1提出申请,要1,2,2的资源,先看一下这个请求向量Request=(1,2,2)不超过它实际需要的资源数Need[1]=(1,2,2),而且不超过系统中实际的可用量(3,3,2),那么就尝试把资源分配给它,然后执行安全性算法:
工作向量Work表示系统可提供给进程继续运行所需的各类资源数目,把(1,2,2)分配给P1后,发现P1可以执行完成,所以Work工作向量的变化是:
这里写图片描述
也就是说每当有一个进程完成,工作向量就加上这个进程已占有的资源数,发现最终所有需要这三种资源的进程都能执行完,也就是存在一个安全序列{P1,P3,P4,P2,P0},所以刚刚把来自P1的需求分配给它以后,系统是处于安全状态的。

死锁的检测和解除

要检测死锁需要在系统中保存有关资源的请求和分配信息,并提供能检测死锁的算法。如果在资源分配图中经过简化能消去所有的边,使所有进程结点成为孤立的结点,则当前没有产生死锁。
这里写图片描述
解除死锁,可以让死锁进程从其它死锁进程中抢占资源,以解除死锁状态;或者终止系统中的一个或多个死锁进程,以打破循环等待条件。

原创粉丝点击