谈进程,我们需要先介绍操作系统,什么是操作系统?
·操作系统是一个专门搞管理的软件
·大部分我们听过的,例如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资源了,就会给这个进程倾斜一些资源