操作系统--进程

简介

进程是程序一次执行过程


进程组成

进程由程序段、数据段、程序控制块(PCB)组成

  • PCB (Process Control Block)被称作进程控制块,也是操作系统对进程进行控制与管理的唯一方式。PCB存放了有关进程的相关信息

    • 操作系统是通过PCB来管理进程,因此PCB中应该包含操作系统对其进行管理所需的各种信息,如进程描述信息、进程控制和管理信息、资源分配清单和处理机相关信息

  • 程序段:程序代码存放的位置

  • 数据段:程序运行时使用、产生的运算数据。如全局变量、局部变量、宏定义的常量就存放在数据段内

image-20220730170656295


进程创建

操作系统运行程序必须做的第一件事是将代码和所有静态数据(例如初始化变量)加载(load)到内存中,加载到进程的地址空间中。程序最初以某种可执行格式驻留在磁盘上(disk,或者在某些现代系统中,在基于闪存的 SSD 上)。因此,将程序和静态数据加载到内存中的过程,需要操作系统从磁盘读取这些字节,并将它们放在内存中的某处。将代码和静态数据加载到内存后,操作系统在运行此进程之前还需要执行其他一些操作。必须为程序的运行时栈(run-time stack 或 stack)分配一些内存。操作系统也可能为程序的堆(heap)分配一些内存。 操作系统还将执行一些其他初始化任务,特别是与输入/输出(I/O)相关的任务。通过将代码和静态数据加载到内存中,通过创建和初始化栈以及执行与 I/O 设置相关的其他工作,OS 现在(终于)为程序执行搭好了舞台。然后它有最后一项任务:启动程序,OS 将 CPU 的控制权转移到新创建的进程中,从而程序开始执行


进程特征

  • 动态性:进程是程序的一次执行过程,是动态地产生、变化、消亡的。动态性是进程的最基本特征

  • 并发性:内存中有多个进程实体,各进程可并发执行

  • 独立性:进程是能独立运行、独立获取资源、独立接受调度的基本单位

  • 异步性:各进程按各自独立的、不可预知的速度向前推进。操作系统要提供进程同步机制来解决异步问题

  • 结构性:每个进程都会配置一个PCB。结构上看,进程由程序段、数据段、PCB组成


进程状态

image-20220730164434793

  • 创建态:进程正在被创建,操作系统为进程分配资源、初始化PCB

  • 就绪态:进程以获取到运行所需要的资源,等待分配CPU即可运行

  • 运行态:进程被系统调用,进程由就绪状态转为运行态,此时占有CPU,并在CPU上运行

  • 阻塞态:进程由于等待某一事件(如I/O请求)而暂时无法运行,在满足条件后进入就绪态等待系统调用

  • 终止态:进程结束,或出现错误,或被系统终止,此时进程正在从系统中撤销,操作系统回收进程所拥有的的资源、撤销PCB


进程控制

操作系统会把处于各个状态的进程PCB挂到相应的队列当中,用这种方式来管理,组织进程的PCB

image-20220730170926605


进程通信

进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。为了保证安全,一个进程不能直接访问另一个进程的地址空间。为了保证进程间的安全通信,操作系统提供了一些方法

共享空间

image-20220730172154670

操作系统提供了一个共享空间可以被进程1,2互斥的访问

基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是低级通信方式

基于存储区的共享:在内存中划出一块共享存储区,数据的形式、存放位置都由进程控制。这种共享方式速度更快,是高级通信方式

管道通信

image-20220730172523205

指用于连接读写进程的一个共享文件,是在内存中开辟了一个固定大小的缓冲区

特点:

  1. 管道只能采用半双工通信,在一段时间只能单向传输,如果要实现双向传输,就需要设置两个管道

  2. 各个进程需要互斥的访问管道

  3. 数据以字符流的形式写入管道,当管道写满时,写进程将被堵塞,等待数据被取走。当数据全部被取出后,管道变空,此时读进程的系统调用将被堵塞

  4. 如果没写满,就不允许读,没有读空,就不允许写

  5. 数据一旦读出,就从管道中被抛弃,这就意味着读进程只能有一个,否则可能会发生读错数据的情况

消息传递

进程中的数据交换以“格式化消息“为单位,进程通过操作系统提供的”发送消息、接收消息“两个源语进行数据交换

格式化消息的结构

image-20220730173014511

分类:

直接通信方式:消息直接挂到接收进程的消息缓冲队列中,即进程1,给进程2发信息,就把信息挂到进程2的信息缓存队列上

间接通信方式:消息要先发送到中间实体(如信箱)中,等待另一个进程取出。即进程1把消息放到一个中间实体上,等待需要它的进程2取走

posted @ 2022-07-30 21:01  伊文小哥  阅读(305)  评论(0编辑  收藏  举报