操作系统复习(一):进程

前言:此篇博文不是科普性的知识解读文章,不适合新手入门学习。作用在于自己梳理知识脉络,方便回忆和补充知识点,后期会不断更新补充。

目录

1 什么是进程?线程与进程的概念

1.1 解释进程

1.2 进程的结构

1.3 什么是线程?

1.3.1 为什么引入线程?

1.3.2 线程的属性

1.3.3 进程与线程的区别

1.3.4 线程的实现方式

2. 进程是怎么运行的?

2.1 进程的状态

2.2 进程控制

2.3 进程调度

2.3.1 处理机调度:调度的层次

2.3.2 调度算法指标

2.3.3 调度算法:(这里需要做题加强理解,而不是死记硬背)

3. 进程之间如何协作?

3.1 进程通信:进程之间的信息交换(共享存储、消息传递、管道通信)

3.2 进程同步:进程间相互制约的关系(互斥、同步),使得按照预期的方式执行(软件、硬件实现方式)

3.2.1 实现临界区互斥:软件实现方法(皮特森算法)

3.2.2 实现临界区互斥:硬件实现方法(关中断/开中断、Test-And-Set、Swap指令)

3.2.3 信号量机制:整形信号量

3.2.4 信号量机制:记录型信号量

3.2.5 管程(Monitor,监视器):

4 如何处理死锁?

4.1 死锁的概念

4.2 死锁产生的原因:资源竞争、进程推进顺序非法

4.3 死锁产生的必要条件:互斥、不剥夺不可抢占、请求并保持、循环等待

4.4 死锁的预防:破坏以上4个必要条件

4.5 死锁避免:系统安全状态、银行家算法(做点题去理解,别死记硬背)

4.6 死锁的检测与解除


 

1 什么是进程?线程与进程的概念

1.1 解释进程

  • 进程是程序的一次执行
  • 进程是一个程序及其数据在处理机上顺序执行所发生的活动
  • 进程是程序在一个数据集合上运行的过程
  • 进程是系统进行资源分配和调度的一个独立单位

1.2 进程的结构

  • 控制块PCB
  • 数据段
  • 程序段

1.3 什么是线程?

  • Thread,进程的轻型实体,也叫“轻量级进程”,是一系列活动按事先设定好的顺序依次执行的过程,是一系列指令的集合
  • 是一条执行路径,不能单独存在,必须包含在进程中(故进程与线程是包含关系,举例:360杀毒软件是一个进程,但是它可以同时杀毒、清理垃圾、查杀木马,这些都是线程
  • 线程是OS中运算调度的最小单位(对比:进程Process是OS资源分配和调度的单位)

1.3.1 为什么引入线程?

  • 提高OS的并发性

1.3.2 线程的属性

  • 轻型实体
  • 独立调度和分派的基本单位
  • 可并发执行
  • 共享进程资源

1.3.3 进程与线程的区别

  • 调度:
    • 线程调度开销远低于进程
    • 同一进程内的线程之间的切换不会引起进程切换
  • 拥有资源:
    • 线程不拥有资源,进程才拥有。
    • 但线程可访问隶属进程的资源,要知道若线程也拥有系统资源,则调度开销会很大
  • 并发性:进程能并发,线程也能并发,提高OS利用率和吞吐量
  • 系统开销:
    • 线程只需保存少量寄存器等必需资源
  • 地址空间和其他资源
    • 独立的地址空间和资源
  • 通信

1.3.4 线程的实现方式

  • 用户级线程(ULT)
  • 内核级线程(KLT)

几句话总结区别:

①操作环境不同,意味着是否可以跨平台、切换模式开销等

②能否运用多处理机的优势,用户态不行,内核态可以

2. 进程是怎么运行的?

2.1 进程的状态

  • 就绪
  • 执行
  • 阻塞:block
  • 创建:create
  • 终止:destory

2.2 进程控制

即OS对进程实现有效的管理,包括创建新进程、撤销已有进程、挂起、阻塞和唤醒、进程切换等。OS通过原语(Primitive)操作实现进程控制。

  • 原语:由若干指令组成,完成特定的功能,是一种原子操作
  • 原语特点:
    • 原子操作,过程不会被中断
    • 在管态/系统态/内核态执行,常驻内存
    • 是内核三大支撑功能(中断处理、时钟管理、原语操作)之一

挂起和激活:为了系统和用户观察和分析进程

  • 挂起:suspend,放外存,不调度
  • 激活:active,等待调度

2.3 进程调度

根据一定算法和原则将处理及资源进行重新分配的过程

  • 前提:作业/进程数远远大于处理机数
  • 目的:提高资源利用率,减少处理机器空闲时间
  • 调度程序:满足特定用户需求(快速响应),考虑整体系统效率(系统平均周转时间),算法本身开销

2.3.1 处理机调度:调度的层次

  • 高级调度/作业调度
    • 把后备作业调入内存
  • 中级调度/内存调度
    • 把进程调至外存,合适时再调入内存
    • 在内外存兑换区进行进程对换
  • 低级调度/进程调度
    • 从就绪队列选取进程分配给处理机
    • 最基本的调度,频率非常高(一个时间片)

 2.3.2 调度算法指标

  • CPU利用率
  • 系统吞吐量
  • 周转时间:作业完成时间-提交时间
    • 带权周转时间:周转时间/实际运行时间
  • 等待时间:作业等待处理机调度的时间
    • 要关注平均值,考虑所有进程
  • 响应时间:提交请求到首次响应间隔

2.3.3 调度算法:(这里需要做题加强理解,而不是死记硬背)

多级反馈队列调度:

①设置多个按优先级排序的就绪队列

②优先级从高到低,时间片从小到大

③新进程采用队列降级法:进入第一级队列,按FCFS分时间片,若没有执行完,移动到第二级、第三级

④前面队列不为空,不执行后续队列进程

 

3. 进程之间如何协作?

3.1 进程通信:进程之间的信息交换(共享存储、消息传递、管道通信)

各进程内存空间独立,不能随意互相访问

消息传递与共享存储区别在于原语:

管道: 用于连接读/写进程的共享文件,pipe文件,本质是内存中固定大小的缓冲区

半双工通信:同一时段只能单向通信,双工通信需要两个管道,以先进先出方式组织数据传输,通过系统调用read()/write()函数进行读写操作

3.2 进程同步:进程间相互制约的关系(互斥、同步),使得按照预期的方式执行(软件、硬件实现方式)

互斥的访问临界资源:核心——锁🔒

  • 进入区:尝试进入临界区,成功则加锁
  • 临界区:访问共享资源
  • 退出区:解锁,唤醒其他阻塞进程
  • 剩余区:其他代码

3.2.1 实现临界区互斥:软件实现方法(皮特森算法)

①单标志法:违背”空闲让进“,而且只能存在于两个进程交替执行的情况中

②双标志法先检查:违背”忙则等待”,

 ③双标志法后检查:违背“空闲让进”、“有限等待”

④ 皮特森算法:违背“让全等待”、会发生“忙等”

3.2.2 实现临界区互斥:硬件实现方法(关中断/开中断、Test-And-Set、Swap指令)

3.2.3 信号量机制:整形信号量

P(wait原语,进程等待) & V(signal原语,唤醒等待进程)操作

整形信号量: 

3.2.4 信号量机制:记录型信号量

3.2.5 管程(Monitor,监视器):

“管理进程”,即用于实现进程同步的工具。是由代表共享资源的数据结构一组过程(进行PV操作的函数)组成的管理程序(封装)

4 如何处理死锁?

4.1 死锁的概念

多个进程由于竞争资源而造成的阻塞现象,若无外力作用,这些进程将无法继续推进。

4.2 死锁产生的原因:资源竞争、进程推进顺序非法

4.3 死锁产生的必要条件:互斥、不剥夺不可抢占、请求并保持、循环等待

请求并保持:保持当前资源是请求另一个资源(一个进程需要多个资源)

4.4 死锁的预防:破坏以上4个必要条件

  • 将只能互斥访问的资源改为同时共享访问
  • 请求新资源但得不到满足,必须释放已经保持的资源,但会增大开销,造成之前工作的失效
  • 不再提出其他资源请求
  • 对所有资源排序,按序号请求资源

4.5 死锁避免:系统安全状态、银行家算法(做点题去理解,别死记硬背)

4.6 死锁的检测与解除

  • 死锁检测:
    • 需要一种数据结构,保存相关资源的请求和分配信息
    • 一种算法,利用这些信息检测是否形成死锁

资源分配图:

死锁定理:当且仅当此状态下的资源分配图是不可完全简化的,其过程类似于“拓扑排序”算法。(注意数据结构考察)

  • 死锁解除:资源剥夺、撤销进程、进程回退
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值