文章目录
- ✍进程的概念
- ✍进程存在的意义
- ✍进程在计算机中的存在形式
- ✍进程调度
✍进程的概念
每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之⼀。
进程是操作系统对⼀个正在运行的程序的⼀种抽象,换言之,可以把进程看做程序的⼀次运行过程;
同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
举例子来说,打开的csdn网站就是一个进程
打开任务管理器,可以看到计算机中的进程。
包括后台进程(计算机自动打开的,不需要你手动打开)
想要运行一个程序,就需要为程序分配资源。
所以说在操作系统内部,进程又是操作系统进行资源分配的基本单位。
✍进程存在的意义
进程主要是用来解决程序不能并发执行从而导致 CPU 利用率低下这个问题。
随着科技的发展,人们对计算机的需求也越来越大,同时对计算机性能的要求也越来越高。但事务的发展总是有所限制的。对于计算的CPU来说,现在的科技水平只能达到4nm的精度,这对于庞大的需求来说,确实是有些吃力,所以人们开始思考,当CPU的制造水平有了一定限制时,一个CPU解决不了的事情,我们可以交付给多个CPU来处理,也就是我们现在所谓的多核计算机。
使用多个核心来处理问题,当然要对这些核心进行管理规划,使这些核心可以并发执行程序。
这里的并发涵括:并发和并行
在后续会讲解到的。
✍进程在计算机中的存在形式
在操作系统中,通常用PCB(程序控制块 Program Control Block)这样的结构体来描述进程。
不同的操作系统的称呼不相同。
PCB中存储的很多的信息
在操作系统中,通常使用‘链表’这样的数据结构来使PCB串接起来。
有很多这样的链表存在于操作系统中。
- 任务管理器查看进程列表
遍历链表的每个结点,并获取每个结点的信息。 - 创建新的进程(双击执行程序)
进程创建出新的PCB结构体,形成新的结点并插入到链表中 - 删除进程(关闭程序)
在链表中删除对应的PCB结点
PCB结构体中包含的内容
- pid – 进程唯一标识
跟身份证一样,可以唯一的确定进程。
同一个机器,同一时刻,进程id一定是不同的
如下,我打开了五个Typora程序,也就执行了五个Typorad的进程,可以看到他们五个的PID是各不相同的。
- 内存指针
进程运行时,需要消耗一定的硬件资源,其中内存就是一个非常关键的资源!
一个程序在运行的时候,就会被从硬盘(xxx.exe)加载到内存中
加载这个程序的指令/依赖的数据
注意:这里的内存指针是一组指针
这一组指针告诉操作系统,要运行的指令都在内存的什么位置
也告诉系统,进程需要依赖的数据又存于什么位置
…等等
总之,内存指针是给操作系统知名下一步需要做什么
-
文件描述符表
一个进程运行的时候,会操作一些文件。
就通过一个类似于“顺序表”这样的数据结构,来记录这个进程打开了哪些文件 -
进程调度
打开任务管理器可以看到,有100+的进程在执行
而执行就需要消耗资源,而我们的计算机并没有那么多的核心(CPU)以供得每个进程分配到一个CPU,这时就需要并行+并发来解决资源的分配问题
一个核心,同一时刻,只能执行一个进程
(以我的计算机为例,我的计算机中拥有16个核心)
也就是说,同一时刻我的计算机最多可以同时执行16的进程
这叫做并行执行这是完全的同时执行
一个核心,不同时刻,可以执行不同进程
CPU把总的时间切割成小的片段,每个片段执行一个进程,每个片段成为“时间片”
由于时间片比较短,CPU切换进程的速度非常快,人感知不到
所以站在使用者的角度来看,这些进程就是“同时执行”的,本质上并不是同时的
这叫做并发执行。
操作系统会按照并行和并发互相搭配,来执行一个进程。
总结:
并行,微观时间上,也是同时执行
并发,宏观时间上,是“同时执行”,微观时间上,是串联执行。但由于速度之快,人感知不到。
因此就将,并行和并发统称为“并发”
✍进程调度
PCB提供了几个属性,来支持进程调度
-
状态
分为“就绪状态”和“阻塞状态”
区别在于CPU调用时,是否可以立即执行 -
优先级
我们知道调用进程时,需要为其分配资源
但在分配资源时,并非是均等的分配
例如在打游戏时,此时你打开的网页就不需要分得那么多的资源 -
上下文
在上文中,我们提到“并发执行”,在执行过程中,会产生很多的“中间结果”,在进程切出于CPU之前,需要把这些“中间结果”(CPU的寄存器中的各种值),保存到PCB的上下文中。
这个过程是将寄存器的数据存放到内存中,也就是我们平时所见的【存档】
当下一次CPU再次调度这个进程时,就要把之前的数据读取出来,放入寄存器中,也就是所谓的【读档】。
具体操作过程:有一个PC程序计数器,他会记录上一次执行到哪一个位置,在下一次执行时,就从这个位置继续执行。
- 记账信息
基于优先级,我们可以知道每个进程分配的资源并不相同
引入记账信息,我们可以记录每个进程所分配的资源
进而后续对资源的分配做出调整。
以上就是本文所有内容,如果对你有帮助的话,点赞收藏支持一下吧!💞💞💞