进程/线程模型

进程基本概念
进程状态及状态转换
进程控制
线程的引入
线程的实现

1.进程基本概念

  • 进程的定义:进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配调度的独立单位(又称任务)

  • 进程控制块(PCB:process control block)

    • 也称为进程描述符、进程属性
    • OS用于管理控制进程的数据结构
    • 描述进程的动态变化,系统感应进程存在的唯一标志,进程与PCB一一对应
    • 进程表:所有进程的PCB集合

    进程表大小固定:最多允许多少个进程并发执行

    • 包括进程描述信息,进程控制信息,所拥有的资源和使用情况,CPU现场信息
  • 进程与程序的区别

    • 进程能准确的刻画并发
    • 程序是静态的,进程是动态
    • 进程有生命周期,程序是相对长久的
    • 一个程序可以对应多个进程
    • 进程具有创建其他进程的功能
  • 进程的地址空间

    • OS给每个进程都分配了一个地址空间
    • 是相对(虚拟/逻辑)的地址,所以两个进程的地址可能相同,代表的是相对位置而不是同一物理空间
  • 进程映像(IMAGE)

    • 对进程执行活动全过程的静态描述(快照)
    • 用户相关:进程地址空间
    • 寄存器相关:程序计数器,状态寄存器,通用寄存器,栈指针,指令寄存器
    • 内核相关:PCB及资源数据结构(静态部分),内核栈(动态部分)
  • 上下文切换

    • CPU硬件状态从一个进程换到另一个进程的过程
    • 进程运行时,硬件状态保存在CPU的寄存器中
    • 不运行时,保存在PCB;要运行时,将PCB的相关值送到对应寄存器

2.进程状态和状态转换

  • 三种基本状态

    • 运行态:占有CPU,并在CPU上运行
    • 就绪态:具备运行条件,但是没有空闲CPU而暂时不能运行
    • 等待态(阻塞态):因等待某一事件而不能运行(如等待读盘)

    就绪->运行:调度程序选择新的进程
    运行->就绪:用完时间片;高优先级程序抢占正在运行的程序
    运行->等待:进程等待某个事件
    等待->就绪:等待的事件发生了
    等待->运行,就绪->等待

  • 其他状态:

    • 创建:完成创建但是==尚未同意执行 ==
    • 终止:执行完成,数据统计,资源回收
    • 挂起:用于调节负载,不占用内存空间,进程映像交换到磁盘上,分为就绪挂起和阻塞挂起
  • 进程队列

    • OS为每一类进程创建一个或多个队列
    • 队列元素为PCB
    • 进程状态的改变:==PCB从一个队列进入另一个队列 ==

3.进程控制

进程状态转换有特定的原语完成
原语:完成特定功能的一段程序,不可分割,不可中断,即原语的执行必须是连续的

  • 创建

    • 给进程分配唯一的标识进程控制块地址空间
    • 初始化进程控制块
    • 设置相应的队列指针
  • 撤销

    • 结束进程
    • 收回进程占有的资源
    • 撤销PCB
  • 阻塞:进程自己执行阻塞原语,使自己的运行状态变为阻塞态

  • UNIX进程控制操作

    • fork():复制调用进程来创建新的进程

    分配给子进程唯一标识pid,状态设置为就绪,插入就绪队列,对子进程返回标识符0,对父进程返回pid

    • exec():用一段新的程序代码覆盖原来的地址空间

    两者都是进程的创建,但是对于fork,子进程如果要完成和父进程不一样的工作,那么实际上不需要复制全部内容,这时候选择用exec覆盖掉不需要的部分

    • wait():进入等待态
    • exit():终止进程的运行

4.线程的引入

  • 概念:进程中的一个运行实体,是CPU的调度单位,也称为轻量级进程
  • 理由:应用的需要,开销的考虑,性能的考虑
  • 应用的需要
    • 典型的应用:web服务器
    • 构造服务器的三种方法
模型特性
多线程有并发、阻塞系统调用
单线程无并发、阻塞系统调用
有限状态机有并发、非阻塞系统调用、中断
  • 开销的考虑:进程的操作时间/空间开销大,限制了并发度的提高
  • 性能的考虑:多个线程,负责不同的功能
  • 线程的属性
    • 标识符ID
    • 有状态及状态转换
    • 不运行时需要保存上下文环境
    • 有栈和栈指针
    • 共享所在进程的地址空间和其他资源
    • 可以创建、撤销另一个线程,==程序开始是以一个单线程进程方式运行的 ==

5.线程机制的实现

  • 用户级线程
    • 在用户空间建立线程库
    • ==内核管理的还是进程,不知道线程的存在 ==
    • 线程切换不需要内核态特权
    • 例子:UNIX

优点:线程切换快,可以运行在任何OS,只需要实现线程库
缺点:内核将处理器分配给进程,同一进程的两个线程不能同时运行在两个处理器;大多数系统调用是阻塞的,由于内核阻塞进程,因此进程中的线程也被阻塞

  • 核心级线程

    • 内核维护进程和线程的上下文
    • 线程的切换需要内核支持
    • ==以线程为基础进行调度 ==
    • 例子:Windows
  • 混合模型

    • 线程的创建在用户空间
    • 线程的调度在核心态完成
    • 例子:Solaris
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值