操作系统-进程概念与进程调度

转载请声明出处
欢迎进入我的博客四元君

进程的概念

a process is a program in execution

进程是正在执行中的程序。但这不是确切的说法。进程不只包含代码,这作为他的一部分,被称作文本段或者代码段

img

除此以外,进程还包括当前活动,通过PC的值和寄存器的内容来表示。还包括堆栈段,其中有临时数据(函数参数、返回地址、局部变量)和数据段(全局变量)。还有可能包含,因为有可能动态申请了内存。

img

强调:**程序不是进程。程序是被动实体,进程是活动实体。**当程序被装入内存后才会成为进程。(原文这里使用的是become)多个进程可与一个程序相关,比如可以同时打开三个相同的播放器播放复仇者联盟4,因为这太好看了。(虽然文本段相同,但数据段、堆栈段、堆却不同)。

值得一提的是,进程本身可作为一部分代码的运行环境。java就是典型的例子,当我们运行java的时候,实际上运行了JVM来执行我们的java代码。

进程状态
  • New 新的 进程正在被创建
  • Running 运行 进程正在被执行
  • Waiting 等待 进程等待某个事件的发生(例如I/O)
  • Ready 就绪 进程等待分配处理器
  • Terminated 终止 进程完成执行

一次只有一个进程运行在处理器上,但是可以有多个在等待或者就绪

img

进程控制块

每个进程在OS内用**进程控制块(PCB,也称任务控制块)**来表示。
img

  • 进程状态
  • 进程编号
  • PC
  • 寄存器
  • 调度信息:包含进程优先级、调度队列的指针等
  • 内存管理信息
  • 记账信息:CPU时间、实际使用时间、时间界限、记账数据、进程数量等
  • I/O状态信息

img
PCB实际上完成的是保存现场和恢复现场的记录员的功能。

线程

线程 thread 是操作系统能够进行运算调度的最小单位。
目前的暗示是:一个进程只能执行单个的线程。比如我们不能一边输入一边进行拼写检查。许多现代OS进行了扩展,我们将在之后讨论多线程进程。

进程调度

多道程序设计的目的在于无论何时都有程序运行;分时系统的目的是在进程之间快速切换CPU以便用户进行交互。为了达到这个目的,进程调度选择一个可用的进程(可能从多个可用进程集合中选择)到cpu上执行。

调度队列

进程进入系统后会被加入到作业队列中,该队列包括系统中的所有进程。驻留在内存中就绪的、等待运行的进程保存在就绪队列中。该队列通常用链表实现,其头结点指向链表的第一个和最后一个PCB块的指针,每个PCB块包括一个指向就绪队列的下一个PCB的指针域。
img

除了上述队列外还有设备队列,假设进程像一个共享设备发送I/O请求,他会加入到该设备的设备队列内。

讨论进程调度多用队列图,如下图:
img

调度程序

进程选择往往是由调度程序 scheduler执行。

通常对于批处理程序,进程更多的是被提交而不是被直接执行。这些进程被放到大容量存储设备(如磁盘)的缓冲池中。长期调度程序作业调度程序从池中选择。短期调度程序CPU调度程序从准备执行的进程中选择进程。

短期调度程序运行频繁,因为进程可能数毫秒就要发出I/O请求,那么短期调度程序的时间要远小于毫秒。长期调度程序有数分钟的间隔。

对有些OS可能没有或很少有长期调度程序。有些系统会加入中期调度程序,能将进程从内存中移出,降低多道程序设计的程度。

img

上下文切换

当发生一个中断时,系统需保存当前运行在CPU中进程的上下文,从而在处理完后能恢复上下文。将CPU切换到另一个进程需要保存当前进程的状态并恢复另一个进程的状态,这一任务称为上下文切换。使用PCB,先执行状态保存,再执行状态恢复

上下文切换时系统不会做什么有效的工作,速度依赖于内存速度、需要复制的寄存器数量,与硬件支持紧密相关,一般需要几毫秒。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值