计算机操作系统——进程的描述与控制

进程的描述与控制

进程的定义

  • 程序:就是一个指令序列
  • 程序段、数据段、PCB(进程控制块)三部分组成了进程实体(PCB是进程存在的唯一标识)
  • 典型定义
    • 进程是程序的一次执行过程
    • 进程是一个程序及其数据的在处理机上顺序执行时所发生的活动
    • 进程是具有独立功能的程序在数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
    • 引入实体的概念后,还可定义为:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
  • 注:严格来说,进程实体和进程并不一样,进程实体是静态的,进程则是动态的,不过除非题目专门考察二者区别,否则可以认为进程实体就是进程。因此我们也可以说“进程由程序段、数据段、PCB三部分组成”

进程的组成

  • 数据段:程序运行时使用、产生的运算数据。如局部变量、全局变量、宏定义的常量就存放在数据段内
  • 程序段:程序代码即存放在此
  • PCB:操作系统通过PCB来管理进程,因此PCB中应该包含操作系统对其进行管理所需要的各种信息
    • 进程描述信息:进程标识符PID,用户标识符UID
    • 进程控制和管理信息:进程当前状态,进程优先级
    • 资源分配清单:程序段指针,数据段指针,键盘,鼠标
    • 处理机相关信息:各种寄存器值

进程的组织

  • 连接方式
    • 按照进程状态将PCB分为多个队列
    • 操作系统由指向各个队列的指针
  • 索引方式
    • 根据进程状态的不同,建立几张索引表
    • 操作系统的持有指向各个索引表的指针

进程的特征

  • 动态性:进程是程序的一次执行过程,是动态的产生、变化和消亡的(最基本特征)
  • 并发性:内存中有多个进程实体,个进程可并发执行
  • 独立性:进程是能够独立运行、独立获取资源、独立接受调度的基本单位(进程是资源分配、接受调度的基本单位)
  • 异步性:各进程按各自独立的、不可预知的速度向前推进,操作系统要提供“进程同步机制”来解决异步问题
  • 结构性:每个进程都会配置一个PCB。结构上看,进程由程序段、数据段、PCB组成
    ##进程的状态与转换

进程的状态

  • 运行态:占有CPU,并在CPU上运行
  • 就绪态:已经具备运行条件,但由于没有空闲CPU,而暂时不能运行
  • 阻塞态:因等待某一事件而暂时不能运行
  • 创建态
  • 终止态

进程状态的转换

进程状态转换

  • 就绪态->运行态:进程被调度
  • 运行态->就绪态:时间片到、或CPU被其他 高优先级的进程抢占
  • 运行态->阻塞态:等待系统资源分配,或等待某件事情发生(主动行为)
  • 阻塞态->就绪态:资源非陪到位,等待的事件发生(被动行为)

进程控制

基本概念

  • 进程控制的主要功能是对系统中所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能
    简单理解:反正进程控制就是要实现进程状态转换

如何实现进程控制

  • 用原语实现进程控制。原语的特点是执行期间不允许中断,只能一气呵成。这种不可被中断的操作

进程控制相关的原语

学习技巧:进程控制会导致进程状态的转换。无论哪个原语,要做的无非三类事情:

  1. 更新PCB中的信息
  2. 将PCB插入合适的队列
  3. 分配/回收资源
  • 进程的创建
    • 创建原语
      • 申请空白PCB
      • 为新进程分配所需资源
      • 初始化PCB
      • 将PCB插入就绪队列
  • 进程的终止
    • 撤销原语
      • 从PCB集合中找到终止进程的PCB
      • 若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
      • 终止其所有子进程
      • 将该进程拥有的所有资源归还给父进程或操作系统
      • 删除PCB
  • 进程的阻塞和唤醒(成对使用)
    • 阻塞原语
      • 找到阻塞的进程相对应的二PCB
      • 保护进程运行现场,将PCB状态信息设置为“阻塞态”,暂时停止进程运行
      • 将PCB插入相应事件的等待队列
    • 唤醒原语
      • 在事件等待队列中找到PCB
      • 将PCB从等待队列移除,设置为就绪态
      • 将PCB插入就绪队列,等待被调用
  • 进程的切换
    • 切换原语(运行态->阻塞态/就绪态;就绪态->运行态)
      • 将运行环境信息存入PCB
      • PCB移入相应队列
      • 选择另一个进程执行,并更新其PCB
      • 根据PCB恢复新进程所需的运行环境

进程通信

进程通信就是指进程之间的信息交换
进程时分配系统资源的单位(包括内存地址空间),因此各进程拥有内存地址空间相互独立
为了保证安全,一个进程不能直接访问另一个进程的地址空间

  • 共享存储
    • 基于数据结构的共享(低级通信)
    • 基于存储区的共享(高级通信)
  • 管道通信
    • “管道”只用于连接读写进程的一个共享文件夹
    • 管道只能采用半双工通信,若要实现双向通信,须设置两个管道
    • 各进程要互斥地访问管道
    • 数据以字符流的形式写入管道,管道写满时,写进程的write()系统调用被阻塞,等待进程将数据取走,管道变空时,读进程的read()系统调用被阻塞
    • 没写满,不允许读,没读空,不允许写
    • 读进程最多只能有一个
  • 消息传递
    进程间的数据交换以格式化的消息为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换
    • 直接通信方式:消息直接挂到接受进程的消息缓冲队列上
    • 间接通信方式:消息要先发到中间实体(信箱)中,因此也称“信箱通信方式”

线程

概念

  • 可以理解为“轻量级进程”
  • 线程是一个基本的CPU执行单元,也是程序执行流的最小单位
  • 引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,是的一个进程内也可以并发处理各种任务
  • 引入线程后,进程只作为除CPU之外的系统资源分配单元(如打印机,内存地址空间等都是分配给进程的)

引入线程机制后,带来的变化

  • 资源分配、调度
    • 传统进程机制中,进程是资源分配、调度的基本单位
    • 引入线程后,进程是资源分配的基本单位,线程是调度的基本单位
  • 并发性
    • 传统进程机制中,只能进程间并发
    • 引入线程后,各线程间也能并发,提升了并发度
  • 系统开销
    • 传统的进程间并发,需要切换进程的运行环境,系统开销很大
    • 线程间并发,如果是同一进程内的线程切换,则不需要切换进程环境,系统开销很小
    • 引入线程后,并发所带来的系统开销减小

线程的属性

  • 线程是处理机调度的单位
  • 多CPU计算机中,各个线程可占用不同的CPU
  • 每个线程都有一个线程ID、线程控制块(TCB)
  • 线程业余就绪,阻塞,运行三种基本状态
  • 线程几乎不拥有系统资源
  • 统一进程的不同线程间共享进程资源
  • 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预
  • 同一进程的线程切换,不会引起进程切换
  • 不同进程的线程切换,会引起进程的切换
  • 切换同进程内的线程,系统开销很小
  • 切换进程,系统开销很大

线程的实现方式

  • 用户级线程:由应用程序通过线程库实现
  • 内核级线程:管理工作由操作系统内核完成
  • 重点:操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位

多线程模型

  • 多对一:多个用户及线程映射到一个内核级线程
    • 优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理系统开销小,效率高
    • 缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可再多和处理机上并行运行
  • 一对一:一个用户及线程映射到一个内核级线程
    • 优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并发执行
    • 缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。
  • 多对多:n用户线程映射到m各内核级线程(n>=m)。每个用户进程对应m各内核级线程
    • 克服了多对一模型并发度不高的缺点,又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Strawberry.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值