第二章 Part1 进程与线程

第二章 Part1 进程与线程

第一节 进程相关

进程的定义

程序:一个指令序列

引入多道程序之后,内存中有多道程序,OS需要找到内存中程序数据的位置、清楚分配了那些系统资源

  • 方便并发,引入进程进程实体的概念

  • 进程:

  • 创建进程,就是创建PCB(进程控制块,一种数据结构,用来描述进程信息)

  • PCB是进程存在的唯一标识

  • 进程是进程实体的运行过程

  • 进程是OS进行资源分配和资源调度的单位

  • PCB:进程控制块

进程描述信息

进程标识符PID:进程被创建时分配

用户标识符UID:标志进程所属用户

进程控制和管理信息

进程当前状态

进程优先级

资源分配清单:进程被分配到了那些进程资源

程序段指针

数据段指针

键盘

鼠标

处理机相关信息

各种寄存器的值:用于进程的切换

  • 进程实体:
  • 进程实体是静态的、是数据的集合;进程则是指运行过程,是动态的

一般可以认为进程实体 = 进程

进程的组成

即进程实体的组成

  • PCB
  • 程序段:代码
  • 数据段:程序执行产生的数据

进程的组织方式:组织多个PCB的方式

  • 链接方式

按照进程状态将PCB分为多个队列

操作系统持有各队列指针

  • 索引方式

进程状态分类建立索引表

操作系统持有各索引表

进程的特征:相较于程序

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

并发性:和并行的区别

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

  • 异步性:各进程具有不确定性。需要操作系统进程进程同步

结构性

第二节 进程的状态与转换

进程的状态

三种基本状态

  • 运行态:占有CPU,并且在CPU上运行

  • 就绪态:已经具备运行条件但是由于没有空闲CPU,所以暂时不能运行

  • 阻塞态:因等待某一件事情而暂时不能运行(如等待磁盘的读取)

创建状态:初始化PCB,分配UID等

终止状态:运行结束或者程序错误,OS回收分配给进程的资源,撤销PCB

进程状态的转换

就绪态 -> 运行态

运行态 -> 就绪态

运行态 -> 阻塞态:进程自身主动行为

阻塞态 -> 就绪态:进程被动行为

不能从阻塞态直接转化为运行态,也不能由就绪态直接转化为阻塞态

第三节 进程控制

基本概念

什么是进程控制:实现进程状态的转换

如何实现进程控制:通过原语

  • 原语的特点是执行期间不允许中断,此类操作又被成为原子操作
  • 原语不中断的特性由开中断关中断两个指令实现,属于核心态下的特权指令

保存\回复运行环境

修改PCB内容

原语的三类任务

  • 更新PCB信息(如修改状态标志、将运行环境保存到PCB、从PCB恢复运行环境)

    1. 所有进程控制原语一定会修改进程的状态标志
    2. 剥夺当前进程的CPU使用权必然需要保存其运行环境
    3. 进程开始运行前必须回复运行环境
  • 将PCB插入合适的队列

  • 分配和回收资源

进程控制相关的原语

进程的创建

创建原语:无 -> 创建态 -> 就绪态

  1. 申请空白PCB

  2. 为新进程分配资源

  3. 初始化PCB

  4. 将PCB插入就绪队列

引起创建的事件

用户登录:用户登录成功后为其创建一个用户进程

作业调度:多道批处理系统中有新作业加入时为其创建新进程

提供服务:操作系统创建新进程为用户的请求服务

应用请求:用户进程请求创建子进程

进程的终止

撤销原语

  1. PCB集合中找到终止进程的PCB
  2. 若进程正在允许,立即剥夺CPU,并将CPU重新分配
  3. 终止该进程所有子进程
  4. 将资源还给父进程或OS
  5. 删除PCB

引起终止的操作

正常结束

异常结束

外接干预

进程的阻塞

阻塞原语(必须和唤醒原语同时出现)

  1. 找到要阻塞的PCB
  2. 保护进程运行现场,将PCB设定为阻塞态,暂时停止程序运行
  3. 将PCB插入相应事件的等待序列

引起阻塞的操作

需要等待系统分配资源

需要等待其他线程完成工作

进程的唤醒

唤醒原语

  1. 等待事件队列中找到PCB
  2. 将PCB从等待队列移除,程序由阻塞态变为就绪态
  3. 将PCB插入就绪队列,等待被调度

引起唤醒的操作

被阻塞的条件已经满足

进程的切换

切换原语

  1. 运行换机存入PCB
  2. PCB移入相应队列
  3. 选择另一个程序执行,并更新对应PCB
  4. 根据PCB恢复该进程的运行环境

引起进程切换的操作

进程时间片到

高优先级线程

阻塞

终止

第三节 进程通信

进程间的信息交换

各进程间的内存地址相互独立(保证系统安全)

  • 共享存储:互斥的访问共享空间

基于数据结构的共享:如定义一个数组(慢,低级通信方式)

基于存储区的共享:由进程相互决定(快,高级通信方式)

  • 消息传递

以格式化消息Message为单位,通过”发送消息“和”接受消息“两个原语进行数据交换

消息头 + 消息体(类计网的报文)

直接通信:消息直接挂在接收进程的消息缓冲队列上

间接通信:消息发送到中间实体(信箱通信方式)

  • 管道通信

内存中用于连续写的一个共享文件

又名pipe文件

本质是内存中开辟的一个大小固定的缓冲区

  • 管道只能实现半双工通信:同一时间段单向传输,各进程互斥的访问管道
  • (同时)双向通信需要设置两个管道
  • 管道写满时,写进程write()将会被阻塞,不能再写;数据被取走、管道变空,读进程read()被阻塞,不能再读。
  • 先写满再读,读完后再写
  • 读进程只有一个

第四节 线程、多线程模型

为什么有线程

传统上,进程是程序执行的最小单位

将一个进程分为多个线程,线程成为代码执行的最小单位

  • 线程是CPU的基本执行单元,是程序执行的最小单位

引入线程机制后的变化

  • 并发性:(不仅仅进程可以并发),线程也可以并发,提升系统并发度

  • 资源分配:进程只作为CPU之外的系统资源的分配单元,线程是CPU调度的基本单位

  • 系统开销:同进程不同线程(功能)间切换时,不需要切换进程,减小系统开销

线程的属性

  • 线程是处理器调度单位,进程是资源分配单位

处理器调度单位

多核心时,不同线程可以占用不同CPU

每个线程有自己的线程ID,线程控制块TCB(thread control block)

线程也有就绪、阻塞、运行三种状态

线程共享系统资源(由于共享内存空间,进程通信无需系统干预)

线程的实现

用户级线程(用户视角才”关注“的线程)

  • 用户级线程管理由应用程序负责

  • 用户级线程切换在用户态下可完成

内核级线程(OS视角关注的线程)

  • 用户级线程管理由OS负责
  • 内核级线程切换在核心态下才能完成
  • 内核级线程才是处理器分配的单位

多线程模型

  • 多对一模型:多个用户级线程映射到一个内核级线程

    优点:用户级线程切换不需要OS干预

    缺点:只有一个内核级线程,故只能运行在一个核心上,并发性不佳

  • 一对一模型:一个用户级线程映射到一个内核级线程

    优点:并发性佳,可以利用多核心

    缺点:用户级线程切换需要OS干预,效率低

  • 多对多模型:将n个用户级线程映射到m个内核级线程(n>=m)

    高并发,低切换开销

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值