SYS.BASE-操做系统笔记(理论篇)

操做系统:向应用程序提供资源集的基本抽象,在相互竞争的程序之间有序地控制对处理器、存储器以及其余I/O接口设备的分配(资源管理:时间复用、空间复用)。算法

计算机硬件:

CPU:

  • 每一个CPU基本周期中,从内存取指令-解码(以肯定其类型和操做)-执行,如此反复。
  • 由于访问内存慢,CPU内设有寄存器:编程

    • 通用寄存器:用来保存关键变量和临时数据
    • 专用寄存器:数组

      • 程序计数器:下个指令的内存地址
      • 堆栈指针:当前栈顶端
      • 程序状态字(PSW):条件码位(由比较指令设置)、 CPU优先级 、 模式(用户态或内核态)等控制位
  • 现代CP设计:缓存

    • 流水线:有单独的取指单元 、解码单元和执行单元,能同时取出多条指令。
    • 超标量:更先进,有多个执行单元(只要有一个执行单元空闲, 就检查缓冲区中是否还有可处理的指令, 若是有, 就把指令从缓冲区中移出并执行之。)
  • 模式:安全

    • 用户态:用户程序编码可以解决的
    • 内核态:没法编码表示的,用户程序必须使用系统调用(内中断)陷入内核并调用操做系统。服务器

      • 内中断(异常)网络

        • 出错(fault):保存指向触发异常的那条指令 (例:缺页异常)
        • 陷入(trap):保存指向触发异常的那条指令的下一条指令(例:调试)
      • 外中断

存储器

  • CPU寄存器 1ns <1k:32位CPU是32\32 64位CPU是64\64
  • 高速缓存 2ns 4M
  • 主存 10ns 1-8G RAM ROM Flash CMOS
  • 磁盘 10ms 1-4T 低端硬盘速率50MB/s, 高速硬盘160 MB/s

I/0设备

  • I/0设备=设备控制器+设备自己
  • 设备控制器数据结构

    • 为操做系统提供一个简单的接口。在控制器中常常安装一个小的嵌入式计算机,运行为执行这些工做而专门编好的程序。
    • 大多数设备驱动程序(专门与控制器对话,发出命令并接收响应的软件)须要在内核态运行
  • 设备自己:设备自己有个相对简单的接口, 这是由于接口既不能作不少工做,又已经被标准化了。
  • 实现IO的方式:忙等待、中断、直接存储器访问

总线

  • 最主要的PCIe总线架构

    • 简介:10+Gb/s是串行总线架构,取代传统PCI的并行总线架构,经过一条被称为数据通路的链路传递集合了全部位的一条消息,这很是像网络包。PCIe 2.0规格的16个数据通路提供64Gb/s的速度,升级到PCIe 3.0后会提速2倍,而PCIe 4.0会再提速2倍。
    • CPU并发

      • 经过DDR3总线与内存对话
      • 经过PCie总线与外围图形设备对话
      • 经过DMI总线经集成中心与全部其余设备对话
    • 集成中心

      • 经过通用串行总线与USB设备对话
      • 经过SATA总线与硬盘和DVD驱动器对话
      • 经过PCle传输以太网络帧
  • USB用来将全部慢速I/0设备(如键盘和鼠标)与计算机链接的

    • USB 1.0 12Mb/s
    • USB 2.0 480Mb/s
    • USB 3.0 5Gb/s
  • SCSI

    • 一种高速总线用在 高速硬盘、 扫描仪、服务器和工做站 640MB/s
  • 即插即用:系统自动地收集有关1/0设备的信息,集中赋予中断级别和I/0地址,而后通知每块卡所使用的数值。

启动计算机

  • BIOS 检查所安装的RAM数量,键盘和其余基本设备

    • 扫描PCie和PCI总线并找出连在上面的全部设备
    • 尝试存储在CMOS存储器中的设备清单决定启动设备
  • 操做系统询问BIOS, 以得到配置信息
  • 检查就绪设备驱动程序, 操做系统将它们调入内核
  • 建立须要的任何背景进程,启动登陆程序或GUI

操做系统基本特征

  • 并发:同一时间段内发生

    • 并行:同一时刻发生(多道程序处理宏观上并发,微观上交替执行)
  • 共享

    • 互斥共享(如音频设备 打印机)
    • 同时访问(磁盘文件)
  • 虚拟

    • cpu:每一个用户(进程)的“虚处理机”
    • 存储器:每一个进程都占有的地址空间(指令+数据+堆栈)
    • 显示设备:多窗口或虚拟终端
    • 打印设备:将临界资源变为同时访问资源
  • 异步性

    - 判据:不管快慢,结果相同

进程线程

进程

  • 模型

    • 一个进程就是一个正在执行程序的实例, 包括程序计数器 、寄存器和变量的当前值。
多道程序设计:(伪)并行状况下运行的进程集
```
    CPU 利用率= 1-p^n 
            一 个进程等待I/0操做的时间与其停留在内存中时间的比为p
            n称为多道程序设计的道数
```
  • 建立

    • 1)系统初始化.
    • 2)正在运行的程序执行了建立进程的系统调用。
    • 3)用户请求建立一个新进程。
    • 4)一个批处理做业的初始化。
  • 终止

    • 1)正常退出(自愿的)。
    • 2)出错退出(自愿的)。
    • 3)严重错误(非自愿)。
    • 4)被其余进程杀死(非自愿)。
  • 阻塞 block
  • 唤醒wakeup
  • 挂起suspend
  • 层次结构

    • UNIX 进程和它的全部子进程以及后裔共同组成一个进程组。用户发信号后每一个进程能够分别捕获该信号 、 忽略该信号或采起默认的动做, 即被该信号杀死。在整个系统中, 全部的进程都属千以 init为根的一棵树
    • Windows 全部的进程都是地位相同的
  • 进程的状态与转换

    • 状态:就绪(ready) 执行(running) 阻塞(blocked)
    • 具备挂起的状态:执行,活动就绪,活动阻塞,静止就绪,静止阻塞
  • 进程控制块

    • 进程控制块中的信息

      • 处理机状态

        • 通用寄存器
        • 指令计数器
        • psw
      • 调度信息

        • 进程状态
        • 优先级
        • 调度所需信息(进程已等待CPU时间,进程已执行的时间总和)
      • 控制信息

        • 程序、数据地址
        • 同步和通讯(消息队列指针 信号量)
        • 占用资源清单
        • 连接指针(本进程PCB所在队列的下一个进程PCB的首地址)
        • 家族关系 子进程父进程标示

线程

  • 概念

    • 轻型实体:只拥有必不可少的资源,如:线程状态、寄存器上下文和栈

      • 独立调度和分派的基本单位
      • 就绪阻塞执行3种基本状态
      • 建立、终止时间比进程短
      • 同进程内线程切换时间比进程短,系统开销小
    • 可并发执行
    • 共享进程资源(如内存 文件)
  • 模型

    • TCB
  • POSIX线程(IEEE 1003.lc 线程标准)

    • 线程包pthread
    • pthread_create 建立一个新线程
    • pthread_exit 结束调用的线程
    • pthread_join 等待一个特定的线程退出
    • pthread_yield 释放CPU来运行另一个线程
    • pthread_attr_init 建立并初始化一个线程的属性结构
    • pthread_attr_destroy 删除一个线程的属性结构
  • 实现

    • 在用户态实现

      • 优势

        • 快捷(不须要陷入内核,上下文切换,刷新内存高 速缓存)
        • 它容许每一个进程有本身定制的调度算法
      • 缺点:

        • 若核心阻塞进程,则进程中全部线程将被阻塞
        • 同一进程中的2个线程不能同时运行于2个处理器上
    • 在内核态实现
    • 混合实现

      • 使用内核级线程,而后将用户级线程与某些或者所有内核线程多路复用起来
  • 调度程序激活机制

    • 目标:模拟内核线程的功能,为线程包提供一般在用户空间中才能实现的更好的性能和更大的灵活性。
  • 弹出式线程

    • 概念:一个消息的到达致使系统建立一个处理该消息的线程
    • 优势: 快速建立。没有必须存储的寄存器 、 堆栈

进程间通讯

  • 临界区:对共享内存进行访问的程序片断。

    • 互斥:阻止多个进程同时读写共享的数据
  • 一个好的并发方案需知足:

    • 1)任何两个进程不能同时处千其临界区。
    • 2)不该对 CPU 的速度和数址作任何假设。
    • 3)临界区外运行的进程不得阻塞其余进程。
    • 4)不得使进程无限期等待进入临界区。
  • 忙等待的互斥方案

    • 屏蔽中断:每一个进程在刚刚进入临界区后当即屏蔽全部中断,在离开以前再打开中断,避免不了竞争
    • 锁变量:避免不了竞争
    • 严格轮换法:自旋锁(spin lock ) 违反了3)
    • Peterson解法:个不须要严格轮换的软件互斥算法。
    • TSL指令:须要硬件支持(test and set lock 测试井加锁 )
    • XCHG:原子性地交换了两个位置的内容
    • 缺点:优先级反转问题
  • 睡眠(sleep)与唤醒(wakeup)进程间通讯原语使得在没法进入临界区时将阻塞

    • 生产者-消费者(producer-consumer)问题(有界缓冲区)
  • 信号量

    • 实现互斥或同步。

      • down(P)和up(V) (分别为通常化后的sleep和wakeup) 对一倌号县执行down操做, 则是检查其值是否大千0。若该值大千0, 则将其值减1 (即用掉一个保存的唤醒信号) 并继续;若该值为0, 则进程将睡眠, 并且此时down操做并未结束。检查数值、 修改变批值以及可能发生的睡眠操做均做为一个单一的、 不可分割的原子操做完成。
  • 互斥量

    • 信号量的简化版
  • 管程

    • 一种高级同步原语,任什么时候刻管程中只有一个活跃进程,进入管程的互斥有编译器负责,一般是一个互斥量或信号量。
    • 引入条件变量和2个操做(wait signal)来保证进程在没法运行时被阻塞。
    • 限制:过低级,在少数编程语言以外没法使用。(分布式系统多个CPU各有私有内存,这些原语则失效)
  • 消息传递

    • 2条原语。send:调用向一个给定的目标发送一条消息,receive:调用从一个给定的源(或者是任意源, 若是接收者不介意的话)接收一条消息。若是没有消息可用,则接收者可能被阻塞,直到一条消息到达,或者带着一个错误码当即返回。
  • 屏障

    • (barrier)用于进程组, 除非全部的进程都就绪准备着手下 一 个阶段, 不然任何进程都不能进入下一个阶段。
  • 避免锁

    • 读-复制-更新(Read-Copy-Update, RCU),增删引用节点而不用锁。

调度

  • 调度时机:

    • 1.在建立一个新进程以后, 须要决定是运行父进程仍是运行子进程。
    • 2.在一个进程退出时。
    • 3.当一个进程阻塞在1/0和信号量上或由千其余缘由阻塞时, 必须选择另外一个进程运行。
    • 4.在一个I/O中断发生时
  • 调度算法分类和目标

    • 全部系统

      • 公平--给每一个进程公平的CPU份额
      • 策略强制执行--保证规定的策略被执行
      • 平衡--保持系统的全部部分都忙碌
    • 批处理系统

      • 吞吐扯--每小时最大做业数
      • 周转时间--从提交到终止间的最小时间
      • CPU利用率--保持CPU始终忙碌
    • 交互式系统

      • 响应时间--快速响应请求
      • 均衡性--知足用户的指望
    • 实时系统

      • 知足截止时间--免丢失数据
      • 可预测性--在多媒体系统中避免品质下降
  • 典型调度算法

    • 批处理系统

      • 先来先服务
      • 最短做业(进程、线程)优先
      • 最短剩余时间优先
    • 交互式系统

      • 时间片轮转调度算法
      • 优先级调度算法
      • 多级反馈队列调度算法
      • 最短进程优先
      • 保证调度
      • 彩票调度
      • 公平分享调度
    • 实时系统
    • 高响应比优先调度算法
  • 策略和机制

    • 调度机制和调度策略分离,是的调度算法参数化,可由用户设置改变。
  • IPC问题
  • 哲学家就餐问题
  • 读者写者问题

内存管理

  • 地址空间

    • 地址空间:存储器抽象,用于内存寻址的一个进程
    • 基址寄存器:程序起始物理地址
    • 界限寄存器:程序的长度
    • 交换技术:把一个进程完整调入内存, 使该进程运行一段时间, 而后把它存回磁盘。
    • 空闲内存管理:动态分配内存时通常用位图和空闲区链表管理
  • 页表

    • 虚拟地址=虚拟页号(高位)+ 偏移量(地位部分)
    • 加速分页过程

      • 要考虑两个主要问题:

        • 1)虚拟地址到物理地址的映射必须很是快。
        • 2)若是虚拟地址空间很大, 页表也会很大
      • 方案:

        • 1)转换检测缓冲区(相联存储器/快表):为计算机设置一个小型的硬件设备, 将虚拟地址直接映射到物理地址,而没必要再访问页表。
        • 2)软件TLB管理: TLB 大到(如 64 个表项)能够减小失效率
    • 针对大内存的页表

      • 多级页表
      • 倒排页表:实际内存中的每一个页框对应一个表项,而不是每一个虚拟页面对应一个表项。
  • 页面置换算法

    • 最优
    • 最近未使用
    • 先进先出
    • 第二次机会
    • 时钟
    • 最近最少使用
    • 工做集模型:

      • 概念:分页系统都会设法跟踪进程的工做集,以确保在让进程运行之前,它的工做集就已在内存中。
      • 算法:当发生缺页中断时,淘汰一个不在工做集中的页面。
    • 工做集时钟

      • 没必要扫描整个页表才能肯定被淘汰的页面
      • 所需的数据结构是一个以页框为元素的循环表

文件

  • 文件

    • 命名
    • 结构

      • 字节序列;记录序列;树
  • 目录

    • 层次目录系统
  • 文件系统实现

    • 连续分配
    • 链表分配
    • 采用内存中的表进行链表分配
  • 管理和优化

    • 磁盘空间管理

      • 块大小

        • 从历史观点上来讲,文件系统将大小设在1~4KB之间, 但如今随着磁盘超过了1TB, 仍是将块的大小提高到64KB而且接受浪费的磁盘空间更好
      • 记录空闲块

        • 磁盘块链表 每一块要用到 32 位
        • 位图 每块只用一个二进制位标识 1TB 磁盘 须要大约 130 000 个 1KB
      • 磁盘配额

        • 系统管理员分给每一个用户拥有文件和块的最大数量, 操做系统确保每一个用户不超过度给他们的配额。
    • 备份

      • 1)从意外的灾难中恢复。
      • 2)从错误的操做中恢复。
    • 一致性

      • 块的一致性检查和文件的一致性检查
    • 性能

      • 高速缓存
      • 块提早读
      • 减小磁盘臂运动
    • 碎片整理

输入输出

IO硬件原理

  • IO设备

    • 分类:

      • 块设备:把信息存储在固定大小的块中,每一个块有本身的地址(磁盘)
      • 字符设备:以字符为单位发送或接收一个字符流。(打印机 网络接口 鼠标)
    • 组成:

      • 机械部件(设备自己)
      • 电子部件(设备控制器/适配器)

        • 任务:把串行的位流转换为字节块, 并进行必要的错误校订工做
        • 组成:

          • 有几个寄存器用来与CPU进行通讯,操做系统写入它从而发送|接收|开启|关闭

            • 方式:

              • 内存映射I/O
              • 直接存储器存取(DMA)
          • 能够读写的数据缓冲区

IO软件原理

  • 目标

    • 设备独立性:能够访问任意I/0设备而无需事先指定设备
    • 统一命名:一个文件或一个设备的名字应该是个简单的字符串或整数,不依赖于设备
    • 错误处理:尽量地在接近硬件层面获得处理
  • 实现

    • 程序控制I/O:

      • 打印例子:

        • 1.软件首先要在用户空间的一个缓冲区中组装字符串
        • 2.用户进程经过发出打开打印机一类的系统调用来得到打印机以便进行写操做
        • 3.操做系统(一般) 将字符串缓冲区复制到内核空间中的一个数组(如p) 中
        • 4.操做系统查看打印机当前是否可用(轮询、忙等待)
        • 5.一旦打印机可用,操做系统就复制第一个字符到打印机的数据寄存器中(内存映射1/0),激活打印机
        • 6.打印机的第二个寄存器代表其状态

          • 当字符写到数据寄存器的操做将致使状态变为非就绪
          • 处理完当前字符时设置某一位或者将某个值放到状态寄存器代表已就绪
        • 7.重复5直到打印完,回到用户进程
      • 缺点:忙等待将是低效的
    • 中断驱动I/O

      • 打印例子:

        • 当打印机将字符打印完而且准备好接收下一个字符时,它将产生一个中断。这一中断将中止当前进程而且保存其状态。
      • 缺点:中断发生在每一个字符上
    • DMA的I/O

      • 打印例子:

        • 让DMA控制器一次给打印机提供一个字符,而没必要打扰CPU。
        • DMA控制器是程序控制I/O,由DMA而不是CPU作所有工做
        • 将中断的次数从打印每一个字符一次减小到打印每一个缓冲区一次

IO软件层次

  • 自顶向下4层:

    • 1.用户级IO软件
    • 2.与设备无关的操做系统软件
    • 3.设备驱动程序
    • 4.中断处理程序

磁盘

  • 磁盘臂调度算法

    • 1.先来先服务
    • 2.电梯算法
  • 错误处理

    • 控制器中处理:对千每个坏扇区, 用一个备用扇区替换它
    • 驱动程序中处理:发出一个recalibrate (从新校准)命令,让磁盘臂尽量地向最外面移动,并将控制器内部的当前柱面重置为0
  • 高级磁盘控制器

    • 至关强大的多核ARM处理器,有足够的资源能够轻易地运行Linux
  • 稳定存储器

    • 稳定写
    • 稳定读
    • 崩溃恢复

时钟

  • 时钟硬件

    • 2种类型:

      • 简单时钟:每一个电压周期产生一个中断, 频率是50Hz或60Hz
      • 3部件构成:晶体振荡器 、 计数器和存储寄存器,1000MHz甚至更高的频率
    • 可编程时钟操做模式:

      • 完成模式:one-shot mode
      • 方波模式:square-wave mode
  • 时钟软件(时钟驱动程序)

    • 1)维护日时间。
    • 2) 防止进程超时运行。
    • 3)对 CPU的使用状况记帐。
    • 4)处理用户进程提出的alarm系统调用。
    • 5)为系统自己的各个部分提供监视定时器。
    • 6) 完成概要剖析 、 监视和统计信息收集。

死锁

  • 资源

    • 可抢占资源: 能够从拥有它的进程中抢占而不会产生任何反作用(如 存储器 )
    • 不可抢占资源:在不引发相关的计算失败的状况下,没法把它从占有它的进程处抢占过来(如 蓝光光盘刻录机)死锁与不可抢占资源有关
  • 定义:一个进程集合中的每一个进程都在等持只能由该进程集合中的其余进程才能引起的事件
  • 发生(资源)死锁的四个必要条件:

    • 1.互斥条件
    • 2.占有和等待条件
    • 3.不可抢占条件
    • 4.环路等待条件
  • 死锁检测

    • 每种类型一个资源的死锁检测:检测有向图是否有环路、
    • 每种类型多个资源的死锁检测:基千向最的比较(每一个进程起初都是没有标记过的。算法开始会对进程作标记,进程被标记后就代表它们可以被执行,不会进入死锁。 当算法结束时,任何没有标记的进程都是死锁进程。)
  • 死锁恢复

    • 利用抢占恢复
    • 利用回滚恢复
    • 经过杀死进程恢复
  • 死锁避免

    • 资源轨迹图
    • 安全状态和不安全状态
    • 单个资源的银行家算法
    • 多个资源的银行家算法
  • 死锁预防

    • 破坏四个必要条件之一
  • 其余问题

    • 两阶段加锁
    • 通讯死锁
    • 活锁
    • 饥饿

参考资料

相关文章
相关标签/搜索