进程
定义:程序段+数据段+PCB(进程控制块)
进程的四大特性
动态性。创建产生,调度执行,撤销消亡。
并发性。多个进程实体同时存在于内存,且能在一段时间内同时运行。
独立性。进程实体是一个能独立运行、独立接受调度的基本单位。
异步性。进程是按异步方式运行的,即按各自独立的、不可预知的速度向前推进。
进程的几种状态
就绪:即进程已分配到除CPU以外的所有必要。
执行:进程以获得CPU
阻塞:进程发生某事件(I/O请求,申请缓冲区失败,访问临界资源)暂时无法继续执行的状态,亦称暂停状态。
创建:PCB+程序段+数据段+资源
终止:PCB清零,回收PCB到系统
挂起:用户手动、父进程挂起、负责调节需要、OS需要。
进程管理中的数据结构
内存:内存表。设备:设备表。文件:文件表。进程:进程实体及所用资源列表
<b>PCB的作用</b>
独立运行基本单位的标志。
能实现间断性运行方式。
提供进程管理所需要的信息。
提供进程调度所需要的信息。
实现与其他进程的同步和通信。
<b>PCB中的信息</b>
进程标识符:<b>唯一标识一个进程。</b>
处理机状态:当进程被切换时,处理机状态信息都必须保存在对应的PCB中,以便在该进程重新执行时能再从断点继续执行。
进程调度信息:OS调度时,需要知道进程的调度信息(进程状态、进程优先级、其他信息)
进程控制信息:程序和数据的地址、进程同步和通信机制、资源清单、链接指针(指向下一个PCB地址)
PCB的组织方式
线性方式:将所有的PCB都组织在一张线性表中(放入内存,每次查找遍历线性表)
链接方式:把具有相同状态进程的PCB分别通过PCB中的链接字链接成一个队列(<b>对状态进行分组</b>)。状态指针->PCB1->PCB2...
索引方式:根据进程状态的不同,建立几张索引表(就绪索引表、阻塞索引表)。表指针->表->PCB
进程控制
操作系统内核
OS内核:通常将<b>一些与硬件紧密相关的模块</b>(中断处理程序)、各种常用设备的驱动程序以及运行频率较高的模块(时钟管理、进程调度),都安排在紧靠硬件的软件层次中,将它们常驻内存,通常被称为<b>OS内核</b>。
一是便于对这些软件进行保护,防止遭受其他应用程序的破坏;二是可以提高OS的运行效率。
为了防止OS本身及关键数据(PCB)遭受到应用程序有意或无意的破坏,通常将处理机的执行状态分为系统态和用户态。
<b>系统态</b>:管态,内核态。具有较高的特权,能执行一切指令,访问所有寄存器和存储区。
<b>用户态</b>:目态。具有较低特权的执行状态,仅能执行规定的指令,访问指定的寄存器和存储区。
<b>OS内核功能</b>
支撑功能。中断处理、时钟管理、原语操作
资源控制功能。进程管理、存储器管理、设备管理
进程创建
进程层次:<b>UNIX的父子进程,子进程可以继承父进程所拥有的资源</b>,子进程被撤销时,从父进程获得的资源返还给父进程。撤销父进程时,必须同时撤销所有的子进程。进程不能拒绝其子进程的继承权。
<b>Windows中不存在任何进程层次结构的概念</b>,所有进程都具有相同地位。
进程创建原语:1. 申请空白PCB;2. 分配资源;3. 初始化PCB;4. 进程队列。
进程终止
正常结束;异常结束(运行/等待超时、算术运算错、I/O故障);
进程的阻塞和唤醒
阻塞行为:向系统请求共享资源失败。等待某种操作的完成。新数据尚未到达。等待新任务的到达。
阻塞原语block,阻塞是一种主动行为。
有关进程(提供数据的进程)调用唤醒原语wakeup,将等待该事件的进程唤醒。
<b>block和wakeup原语操作必须成对使用</b>,否则阻塞的进程将永远不会被执行。
进程的挂起与激活
挂起原语suspend:<b>就绪->静止就绪;阻塞->静止阻塞。</b>
激活和挂起相反。
进程同步
使得并发执行的诸进程之间能按照一定的规则(或时序)共享系统资源,并能很好地相互合作。
进程间的制约关系
<b>间接相互制约关系</b>:多个进程在并发执行下,共享系统资源(I/O设备、CPU等)。
<b>直接相互制约关系</b>:进程A和进程B共享一个缓冲区(类似生产者-消费者)。
<b>临界资源</b>:诸进程间采用互斥方式,实现对临界资源的共享(打印机、磁带机)。
<b>临界区</b>:把每个进程中访问临界资源的那段代码称为临界区。
<b>同步机制规则</b>:空闲让进。忙则等待。有限等待。让权等待。
<b>硬件同步机制</b>
利用特殊指令解决临界资源问题。
<b>关中断</b>:就是让程序在同一时间内执行多条指令。对应的还有开中断、中断。
<b>利用Test-and-Set指令实现互斥</b>:互斥指令(原语)。
<b>利用Swap指令实现进程互斥</b>:对换指令,XCHG指令(进程中的局部变量true、临界资源设置一个全局变量lock,初始false)。
<b>信号量机制</b>
整形信号量:只要信号量S<=0,就会不断地测试。
记录型信号量:不存在”忙等“现象的进程同步机制。
AND型信号量:进程一次申请所有资源,防止死锁发生。
信号量集:对进程所申请的所有资源再一次原语中完成申请或释放。
应用:利用信号量实现进程互斥。
管程:共享资源的数据结构以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序共同构成了一个操纵系统的资源管理模块。
经典同步问题
生产者-消费者问题:利用信号量解决(S为缓冲池资源)。
哲学家进餐问题:利用信号量解决(S为筷子)。
读者-写者问题:利用信号量保证一个Writer进程必须与其他进程互斥地访问共享对象的同步问题。
进程通信
进程之间的信息交换。
进程通信的类型:共享存储器系统、管道通信系统、消息传递系统、客户机-服务器系统。
<b>线程</b>
进程在创建、撤销和切换中,必须为之付出较大的时空开销。
线程进程比较
调度的基本单位:进程是独立调度和分派的基本单位,线程是独立运行的基本单位。线程切换仅需保存和设置少量寄存器内容。
并发性:进程和线程都可以并发执行
拥有资源:进程可以拥有资源,线程本身不拥有系统资源(保留一些必要的资源,线程控制块TCB、程序计数器、局部变量、少量状态参数)。
独立性:不同进程之间线程要比同一进程中的线程独立性高。<br>
系统开销:创建撤销进程系统要为之分配和回收PCB、分配或回收其他资源,如内存空间和I/O设备。
支持多处理机系统:对于多线程进程,可以分配线程到多个处理机。
线程状态
执行、就绪、阻塞
TCB:线程标识符、一组寄存器、运行状态、优先级、线程专有存储区、信号屏蔽、堆栈指针
线程的实现
不论是进程还是线程,都必须直接或间接地取得内核的支持。
创建进程,分配一个任务数据区PTDA(Per Task Data Area),包含若干个TCB空间。当PTDA空间用完,只要其所创建的线程数目未超过系统的允许值,系统可再为之分配新的TCB空间。