·作业管理之进程调度

进程的调度

  • 进程调度概述
  • 进程调度算法

多道程序设计

进程调度是指计算机通过决策决定那个就绪进程可以获得CPU使用权

多道程序设计

  • 保留旧进程的运行信息,请出旧进程(收拾包袱)
  • 选择新进程,准备运行环境并分配CPU(新进驻)

进程的调度

  • 就绪队列的排队机制

  • 选择运行进程的委派机制

  • 新老进程的上下文切换机制

操作系统之基础篇(二)_调度算法操作系统之基础篇(二)_物理内存_02操作系统之基础篇(二)_调度算法_03操作系统之基础篇(二)_调度算法_04

进程的调度

  • 非抢占式的调度
  • 抢占式的调度
非抢占式的调度

操作系统之基础篇(二)_物理内存_05

抢占式的调度

操作系统之基础篇(二)_死锁_06操作系统之基础篇(二)_死锁_07

进程调度算法

  • 先来先服务调度算法

  • 短进程优先调度算法

  • 高优先权优先调度算法

  • 时间片轮转调度算法

先来先服务调度算法

操作系统之基础篇(二)_存储管理_08

短进程优先调度算法

  • 调度程序优先选择就绪队列中估计运行时间最短的进程
  • 短进程优先调度算法不利于长作业进程的执行

高优先权优先调度算法

  • 进程附带优先权,调度程序优先选择权重高的进程
  • 高优先权优先调度算法使得紧迫的任务可以优先处理

时间片轮转调度算法

  • 按先来先服务的原则排列就绪进程

  • 每次从队列头部取出待执行进程,分配一个时间片执行

  • 是相对公平的调度算法,但不能保证及时响应用户。

作业管理之死锁

死锁是指两个或两个以上的进程在执行进程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。操作系统之基础篇(二)_存储管理_09

  • 死锁的产生
  • 死锁的处理

死锁的产生

  • 竞争资源
  • 进程调度顺序不当

竞争资源

  • 共享资源数量不满足各个进程需求
  • 各个进程之间发生资源进程导致死锁

操作系统之基础篇(二)_死锁_10

进程调度顺序不当

操作系统之基础篇(二)_存储管理_11

死锁的必要条件

  • 互斥条件

  • 请求保持条件

  • 不可剥夺条件

  • 环路等待条件

互斥条件
  • 进程对资源的使用是排他性的使用
  • 某资源智能由一个进程使用,其他进程需要使用只能等待
请求保持条件
  • 进程至少保持一个资源,又提出新的资源请求

  • 新资源被占用,请求被阻塞

  • 被阻塞的进程不释放自己保持的资源。

不可剥夺条件
  • 进程获得的资源在未完成使用前不能被剥夺
  • 获得的资源只能由进程本身释放
环路等待条件

操作系统之基础篇(二)_调度算法_12

死锁的处理

  • 预防死锁的方法
  • 银行家算法

操作系统之基础篇(二)_存储管理_13

预防死锁的方法

摈弃请求保持条件
  • 系统规定进程运行之前,一次性申请所有需要的资源
  • 进程在运行期间不会提出资源请求,从而摒弃请求保持条件。
摒弃不可剥夺条件
  • 当一个进程请求新的资源得不到满足时,必须释放占有的资源
  • 进程运行时占有的资源可以被释放,意味着可以被剥夺
摒弃环路等待条件
  • 可用资源线性排序,申请必须按照需要递增申请
  • 线性申请不再形成环路,从而摒弃了环路等待条件

操作系统之基础篇(二)_死锁_14

银行家算法

  • 是一个可操作的著名的避免死锁的算法
  • 以银行借贷系统分配策略为基础的算法

银行家算法

  • 客户申请的贷款是有限的,每次申请需声明最大资金量

  • 银行家在能够满足贷款时,都应该给用户贷款

  • 客户 在使用贷款后,能够及时归还贷款

操作系统之基础篇(二)_调度算法_15

操作系统之基础篇(二)_物理内存_16

存储管理之内存分配与回收

早期计算机编程并不需要过多的存储管理

随着计算机和程序越来越复杂,存储管理成为必要

  • 确保计算机有足够的内存处理数据

  • 确保程序可以从可用内存中获取一部分内存使用

  • 确保程序可以归还使用后的内存以供其他程序使用

内存分配的过程

单一连续分配

操作系统之基础篇(二)_存储管理_17

操作系统之基础篇(二)_物理内存_18

操作系统之基础篇(二)_调度算法_19

操作系统之基础篇(二)_存储管理_20

操作系统之基础篇(二)_物理内存_21

这里如果为0代表没有使用

为1的话代表已经被使用

操作系统之基础篇(二)_存储管理_22

动态分区分配算法
  • 首次适应算法(FF算法)

  • 最佳适应算法(BF算法)

  • 快速适应算法(QF算法)

操作系统之基础篇(二)_调度算法_23操作系统之基础篇(二)_死锁_24

操作系统之基础篇(二)_物理内存_25

操作系统之基础篇(二)_虚拟内存_26

内存回收的过程

操作系统之基础篇(二)_死锁_27

操作系统之基础篇(二)_调度算法_28操作系统之基础篇(二)_死锁_29操作系统之基础篇(二)_物理内存_30

操作系统之基础篇(二)_存储管理_31

内存回收的过程

存储管理之内存分配与回收

  • 内存分配的过程
  • 内存回收的过程

操作系统之基础篇(二)_存储管理_32

  • 页式存储管理

  • 段式存储管理

  • 段页式存储管理

操作系统之基础篇(二)_存储管理_33

页式存储管理

  • 将进程逻辑空间等分成若干大小的页面

  • 相应的把物理内存空间分成与页面大小的物理块

  • 以页面为单位把进程空间装进物理内存中分散的物理块

操作系统之基础篇(二)_物理内存_34操作系统之基础篇(二)_物理内存_35操作系统之基础篇(二)_物理内存_36操作系统之基础篇(二)_虚拟内存_37操作系统之基础篇(二)_死锁_38操作系统之基础篇(二)_调度算法_39

段式存储管理

  • 将进程逻辑空间划分成若干段(非等分)

  • 段的长度由连续逻辑的长度决定

  • 主函数MAIN、子函数X、子函数Y等

操作系统之基础篇(二)_存储管理_40

段页存储和页式存储都离散地管理了进程的逻辑空间

  • 页是物理单位,段是逻辑单位

  • 分页是为了合理利用空间,分段是满足用户要求

  • 页大小由硬件固定,段长度可动态变化

  • 页表信息是一维的,段表信息是二维的。

段页式存储管理

  • 分页可以有效提高内存利用率(虽然说存在页内碎片)

  • 分段可以更好满足用户需求

  • 两者结合,形成段页式存储管理

操作系统之基础篇(二)_死锁_41操作系统之基础篇(二)_死锁_42

存储管理之虚拟内存

一个游戏十几G,物理内存只有4G,那这个游戏是怎么运行起来的?

  • 虚拟内存概述

  • 程序的局部性原理

  • 虚拟内存的置换算法

虚拟内存概述

  • 有些进程实际需要的内存很大,超过物理内存的容量

  • 多道程序设计,使得每个进程可用物理内存更加稀缺

  • 不可能无限增加物理内存,物理内存总有不够的时候

  • 虚拟内存是操作系统内存管理的关键技术

  • 使得多道程序运行和大程序运行成为现实

  • 把程序使用内存划分,将部分暂时不适用的内存放置在辅存。

操作系统之基础篇(二)_存储管理_43

程序的局部性原理

局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。

虚拟内存的置换算法

  • 先进先出算法(FIFO)

  • 最不经常使用算法(LFU)

  • 最近最少使用算法(LRU)

操作系统之基础篇(二)_存储管理_44操作系统之基础篇(二)_调度算法_45

  • 替换策略发生在Cache-主存层次、主存-辅存层次

  • Cache-主存层次的替换策略主要是为了解决速度问题

  • 主存-辅存层次主要是为了解决容量问题

Linux的存储管理

  • Buddy内存管理算法
  • Linux交换空间

Buddy内存管理算法

  • Buddy 算法是经典的内存管理算法

  • 算法基于计算机处理二进制的优势具有极高的效率

  • 算法主要是为了解决 内存外碎片 的问题

操作系统之基础篇(二)_虚拟内存_46操作系统之基础篇(二)_虚拟内存_47操作系统之基础篇(二)_死锁_48操作系统之基础篇(二)_死锁_49操作系统之基础篇(二)_调度算法_50操作系统之基础篇(二)_调度算法_51操作系统之基础篇(二)_调度算法_52操作系统之基础篇(二)_虚拟内存_53操作系统之基础篇(二)_物理内存_54操作系统之基础篇(二)_存储管理_55操作系统之基础篇(二)_调度算法_56

Linux交换空间

1.交换空间(Swap)是磁盘的一个分区

2.Linux物理内存满时,会把一些内存交换至Swap空间

3.Swap空间是初始化系统时配置的

查看系统Swap空间

  • 冷启动内存依赖

  • 系统睡眠依赖

  • 大进程空间依赖

操作系统之基础篇(二)_物理内存_57