进程的概念、组成、特征
概念
程序:是静态的,就是存放在磁盘里的可执行文件,如:QQ.exe。
线程:是动态的,是程序的一次执行过程,如:可同时启动多次QQ程序。
组成
进程由PCB、程序段、数据段组成。PCB是给操作系统用的,程序段、数据段是给进程自己用的。
PCB
PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收其PCB。PCB由进程描述信息、进程控制和管理信息、资源分配清单、处理机相关信息组成。
进程描述信息包括进程标识符PID、用户标识符UID。
进程控制和管理信息包括CPU、磁盘、网络流量使用情况统计...、进程当前状态:就绪态/阻塞态/运行态...
资源分配清单包括正在使用哪些文件、正在使用哪些内存区域、正在使用哪些I/O设备。
处理机相关信息包括如PSW、PC等等各种寄存器的值(用于实现进程切换)
程序段
程序段顾名思义就是程序的代码(指令序列)
数据段
数据段是运行过程中产生的各种数据(如:程序中定义的变量)
小知识-程序是如何运行的?不废话直接上图
进程是进程实体的运行过程,是系统进行资源分配和调度(指操作系统决定让这个进程在CPU上运行)的一个独立单位。
进程的特征
动态性(进程最基本的特征)——进程是程序的一次执行过程,是动态地产生、变化和消亡的。
并发性——内存中有多个进程实体,各进程可并发执行
独立性——进程是能独立运行、独立获得资源、独立接收调度的基本单位
异步性——各进程按各自独立的、不可预知的速度向前推进,操作系统要提供"进程同步机制"来解决异步问题
结构性——每个进程都会配置一个PCB。从结构上看,进程由程序段、数据段、PCB组成。
进程的状态与转化
先来了解一下进程的几个状态
创建态——进程正在被创建,它的状态是"创建态",在这个阶段操作系统会为进程分配资源、初始化PCB。
就绪态——当进程被创建完成后,便进入”就绪态“处于就绪态的进程已经具备运行条件,但由于没有空闲CPU,就暂时不能运行。
运行态——如果一个进程此时在CPU上运行,那么这个进程处于"运行态"。CPU会执行该进程对应的程序(执行指令序列)
阻塞态——当进程运行的过程中,可能会请求等待某个事件的发生(如等待某种资源的分配,获证等待其他进程的响应)。在这个事情发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU,并让它进入"阻塞态',这时CPU空闲下来了,又去选择了另一个"就绪态"的进程上CPU运行。
终止态——一个进程可以执行exit系统调用,请求操作系统终止该进程。此时该进程会进入"终止态",操作系统会让该进程下CPU,并回收内存空间等资源,最后还要回收该进程的PCB。当终止进程的工作完成之后,这个进程就彻底消失了。
运行态、就绪态、阻塞态为进程的三个基本状态。
进程状态的转换
直接上图一清二楚
进程PCB中,会有一个变量state来表示进程的当前状态。如:1表示创建态、2表示就绪态....
进程的组织
链接方式
按照进程状态将PCB分为多个队列,操作系统持有指向各个队列的指针。
索引方式
根据进程状态的不同,建立几张索引表,操作系统持有指向各个索引表的指针。
进程通信
进程间的通信(IPC)是指两个进程之间产生数据交互。
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。
为了保证安全,一个进程不同直接访问另一个进程的地址空间,所以有了操作系统支持了进程通信
共享存储
共享存储是在内存中开辟了一个共享内存区域,并映射到进程的虚拟地址空间。各个进程对共享空间的访问是互斥的。
注:通过"增加页表项/段表项'即可将同一片共享内存区映射到各个进程的地址空间中。
基于数据结构的共享:比如共享空间里只能放一个长度为10的数组,这种共享方式速度慢、限制多,是一种低级通信方式。
基于存储区的共享:操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通信进程控制,而不是操作系统,这种共享方式速度很快,是一种高级通信方式。
消息传递
进程间的数据交换以格式化的消息为单位。进程通过操作系统提供的"发送消息/接收消息"两个原语进行数据交换。
直接通信方式
在这种直接通信方式中发送进程要指明接收进程的ID。
间接通信方式
间接通信方式,以"信箱'作为中间实体进行消息传递。
管道通信