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

本文主要是介绍操作系统课程总结(进程的描述与控制,处理机调度与死锁),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[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++;//记录读者数量+1V(rmutex);//读P(rmutex);readcount--;//读完后,记录读者数量-1if(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的需求分配给它以后,系统是处于安全状态的。

死锁的检测和解除

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

这篇关于操作系统课程总结(进程的描述与控制,处理机调度与死锁)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/474106

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。