从PCB到资源调度,理解操作系统视角中的进程

谈进程,我们需要先介绍操作系统,什么是操作系统?

·操作系统是一个专门搞管理的软件

·大部分我们听过的,例如Windows,IOS,Android,Linux这些都是操作系统

·操作系统通过驱动程序管理各种硬件设备,比如我们的鼠标大品牌例如罗技等,都有专门的软件去激活或者调整鼠标的某些功能

·为各种应用程序,提供一个稳定的运行环境,这些应用程序在工作过程中互不干扰,即使某个程序出bug或者直接崩溃了也不会影响到其他应用程序运行

谈到应用程序,我们就引出了一个操作系统中的重要概念:进程(process)

简单来说,一个运行起来的程序,就称为进程

现代计算机,同时跑个百十来个进程是很常见的,进程多了,自然就得谈谈管理的问题了,操作系统是如何管理好这么多进程的呢?接下来我们站在操作系统的视角来观察一下:

1.先描述出一个进程是啥样的,操作系统会使用结构体描述出进程的核心属性,例如使用进程控制块(PCB),一个非常大的结构体,有很多很多属性

2.操作系统把多个进程组织起来,比如Linux通过链表的形式组织,将多个PCB串到一起

一、PCB中的一些关键要点

1.pid(进程id)

进程的身份标识符

我们在键盘上同时按下Ctrl + shift + Esc 进入任务管理器

我们看到的这些一条一条的就是启动的应用程序,也就是一个个进程,而屏幕右边显示了这些进程的一些相关属性,比如pid,cpu,内存占用率等,注意,这些列不是PCB,我们看到的这些列,是操作系统根据PCB中对某线程的原始记录实时计算出的报告

2.内存指针

进程需要知道要执行的指令在哪里,指令依赖的数据又在哪里,例如我们点开桌面上的qq图标时,其实相当于点开了一个可执行文件(QQ.exe)

exe是程序员写代码生成的,点开它的时候,操作系统会把exe中的指令和数据加载到内存中,后续进程在运行过程中,就会从指令一条条的取指令并执行。

3.文件描述符表

进程在运行过程中大多数时候都需要和硬盘这个硬件设备进行交互,硬盘上的数据是以文件的形式来组织的

这就是硬盘中的一个个文件夹,进程在读写文件的时候。就需要先打开文件,而每打开一个文件,就会把这个文件的信息保存在文件描述符表中,表里的每个项就对应着一个打开了的文件

基于以上三点,我们说进程是操作系统重资源分配的基本单位

而我们还需要了解什么是进程调度,也是PCB中的进一步的属性

二、进程调度

进程调度分为以下四点:

·进程状态

·进程优先级

·进程的上下文

·进程的记账信息

1.进程状态

进程有很多状态,这里我们只谈两个最典型的

(1)就绪状态->随叫随到,意味着该进程此时可以随时到cpu上执行

(2)阻塞状态->进程当前不适合到cpu上执行

2.进程优先级

一般我们在打游戏时,关于游戏的进程肯定要分配的cpu资源更多,所以说很多进程在cpu上运行的机会其实不是均等的,也就有优先级这一概念,进程的优先级越高,意味着该进程能吃到更多的cpu资源

3.进程的上下文

一个进程执行了一会,失去cpu,过了一段时间之后,进程再回到cpu上执行,肯定是要沿着上次执行到的位置和状态继续往下执行,而不是重开,这是进程在cpu上运行时,cpu把cpu上的寄存器的值保存到了内存中(PCB对应的属性中,所以PCB做到了实时更新这个进程的各种原始记录和状态)

4.进程的记账信息

相当于一个统计的功能,统计每个进程在cpu上运行了多久,如果发现某个进程好久没有吃到cpu资源了,就会给这个进程倾斜一些资源

相关推荐
缪懿2 天前
应用层中的UDP协议原理
网络·网络协议·udp·javaee
Chloeis Syntax8 天前
JavaEE初阶学习日记(1)---线程和进程
java·开发语言·学习·线程·javaee
Zzzzmo_17 天前
【JavaEE】多线程05
cas·javaee·juc·锁策略
Zzzzmo_1 个月前
【JavaEE】多线程04—线程池/定时器
java·线程池·定时器·javaee
想带你从多云到转晴1 个月前
02、JAVAEE--多线程(二)
java·开发语言·javaee
coderlwz1 个月前
深圳程序员职业生涯校企合作申请过程 东北大学
javaee
coderlwz1 个月前
初级Java开发工程师使用sql脚本编写代码的过程是简单而且不糊涂
javaee
1.14(java)2 个月前
Spring-boot快速上手
java·开发语言·javaee
⑩-2 个月前
@Vaild
java·javaee