进程

前言

操作系统中最核心的概念是进程,操作系统的其他所有内容都是围绕着进程的概念展开的

多道程序设计:在伪并行情况下的进程集,它允许多个程序同时进入内存并运行,其目的是为了提高系统效率。通过将内存(主存,也就是RAM)分为几个部分,没一部分存放不同的作业,内存中的不同作业是使用硬件来保护的

每道程序都有各自的逻辑PC,但实际上只有一个物理上的PC,故在程序运行时,每道程序的逻辑PC被装入到实际的PC中,当该程序执行结束或暂停时,实际的PC被保存到该进程的逻辑PC(在内存中)。经过一段时间之后,所有的进程都运行了,但是在任何一个给定的瞬间,只有一个进程在真正运行

这个例子是为了方便理解:每个进程都有自己的虚拟CPU,但真正的CPU在各进程间来回切换

并发环境和并发程序

并发环境:一段时间间隔内,单处理器上有两个或两个以上的程序,其中一个还未结束、其他就开始执行的状态, 并且次序不是事先确定的

并发程序就是在并发环境中执行的程序

进程

进程(Process):进程是具有独立功能的程序关于某个数据集合上的 一次运行活动,是系统进行资源分配和调度的调度单位,又称任务(Task for Job)。从操作系统执行一个程序所需要的信息的角度来看,进程是容纳一个程序所需要所有信息的容器

  • 程序的一次执行过程——不同执行过程是不同的进程
  • 是正在运行程序的抽象——代表了一个CPU,是对CPU的抽象
  • 将一个CPU变幻成多个虚拟的CPU——每个进程都有自己的虚拟CPU,但真正的CPU在各进程间来回切换
  • 系统资源以进程为单位分配,如内存、文件、…… ——每个具有独立的地址空间
  • 操作系统将CPU调度给需要的进程——为进程交付控制CPU控制权

地址空间与进程表

  • 地址空间
    (这里只是有个概念,具体要看第三章)每个进程都有一个与其相关的地址空间,在地址空间中进程可以读写。地址空间是存储器的抽象,可理解为带有编号的存储位置的列表;地址空间中存放有可执行程序、程序的数据以及程序的堆栈
  • 进程表
    一个进程暂时被挂起后,那么后来进程再次启动时其状态必须与先前暂停时完全相同,所以进程被挂起时它的所有信息都要被保存起来,除了该进程自身地址空间的内容以外,均存放在操作系统的一张表中,即进程表

进程的创建与终止

创建

从本质上来讲,已存在的进程执行一个用来创建新进程的系统调用,该系统调用通知操作系统创建一个新进程,并直接或间接指定在该进程中运行的程序。

具体来说,有4种事件会创建进程:

  • 系统初始化
  • 正在运行的进程发出系统调用创建进程
  • 用户请求创建进程
  • 批处理作业的初始化

终止

  • 程序执行完——正常退出(自愿)
  • 进程引起错误,通常是程序中的错误——出错退出(自愿)
  • 不由该进程本身引起的错误,并非程序错误,——严重错误(非自愿)
  • 被其他进程杀死(非自愿)

进程的实现

进程控制块——PCB(Process Control Block)

PCB包含的信息

  • 进程描述信息
  • 进程控制信息
  • 所拥有的资源和使用情况
  • CPU现场信息

这些信息用于进程管理、存储管理、文件管理等

一种数据结构,又名进程描述符、进程属性、进程表项。操作系统用于管理控制进程的各种属性,描述进程的动态变化过程,它是操作系统感知进程存在的唯一标志,进程与PCB是一一对应的。在实际的操作系统中PCB的命名是不一样的,比如Linux中为task_struct,Windows中为EPROCESS、KRPRCESS、PEB
理,把所有PCB集中在一起,放在内存的固定区域——进程表,进程表的大小是固定的,进程表的大小就是操作系统的并发度

单CPU维持多进程——中断处理和调度,稍作了解:

  1. 硬件将程序计数器等寄存器压入堆栈
  2. 硬件从中断向量装入新的程序计数器
  3. 汇编语言过程保存寄存器值
  4. 汇编语言过程设置新的堆栈
  5. C中断服务例程运行(典型得读和缓冲输入)
  6. 调度程序决定下一个将运行的进程
  7. C过程返回到汇编代码
  8. 汇编语句过程开始运行新的当前进程

多道程序设计模型

本来打算跳过去的,在csdn上看到了鹅厂曾经的笔试题,答案在7、13、31楼。

多道程序模型需要考虑进程等待IO,假设一个进程等待IO与其停留在内存中时间的比为p,若内存中有n个进程,那么所有进程都在等待IO的概率为p^nCPU的利用率 =1 - P^N

进程的状态

基本状态

  • 运行态(Running)——该时刻进程实际占用CPU
  • 就绪态(Ready)——可运行,但因为其他进程正在运行而暂时停止
  • 阻塞态(Waiting/Blocked)——除非某种外部事件发生,导致进程不能运行

前两种在逻辑上类似,都可以运行,但是就绪态暂时没有CPU分配给它;第三种与前两种不同,不能运行,即使CPU空闲都不可以,因为某种外部事件还未发生,比如等待输入、网络等

进程状态间的转换:

  1. 进程等待外部事件的发生
  2. 调度程序选择另一个进程
  3. 调度程序选择了该进程
  4. 外部事件的发生

2、3的转换都是右调度程序引起的,调度程序的主要工作就是决定应当运行那个进程。当系统分给进程的时间片用完或者一个更高优先级的进程进入就绪状态,就会发生转换2,当调度程序重新选择一个进程后,就会发生3转换。

上下文切换

上下文切换:将cpu硬件状态从一个进程切换到另一个进程过程

具体来说,进程运行时,其硬件状态保存在cpu上的寄存器(PC PSW 栈指针 通用寄存器 其他控制寄存器的值)中;进程不运行时,上述寄存器的值要保存到PCB中;当操作系统要运行一个新的进程时,将PCB中的相应值送到对应的寄存器中

其他状态

  • 创建(new)——完成了创建进程的必要工作但尚未允许其运行
  • 终止(Terminated)——终止执行后的状态,可完成一些数据统计工作和资源回收
  • 挂起(suspend)——用于调节负载,将进程移除内存,将进程映像交换到磁盘上

5进程状态模型:

参考资料:

  1. 现代操作系统
  2. 北大陈向群——操作系统原理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值