进程

今天开始复习一些操作系统方面的知识,从最基本的进程开始。

进程

在早期的单道批处理系统中,一次只能向内存中装入一个程序来运行,另一个程序只有等到这个程序运行完成后才能被装载,因此程序执行的关系是串行的,并没有进程这个概念。

单道系统的缺点是太慢了,一次只能运行一个程序不说,当这个程序遇到 I/O 操作,资源申请等耗时操作时,CPU 就被闲置起来了,导致计算机资源无法被充分利用。

因此人们开发了多道程序系统,一次可以在内存中装入多个程序的代码和数据,并且使其并发执行。因此操作系统就需要唯一标示这些程序。因而就出现了进程的概念。每个进程在内核中都有一个 task_struct 的结构体,称为 PCB(Process Control Block,进程控制块),里面存放着该进程的一系列相关信息,如指令指针寄存器的值、堆栈指针、PID、PPID,是否就绪等。进程控制块在整个系统层面唯一标示一个进程的存在,内核也使用它来对进程进行一系列的操作。

有了多个进程,但 CPU 只有一个呀。所以操作系统就需要对这些进程进行安排,使同一时刻只能有一个进程运行在处理机上,这就是进程调度。进程调度算法有以下几种:

调度是根据进程的状态来进行的,一个进程的状态转移图如下,也就是进程的生命期:

在 32 位系统下,CPU可寻址的范围是 $0\sim2^{32}-1B$,每个进程都有自己独立的 4GB 地址空间,称为虚拟地址空间。自底向上分别为代码段、数据段(已初始化数据段和未初始化数据段)、堆、共享区、栈、命令行参数和环境变量区、内核区。其中内核区占据了 $\frac14 * 4GB=1GB$ 的空间,其余的用户区占了$\frac34 * 4GB=3GB$。

具体见下图:(图片来自网络)

进程间通信

现代操作系统中,进程间通信的主要手段有:管道、FIFO、消息队列、共享内存、信号、信号量、socket。

以上就是目前常用的进程间通信方式。

【完】