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