目录
一,进程
1,进程描述
1.1 进程定义
一个具有一定独立功能的程序在一个数据结构上的一次动态执行过程
- 从资源组合角度:进程把一组相关的资源组合起来,构成了一个资源平台(环境),包括地址空间(代码段,数据段),打开的文件等各种资源
- 从运行角度:代码在这个资源平台上的一条执行流程(线程)
1.2 进程的组成
一个进程应该包括:
- 程序的代码
- 程序处理的数据
- 程序计数器的值,指示下一条将运行的指令
- 一组通用的寄存器的当前值,堆,栈
- 一组系统资源
进程与程序的联系
- 程序是产生就进程的基础
- 程序的每次运行都构成不同的进程
- 进程是程序功能的体现
- 通过多次执行,一个程序可以对应多个进程;通过调用关系,一个进程可以包括多个程序
程序和进程的区别
- 进程是动态的,程序是静态的;程序是有序代码的集合;进程的程序的执行,进程有核心态/用户态。
- 进程是暂时的,程序是永久的;进程是一个状态变化的过程,程序可永久保存。
- 进程与程序的组成不同;进程的组成包括程序,数据和进程控制块(即进程状态信息)
eg:
1,有一个科学家,想亲手给女儿做一个蛋糕,所以就找了一本有关于做蛋糕的食谱,买了一些原料,面粉,鸡蛋等
食谱=程序 科学家=CPU 原料=数据 做蛋糕=进程
2,此时小儿子受伤了,科学家不得不停止做蛋糕,去帮助小儿子包扎伤口
CPU从一个进程(做蛋糕)切换到另一个程序(医疗救护)
1.3 进程的特点
- 动态性:可动态的创建,结束进程;
- 并发性:进程可以被独立调度并占用处理机运行(并发并行);
- 独立性:不同进程的工作互不影响
- 制约性:因访问共享数据/资源或进程间同步而产生制约
1.4 进程控制结构
描述进程的数据结构:进程控制块。
操作系统为每个进程都维护了一个PCB,用来保存与该进程有关的各种状态信息,PCB是进程存在的唯一标志,通过对PCB的组织管理来实现进程的组织管理
PCB中包含的信息:
(一)进程的标识信息。如本进程的标识。本进程的产生者标识(父进程);用户标识。
(二)处理机状态信息保存区。保存进程的运行现场信息。
- 用户可见寄存器:用户程序可以使用的数据,地址的等寄存器
- 控制和状态寄存器:如程序计数器(PC),程序状态字(PSW)
- 栈指针:过程调用/系统调用/中断处理和返回时需要用到它
(三)进程控制信息
- 调度和状态信息:用于操作系统调度进程并占用处理机使用
- 进程间通信信息:为支持基础呢号那个间与通信相关的各种标识,信号,信件等这些信息在接收方的进程控制块中。
- 存储管理信息:包含有指向本进程映像存储空间的数据结构。
- 进程所用资源:说明进程由进程打开,使用的系统资源,如打开的文件等。
- 有关数据结构连接信息:进程可以连接到一个进程队列中,或连接到相关的其它进程的PCB
PCB的组织方式
- 链表:同一状态的进程其PCB成一链表,多个状态对应多个不同的链表(就绪/阻塞链表)
- 索引表:同一状态的进程归入一个index表(由index指向PCB),多个状态对应不同的index表(就绪/阻塞索引表)
2,进程管理
2.1 进程的生命期管理
进程的生命期管理:
(一)进程创建
引起进程创建的3个主要事件
- 系统初始化时
- 用户请求创建一个新进程
- 正在运行的进程执行了创建进程的系统调用
(二)进程运行
内核选择一个就绪的进程,让它占用处理机并执行
- 进程等待
在以下情况下,进程等待(阻塞):
- 请求并等待系统服务,无法马上完成
- 启动某种操作,无法马上完成
- 需要的数据没有到达
(进程只能自己阻塞自己,因为只有进程自身才知道何时需要等待某种事件的发生)
- 进程唤醒
唤醒成功的原因:
- 被阻塞进程需要资源已经充足
- 被阻塞进程等待的事件到达
- 将该进程的PCB插入到就绪队列
(进程只能被别的进程或者操作系统唤醒)
- 进程结束
在以下四种情形中,进程结束:
- 正常退出(自愿的)
- 错误退出(自愿的)
- 致命错误(强制性的)
- 被其他进程所杀(强制性的)
2.2 进程状态变化模型
进程的三种基本状态:进程在生命结束前处于且仅处于三种基本状态之一,不同系统设置的进程状态数目不同。
- 运行状态:当一个进程正在处理机上运行时
- 就绪状态:一个进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行
- 等待状态;一个进程正在等待某一事件而暂停运行时。如等待某资源,等待输入/输出完成。
进程其他基本状态:
- 创建状态:一个进程正在被创建,还没被转到就绪状态之前的状态
- 结束状态:一个进程正在从系统中消失的状态,这是因为进程结束或由于其它原因所导致。
2.3 进程挂起模型
原因:为了合理并充分地利用系统资源
进程在挂起状态时,意味着进程没有占用内存空间。处于挂起状态的进程映像在磁盘上
挂起状态:
- 阻塞挂起状态:进程在外存并等待某事件的出现
- 就绪挂起状态:进程在外存,旦只要进入内存,即可运行
与挂起相关的状态转换:
1,挂起:把一个进程从内存转到外存
- 阻塞到阻塞挂起:没有进程处于就绪状态或就绪进程要求更多内存资源时,会进行这种转换,以提交新进程或运行就绪进程
- 就绪到就绪挂起:当有高优先级阻塞(系统会认为很快就绪的)进程和地优先级就绪进程时,系统会选择挂起低优先级就绪进程。
- 运行到就绪挂起:对抢占式分时系统,当有高优先级阻塞挂起进程因事件出现而进行就绪挂起时,系统可能会把运行进程转到就绪挂起状态。
2,在外存时的状态转换
- 阻塞挂起到就绪挂起:当有阻塞挂起进程因相关事件出现时,系统会把阻塞挂起进程转换为就绪挂起进程
- 阻塞挂起到阻塞:当一个进程释放足够内存时,系统会把一个高优先级阻塞挂起(系统认为会很快出现所等待的事件)进程转换为阻塞进程
状态队列
- 由操作系统来维护一组队列,用来表示系统当中所有进程的当前状态
- 不同的状态分别用不同的队列来表示(就绪队列,各种类型的阻塞队列)
- 每个进程的PCB都根据它的状态加入到相应的队列当中,当一个进程的状态发生变化时,它的PCB从一个状态队列中脱离出来,加入到另外一个队列。
二,线程
1,线程的定义
目的:创建一种新的实体:1,实体之间可以并发执行;2,实体之间共享相同的地址空间。即线程。
线程 = 进程 - 共享资源
线程的优点:
- 一个进程中可以同时存在多个线程
- 各个线程之间可以并发执行
- 各个线程之间可以共享地址空间和文件等资源
线程的缺点:
- 一个线程崩溃,会导致其所属进程的所有线程崩溃
线程和进程的比较:
- 进程是资源分配单位,线程是CPU调度单位
- 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈
- 线程同样具有就绪,阻塞和执行三种基本状态,同样具有状态之间的转换关系
- 线程能减少并发执行的时间和空间开销
——线程的创建时间比进程短;
——线程的终止时间比进程短
——同一进程内的线程切换时间比进程短
——由于同一进程的各线程间共享内存和文件资源,可直接进行不通过内核的通信
2,线程的实现
三种线程的实现方式:
(1)用户线程:在用户空间实现的线程机制,它不依赖于操作系统的内核,由一组用户级的线程库函数来完成线程的管理,包括进程的创建,终止,同步和调度等;
- 由于用户线程的维护由相应进程来完成(通过线程库函数),不需要操作系统内核了解用户线程的存在,可用于不支持线程技术的多进程操作系统
- 每个进程都需要它自己私有的线程控制块(TCB)列表,用来追踪记录它的各个线程的状态信息(PC,栈指针,寄存器),TCB由线程库函数来维护
- 用户线程的切换也是由线程库函数来完成,无需用户态/核心态切换,所以速度特别快;
- 允许每个进程拥有自定义的线程调度算法
用户线程缺点:
- 如果一个线程发起系统调用而阻塞,则整个进程在等待
- 当一个线程开始运行后,除非它主动交出CPU使用权,否则它所在的进程当中的其它线程将无法运行
- 由于时间片分配给进程,故与其它进程比,在多线程执行时,每个线程得到的时间片较少,执行会较慢
(2)内核线程:在内核中实现的一种线程机制,由操作系统的内核来完成线程的创建,终止和管理。
- 在支持内核线程的操作系统中,由内核来维护进程和线程的上下文信息
- 线程的创建,终止和切换都是通过系统调用/内核函数的方式来进行,由内核来完成,因此系统开销较大。
- 在一个进程当中,如果某个内核线程发起系统调用而被阻塞,并不会影响其它内核线程的运行
- 时间片分配给线程,多线程的进程获得更多CPU时间
- Windows NT和Windows 2000/XP支持内核线程
(3)轻量级进程:在内核中实现,支持用户线程。
它是由内核支持的用户线程。一个进程可以有一个或多个轻量级进程,每个量级进程由一个单独的内核线程来支持
3,上下文切换
停止当前运行进程(从运行状态改变成其它状态)并且调度其它进程(转变成运行状态)
- 必须在切换之前存储许多部分的进程上下文
- 必须能够在之后恢复他们,所以进程不能显示它曾经被暂停过
- 必须快速(上下文切换时非常频繁的)
需要存储什么上下文
- 寄存器(PC,SP,....),CPU状态,......
- 一些时候可能会费时,所以我们应该尽可能避免
- 操作系统为活跃进程准备了进程控制块(PCB)
- 操作系统将进程控制块(PCB)放置在一个合格的队列里
——就绪队列
——等待I/O队列(每个设备的队列)
——僵尸队列