1.操作系统
操作系统是计算机中的一个重要软件,它是一个专门进行管理的软件。操作系统可以通过驱动程序来间接管理外部硬件,也可以为计算机中的程序提供一个稳定的运行环境,从而来方便管理各种程序的运行,让程序之间的运行互不影响。
1.2 驱动程序
驱动程序,简单来说就是搭配外部硬件使用的程序码。
比如,我们将一个特殊鼠标插入计算机中,而此时计算机只会将这个鼠标单作一个普通的鼠标,如果我们想要使用这个特殊鼠标的其他功能,我们就要去官网下载特殊的软件。而这个软件,和我们所说的驱动程序差不多。
一个计算机可以同时运行很多个程序,那么计算机是如何对多个运行的程序进行有效的管理呢?这里就涉及到了进程这个东西。
2. 进程
进程可以理解运行的程序,一个进程对应一个运行的程序,多个进程对应多个运行的程序。
2.1 进程的创建
步骤一:将程序文件存储一份到内存中
当我们点击一个.exe文件时,操作系统会将该文件存储一份到内存中,并将运行该程序所需要的指令和数据也存储一份到内存中。
步骤二:创建PCB
创建PCB是一个关键步骤,PCB(后面会介绍PCB)可以理解为一个很大结构体,里面存储着进程中的很多属性,创建完一个PCB之后,就会根据事先存储的数据将PCB初始化,一个进程就创建完成了。创建完PCB之后就会将该进程链接到存储PCB的数据结构的末端。
注意事项:内存中可以同时存储多个进程。
2.2 进程的运行
PCB创建完成之后,操作系统就要运行进程。进程的运行涉及到内存与CPU的交涉。操作系统通过与内存交互,找到对应的PCB里面的内存指针,CPU可以通过内存指针找到指令内存区域,此时CPU就会一条一条的读取,分析,运行内存区域里面的指令,此时,这时PCB就运行完成了。
进程的运行会依赖网盘,硬盘等资源,并且进程运行的过程中,涉及到指令的读取,分析和运行,这些涉及指令的操作设计到CPU,所以,进程的运行也占用了CPU的资源。
所以说,进程是操作系统分配资源的基本单位。
2.3 CPU对进程的分时复用
我们知道一个CPU的逻辑核心一次只能运行一个进程,但是一个计算机中的CPU是有限的,CPU是如何应对多个进程的运行呢?
这里就涉及到了CPU的分时操作。
所谓的分时操作,就是CPU将一段时间分为好几个时间段,每一个时间段用来运行一个进程,由于CPU的计算速度那是相当快,已经远远超出了人类得反应速度,以至于看起来好像是同时执行一样。
像上面一个CPU,通过分时复用的方式来运行多个进程,我们称之为"并发执行”。
多个CPU同时执行多个进程的方式,我们称之为“并行执行”。
2.PCB的介绍
通过前面C语言的学习,我们知道,结构体是可以存储一些自定义类型数据的属性的。由于PCB也是用来存储进程的各种属性,所以PCB可以看作是一个很大的结构体,里面存储了很多关于PCB的属性。
1.PCB的一些关键要点
1.Pid(进程id)
每一个进程都有属于自己的进程id,可以用来区分其他进程。
如下图
2. 内存指针
由于CPU要运行进程时,要使用运行该进程的指令,所以,在PCB中就存在一个内存指针,该指针指向指令的内存区域,CPU就可以通过该指针来找到并运行指令。
3.文件描述符表
进程在运行的过程中,要经常与硬盘上数据进行交互,由于硬盘上的数据都是以文件的形式存储,所以访问硬盘上的数据时,要先进行打开文件的操作,打开文件获得到的数据都会存储到文件描述符表中,则文件描述符表中的每一项都对应了一个打开的文件。
2. PCB的进一步属性
要完成上面的分时复用,就涉及到了PCB的进一步属性,也就是进程调度。
1.进程状态
进程中有很多状态,其中就绪状态和阻塞状态最为典型。
(1)就绪状态,进程处于就绪状态时,说明该进程可以随时到CPU上执行。
(2)阻塞状态,进程处于阻塞状态,说明该进程此时不适合到CPU上执行。
2.进程的优先级
进程的运行也是有优先级的,有些进程的优先级高,就可以多吃到一些CPU的资源。
比如,假如我们电脑上在同时运行着黑悟空和qq两个进程,这时肯定是黑悟空的这个进程的优先级高,它就能多吃到CPU上的资源点。这就好比我们宁愿qq消息的接受延迟几秒,也不要游戏延迟几秒,因为可能就是这几秒,会导致游戏的失败。
3.进程的上下文
当一个进程执行了一段时间,失去CPU之后。过一段时间,当该进程重新运行之后,它会接着上次的状态继续执行,而不是重新开始执行。
这就涉及到了进程中的上下文机制。
由于CPU中有很多寄存器,寄存器中存储了进程运行的中间状态,当一个进程失去CPU时,操作系统就会将寄存器存储的中间状态的值填写到内存(该内存是指PCB中对应的属性)中,当这个进程重新执行时,操作系统就会重新将PCB对应的属性值重新填写到寄存器中,使得该进程能够接着上次的状态去执行,而不是冲头开始执行。
4.进程的记账信息
进程的记账信息主要用于统计功能,当一个进程已经长时间没有吃到CPU的资源时,此时,CPU就会倾斜一些资源给该进程。