一.基本概念

1.什么是操作系统

  1. 操作系统适配不同的硬件,为软件提供统一的平台
  2. 是计算机中的一款基础软件
  3. 分为内核+外壳

2.什么是系统调用

用户态中可以通过系统调用转换成系统态,在系统态可以调用操作系统提供的功能。

用户态:用户态运行的进程,可以访问用户程序的数据
系统态:系统态运行的进程,可以访问操作系统的所有资源,不受限制

系统调用分类

  1. 设备管理
  2. 文件管理
  3. 进程管理
  4. 进程通信
  5. 内存管理

二.进程与线程

1.进程和线程的区别

进程 线程
进程是资源分配的最小单位 线程是CPU执行的最小单位
进程间资源不共享 同一进程下的线程间资源共享
创建态
就绪态
运行态
阻塞态
结束状态
new
runable

waiting
time_waiting
bloked
terminal

2.进程间的通信方式(7种)

  1. 匿名管道
    1. 适用于具有亲缘关系进程
    2. 以文件的格式存储在内存中
  2. 有名管道
    1. 适用于本机的任意两个进程
    2. 以磁盘文件存储
    3. 严格遵循先进先出
  3. 信号
    1. 用于通知等待进程某个事件的发生
  4. 信号量
    1. 本质上是一个计数器
    2. 作用与多进程对共享资源的访问,实现进程间的同步
  5. 消息队列
    1. 存放在内存中,并有消息队列标识
    2. 读取循序可以不遵守队列顺序,可以按类型读
    3. 克服了信号消息少,匿名管道无符号字节流,以及缓冲区固定大小
  6. 内存共享
    1. 多个进程共享同一块内存,进程可以实时看到数据的修改
    2. 需要依赖某种同步方式,如互斥锁/信号量
  7. socket
    1. 适用于不同主机间的两个进程
    2. 是TCP/IP通信的基本操作单元

3.进程的调度算法(5种)

  1. 先来先服务调度算法(FCFS)
    1. 从就绪队列选取最早进入的进程
    2. 直到该进程执行结束或者被阻塞
  2. 短作业优先调度算法(SJF)
    1. 从就绪队列选择预估时间最短的进程
    2. 直到该进程完成或者发生阻塞
  3. 时间片轮训调度算法(RR)
    1. 为每个进程分配一个固定的时间片
    2. 时间片用完则切换
  4. 多级反馈队列调度算法
    1. 通过多级队列实现短进程可以迅速完成,并且优先级高的进程也会优先执行
    2. UNIX采用的算法
  5. 优先级调度算法
    1. 优先级高的进程先执行

三.内存管理

1.基本概念

  • 负责内存的分配(malloc)与回收(free)
  • 负责逻辑地址到物理地址的转换

    2.内存管理机制(4种)

  1. 块式存储(连续分配)
    1. 将内存切分成固定大小的几个块,为每个进程分配一个块
    2. 会造成空间碎片
  2. 页式存储(非连续分配)
    1. 将内存分成固定大小的页,页的大小远远小于块
    2. 提供了利用率,减少了空间碎片
    3. 通过页表对应逻辑地址和物理地址
  3. 段式存储(非连续分配)
    1. 段比页占用的空间更小
    2. 每一段是有逻辑意义
    3. 通过段表对应逻辑地址和物理地址
  4. 段页式存储(非连续分配)

    1. 先将内存划分成多个段,每个段中划分成多个页

      3.快表与多级页表(页表机制-程序的局部性原理)

  5. 快表(空间换时间)

    1. 目的:作为也变的缓存,加速逻辑地址到物理地址的转换
    2. 流程:首先访问快表,若快表存在则返回->若快表不存在,查询页表,并将结果保存至快表->快表快满时按一定的策略进行淘汰
    3. 类似于Redis
  6. 多级页表(时间换空间)
    1. 多级页表避免所有页面放在内存中浪费空间
    2. 不需要的页表不必保留在内存中

      4.分页机制和分段机制

      |
      | 分页机制 | 分段机制 | | —- | —- | —- | | 共同点 | 提高内存利用率,避免空间碎片
      都是离散存储,需要通过页表/段表进行管理 | | | 区别 | 页是固定大小
      不具有逻辑性 | 段大小不固定,由用户程序决定
      具有逻辑性 |

5.虚拟地址和物理地址

  • 物理地址:内存中的实际地址,内存寄存器的地址
  • 逻辑地址:程序中操作的地址是逻辑地址

    6.CPU寻址和虚拟空间

  • cpu寻址:

    • CPU将虚拟地址转换成物理地址,再对内存进行访问
    • 通过CPU中的内存管理单元 将逻辑地址转换成物理地址

image.png
操作物理地址的缺点

  1. 用户程序直接操作内存,可能造成系统安全问题
  2. 不利于多个程序的运行

虚拟地址的优点

  1. 不同的进程间相互隔离,不会操作到别的进程的物理地址
  2. 可以通过虚拟地址访问比实际内存大的内存空间,通过将超出部分在内存和磁盘间的调入调出
  3. 相邻的虚拟地,在物理上不相邻

四.虚拟内存

1.什么是虚拟内存

  1. 通过虚拟内存实现比系统内存更大的空间
  2. 虚拟内存使得每个进程独享一片空间的感觉,使得每个进程在逻辑上共享
  3. 虚拟内存定义了一个逻辑连续的空间,并将内存扩展至硬盘

    2.局部性原理

  4. 时间局部性

    1. 一个指令执行,不久后会再次执行
    2. 数据被访问,不久后会再次访问
    3. 主要原因是程序存在着大量的循环
  5. 空间局部性
    1. 一旦访问了某个存储单元,一段时间后会访问相邻的存储单元

通过高速缓存器实现

3.虚拟存储器(时间换空间)

主要作用
访问数据不再内存中,调入内存
内存不够时,调出到外存中

4.虚拟内存技术实现

请求分页储存管理
请求分段存储管理
请求段页式存储管理

分页和分页存储管理
是否将作业一次性放入内存中

5.页面置换算法(4种)

前提:地址映射的页面不在内存中,则发生缺页中断。
将磁盘中的页面置换后,当前内存不足则会发生页面置换
置换算法

  1. 最佳页面置换算法(OPT):理想情况,一般用于衡量别的置换算法
  2. 先进先出置换算法(FIFO):淘汰最先进入内存的页面
  3. 最近未使用置换算法(LRU):记录每次访问的时间,淘汰最久未使用的页面
  4. 最少使用置换算法(LFU):维护一个时间排序的页面链表,队头是刚使用过的页面,队尾是最久未使用的页面。每次淘汰队尾元素。

LRU代码实现:使用双向链表,对头是最新元素,队尾是最久未使用元素,当队列达到一定长度,淘汰队尾元素。

五.死锁

死锁条件(4种)

  1. 互斥
  2. 请求并等待
  3. 不可剥夺
  4. 循环等待

解决办法

  1. 预防死锁
  2. 避免死锁
  3. 监测死锁
  4. 解除死锁