操作系统--进程
简介
进程是程序一次执行过程
进程组成
进程由程序段、数据段、程序控制块(PCB)组成
-
PCB (Process Control Block)被称作进程控制块,也是操作系统对进程进行控制与管理的唯一方式。PCB存放了有关进程的相关信息
-
操作系统是通过PCB来管理进程,因此PCB中应该包含操作系统对其进行管理所需的各种信息,如进程描述信息、进程控制和管理信息、资源分配清单和处理机相关信息
-
-
程序段:程序代码存放的位置
-
数据段:程序运行时使用、产生的运算数据。如全局变量、局部变量、宏定义的常量就存放在数据段内
进程创建
操作系统运行程序必须做的第一件事是将代码和所有静态数据(例如初始化变量)加载(load)到内存中,加载到进程的地址空间中。程序最初以某种可执行格式驻留在磁盘上(disk,或者在某些现代系统中,在基于闪存的 SSD 上)。因此,将程序和静态数据加载到内存中的过程,需要操作系统从磁盘读取这些字节,并将它们放在内存中的某处。将代码和静态数据加载到内存后,操作系统在运行此进程之前还需要执行其他一些操作。必须为程序的运行时栈(run-time stack 或 stack)分配一些内存。操作系统也可能为程序的堆(heap)分配一些内存。 操作系统还将执行一些其他初始化任务,特别是与输入/输出(I/O)相关的任务。通过将代码和静态数据加载到内存中,通过创建和初始化栈以及执行与 I/O 设置相关的其他工作,OS 现在(终于)为程序执行搭好了舞台。然后它有最后一项任务:启动程序,OS 将 CPU 的控制权转移到新创建的进程中,从而程序开始执行
进程特征
-
动态性:进程是程序的一次执行过程,是动态地产生、变化、消亡的。动态性是进程的最基本特征
-
并发性:内存中有多个进程实体,各进程可并发执行
-
独立性:进程是能独立运行、独立获取资源、独立接受调度的基本单位
-
异步性:各进程按各自独立的、不可预知的速度向前推进。操作系统要提供进程同步机制来解决异步问题
-
结构性:每个进程都会配置一个PCB。结构上看,进程由程序段、数据段、PCB组成
进程状态
-
创建态:进程正在被创建,操作系统为进程分配资源、初始化PCB
-
就绪态:进程以获取到运行所需要的资源,等待分配CPU即可运行
-
运行态:进程被系统调用,进程由就绪状态转为运行态,此时占有CPU,并在CPU上运行
-
阻塞态:进程由于等待某一事件(如I/O请求)而暂时无法运行,在满足条件后进入就绪态等待系统调用
-
终止态:进程结束,或出现错误,或被系统终止,此时进程正在从系统中撤销,操作系统回收进程所拥有的的资源、撤销PCB
进程控制
操作系统会把处于各个状态的进程PCB挂到相应的队列当中,用这种方式来管理,组织进程的PCB
进程通信
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。为了保证安全,一个进程不能直接访问另一个进程的地址空间。为了保证进程间的安全通信,操作系统提供了一些方法
共享空间
操作系统提供了一个共享空间可以被进程1,2互斥的访问
基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是低级通信方式
基于存储区的共享:在内存中划出一块共享存储区,数据的形式、存放位置都由进程控制。这种共享方式速度更快,是高级通信方式
管道通信
指用于连接读写进程的一个共享文件,是在内存中开辟了一个固定大小的缓冲区
特点:
管道只能采用半双工通信,在一段时间只能单向传输,如果要实现双向传输,就需要设置两个管道
各个进程需要互斥的访问管道
数据以字符流的形式写入管道,当管道写满时,写进程将被堵塞,等待数据被取走。当数据全部被取出后,管道变空,此时读进程的系统调用将被堵塞
如果没写满,就不允许读,没有读空,就不允许写
数据一旦读出,就从管道中被抛弃,这就意味着读进程只能有一个,否则可能会发生读错数据的情况
消息传递
进程通过操作系统提供的”发送消息、接收消息“两个源语进行数据交换
格式化消息的结构
分类:
直接通信方式:消息直接挂到接收进程的消息缓冲队列中,即进程1,给进程2发信息,就把信息挂到进程2的信息缓存队列上
间接通信方式:消息要先发送到中间实体(如信箱)中,等待另一个进程取出。即进程1把消息放到一个中间实体上,等待需要它的进程2取走