进程

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

进程

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

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

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

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

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

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

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

进程间通信

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

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

【完】