目录
一、操作系统
1、定义:
操作系统是计算机资源管理软件的统称。目前常见的操作系统有:Windows系列、Linux系列等,具体详情如下图所示:
2、操作系统的基本功能:
- 防止硬件被应用程序滥用
- 向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备
二、进程
1、定义:
进程相当于是一个程序完成一项任务的过程。同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
可执行文件(.exe)相对于进程来说是静态的,只占用我们硬盘的内存,但当我们运行.exe文件时,操作系统就会把里面的信息加载到我们的内存中,并且运行其中的代码,因此就形成了一个进程。
在任务管理器中, 如下图所示这些在内存中运行的程序就相当于一个个进程。
三、进程管理
1、PCB定义
每个进程都有自己的PCB,而PCB又包含是什么呢?
(1)、身份标识
身份标识符pid也就相当于我们的身份证号,每个进程都有自己的pid。
(2)、内存指针
内存指针指明了进程要执行的代码内存中的地方,以及这个进程执行中依赖的数据都在哪里。当运行一个.exe文件时,操作系统就会把这个文件加载到内存中,变成进程。
(3)、文件描述符
文件描述符表示进程中打开了哪些文件。在文件描述符表中,每个元素代表一个打开的文件,表中对应的下标就是文件描述符,因此可以将其看作是顺序表。
2、操作系统是如何管理进程
(1)、描述进程
计算机内部要管理任何现实事物,都需要将其抽象成一组有关联的、互为一体的数据。因此我们可以通过类/对象来描述这一特征。这样,每一个 PCB 对象,就代表着一个实实在在运行着的程序,也就是进程。
(2)、组织进程
操作系统再通过某些数据结构,例如链表、二叉树等把每个进程的PCB
给串起来,便于进行增删查改的操作。
四、进程调度(cpu分配)
进程的调度是操作系统将CPU资源分配给各个进程。
以下属性便是为了实现进程调度:
1、状态
状态描述了当前这个进程接下来应该怎么调度:
就绪状态:随时可以去CPU上执行。
阻塞状态/睡眠状态:暂时不可以去CPU上执行。
2、优先级
每个进程所优先分配到的时间和空间。
3、记账信息
统计了每个进程,都分别执行了多久、执行了哪些指令以及排队等了多久。记账的目的是给进程调度提供信息。
4、上下文
表示上次进程被调度出CPU的时候,当时程序的执行状态,下次进程上CPU的时候,就可以恢复之前的状态,然后继续往下执行。进程被调度出CPU之前,要把CPU中的所有的寄存器中的数据都给保存到内存中。
上下文也就相当于玩游戏时的存档,当退出游戏时保存进度,在下次打开游戏时可以继续从该处进行游戏。
注:为了便于讨论和理解,我们大部分的场景下假设是单CPU单核的计算机。操作系统对CPU资源的分配,采用的是时间模式 —— 不同的进程在不同的时间段去使用 CPU 资源。
五、内存管理(内存分配)
操作系统对内存资源的分配,采用的是空间模式(不同进程使用内存中的不同区域,互相之间不会干扰)。
六、进程的虚拟空间地址
1、定义
虚拟空间地址可以抽象为两个班级都有相同的学号,但是他们实际的所在的班级是不同的。
虚拟空间对于进程的作用在于“隔离性”,相比于线程来说进程之间不会相互影响,一个进程崩溃了也不会有影响其他的进程,每个进程都有这样的一份虚拟空间。
即使操作系统有这么多的进程,但同一时刻执行的进程不会很多。即使同一时刻执行了也不会用到进程虚拟空间所有的内存,只会显示真实使用的部分。
因为进程之间存在“隔离性”,所以想要多个进程配合工作,操作系统就提供了“进程间通信”,给进程之间提供一份公共资源,借助公共资源来通信。
2、进程通信
进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到对方存在的。因此进程之间存在“隔离性”。但想要完成一个复杂的业务需求,往往需要通过多个进程配合来完成。因此进程之间就需要有进行“信息交换”的需求。进程间通信的需求就应运而生。
目前,主流操作系统提供的进程通信机制有如下:
- 管道
- 共享内存
- 文件
- 网络
- 信号量
- 信号
注:网络是一种相对特殊的 IPC 机制,它除了支持同主机两个进程间通信,还支持同一网络内部非同一主机上的进程间进行通信。