一、进程
1.1 什么是进程?
进程是操作系统对一个正在运行的程序的一种抽象。
通俗的讲:一个运行起来的程序就是进程!!
这里的.exe就是一个可执行文件(程序),当它运行起来后,在系统里就会形成一个进程。
从任务管理器中看,系统中同时有很多进程
那么这么多的进程如何管理呢?
1.2 进程控制块(PCB,Process Control Block)
*想要控制进程就要:
1.描述一个进程:要使用结构体/类,把一个进程有哪些信息表示出来
2.组织者这些进程:使用一定的数据结构将这些结构体/对象放在一起
那么进程中的结构体/类有哪些属性?
- 进程的唯一标识 —— pid
- 内存指针:当前这个进程使用的内存是哪一部分(表明进程运行的时候使用哪些内存上的资源)
- 文件描述符表:进程每打开一个文件,就会产生一个文件描述符(标记该文件),一个进程会打开多个文件,从而有多个描述符,把这些描述符都放在顺序表的结构里,就形成了文件描述符表。(表明进程运行的时候使用哪些硬盘上的资源)
- 下面的是描述和CPU资源相关的属性(这些属性都是辅助进程调度)
4.1进程状态
就绪态:该进程已经准备好了,随时可以上CPU执行
阻塞态:该进程暂时无法上CPU执行
4.2 进程优先级
进程之间有优先调度
4.3进程上下文
就是描述进程执行到哪里的“存档记录”具体地说就是进程执行时CPU内部一系列寄存器的值。寄存器最典型的作用就是保存当前进程执行的中间结果(包括进程运行到哪一条指令)。
存档:进程离开CPU,将寄存器中的值保存在PCB的上下文字段
读档:进程下次回来,CPU再把PCB中的值恢复到寄存器
4.4进程记账信息
统计每个进程在CPU上运行了多久
1.3 进程的并行和并发
1.3.1 并行
同一时刻,两个核心同时执行两个进程,此时这两个进程就是并行的。
1.3.2 并发
一个核心先去执行进程1,过一会儿再去执行进程2,再过一会儿执行进程3…只要切换的速度足够快就感知不到,看起来就像是同时进行的。
1.4 内存分配
1.4.1 操作系统对内存资源的分配,采用的是空间模式 —— 不同进程使用内存中的不同区域,互相之间不会干
扰。(使用虚拟地址空间进行分配)
1.4.2 虚拟地址空间
如果像上图这样,进程直接访问物理地址,万一代码出现问题(数组越界、野指针等),就会影响其他进程
采用虚拟地址空间(页表)后,任何对物理内存的操作都需要经过页表的“翻译”,如果某个进程出现bug,那么其虚拟地址页表无法翻译,也就无法影响物理内存
1.5 进程间通信
如上所述,进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到对方存在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备”隔离性(Isolation)“
但是有的时候需要进程间的相互配合
而所谓的进程间通信就是在隔离的前提下,找到一个“公共区域”进行数据交换
目前,主流操作系统提供的进程通信机制有:管道、共享内存、文件、网络、信号量、信号