[读书笔记]进程描述和控制
来源:互联网 发布:mac口红whirl 编辑:程序博客网 时间:2024/06/09 22:51
进程描述和控制
进程的概念
进程是一个具有独立功能的程序,是关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体,是正在运行的程序的实例,是基本的分配单元和执行单员。每一个进程都有它自己的地址空间,包括文本区域,数据区域和堆栈。文本区域存储处理器执行的代码,数据区域存储变量和进程执行期间使用的动态分配的内存,堆栈区域存储着活动过程调用的指令和本地变量。
进程具有如下特征:
- 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
- 并发性:任何进程都可以同其它进程一起并发执行
- 独立性:进程是一个独立运行的基本单位,同时也是系统分配资源和调度的独立单元
- 异步性:由于进程的相互制约,使进程具有执行的间断性,即进程按各自独立的,不可预知的速度向前推进
- 结构特征:进程有程序,数据和数据块三部分组成。
进程的属性
- 标识符
- 运行状态
- 优先级
- 程序计数器
- 内存指针
- 上下文数据
- I/O状态信息
- 记账信息
对进程控制块的认识
上述进程属性放在进程控制块的数据结构中,该控制块由操作系统创建和管理。进程控制块是操作系统能够支持多进程和提供多重处理技术的关键工具。当进程中断时,操作系统会把程序计数器和处理寄存器(上下文数据)保存到进程控制块中的相应位置,进程状态也改变为其它的值。
进程的状态
进程调度器(分派器):如何选择一个处于就绪态的进程并执行。
新建态
操作系统执行一些必须的辅助工作,将标识符关联到进程,分配和创建管理进程所需要的所有表。但进程自身(程序代码)还未进入内存,也没有为与这个程序相关的数据分配空间,通常是在虚拟内存中。
导致进程创建的原因:
- 新的批处理作业
- 交互登录
- 操作系统因为提供一项服务而创建
- 由现有的进程派生。当操作系统为父进程的显式请求创建一个进程时,这个动作称为进程派生。
就绪态
大多数操作系统基于现有的进程数或分配给鲜有进程的虚存数量设置一些闲置,以确保不会因为活跃进程的数量过多而导致系统性能下降。
正在运行的进程到达了“允许不中断执行”的最大时间段;发生了进程抢占;进程自愿释放对处理器的控制,如一个周期性地进行记账和维护的后台进程。
一个优先级一个就绪队列。
运行态
阻塞态
如果进程请求了让它必须等待的某些事件,则进入阻塞态。
一个事件一个阻塞队列。
挂起态
当内存中所有进程都处于阻塞态时,操作系统可以把其中的一个进程置于挂起态,并将它转移到磁盘中(虚拟内存),内存中释放的空间可被调入的另一个进程使用。
为什么要有挂起:
I/O活动比计算机速度慢很多,即处理器比I/O要块得多,以至于内存中所有的进程都在等待I/O的情况很常见。即使采用多道程序设计,大多数时候处理器仍然可能处于空闲状态。
解决办法:
- 扩充内存以适应更多的进程。
- 把内存中某个进程的一部分或全部移到磁盘中。当内存中没有处于就绪状态的进程时,操作系统就把被阻塞的进程换出到磁盘中的“挂起队列”,在此之后取出挂起队列中的其它一个进程,或者接受创建一个新进程的请求,将其纳入内存运行,放在就绪队列里。
这里交换,有整个进程从内存中换到磁盘中,也有进程的部分从内存中换到磁盘中,如何分辨和选择?交换进程的多少部分,这个部分怎么来的?虚拟内存在这其中扮演怎么样的角色?
为什么说通过交换(swapping)可以提高性能?磁盘I/O一般时系统中最快的I/O。
所有已经挂起的进程在挂起时都处于阻塞态,这时把阻塞的进程取回内存没有任何意义,因为它仍然没有准备好执行,但是考虑到挂起状态中的每个进程最初时阻塞在一个特定的事件上的,当这个事件发生时,进程就不再阻塞,可以继续执行。因此把挂起态细分出两个状态:阻塞挂起态和就绪挂起态。
调入优先级的进程比减少交换量更重要。因此增加交换量,以确保高的优先级的进程能得到执行。
导致进程挂起的原因:
- 交换。操作系统需要释放足够的内存空间,以调入并执行处于就绪状态的进程
- 其它OS原因。操作系统可能挂起后台进程或工具程序进程或者被怀疑导致问题的进程
- 交互式用户请求。用户可能希望挂起一个程序的执行,目的是为了调试或与一个资源的使用进行连接
- 定时。一个进程可能会周期性地执行,而且可能在等待下一个时间间隔时被挂起
- 父进程请求。父进程可能会希望挂起后代进程的执行,以检查或修改挂起的进程,或者协调不同后台进程之间的行为
退出态
进程不再被执行,与作业相关的表和其它信息被操作系统保留起来,给辅助程序或支持程序提供了提取所需要的时间。一旦这些程序都提取了所需要的信息,操作系统就不再需要保留任何与该进程相关的数据,该进程将从系统中删除。
导致进程终止的原因
- 正常完成
- 超过时限
- 无可用内存
- 越界。进程试图访问不允许访问的内存单元
- 保护错误
- 算术错误
- I/O失败
- 无效指令
- 特权指令
- 数据误用。错误的类型或错误的初始化一块数据。
- 操作员或操作系统干涉
- 父进程终止
- 父进程请求终止
进程的适时原理:尽可能推迟创建进程以减少操作系统的开销,并在系统被阻塞态进程阻塞时允许操作系统执行进程创建任务。
进程描述
操作系统构造并维护它所管理的每个实体的信息表。
- 内存表。用于跟踪内存和虚拟内存。内存的某些部分为操作系统保留,剩余部分是进程可以使用的。
- I/O表。管理计算机系统中I/O设备和通道。在任何给定的时刻,一个I/O设备或者是可用的,或者已分配给某个特定的进程。如果正在进行I/O操作,则操作系统需要知道I/O设备的转台和作为I/O传送的源河目标的内存单元
- 文件表。提供文件是否存在,文件在外存中的位置,当前状态河其它属性信息。
- 进程表。这些进程表必须有对这些资源的直接或间接引用。
进程控制结构
进程属性的集合称为进程控制块。用户程序,用户数据,系统栈和进程控制块合称进程映像。
进程控制块
进程控制块信息分成三类:
- 进程标识信息
- 进程状态信息。所有处理器设计都包括一个活一组通常称为程序状态字(Program Status Word,PSW),它包含状态信息。PSW包含控制位,操作模式位,条件码。
- 进程控制信息。
进程控制块中的典型元素:
- 标识符
- 用户可见寄存器
- 控制和状态寄存器
- 栈指针
- 调度和状态信息
- 数据结构
- 进程间通信
- 进程特权
- 存储管理
- 资源的所有权和使用情况
进程控制
执行模式
大多数处理器至少支持两种执行模式,某些指令只能在特权态下运行,包括读取活改变诸如程序状态字之类控制寄存器的指令,原始I/O指令和内存管理相关的指令,有部分内存区域尽在特权态下可以被访问到。
- 用户态。非特权态,用户程序通常在该模式下运行。
- 系统态。又叫控制态,内核态,特权态。该状态下,软件具有对处理器及所有指令,寄存器和内存的控制能力。当用户调用一个操作系统服务或中断触发系统例程的执行时,执行模式被设置成内核态,当从系统服务返回到用户进程时,执行模式被设置为用户态。
处理如何知道它处在什么模式下?程序状态字中有一位表示执行模式,这一位应某些事件的要求而改变。
创建进程步骤
- 给新进程分配一个唯一的进程标识符。
- 给进程分配空间
- 初始化进程控制块
- 设置正确的连接。
- 创建或扩充其它数据结构
进程切换的步骤
- 保存处理器上下文环境,包括程序计数器和其它寄存器
- 更新当前处于运行态进程的进程块,包括将进程的状态改变到另一个状态。还必须更新其它相关域,包括离开运行态的原因和记账信息。
- 将当前进程的进程控制块移到相应的队列
- 选择另一个进程执行
- 更新内存管理的数据结构,这取决于如何管理地址转换。
- 恢复处理器在被选择的进程最近一次切换出运行状态时的上下文环境,这可以通过载入程序计数器和其它寄存器以前的值实现。
操作系统的执行
- 无进程的内核。进程的概念仅适用于用户程序,操作系统代码作为一个在特权模式下工作的独立实体被执行。
- 在用户进程中执行。在用户进程的上下文中执行几乎所有操作系统软件。操作系统从根本上说时用户调用的一组例程,在用户进程环境中执行,用于实现各种功能。当发生一个中断或陷阱或系统调用时,处理器置于内核态,此时如果仍然在当前进程中继续执行,仅在当前用户进程中进行模式切换。如果需要发生进程切换,则控制权被转交给进程切换例程,这个例程啃呢个在当前进程中执行,也可能不再当前进程中执行。
- 基于进程的操作系统。吧操作系统作为一组系统进程来实现,作为内核一部分的软件在内核态下执行。主要的内核函数被组织成独立的进程,同样,还可能有一些在任何进程之外执行的进程切换。
UNIX SVR4进程管理
在用户进程内执行操作系统例程
UNIX使用两类进程:用户进程和系统进程。系统进程在内核态下运行,执行操作系统代码以实现管理功能和内部处理;用户进程在用户态下运行以执行用户程序和实用程序。
用户进程进入系统进程的场景
- 系统调用
- 发生中断。时钟中断或I/O中断
- 产生异常或错误
只有当进程准备从内核态移到用户态时才可能发生抢占,进程在内核态下运行时是不会被抢占的,这使得UNIX不适合实时处理。
UNIX两个独特进程。进程0是在系统启动时创建,这是预定义的一个数据结构,在启动时刻被夹在,时交换进程。进程0产生进程1,称为初始进程,时系统的所有其它进程的祖先。当新的交互用户登录到系统时,由进程1为该用户创建一个用户进程。随后,用户进程可以创建子进程,从而构成一颗分支树。
- [读书笔记]进程描述和控制
- 进程描述和控制
- 进程描述和控制
- 进程描述和控制
- 进程描述和控制
- 第三章 进程描述和控制
- 操作系统之进程的描述和控制
- 进程描述与控制
- 操作系统精髓与设计原理之进程描述和控制
- 操作系统原理——进程描述和控制
- 进程描述和控制 --操作系统精髓与设计
- 操作系统精髓与设计原理-进程描述和控制
- <操作系统:精髓与设计原理> 进程描述和控制
- 【操作系统】进程描述与控制
- 进程的描述与控制
- 进程的描述与控制
- 进程的描述与控制 进程的状态和转换 三态模型和五态模型
- APUE读书笔记 之 进程控制
- LeetCode 144:Binary Tree Preorder Traversal
- AngularJS 开发者最常犯的 10 个错误
- uicollectionview的基本使用
- Cocos2d-x 用lambda表达式实现监听,改变精灵的透明度和层级
- java利用队列模拟Josephus环
- [读书笔记]进程描述和控制
- 利用values来反向查询key,有没有简单的方法呢?
- 1线性代数引论
- spring +Maven xml 配置示范。
- nrf52 sdk第一次编译出错的解决方法
- postgresql使用
- MVP初识
- SpriteFrameCache精灵框使用
- Hibernate入门