系统为每一个运行的程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放位置)
进程定义
为了方便操作系统管理多道程序,完成各程序并发执行,引入进程、进程实体的概念。
PCB、程序段、数据段三部分构成进程实体(进程映像) 程序段只要存放的是程序代码,数据段主要存放的是程序运行时使用、产生的运算数据。如全局变量、局部变量、宏定义的常量就存放在数据段内。
一般情况下,把进程实体就简称为进程,例如所谓创建进程,实质上就是创建进程实体中的PCB;而撤销进程,实质就是撤销进程实体中的PCB。注意:PCB是进程存在的唯一标志! 也就是说,进程可以定义为:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
PCB:
进程的组织方式
进程的组织讨论的是多个进程之间的组织方式,主要有链接方式和索引方式。
- 链接方式:按照进程状态将PCB分成多个队列,操作系统持有指向各个队列的指针
- 索引方式:根据进程状态的不同,建立几张索引表,操作系统持有指向各个索引表的指针。
进程的特征
进程和程序是两个截然不同的概念,相比 程序,进程有以特征:
进程的状态和转换
进程是程序的一次执行,在这个执行过程中,有时进程正在被cpu处理,有时又需要等待cpu服务,可见,进程的状态是会有各种变化,为了方便对各个进程的管理,操作系统需要将进程合理划分为几张状态。其中有三种基本状态:
- 运行态(Runing) 占有cpu,并在CPU上运行。
- 就绪态(Ready)已经具备了运行条件,但是由于没有空闲CPU,而暂时不能运行
- 阻塞态(Blocked/Waiting, 又称等待态)因等待某一件事而暂时不能运行。
- 创建态(New,又称新建态) 进程正在被创建,操作系统为进程分配资源、初始化PCB
- 终止态(Terminated,又称结束态)进程正在从系统中撤销,操作系统会回收进程拥有的资源,撤销PCB
五种状态的转换:
注意:不能由阻塞态之间转换为运行态,也不能由就绪态直接转换为阻塞态(因为进入阻塞态是进程主动请求的,而阻塞态转换为就绪态是被动的)
进程控制
进程控制主要功能就是对系统中的所有进程实施有效的管理,它具有创建新进程,撤销已有进程、实现进程转换等功能。
用原语实现进程控制。原语的特点是执行期间不允许中断,只能一气呵成。这种不可被中断的操作就是原子操作。原语采用“关中断指令”和“开中断指令”实现,并且,原语只运行在核心态,因为开关中断指令的权限非常大。
进程通信
进程通信就是进程之间的信息交换。进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。为了保证安全,一个进程不能直接访问另一个进程的地址空间。
主要有:共享存储、消息传递、管道通信,三种方式。
1. 共享存储
2. 管道通信
“管道”是指用于连接读写进程的一个共享文件,又叫做pipe文件。其实就是在内存中开辟一个大小固定的缓冲区。
- 管道只能采用半双工通信,某一时间内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
- 各进程要互斥的访问管道。
- 数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走之后,管道变空,此时读进程的read()系统调用将被阻塞。
- 如果没写满,就不允许读,如果没读空,就不允许写。
- 数据一旦被读出,就被管道抛弃,就意味着读进程最多只能有一个,否则可能会有读错数据的情况。
3. 消息传递
进程间的数据交换以格式化的消息(massage)为单位,进程通过操作系统提供“发送消息/接收消息”两个原语进行数据交换。
有两种方式: 直接通信方式:消息直接挂到接收方的消息队队列里。 间接(信箱)通信方式:消息先发到中间体(信箱)。
进程同步
同步又叫做直接制约关系,它是为了完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作。
进程互斥
一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源。
对临界资源的访问,必须互斥的进行。互斥,又叫做间接制约关系,进程互斥指一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。
临界区是进程中访问临界资源的代码段。 进入区和退出区是负责实现互斥的代码段。 临界区又叫做“临界段”
进程互斥的软件实现方法
- 单标志法
- 双标志先检查
- 双标志后检查
- Peterson算法
进程互斥的硬件实现方法
- 中断屏蔽方法
- TestAndSet(TS指令/TSL指令)
- Swap指令(XCHG指令)
信号量机制
- 整型信号量
- 记录型信号量
信号量机制实现进程同步
信号量机制可以实现互斥、同步、对一类系统资源的申请和释放。 具体而言,互斥就是设置初值为1的互斥信号量,同步就是设置初值为0的同步信号量(实现一前一后)、对一类系统资源的申请和释放就是可以设置一个信号量、初始值即为资源的数量(本质也是一个同步问题)。若无空闲资源,则申请资源的进程需要等待别的进程释放资源后才能继续往下执行。