操作系统学习笔记2----进程管理

来源:互联网 发布:java设计登录窗口 编辑:程序博客网 时间:2024/04/30 10:12

综述
1、 进程和线程
2、 处理机调度
3、 同步与互斥
4、 死锁


部分1
(一) 进程与线程

进程 一个具有一定独立功能的程序对某个数据结合上的一次动态执行过程和资源分配过程。    厨师做菜,拿着菜谱,进行做菜:加什么配料?进程相关的元素: 代码、数据、进程表(进程控制块),Cde Data PT(PCB)【注意】进程和程序的区别和联系 1进程是动态的,程序是静态的2进程是暂时的,程序是永久的3进程和程序组成不同,程序主要是代码和数据。进程除了代码和数据之外还有进程表4程序经过多次创建可以对应不同的进程,一个进程通过系统调用可以被多的程序调用

进程的概念

动态、并发、独立、异步、结构性

进程的状态和转换

运行、阻塞、就绪

(二) 进程控制

进程创建主要工作:查找PCB表,查询有无空的PCB表,有,申请一个,并对其初始化。初始化    进程标识符(PID)、进程状态和运行的起始地址    申请不成功,创建失败返回失败信息

进程控制机构

进程控制的典型事件用户登录、作业调度、提供服务、应用请求用户登录的时候输入用户名和密码。用户双击一个图标实际上是创建一个进程。服务没有开启,但是要用,远程请求开启,任务管理器可以看到,MATLAB后面会有很多服务。用户打开一个程序。

[例子] 下列哪一种情况下是要用创建进程分配设备,不一定要创建进程

进程创建过程

申请空白进程表为新进程分配资源 初始化进程表 如果就绪队列能接纳新进程,将进程插入队列(实际上是指针)

进程撤销过程

检查PCB链表,找到进程进行释放,被撤销的进程有子进程,先撤销子进程,释放资源,撤销自己。有几种情况1、  正常结束(自愿的)2、  异常结束 普通错误退出(自愿的)、致命错误退出(非自愿的)3、  外界干预(非自愿的)

进程阻塞

阻塞原语,先停止处理机并同时保存该进程的处理机现场,将进程插入到等待队列,将控制权交给调度程序,调度程序会调度算法从中选择一个进程投入运行。

进程唤醒

进程唤醒和进程阻塞是一对一个进程由运行状态转变为阻塞状态,是这个进程自己调用原语去完成而进程阻塞到就绪确实自己调用唤醒原语去实现

[例子]可能引起阻塞和唤醒的事件
请求系统服务、启动某种操作、新数据尚未到达、无新工作可做。
进程挂起
进程激活

进程表

相当于一个人的履历表处理机有关的-寄存器、程序计数器、程序状态器,内核栈,进程状态,优先级,进程号、父进程、子进程、信号量、CPU时间。(如果用了线程这些参数放到线程里去)

内存管理

代码、数据、堆栈(用户)

文件管理

(三) 进程与线程
进程组织

进程实体:程序(可以被多个进程共享),数据集合(原始数据、中间、最终),进程控制块 进程表本身有点像(INDEX)

进程控制信息

    进程的基本信息    处理机管理信息

进程内存资源分配

进程设备和文件的分配和使用情况

进程通信
PV操作—低级通信
高级:共享内存、消息传递、管道机制
(四) 线程概念和多线程模型
[例子] 假设一个文字处理过程:一个模块读键盘,一个排版,一个备份。
这几个模块要同时进行。是否有个先后问题
线程的概念

轻型实体(记录与其相关的进程的处理机信息)处理机独立调度和分配的基本单位。此时进程变成资源分配的基本单位。可并发执行共享资源进程适应硬件的发展。未来计算机发展的潮流线程表线程实体:调度分配的基本单位【注】线程和进程的区别    进程:PCB表、用户的地址空间、用户栈、内核栈    线程:多了一个线程表 (用户栈,内核栈) 多线程多了线程表线程实现方式    内核线程和用户线程。

内核线程

操作系统内核中有进程表和线程表,按照线程分配资源

用户线程

用户自己编的线程,用户RUN TIME SYSTEM 小调度器,利用自己的线程进行管理,操作系统不知道,操作系统只能分配资源给进程,线程里小调度器自己调度。[例子]100个用户级线程只能得到一个

混合线程

我在计算机的内核当中,建了很多线程表。

除了内核之外,用户可以用轻量级进程和内核线程绑定,调度内核线程就相当于调度用户线程


部分2
(一) 处理机调度

调度是任何线程或者进程占用处理机的唯一途径。进程调度,调度器,决定哪个进程占用处理机进程分派程序--------进程切换的程序。分派器

决策和运行机制
作业调度

进程调度
【注】 防止死锁

作业调度:计算机外存决定哪一个程序可以创建为进程。进入内存变成进程(处理机),内存管理的时候可以用交换技术将其换到内存。

调度的准则
公平:避免死锁
高效:尽量使处理机利用率达到100
响应时间:用户感觉占有处理机
吞吐量 :单位时间内批处理系统所能完成的工作量。

调度的典型事件:(调度时机问题)
1. 运行中的进程发生某个事件不能再继续运行(比如输入输出)
2. 进程通信或者同步的过程中运行了某种原语pv
3. 可抢先式调度(注意区别:高优先级的进程一定会抢夺(F注意前提条件可抢先))
4. 时间片轮转算法中时间片用完。(硬件产生时间中断,调用调度)
调度完了之后是分配
短作业优先和短进程优先
作业调度算法:短作业优先,优先进行作业调度
有个叫做高相应比优先
短进程优先:只能在批处理系统上运行
典型的调度算法(有一定的运算量比较复杂:有内存分配有IO操作)
先来先服务
短作业或者短进程优先:下面那些调度算法设计进程或者作业的运行时间(概念)
高响应比优先((等待时间+预计运行时间)/预计运行时间)
多级反馈队列调度算法

(二) 同步与互斥(重点)
进程之间的关系有

间接相互制约:源于资源共享-互斥直接相互制约:源于进程合作-同步

[例子]显示一副图像,要下载,解压(解压进程),显示(显示进程)。有前后制约的关系。
[例子]互斥,银行账号:主卡和副卡同时往里面加钱。
基本概念:
临界资源:一次只能由一个进程使用
临界区:访问临界资源的那段程序
【注】两回事。抢车位的问题:车位本身是临界资源
抢是代码
临界区实现的基本方法:

软件和硬件软件:设标志的方法+PV操作。PV操作的含义

P(s)定义

p(){    --s;    If(s<=0){    调用进程进入等待队列;    阻塞调用进程;    }}

V(s)定义

V(){    ++s:    If(s<=0){    等待队列中取出一个进程    进程进入就绪队列    }}

P一定是阻塞自己,V一定是唤醒别的进程
信号量实现
P、V操作同步模型

管程

一个管程定义了一个数据结构和能为并发进程所运行的一组操作,这组操作能同步进程和改变进程中的数据。

(三) 经典的同步问题
生产者-消费者
读者-写者
哲学家进程
抽烟问题
非常重要,这些代码都要会写。还有定义变量注释要写明白
这几个问题的变种。多做经典
生产者生产自然数,消费者消费奇数,消费者消费偶数


部分3 死锁
(一)死锁的概念
死锁:

系统中两个或者两个以上的进程无限期地相互等待永远不会的发生的条件,系统处于一种停滞状态这种情况称为死锁。非常严重的情况。死锁一定是不安全,反之不成立。

原因:
1. 进程推进顺序不当
2. 对互斥资源的分配不当(并不是资源不足)
产生死锁的四个必要条件
1. 存在互斥资源:任一时刻只允许一个进程使用资源
2. 非剥夺:不会放弃已经占有的资源
3. 占用并请求(部分分配):已经占有资源,并请求资源
4. 循环等待:请求资源的进程形成了循环。
[例子]比如生活中:十字路口的车辆堵在一起了?

(二) 处理策略:
1.忽略死锁
2.锁的检测与恢复
3.死锁的避免
4.死锁的预防(干死四个必要条件中的一个)

现代系统中产生的几率越来越高,风险也越来越高。多核系统

解决方法:
1. 什么好欺负就欺负它。剥夺它的资源-进程损失
2. 进程回退法,每一个进程往前走一步,记录当前的状态,如果发生死锁,有一个进程还原到以前的一个状态。 并不是所有的地方
3. 杀死进程,释放出来给别的进程。(顽固不化)
代价最大的而是系统重启

事前考虑:银行家算法,理论上可行实际上很难。安全状态:能找到一条途径系统合理分配资源,途径可能不唯一不安全的状态不一定会死锁。越来越严格

忽略死锁

鸵鸟算法:当作没看见。掩耳盗铃 

锁的检测与恢复——已经发生了

资源分配图资源分配矩阵

死锁的避免—-有死锁不干

安全状态和不安全状态:预先评估系统是不是处于有可能会死锁的状态主要是银行家算法。很好考:矩阵的运算,答案很唯一。

死锁的预防(干死四个必要条件中的一个)
破坏:
•互斥条件:

提供更多的资源,让他不要互斥,或者访问采用SPOOLING技术

•非剥夺条件:

设置策略,申请不到就放弃

•占有请求:

一次要一点资源,后来要不到资源了。一次给足所有的资源。很多进程不能在一开始的时候明确要多少资源。

•循坏等待:

资源的有序分配。时间片轮转,规定所有的进程要用到所有的资源有个先后顺序。
0 0