3.1进程
3.1.1
在进程执行时,任意给定一个时间,进程都包含如下信息:
- 标识符
进程id,用于区别其他进程 - 状态
进程的运行态 - 优先级
相对于其他进程的优先级 - 程序计数器
程序中江北执行的下一跳指令地址 - 内存指针
包含程序代码和进程相关数据的指针,还有其他进程共享内存块的指针 - 上下文数据
程序执行是处理器的寄存器中的数据 - IO状态信息
包含显式的IO请求,分配给进程的IO设备和被晋城市用的文件列表 - 记账信息
可能包含处理器综合,使用的时钟总和,时间限制,记账号
上述信息被存放在一个成为程序控制块PCB中。
进程控制块张包含了陈芬的信息,进程控制块能够支持多进程和提供多重处理技术的关键工具。
3.2进程状态
3.2.1两状态进程模型
在任何时刻进程或者正在执行,或者没有执行。一个进程可以出于一下两种状态之一:运行态或未运行太(还有其他状态)
当操作系统创建一个新进程时,将该进程以未运行太加入到系统中,操作系统指导这个进程的存在,并正在等待执行机会。
3.2.2进程创建和终止
进程的创建
当一个新进程被添加到那些正在被管理的进城集合中区,操作系统需要建立用于管理该进程的数据结构,并在内存中给他分配地址空间。
一下四种情况会导致进程创建
- 新的批处理作业
位于磁带或磁盘中的批处理作业控制流被提供给操作系统 - 用户登录
终端用户登录到系统 - 操作系统因为提供一项服务而创建
表示用户执行一个功能 - 由现有进程派生
用户程序只是创建多个进程。
当操作系统相应一个进程显式的请求创建一个新进程时,该动作成为进程派生。
此时有父子进程产生
进程终止
进程终止的原因有:
- 正常完成
进程自行执行一个操作系统服务调用,exec族,表示它已经结束运行 - 超过时限
进程运行时间超过规定的时限
包括总的运行时间,花费在执行上的时间, - 无可用内存
系统无法满足进程需要的内存空间 - 越界
进程试图访问不允许访问的内存单元 - 保护错误
进程试图使用不孕不育的资源或文件,或者试图以一种不正确的方式使用,向只读文件中写入 - 算数错误
如除0或存储大于硬件可以接纳的数子 - 时间超出
进程等待某一事件发生的时间超过了规定的最大值
8.IO失败
在输出或输入期间发生错误。
找不到指定文件,或者尝试多次以后仍然读写失败或者无效操作,例如从打印机中读取数据 - 无效指令
司徒执行一个不存在的指令 - 特权指令
试图使用未操作系统保留的指令 - 数据无用
错误类型或为初始化的一块数据 - 操作员或操作系统干涉
由于某些原因,操作员终止进程 - 父进程终止
当父进程终止,操作系统可能终止进程的所有子进程 - 父进程请求
父进程终止其后代,或者是其他进程终止别的进程
3.2.3 五状态模型
无状态模型无状态:
- 运行态
该进程正在执行 - 就绪态
进程做好了准备,只要有机会就开始执行 - 阻塞等待态
进程在等待某事件,例如IO操作 - 新建态
刚创建的进城,操作系统还没有把他加入到可执行进程组中。通常是进程快已经创建但是还没有加载金内存中的新进程
5.退出态
操作系统可从执行进程组中释放出的进程
或是终止,或是被取消。
处于新建态是,操作系统所需要的关于该进程的信息保存在内存的进程表中,但是进程本身还未进入内存,也就是进程的程序代码不在内存中,操作系统也没有为这个程序相关的数据分配空间。代码和数据保存在磁盘中
状态转换
- 空->新建
穿件一个新进程 - 新建->就绪
操作系统准备好在接纳一个晋城市,吧一个进程从新建态转换到就绪态。 - 就绪->运行
需要选择一个新进程运行时,操作系统选择一个处于就绪态的进城。
由调度器或分配器工作。 - 运行->退出
如果当前运行进程表示自己已完成或取消,他将被操作系统终止。 - 运行->就绪
正在运行的进程达到了允许不中断执行的最大时间段。也就是一个进程达到了该进程被分配的运行时间。 - 运行->阻塞
进程请求他必须等待某些事件时,则进入阻塞太。 - 阻塞->就绪
当等待的时间发生时,处于阻塞态的进城转换到了就绪态 - 就绪->退出
父进程可以再任何时刻终止一个子进程 - 阻塞->退出
同上
3.2.4被挂起的进程
交换
没有使用虚拟内存的操作系统的进城都必须全部载入内存,所有进程必须都在内存中。
为了能够容纳更多进程:
- 增加内存
但是相对的进程增加速度更加快 - 交换
把内存中某个进程的一部分或全部移动到磁盘中,当内存中没有处于就绪状态的晋城市,操作系统就把被阻塞的进城换出到磁盘中的挂起队列中,暂时保存从内存中被驱逐出来的进程队列,或者是被挂起的进程队列。
操作系统在此后取出挂起队列中的另一个进城或仅售一个新进程的请求,将其纳入内存运行。
交换是一个IO操作,因此可能是问题更加恶化。由于换出到的磁盘一般是系统中运行最快的IO设备,因此会提高性能。
因此模型再加入挂起态。
一个挂起态模型
仅挂起在阻塞的进程
两个挂起态进程
挂起阻塞和**就绪**状态进程
这种模型中,新建进程可能直接挂起,也可能就绪。
因此就多了两个状态。
- 阻塞->挂起/挂起
当操作系统确定正在运行的进程需要更多内存空间或是为了维护基本性能,会出现这种转换。 - 阻塞/挂起->就绪/挂起
如果程序阻塞的事件发生了,就被转化为就绪挂起 - 就绪/挂起->就绪
内存中没有就就绪态进程,操作系统需要调入一个进程继续执行。
就绪/挂起态进程比任何出于就绪态的任何进程优先级都要高的时候 - 就绪->就绪/挂起
当挂起阻塞进程仍然不够内存时,就挂起就绪进程。 - 新建->就绪/挂起 和 新建->就绪
当内存中没有足够的内存,那么需要进入就绪/挂起状态 - 阻塞/挂起->阻塞
一个进程终止,释放了内存空间,阻塞/挂起队列中的优先级比其他进程优先级都搞,那么就发生此状态转换 - 运行->就绪/挂起
当分配给一个进程的时间期满时,就发生这个转换。
因此,进程如果从就绪到挂起,是因为内存不够。如果从阻塞/挂起到阻塞是因为优先级。
挂起进程概念与不在内存中的进程概念是等价的。
当如下特点是会挂起进程:
- 进程不能立即执行
- 进程在等待一个时间,阻塞时间的发生不会是进程立即被执行
- 为了阻止一个进程的执行,可以通过代理把进程置于挂起状态。
- 除非代理显式的命令系统进行状态转换,否则进程一直在代理中
通过挂起程序,程序员可以修改程序或数据,进行调试。
导致进程被挂起的原因:
- 交换
需要是房租购的内存空间 - 其他os原因
操作系统可能挂起后台进程或工具程序进程 - 交互式用户请求
用户挂起程序,进行调试或与一个资源的使用进行连接 - 定时
一个进程可能会周期执行,而且可能在等待下一个时间间隔被挂起 - 父进程请求
父进程挂起子进程,然后修改挂起进程
3.3进程描述
操作系统为处理器执行进程,而且进行调度和分配资源,并相应用户程序的基本服务请求。
操作系统是管理系统资源的实体。
操作系统的控制结构
操作系统构造并维护它所管理的每个实体的信息表:
- 内存
- IO
- 文件
- 进程
内存表
用于更总内存(物理内存)和外存。内存的某些部分为操作系统保修,剩余部分是进程可以使用的。保存在虚拟内存中的进程使用页进行简单的交换。
内存表包含:
- 分配给进程的内存
- 分配给进程的外存
- 内存块或虚拟内存的任何保护属性,例如共享内存区域
- 管理虚拟内存所需要的任何信息
IO表
用于管理计算机系统内的IO设备和通道,在任何给定的时刻,一个IO设备或是可用的,或者是已经分配给某个特定的进城。
文件表
提供关于文件是否存在,文件在外存(磁盘)中的作用,当前状态和其他属性的信息。
进程表
后面详细讲
3.3.2 进程控制结构
操作系统管理和控制进城,需要知道进城的位置,和属性。
进程位置
一个进程至少包括足够内存空间,用来保存该进程的代码和数据,还有栈栈空间,还有进程的属性。通常的属性集合称为进程控制块PCB。
程序、数据、栈、属性的集合称为进程映像。
进程映像包括:
- 用户数据
用户空间中可修改的部分:程序数据,用户栈,可修改的程序 - 用户程序
将被执行的程序,代码 - 系统栈
每个进程有一个或多个系统栈,用于保存参数,过程调用地址和系统调用地址。 - 进程控制块
操作系统控制进程所需要的数据
进程属性
进程属性的集合称为进程块
包括:
进程标志信息,进程控制信息,进程状态信息。
进程标志信息
- 标识符
进程的标识符,创建该进程的父进程,用户标识符(userID)
处理器状态信息
- 用户课件寄存器
处于用户态处理器执行语言可以访问的寄存器,通常有8~32个。 - 控制和状态存储器
程序计数器:包含将要取得下一条指令地址。
条件码:最近的算术或逻辑运算的结果,符号,零,进位。等于。溢出
状态信息:包括终端允许禁用的标志,异常模式 - 栈指针
每个进程有一个或多个相关联的后进先出系统栈。栈用于保存参数和过程调用或是系统调用的地址,栈指针指向栈顶。
进程控制信息
- 调度和状态信息
进程状态:运行态,就绪态,等待态,停止太
优先级用于描述进程调度的一个或多个域。在某些系统中,需要多个值:默认,当前,最高许可。
调度相关信息取决于调度算法。例如进程等待时间总量和进程上一次运行时执行时间总量
事件:进程在继续执行前等待的时间标识 - 数据结构
进程可以一队列环或别的结构与其他进程进行连接。
标识某一特定优先级且处于等待状态进程可以连接到一个队列中,父子进程关系,因此需要包含指向其他进程的指针 - 进程间通信
与两个独立进程间通信相关联的各种标记信号和信息。 - 进程特权
进程根据其可以访问的内存空间以及可移植性的指令类型被赋予各种特权 - 存储管理
指向分配给进程的虚拟内存空间的段表和页表的指针 - 资源和所有权的使用情况
表示打开的文件,包括处理器或是其他资源的使用历史,调度器需要着细信息
标识符的作用
表示主进程表中的一个索引,因此需要一个银蛇,使系统可以genuine进程标识符定位相应的标,进程间相互通信可以终止通信的目标,指明父子进程
处理器状态信息
当进程运行时,信息存在寄存器中,当进程被中断时,所有寄存器信息被保存,使得进程恢复被执行时这些信息可以被恢复。
寄存器组包括寄存器、控制和状态寄存器和栈指针。
所有处理器设计都包括一个或一组程序状态字(Program status word psw)寄存器。包括所有的状态信息。psw包含条件码和其他状态信息。
寄存器进程控制信息
每个进程映像包括一个进程控制块、用户栈、进程专用地址空间以及别的进程共享的其他内存空间。
虚拟内存中的用户进程 进程链表进程控制块的作用
进程控制块是错做系统中最重要的数据结构,每个进程控制块包含操作系统做需要的关于进程的所有信息。
操作系统多个程序需要访问进程控制块,因此需要保护。
3.4进程控制
3.4.1执行模式
用户程序通常在用户态模式下运行。
特权态成为系统态、控制态或是内核态。同一个名字。
使用两种模式可以保护操作系统重要的操作系统表(如进程控制块)不守用户程序的干涉。用户态下,软件具有对处理器以及所有指令、寄存器和内存的控制能力。而这些能力对用户程序不是必须的。
程序状态字中有一位表示执行模式,处理器使用该位来判断是程序运行在什么态中。
这一位对应某些事件的要求而改变,当用户调用一个系统服务触发系统例程的执行时,执行模式设置成内核态,当从系统服务返回到用户进程时,执行模式被设置成用户态。
3.2.2进程创建
进程创建的步骤:
- 给新进程分配一个唯一的进城标识符
主进程表中增加一个新表项,表中的每个表项对应一个进程 - 进程分配空间
包括进程映像中的所有元素(代码,数据,栈属性),因此操作系统需要知道私有用户地址空间和用户栈需要多少空间。
如果一个进程由另一个进城生成,则父进程可以吧所需的值作为进程创建请求的一部分传递给操作系统。如果任何现有的地址空间被这个新进程共享,那么必须建立正确的连接。最后,必须给进程控制块分配空间。 - 初始化进程控制块
进程标识符包括进程ID和其他相关ID,如父进程ID等。
处理器状态信息部分的绝大多出项目通常初始化为0.但程序计数器被设置为程序入口点、系统栈指针用来定义程序边界除外。
进程控制信息部分的初始化:基于标准默认值和为该进程所请求的属性。例如进程状态,优先级。资源(如果不请求或者父进程继承,那么不拥有资源) - 设置正确的连接
操作系统把调度丢了都保存成链表,新进程必须防止在就绪或就绪/挂起链表中 - 创建或扩充其他数据结构
记账等。
3.4.3进程切换
系统中断分为两种类型:中断,陷阱。
中断
是与当前进程A无关的某种类型的外部事件相关,例如别的进程B进行IO请求的时候交出控制权,进程A开始执行,当进程B的IO操作完成时,进程A被中断。
控制需要先移交给中断处理器,然后转到已经发生的特定类型的中断相关的操作系统例程。
例如:
- 系统中断
操作系统确定当前正在运行进程的执行时间已经超过了最大允许时间段(时间片)。此时进程必须切换到就绪态,另一个进程切换到运行态 - IO中断
操作系统将所有对应的阻塞态进程转换到就绪态(阻塞/挂起也一样)。
并不执行对应的进程,只是设置其状态 - 内存失效/缺页中断
处理器访问虚拟地址时,此地址党员不在内存中,操作系统必须从外存中把包含这个引用的内存块调入内存。在发生调入内存块的IO请求后,操作系统可能会执行一个进程切换,已恢复另一个进程的执行,发生缺页的进城被置为阻塞态。当想要的块调入内存重视,该进程被置为就绪态
陷阱
当前运行进程所产生的错误或异常条件。如非法文件访问。
操作系统确定异常调教是否指明,如果致命,当前运行的金恒被转换到退出态,并发生进程切换。如果不致命,操作系统的动作取决于错误的种类和操作系统的设计。
系统调用
一个用户进程正在运行,并且请求一个IO操作,该调用会使进程陷入内核态,通常系统调用会导致吧童虎进程置为阻塞。
场景切换
当存在未处理的中断,处理器需要做一下工作,例如模式切换
模式切换:
- 把程序计数器设置成中断处理程序的开始地址
- 从用户态切换到内核态,使得中断处理代码可以包含特权的指令
同时还需要保存进程上下文。
此时的上下文称为中断上下文,作用在于:所有中断处理可能改变的信息和恢复被中断程序时所需要的信息。包含程序计时器,其他处理器寄存器和栈信息
中断处理程序:通常是执行一些与中断相关的基本任务的小程序。
进程状态的变化
模式切换和进程切换不同,发生模式切换可以不改变正处于运行态的进程状态,在这种情况下,保存上下文环境和以后恢复上下文环境需要很少的开销,但是进程切换,如果当前正在运行的进城被切换到另一状态,则操作系统使其环境产生实质性的变化。
进程切换步骤:
- 保存处理器上下文,包括程序计数器和其他寄存器
- 更新当前处于运行态进程的进城控制块,包括江金城状态改变到另一个状态(就绪态,阻塞态等等)。还必须更新相关域,包括离开运行态的原因和记账信息
- 将进程的进城控制块移到相应的队列(就绪,事件i处阻塞、就绪)。
- 选择另一个进程执行(需要调度算法)
- 更新所选择进程的进程控制块,包括将进程的状态变为运行态
- 跟新内存管理的数据结构,取决于如何管理地址转换,(后面讲)
- 恢复处理器在被选择进程最后一次切换出运行状态时的上上下文,可以通过载入程序计数器和其他寄存器以前的值来实现
进程切换涉及状态变化,因而比模式切换需要更多的工作。
因此上下文只是寄存器的值,是否包括栈???????????
3.5操作系统的执行
操作系统无进程内核
内核运行不是以进程的形式存在。当进程被中断或产生一个系统调用时,该进程的模式上下文被保存,控制权交给内核。操作系统有自己的内存区域和系统栈,用于控制过程调用和返回。
内核在用户进程中执行
进程映像包含内核的程序数据和栈结构。
网友评论