JavaEE初阶:进程调度的基本过程

什么是进程

进程是操作系统对一个正在运行的程序的一种抽象。简单来说,一个正在运行的程序就是一个“进程”,没有跑起来的程序就不算是一个进程。

“进程”(process)也可以叫做“任务”(task)。那么举栗子来了解什么是“进程”:Ctrl+Alt+Delete打开任务管理器,可以看到有下面这些进程,这些进程正在运行:

其中每个进程都会对应一些资源,在操作系统内部,进程又是操作系统进行资源分配的基本单位

进程是一个重要的软件资源,由操作系统内核直接负责的。那么操作系统对于进程是如何管理的呢?主要分为两步:描述+组织

操作系统如何管理进程?

两步走:描述+组织

    • 描述

如何描述,也就是说清楚有哪些属性特征。进程的属性特征是使用结构体(C语言的结构体,因为操作系统基本都是用C语言/C++来写的)来描述的。对于这个结构体我们对它起了一个特殊的名字:PCB(进程控制块)。每一个 PCB 对象,就代表着一个实实在在运行着的程序,也就是进程。❗注意:这里的PCB是一个结构体,而不是一个硬件板。

    • 组织

简单来说,就是通过多个数据结构将多个基本单位串接起来。操作系统通过这种数据结构,例如线性表、搜索树等将 PCB 对象组织起来,方便管理时进行增删查改的操作。

例如:通过双向链表(并非一个简单地双向链表)将多个PCB串在一起。

(1)创建一个进程,其实质上就是建立一个PCB这样的结构体对象,将它插入到链表中。

(2)销毁一个进程,实质上就是将链表上的PCB节点删除掉。

(3)在任务管理器中查看这些进程,实质上就是将这个PCB链表遍历一遍。

PCB里边描述了哪些进程的特征?

  1. 进程的唯一标识 —— pid。也是进程的身份标识符,唯一的数字。

  1. 内存指针 —— 指向了自己的内存是有哪些。

  1. 文件描述符表 —— 硬盘上的文件等其他资源。

  1. 进程调度的相关属性

4.1进程的状态

首先先了解3个基本的状态:

就绪态:随叫随到,进程已经准备好了,随时都可以去CPU上执行。

运行态:正在运行的进程。

阻塞态:由于某种原因,进程无法回到CPU中运行,比如进程在执行密集的IO操作、读写数据。

4.2优先级

进程也是有优先级的,操作系统在调度进程的时候并不是在一碗水端平,而是根据优先级高低来绝对先调度谁,后调度谁。

4.3上下文

操作系统在进行进程切换的时候就需要把进程执行的“中间状态”记录下来,并且保存起来,下次该进程回到CPU执行的时候就会恢复到之前的状态,继续往下执行。此过程就相当于是“存档,读档”,上下文本质上就是我们存档的内容。进程的上下文,就相当于是各个寄存器的值,寄存器就是CPU内置的存储数据的模块,保存的就是程序运行过程中计算的结果。保存上下文,就是把CPU寄存器的值记录并保存在内存中,也就是PCB中。恢复上下文就是把内存中这些记录的寄存器的值恢复回去。

4.4记账信息

操作系统会统计每个进程在CPU上的占用时间,和执行的指令条数,根据这些来决定下一阶段该如何调度。这就是记账信息。


以上就是PCB的核心属性,想要了解PCB更多的属性还请读者自行了解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值