计算机是如何工作的
操作系统
对上:要管理好各种硬件设备
对下:要给软件提供稳定的运行环境
操作系统是个很复杂的软件,其中有一个和我们密切相关的模块,叫做进程管理~
进程
进程(process)/ 任务(task)
一个运行起来的程序就是一个进程
打开任务管理器,就可以看到你的进程有多少个,这里有121个进程,进程多了,就需要进程管理:所谓进程管理,其实就是分两步:
1.描述一个进程:使用结构体/类,把一个进程有哪些信息,表示出来
2.组织这些进程:使用一定的数据结构,把这些结构体/对象,放到一起
进程的结构体
结构体就是PCB(process control block),linux组织若干个进程:就是使用双向链表来把每个进程的PCB给串起来。
所谓的“创建进程”,就是先 创建出 PCB,然后把 PCB 加到双向链表中。
所谓的“销毁进程”,就是找到链表上的PCB,并且从链表上移除。
所谓的“查看任务管理器”,就是遍历链表,依次取出 链表的每个PCB,再去取出相关资料。
我们的很多代码,最终都是会落在数据结构上。
PCB的属性
- pid
每个进程需要唯一的身份标识。可以说是进程的身份证号。其目的:就是为了区分进程。 - 内存指针
指当前这个进程,使用的是内存的哪一部分,进程要跑起来,就需要消耗一定的硬件资源,比如内存,进程运行的时候,使用了哪些内存上的资源 - 文件描述符表
进程是操作系统进行资源分配的基本单位
CPU分配—进程调度
系统运行起来有接近200个进程,但是电脑的CPU就6核12线程(6个干活的人,干12个人的事情),那这么多任务是怎么一起执行的?所以就有了进程调度:就是让有限的核心,能够同时执行很多任务
并行与并发
- 并行:同一时刻,两个核心,同时执行两个进程,此时这两个进程就是并行执行的
- 并发:一个核心,先执行进程1,执行一会后,再去执行进程2,再执行一会后,再去执行进程3,此时只要这里的切换速度足够快,看起来,进程1,2,3就是“同时”执行
此时,就可以同时执行200个任务了,通过并行+并发的方式来完成,完全是操作系统自发来控制,程序猿感知不到,所以很多时候把并行+并发统称为并发,当并发程度更高了,就可以称为高并发(比如1个核心执行1w个任务)
内存分配–内存管理
操作系统对内存资源的分配,采用的是空间模式 —— 不同进程使用内存中的不同区域,互相之间不会干扰.
进程间通信(Inter Process Communication)
如上所述,进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到对方存在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备”隔离性(Isolation)“。
但现代的应用,要完成一个复杂的业务需求,往往无法通过一个进程独立完成,总是需要进程和进程进行配合地达到应用的目的,如此,进程之间就需要有进行“信息交换“的需求。进程间通信的需求就应运而生。
目前,主流操作系统提供的进程通信机制有如下:
- 管道
- 共享内存
- 文件
- 网络
- 信号量
- 信号
其中,网络是一种相对特殊的 IPC 机制,它除了支持同主机两个进程间通信,还支持同一网络内部非同一主机上的进程间进行通信。