操作系统-review

操作系统


  • shell 又称作外壳,如gui 等,提供给外部服务,操作系统提供的对外可见的服务
  • kernel 内核

  • 操作系统管理三大资源
    • cpu
      • cpu调度
      • 进程线程管理
    • 内存
      • 物理内存管理
      • 虚拟内存管理
    • 磁盘
      • 文件系统的形式进行管理
    • 中断处理与设备驱动管理

中断与异常处理

  • 中断的处理过程, 软硬件的结合
    • 硬件:
      • 标记中断状态
      • 生成一个keyId
    • 软件:
      • 保存当前程序的状态
      • 中断服务程序,再硬件中有一个程序id,通过这个程序id在内存中找到程序地址,然后根据这程序所指定的中断方式进行中断程序
      • 清楚中断标记
      • 恢复第一步保存的时候的状态,类似于事务中的回滚操作
  • 异常处理过程:
    • 保存现场
    • 异常处理
      • 杀死异常程序
      • 重新执行异常指令
    • 恢复现场

内存管理技术

  • 覆盖技术
    • 较小的内存中运行较大的程序,与分区存储管理配合使用
      • 常用代码和数据常驻内存(他决定哪部分数据会加载到内存中)
      • 非常用代码平时存储在外存中,按需加载到内存
      • 非调用关系的模块(非协调性的程序),按需加载到内存
      • 缺点:
        • developer时间成本以及管理成本
          操作系统-review_第1张图片

B,C,D,E,F都是互不相关的函数

  • 交换技术:
    • 操作系统-review_第2张图片
    • 将暂时不能运行的程序送到外村
    • 具体是指: 将一个process的地址空间的内容保存到外存中,当需要的时候,在将某个进程的address读入到内存中,换入换出内容的大小为整个程序的地址空间
    • 缺点:
      •   粒度过大,以进程为base单位
        
  • 虚拟内存技术;
    • 类似于覆盖技术,但是非developer管理,交由os自己管理,核心:程序的所有内容并不会放在内存中
    • 也能实现类似于交换技术,实现内存与外存之间的交换

页面置换算法

  • 定义: 当缺页中断发生时,调入新的页,而此时当物理内存已满时,就需要页面置换某个物理页面
  • 目标: 尽可能的减少页面的换进换出次数
  • 页面锁定技术: 既类似于lock,被lock的页面,不会被换入换出
  • 局部页面置换算法
    • 最优页面置换算法:预测最长等待时间的页面(既预测哪个页面可能下次被访问的时候间隔最久)
      • 实现: 实际无法实现,通常用作一个评价的标准,对比其他算法的性能依据
    • 先进先出算法(FIFO): 将内存中驻入时间最长的页面,将其淘汰
      • 缺点: 性能最差,调出的页面可能是经常要访问的页面
    • 最近最久未使用算法(LRU): 当一个缺页中断发生时,他太最久未使用的页面
      • 原理: 近似于最优置换算法,采取的局部性原理,若某些页面被频繁访问,则其大概率在将来也会被频繁访问
    • 时钟页面置换算法: LRU的近似,FIFO的优化,结合了FIFO和LRU
    • 原理: 当页面初始被载入时,将其初始化为0,并且每个页面组成一个环形链表,并且当前指针指向最早进入的页面(FIFO的思路),当发生页面置换的时候,先判断当前指针是否为0(既是否被访问过),若0 直接淘汰 但判断是否淘汰只通过0和1,并非与LRU一样计算次数
    • 二次机会法: clock算法的优化,充分运用其内部的bit ,access bit 和dirty bit (access代表读,dirty代表写),替换页的标准为2个bit都为0,若access bit 0 而dirty bit 为1 则只会将dirty bit 置为0,相反也一样,置为0 ,但若是2个都为1,则只会将access bit置为0,dirty bit不变,然后指针继续走 (使得dirty bit被使用的更有机会留在内存中!!,只读的页更大概率被置换)
    • LFU(最近最少未使用算法),与LRU 的区别在于,LRU 强调时间,而LFU 强调的是次数
    • Belady现象的原因: (算法必须为FIFO算法)
      • 原因在于FIFO的核心与页面置换算法的核心冲突,页面置换的核心在于将不常用的页面置换出去,而FIFO 并不在乎此种情况,只将最新进入的页面直接置换
      • 比较:
        • FIFO是特殊的LRU ,当页面进入内存之后就不再被访问,则LRU并会退化为FIFO
  • 全局页面置换算法
    • 工作集和常驻集:
      • 工作集: 既程序运行时间内的页面访问集合(可以认为是也页面地址集合,该页面集合可能有些在内存中有些可能不在内存中)
      • 常驻集: 指的是当前时刻,在内存中的页面集合
      • 工作集页面置换算法: 程序运行可认为是滑动窗口模式,使用的是部分页面,而随着程序进行,该算法会将不使用的页面直接丢弃,并不管当前页面是否充足,而是不在该时间窗口内就丢弃
        • 影响因素: 工作集窗口的大小(也可以认为是时间窗口大小)
      • 缺页率页面置换算法:(基于常驻集,常驻集动态发生变更),缺失越多表明需要扩大常驻集,缺失率很低则表明可以压缩常驻集
        • 缺页率: 缺页数/内存访问次数
  • 抖动问题:
    • 常驻集和工作集之间,当常驻集远小于工作集时,内存中频繁发生页面置换,从而使得操作系统运行缓慢的现象
      • 原因: 进程数目的增多,使得分给每个进程的物理页面数减小,从而使得缺页率增大

进程

  • 程序=算法+数据结构
    • 描述进程的数据结构: 进程控制块(PCB:Process Control Block)
    • PCB组成:
      • 进程标识信息: 类似于ID
      • 处理机状态信息保存区
        • 用户可见寄存器: 用户程序可以使用的数据,地址等寄存器
        • 控制和状态寄存器: 如程序计数器,程序状态字
        • 栈指针:
      • 进程控制信息
        • 调度和状态信息: 用于系统调度
        • 进程间的通信信息: 支持进程间的标识,信号等
        • 存储管理信息: 指向本进程存储空间的数据结构: (既进程本身也可以存储内容)
        • 进程占用的资源: 如文件资源等
        • 有关数据结构链接信息: 进程可以连接到一个进程队列中
      • PCB的组织方式:
        • 链表形式: 进程是动态的执行过程,添加删除 链表性能更好
        • 数组形式: 相同index 存放一起
      • 进程的生命周期
        • 进程创建:
          • 创建的事件:
            • 系统初始化
            • 用户请求创建一个新进程
            • 进程创建进程(既运行中的进程调用系统函数创建进程)
        • 进程运行
        • 进程阻塞 *只有进程本身才可以阻塞自己,无法阻塞其他进程
          • 触发条件:
            • 等待系统服务
            • 某种操作无法马上完成
            • 等待数据
        • 进程唤醒: 进程只能被其他进程或者操作系统所唤醒
          • 触发条件:
            • 资源数据满足
            • 相应的事件到达
            • 该PCB插入到就绪队列中
        • 进程结束
          • 结束分为:
            • 正常退出(自愿)
            • 错误推出(自愿)
            • panic错误(致命错误,非自愿)
            • 被其他进程杀死(非资源)
      • 进程结束前的三个基本状态:
        • 运行态:
        • 就绪态
        • 等待状态:

线程

  • 进程是资源分配的基本单位
  • 线程是CPU调度的基本单位
  • 为什么使用线程:
    • 使用进程代替线程的缺点:
      • 进程开销大,需要创建PCB,同时进程之间需要共享数据,当回收进程之后需要销毁PCB同时将进程中的资源进行回收
    • 使用线程的原因,线程的优点:
      • 线程共享进程的数据
      • 线程实体之间可以并发的执行
      • 线程之间也是数据共享的
    • 线程的缺点:
      • 当一个线程panic的时候,其所属进程的所有线程也会直接panic(既当Thread A 因为认为的BUG使得数据发生错误,共享数据的其他线程获取到脏数据也会因此而无效)
    • 线程的定义: 进程当中的一条执行流程
    • 线程相比进程的优点:
      • 创建时间相对更短
        • 进程需要创建内存去管理
        • 线程直接从所属进程中的内存创建
      • 同一进程内的线程切换比进程快,原因在于进程内的线程同属一个地址空间,也就意味着线程处于同一个内存页表

线程的实现:

  • 用户线程(既操作系统看不到的线程)
    • 缺点:
      • 线程使用期间依然会占据CPU时间片,因而若该线程阻塞,则会导致进程的其他线程也无法在运行
      • 线程依赖于进程,进程获取到的CPU时间片有限,因而进程所属的线程获取到的时间片相比会更加短,因而执行效率上会更低
  • 内核线程(受操作系统管理的线程)
    • 内核线程阻塞并不会影响该进程内的其他线程
  • 轻量级进程: 内核支持的用户线程,一个进程可以有多个轻量级进程,每个轻量级进程由一个内核线程所支持

上下文切换:

  • 概念: 进程状态的变更

  • OS会为每个进程配置PCB,并且会将PCB放到合适的队列中

    • 就绪队列:
    • IO等待队列
    • 僵死队列
  • 进程的创建:

    • fork的作用:
      • 对子进程分配内存
      • 将父进程的内存和cpu寄存器到子进程中(这步操作其实是无用的,内存复制在这期间并没有作用)
      • 开销巨大
    • vfork的作用:
      • 轻量级fork,不需要进行内存的映射
    • Copy On Write技术

CPU调度

  • 调度发生的条件:
    • 当进程处于等待就绪状态的时候
    • 或者是进程被终止了
  • 不可抢占条件
  • 可以抢占

调度算法

  • FCFS(FIRST COME FIRST SERVE)先来先服务
  • SRT() 短进程优先(短生命周期的率先调度)
  • HRRN(Highest response Ratio Next) 最高响应优先
  • RR(Round Robin) 轮询
    • 在这种模式下的调度算法,并不会管进程是否结束,而是只会占用一定的cpu时间片
    • 缺点:
      • 吞吐量低: 上下文切换占据很长一部分时间
      • cpu时间片值的定义
  • MFQ(Multilevel Feedback Quees )??? 多级反馈队列
    • cpu密集型的进程,优先级会相对较低
    • 而IO密集型的进程,优先级会相对较高
  • FSS(Faire Share Schedual)公平策略

进程间通信方式

管道:

  • 适用于进程间需要有点关系
  • 管道中的数据是一种字节流
  • ls | more 中的 竖线 | 既是管道的功能
    • more是从 ls中获取得到数据(通过管道),而非从其他获取数据
    • 操作系统-review_第3张图片
      1. 创建管道
      1. 为ls 创建一个进程,设置stdout为管道写端
      1. 为more创建一个进程,设置stdin为管道的读端

消息队列

  • 按FIFO的形式管理信息
  • 数据结构:
    • 操作系统-review_第4张图片

共享内存

  • 每个进程内部都由共享内存地址
  • 效率最快,但是但是需要控制同步

Question

  • 什么是用户态,什么是内核态
  • FIFO中,什么是Belady现象
  • 什么是局部性原理:

  • 什么是Belady现象
    • 既: 当采用FIFO算法的时候,物理页数增加反而使得缺页现象更为严重 特指FIFO算法
  • 物理页面,以及几种页面的定义:
  • 通俗意义上的,耗了很大的内存,指的是?
  • 寄存器的概念

你可能感兴趣的:(操作系统,OS)