一年前的学科笔记,直接转载本人印象笔记上的内容,如若侵权请联系我
进程和线程的概念
进程的定义:
-
进程是程序的一次执行
-
进程是一个程序及其数据在处理机上顺序执行时所发生的活动
-
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
线程的定义:
-
线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位
-
线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源
-
一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行
线程与进程的比较
-
调度的基本单位:进程:在传统的OS中 线程:在引入进程的操作系统中
-
并发性:进程: 进程和进程可以实现并发 线程: 进程内的各线程也可以实现并发
-
拥有资源:进程: 进程可以拥有资源,并作为系统中拥有资源的一个基本单位 线程: 线程只拥有少量的,能保证独立运行的资源,还允许多个线程共享资源
-
独立性: 同一进程内的不同线程: 独立性低 不同进程内的不同线程: 独立性高
-
系统开销:进程: 开销大 线程: 开销小
-
支持多处理机系统: 单线程进程: 在多处理机系统中,进程只能运行在1个处理机上 多线程进程: 在多处理机系统中,进程可以在多个处理机上并发运行
进程的基本状态及状态转换的原因
-
就绪状态(Ready):当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行。
-
执行状态(Running):进程已获得CPU,其程序正在执行。
-
阻塞状态(Blocked):正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,把这种暂停状态称为阻塞状态,有时也称为等待状态。
-
创建状态(New):进程已经创建,但未被OS接纳为可执行进程,并且进程资源尚未分配,程序还在辅存,PCB在内存。
-
终止状态(Exit):因停止或取消,被OS从执行状态释放 ,将PCB清零并释放空间
-
挂起状态(Suspend): 使执行的进程暂停执行、静止下来。我们把这种静止状态称为挂起状态。
引入挂起状态的原因
-
终端用户的请求。
-
父进程请求。
-
负荷调节的需要。当实时系统中的工作负荷较重,把一些不重要的进程挂起,以保证系统能正常运行。
-
操作系统的需要。操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。
挂起与阻塞
-
就绪:进程在内存,准备执行
-
阻塞:进程在内存,等待事件
-
就绪/挂起:进程在外存,只要调入内存即可执
-
阻塞/挂起:进程在外存,等待事件
状态转化
-
空→新状态 新创建的进程首先处于新状态
-
新状态 →就绪状态 当系统允许增加就绪进程时,操作系统接纳新建状态进程,将它变为就绪状态,插入就绪队列中。
-
就绪状态 →执行状态 当处理机空闲时,将从就绪队列中选择一个进程执行,该选择过程称为进程调度,或将处理机分派给一个进程,该进程状态从就绪转变为执行。
-
执行状态 → 终止状态 执行状态的进程执行完毕,或出现诸如访问地址越界、非法指令等错误,而被异常结束,则进程从执行状态转换为终止状态。
-
执行状态 → 就绪状态 分时系统中,时间片用完,或优先级高的进程到来,将中断较低优先级进程的执行。进程从执行状态转变为就绪状态,等待下一次调度。
-
执行状态 → 阻塞状态 执行进程需要等待某事件发生。通常,会因为进程需要的系统调用不能立即完成,如读文件、共享虚拟内存、等待I/O操作、等待另一进程与之通信等事件而阻塞。
-
阻塞状态 → 就绪状态 当阻塞进程等待的事件发生,就转换为就绪状态。进入就绪队列排队,等待被调度执行。
PCB的作用
-
是进程存在的唯一标志
-
PCB常驻内存
进程控制的原语操作
进程的创建
-
申请空白PCB
-
为新进程分配所需资源
-
初始化PCB
-
将PCB插入就绪队列
使用原语:Creat()创建进程,fork(),Clone(),Vfork()也是
进程的终止
-
从PCB集合中找到终止进程的PCB
-
若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
-
终止其所有子进程
-
将该进程拥有的所有资源归还给父进程或操作系统
-
删除PCB
使用原语:exit()、 _exit()、 return终结进程,其中return只能在main函数里使用
进程的阻塞
-
在事件等待队列中找到PCB
-
将PCB从等待队列移除,设置进程为就绪态
-
将PCB插入就绪队列,等待被调度
使用原语:block来阻塞自己
进程的唤醒
-
在事件等待队列中找到PCB
-
将PCB从等待队列移除,设置进程为就绪态
-
将PCB插入就绪队列,等待被调度
使用原语:wakeup()来唤醒自己
进程的切换
-
将运行环境信息存入PCB
-
PCB移入相应队列
-
选择另一个进程执行,并更新其PCB
-
根据PCB恢复新进程所需的运行环境
使用原语:context_switch()来切换进程
进程的挂起与激活
使用原语:suspend( )来挂起,active( )来激活
Linux中:int pause(void)使调用进程挂起直到捕捉到一个信号
int sigsuspend(const sigset_t *sigmask) 函数接受一个信号集指针,将信号屏蔽字设置为信号集中的值,在进程接受到一个信号之前,进程会挂起
进程互斥、临界区、进程同步的基本概念、同步准则
进程同步的基本概念
-
两种形式的制约关系:1)间接相互制约关系。由于资源共享 2)直接相互制约关系。主要由于进程间的合作。
-
临界资源:一次仅允许一个进程访问的资源
-
临界区:在每个进程中访问临界资源的那段代码
-
访问临界资源的描述:进入区:检查有无进程进入 临界区: 退出区:将访问标志复位
-
同步机制应遵循的规则:空闲让进,忙则等待 ,有限等待 ,让权等待
记录型信号量
-
记录型信号量机制,是一种不存在“忙等”现象的进程同步机制
-
定义:记录型信号量,其中一个域为整型,另一个域为队列,其元素为等待该信号量的阻塞进程(FIFO)
-
wait(S),signal(S)
信号量的应用
-
利用信号量实现进程互斥
-
利用信号量实现前趋关系
经典进程同步问题;生产者与消费者问题
-
单缓冲区的一个生产者一个消费者同步问题(生产消费)
-
单缓冲区的一个生产者多个消费者同步问题(作者读者)
-
多个生产者多个消费者多个缓冲区的同步问题(哲学家)
进程间通信的原理和实现方法
直接通信
-
原理:指发送进程利用OS所提供的发送命令,直接把消息发送给目标进程
-
方法:系统提供下述两条通信命令(原语): Send (Receiver, message); Receive(Sender, message)
间接通信
-
发送进程发送给目标进程的消息存放信箱;接收进程则从该信箱中,取出对方发送给自己的消息;消息在信箱中可以安全地保存,只允许核准的目标用户随时读取。
-
优点:在读/写时间上的随机性
-
写进程 → 信箱(中间实体) → 读进程原语
-
消息的发送和接收: Send (mailbox, message) Receive (mailbox, message)
信箱分类
-
私用信箱
-
公用信箱
-
共享信箱
调度算法
共同目标:资源利用率 公平性 平衡性 策略强制执行
面向用户的准则
-
周转时间短
-
响应时间快
-
截止时间的保证
-
优先权准则
面向系统的准则
-
系统吞吐量高
-
处理机利用率好
-
各类资源的平衡利用
几种常考的调度方法
-
短作业优先调度算法
-
先来先服务调度算法
-
高响应比优先调度算法
-
时间片轮转法
死锁
产生死锁的原因
-
竞争资源引起进程死锁
-
进程推进顺序不当引起死锁
死锁的必要条件
-
互斥条件
-
请求和保持条件
-
不剥夺条件
-
循环等待条件
处理方法为让234中任一不成立