自制思维导图

文章目录

  • 操作系统
    • 基础
      • 概述
      • 功能和目标
      • 发展阶段
      • 中断和异常
      • 系统调用
      • 运行机制和体系结构
    • 进程
      • 概念
      • 进程状态
      • 进程控制
      • 进程通信
      • 线程、多线程模型
      • 进程互斥和同步
      • 死锁
    • 处理机调度
      • 基本概念
      • 进程调度
      • 算法调度评价指标
      • 调度算法分类
    • 内存
      • 基础知识
      • 内存空间的分配
      • 内存空间的扩充(实现虚拟性)
      • 内存管理
    • 文件管理
      • 基础
      • 文件的逻辑结构
      • 文件目录

操作系统

基础

概述

  • 概念(定义)

    • 负责管理协调硬件、软件等计算机资源的工作
    • 为上层用户、应用程序提供简单易用的服务
    • 是一种系统软件
  • 基本特征

    • 共享

      所谓的“同时”往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问的(即分时共享)
      生活实例:
      互斥共享方式:使用QQ和微信视频。同一时间段内摄像头只能分配给其中一个进程。
      同时共享方式:使用QQ发送文件A,同时使用微信发送文件B。宏观上看,两边都在同时读取并发送文件,
      说明两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替着访问硬盘的。

      • 互斥共享-对摄像头的共享使用

        • 一个时间段内只允许一个进程访问该资源
      • 同时共享-对硬盘资源的共享使用

        • 允许一个时间段内由多个进程“同时”对它们进行访问
    • 并发

      • 并发:老渣分开约两个
      • 并行:小渣一次约两个
    • 虚拟

      虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。

      • 空分复用技术-虚拟存储技术

      • 时分复用技术-虚拟处理器技术

        虚拟技术中的“时分复用技术”。微观上处理机在各个微小的时间段内交替着为各个进程服务

    • 异步

      异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,
      而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。

功能和目标

  • 资源的管理者

    • 处理机管理-qq的正常运行
    • 存储器管理-打开qq.exe,进程进内存
    • 文件管理-文件夹里qq.exe
    • 设备管理-qq聊天开摄像头
  • 向上层提供服务

    • 给普通用户的

      • GUI用户图形界面

      • 命令接口

        • 联机命令接口

          • 交互命令接口:用户说一句,系统做一句
        • 脱机命令接口

          • 批处理命令接口:用户说一堆,系统做一堆
    • 给程序员的

      • 程序接口

        • 即系统调用
  • 对硬件机器的扩展

    没有任何软件支持的计算机成为裸机。在裸机上安装的操作系统,
    可以提供资源管理功能和方便用户的服务功能,将裸机改造成功能
    更强、使用更方便的机器
    通常把覆盖了软件的机器成为扩充机器,又称之为虚拟机

发展阶段

  • 手工阶段

    • 人机速度矛盾
  • 批处理阶段

    • 单道批处理

      • 优:缓解人机速度矛盾
      • 缺:资源利用率低
    • 多道批处理(操作系统开始出现)

      • 优:资源利用率高
      • 缺:不能人机交互
  • 分时操作系统

    • 优:提供人机交互
    • 缺:不能优先处理紧急业务
  • 实时操作系统

    • 硬实时操作系统

      • 必须在绝对严格的规定时间内完成处理-导弹控制系统,自动驾驶系统
    • 软实时操作系统

      • 能接受偶尔违反时间的规定-12306火车订票系统
  • 其他

    • 网络操作系统
    • 分布式操作系统
    • 个人操作系统

中断和异常

  • 中断的作用

    • 让操作系统强行夺回CPU的控制权
    • 使CPU从用户态变为内核态
  • 中断的分类

    • 内中断(也称“异常、例外”)

      与当前执行的指令有关,
      中断信号的来自CPU内部

      • 陷阱

        由陷入指令引发,是应
        用程序故意引发的,用于系统调用

      • 故障

        由错误条件引起的,可能被
        内核程序修复。内核程序修
        复故障后会把 CPU使用权还
        给应用程序,让它继续执行
        下去。如:缺页故障。

      • 终止

        由致命错误引起,内核程序无法
        修复该错误,因此一般不再将CPU
        使用权还给引发终止的应用程序,
        而是直接终止该应用程序。如:
        整数除0、非法使用特权指令

    • 外中断(也称“中断”)

      与当前执行的指令无关,
      中断信号的来自CPU外部

      • 时钟中断
      • I/O中断请求
  • 中断的处理过程

    • 每条指令执行结束后,CPU检查是否有外部中断信号
    • 如果有外部中断信号,则需要保护被中断进程的CPU环境
    • 根据中断信号类型转入相应的中断处理程序
    • 恢复原进程的CPU环境并退出中断,返回原进程继续往下执行

系统调用

“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用
程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务

  • 为什么要用

    • 同时打印例子-保证系统的稳定性和安全性
  • 是什么

    • 操作系统对应用程序/程序员提供的接口
  • 适用范围

    • 与共享资源有关的操作(如存储分配、I/O操作、文件管理、设备管理等)
  • 和库函数的区别

    • 有的库函数是对系统函数的进一步封装
    • 有的库函数没有使用系统调用
  • 调用过程

    • 1.传递系统调用参数
    • 2.执行陷入/Trap/访管指令
    • 3由操作系统内核程序处理系统调用请求
    • 4.返回用户程序

运行机制和体系结构

  • 运行机制

    • 指令

      • 特权指令
      • 非特权指令
    • 处理器状态

      • 核心态
      • 用户态
    • 程序

      • 内核程序
      • 应用程序
  • 操作系统内核

    • 时钟管理

      • 实现计时功能
    • 中断处理

      • 负责实现中断机制
    • 原语(设备驱动,cpu切换等)

      • 是一种特殊的程序
      • 处于操作系统最底层,是最接近硬件的部分
      • 这种程序运行具有原子性–运行不可中断
      • 运行时间较短,调用频繁
    • 对系统资源进行管理的功能

      • 进程管理
      • 存储器管理
      • 设备管理
  • 体系结构

    • 大内核-类比创业公司,管理员多职务

      • 优:高性能
      • 缺:代码庞大,结构混乱,维护困难
    • 微内核-类比大公司,管理员职务单一

      • 优:内核功能少,结构清晰,方便维护
      • 缺:需要频繁地在内核态和用户态之间切换,性能低

进程

概念

  • 定义

    • 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
  • 组成

    PCB是给操作系统用的,程序段、数据段是给进程自己用的。

    • PCB

      PCB是进程存在的唯一标志。

      • 进程描述信息
      • 进程控制和管理信息
      • 资源分配清单
      • 处理机相关信息
    • 程序段

      • 存放要执行的程序代码
    • 数据段

      • 存放程序运行过程中处理的各种数据
  • 组织形式

    • 链接方式

      • 按进程状态将PCB分为多个队列
    • 索引方式

      • 按照进程状态建立几张索引表,各表项指向一个PCB
  • 特征

    • 动态性

      • 进程最基本的特性
    • 并发性

    • 独立性

      • 进程是系统进行资源分配、调度的独立单位
    • 异步性

      • 各进程以不可预知的速度向前推进,可能导致进程结果的不确定性
    • 结构性

进程状态

  • 状态

    • 创建态

      • 进程正在被创建,操作系统为进程分配资源、初始化、PCB
    • 就绪态

      • 万事俱备,只欠CPU:已经具备运行条件,但由于没有空闲CPU,暂时不能运行
    • 运行态

      • 占有CPU资源,并在CPU上运行
    • 阻塞态/等待态

      • 因等待某一事件而暂时不能运行
    • 终止态

      • 进程正从系统中撤销,操作系统会回收进程拥有的资源、撤销PCB
  • 状态之间的转换

    • 就绪-运行

      • 进程被调度
    • 运行-就绪

      • 时间片到,或CPU被其他高优先级的进程抢占
    • 运行-阻塞

      • 等待系统资源分配,或等待某时间发生。(中断处理)是主动行为
    • 阻塞-就绪

      • 资源分配到位,等待的事件发生。是被动行为
    • 创建-就绪

      • 系统完成创建进程相关的工作
    • 运行-终止

      • 进程运行结束,或运行过程中遇到不可修复的错误。如除0

进程控制

  • 基本概念

    • 进程控制就是实现进程状态之间的转换

    • 进程控制用原语实现

      • 原语用关/开中断实现

        原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。
        可以用 “关中断指令”和“开中断指令”这两个特权指令实现原子性

      • 原语是一种特殊的程序

      • 原语的执行必须一气呵成,不可中断

  • 相关原语

    进程控制会导致进程状态的转换。无论哪个进程控制原语,要做的无非三类事情:

    1. 更新PCB中的信息
      a. 所有的进程控制原语一定都会修改进程状态标志
      b. 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
      c. 某进程开始运行前必然要恢复期运行环境
    2. 将PCB插入合适的队列
    3. 分配/回收资源
    • 进程的创建
    • 进程的终止
    • 进程的阻塞
    • 进程的唤醒
    • 进程的切换

进程通信

  • 共享存储

    • 设置一个共享空间

    • 要互斥地访问共享空间

    • 两种方式

      • 基于数据结构(低级)
      • 基于存储区的共享(高级)
  • 管道通信

    • 设置一个特殊的共享文件(管道),其实就是一个缓冲区
    • 一个管道只能实现半双工通信
    • 实现双向同时通信要建立两个管道
    • 各进程要互斥访问管道
    • 写满时,不能再写。读空时,不能再读。
    • 没写满,不能读。没读空,不能再写
  • 消息传递

    • 传递结构化的消息(消息头/消息体)

    • 系统提供“发送/接受原语“

    • 两种方式

      • 直接通信方式

        • 消息直接挂到接收方的消息队列里
      • 间接(信箱)通信方式

        • 消息先发到中间体(信箱)

线程、多线程模型

  • 概念

    • 可理解为“轻量级进程”
    • 可增加并发度,减少并发带来的开销
  • 引入线程机制后,和传统的进程机制对比

    • 资源分配、处理机调度
    • 并发性
    • (实现并发的)开销
  • 重要属性

    • 线程是处理机调度的单位,进程是资源分配的单位
    • 同一进程的各线程共享进程进程拥有的资源
    • 同一进程内的线程切换不会导致进程切换
  • 实现方式

    • 用户级线程

      • 从用户视角看的线程
    • 内核级线程

      • 从操作系统视角看的线程(内核级线程才是处理机分配的单位)
    • 组合方式

      • 上述两种方式的组合
  • 多线程模型

    • 多对一模型

      • 优:进程管理开销小效率高
      • 缺:一个线程阻塞会导致整个进程都被阻塞(并发度低)
    • 一对一模型

      • 优:各个线程可分配到多核处理机并执行,并发度高
      • 缺:进程管理开销大
    • 多对多模型

      • 集合了两者的优点

进程互斥和同步

  • 概念

    • 进程同步

      • 解决进程异步后不能按照指定的先后顺序执行的问题
    • 进程互斥

      • 对临界资源的访问,需要互斥的进行,即同一时间段内只能允许一个进程访问该资源

      • 四个部分

        • 进入区

          • 检查是否可进入临界区,若可进入,需要“上锁”
        • 临界区

          • 访问临界资源的那段代码
        • 退出区

          • 负责“解锁”
        • 剩余区

          • 其余代码部分
      • 需要遵循的原则

        • 空闲让进

          • 临界区空闲时间,应允许一个进程访问
        • 忙则等待

          • 临界区正在被访问时,其他试图访问的进程需要等待
        • 有限等待

          • 要在有限时间内进入临界区,保证进程不会饥饿
        • 让权等待

          • 进入不了临界区的进程,要释放处理机,防止忙等
  • 进程互斥软件实现方法

    • 单标志法

      • 在进入区只做“检查”,不上锁
      • 违背“空闲让进”原则
    • 双标志先检查法

      • 在进入区先“检查”,后“上锁”,退出区“解锁”
      • 违背“忙则等待”原则
    • 双标志后检查法

      • 在进入区“先加锁”后检查,退出区“解锁”
      • 解决了“忙则等待”,但违背“空闲让进”、“有限等待”原则
    • Peterson算法

      • 在进入区“主动争取-主动谦让-检查对方是否想进、己方是否谦让”
      • 不遵循让权等待
  • 进程互斥硬件实现方法

    • 中断屏蔽方法

      • 使用“开/关中断”指令实现
      • 优点:简单高效
      • 缺点:只适用于单处理机、操作系统内核进程
    • TestAndSet(Ts指令/TSL指令)

      • 优点:实现简单,使用多处理机环境
      • 缺点:不满足“让权等待”
    • Swap指令(XCHG指令)

      • 优点:实现简单,使用多处理机环境
      • 缺点:不满足“让权等待”
  • 信号量机制

    • 整形信号量

      • 用一个整数型变量作为信号量,数值表示某种资源数
      • 对信号量只能执行初始化、P、V三种操作
      • 不满足让权等待原则
    • 记录型信号量

      • S.value表示某种资源数,S.L指向等待该资源的队列
      • P操作中,一定是S.value–,之后可能需要执行block原语
      • V操作中,一定是S.value++,之后可能需要执行wakeup原语
      • 可以用记录型信号量实现系统资源的申请和释放
      • 可以用记录型信号量实现进程互斥、进程同步
    • 信号量实现进程互斥

      • 设置互斥信号量,初始值为1
      • 临界区之前对信号量执行P操作
      • 临界区之后对信号量执行V操作
    • 信号量实现进程同步

      • 设置同步信号量,初始值为0
      • 在“前操作”之后执行V操作
      • 在“后操作”之前执行P操作
  • 管程

    • 为什么要引入

      • 解决信号量机制编码麻烦、易出错的问题,封装成一个对象,通过函数调用
    • 组成

      • 共享数据结构
      • 对数据结构的初始化语句
      • 调用数据结构的函数
    • 基本特征

      • 各外部进程/线程只能通过访问特定的“入口”才能访问共享数据
      • 每次仅允许一个进程在管程内执行某个内部过程
    • 其他

      • 各进程必须互斥访问管程的特性是由编译器实现的
      • 可在管程中设置条件变量及等待/唤醒操作以解决同步问题
      • 在java中通过关键字synchronized实现

死锁

  • 概念

    • 各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进

    • 死锁、饥饿、死循环

      • 死锁:至少两个进程一起死锁,死锁进程处于阻塞态
      • 饥饿:可以只有一个进程饥饿,饥饿进程可能阻塞也可能就绪
      • 死循环:可能只有一个进程发生死循环,死循环的进程可上处理机
      • 死锁和饥饿是操作系统要解决的问题,死循环是应用程序员要解决的
    • 死锁产生的条件

      • 互斥条件

      • 不剥夺条件

      • 请求和保持条件

        • 保持着某些资源不放的同时,请求别的资源
      • 循环等待条件

        • 存在一种进程资源的循环等待
        • 循环等待未必死锁,死锁一定有循环等待
    • 什么时候会发生

      • 对不可剥夺资源的不合理分配
  • 处理策略

    • 预防死锁:破坏死锁产生的四个必要条件

      • 破坏互斥条件

        • 将临界资源改造为可共享使用的资源(如SPOOLing技术)
        • 缺点:可行性不高,很多时候无法破坏互斥条件
      • 破坏剥夺条件

        • 申请资源得不到满足时,立即释放拥有的资源
        • 申请的资源被其他进程占用时,由操作系统协助剥夺(考虑优先级)
        • 缺点:实现复杂;剥夺资源可能导致部分工作失效;反复申请和释放导致系统开销大;可能导致饥饿
      • 破坏请求和保持条件

        • 运行前配好所有需要的资源,之后一直保持
        • 缺点:资源利用率低,可能导致饥饿
      • 破坏循环等待条件

        • 给资源编号,必须按编号从小到大的顺序申请资源
        • 缺点:不方便增加新设备;会导致资源浪费;用户编程麻烦
    • 避免死锁:避免系统进入不安全状态

      • 银行家算法

        • 1.检查此次申请是否超过了之前声明的最大需求数
        • 2.检查此时系统剩余的可用资源是否还能满足此次请求
        • 3.试探着分配,更改各数据结构
        • 4.用安全性算法检查此次分配是否会导致系统进入不安全状态
      • 安全性算法

        • 检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收
        • 不断重复上述过程,看最终是否能让所有进程进入安全序列
    • 死锁的检测和解除:允许死锁发生,系统负责检测出死锁并解除

      • 检测

        • 数据结构:资源分配图

          • 两种节点

            • 进程节点
            • 资源节点
          • 两种边

            • 进程节点->资源节点
            • 资源节点->进程节点
        • 死锁检测算法

          • 依次消除与不阻塞进程(申请资源数足够的进程)相连的边,直到无边可消
          • 死锁定理:若资源分配图是不可完全简化的,说明发生了死锁
      • 解除

        • 资源剥夺法
        • 撤销进程法(终止进程法)
        • 进程回退法

处理机调度

基本概念

  • 按某种算法选择一个进程将处理机分配给它

  • 三个层次

    • 高级调度(作业调度)

      • 按照某种规则,从后备队列中选择合适的作业将其调入内存,并为其创建进程
    • 中级调度(内存调度)

      • 按照某种规则,从挂起队列中选择合适的进程将其数据调回内存
    • 低级调度(进程调度)

      • 按照某种规则,从就绪队列中选择一个进程为其分配处理机
  • 三层调度的联系、对比

    • 高级调度

      • 外存->内存(面向作业)
      • 发生频率:最低
    • 中级调度

      • 外存->内存(面向进程)
      • 发生频率:中等
    • 低级调度

      • 内存->CPU
      • 发生频率:最高

进程调度

  • 时机

    • 什么时候需要进程调度

      • 主动放弃

        • 进程正常终止
        • 运行过程中有异常终止
        • 主动阻塞(等待I/O)
      • 被动放弃

        • 分给进程的时间片用完
        • 有更晋级的事情需要处理(I/O中断)
        • 有更高优先级的进程进入就绪队列
    • 什么时候不能进程调度

      • 在处理中断的过程中
      • 进程在操作系统内核程序临界区中
      • 原子操作过程中(原语)
  • 切换与过程

    • 切换过程

      • 对原来运行进程各种数据的保存
      • 对新的进程各种数据的恢复
    • 结论

      • 进程调度、切换是有代价的
      • 并不是调度越频繁,并发度就越高
  • 方式

    • 非剥夺调度方式(非抢占式)

      • 只能由当前运行的进程主动放弃CPU
    • 剥夺调度方式(抢占式)

      • 可由操作系统剥夺当前进程的CPU使用权

算法调度评价指标

  • CPU/设备利用率

    • 忙碌时间/总时间
  • 系统吞吐量

    • 单位时间内完成了多少作业量
  • 周转时间

    • 周转时间:作业完成时间-作业提交时间
    • 平均周转时间
    • 带权周转时间:作业周转时间/作业实际运行时间
    • 平均带权周转时间
  • 等待时间

    • 进程/作业处于等待处理机状态时间之和
  • 响应时间

    • 从用户提交请求到首次产生响应所用的时间

调度算法分类

  • 先来先服务

    • 优点:公平
    • 缺点:对短作业不利
    • 是否会导致饥饿:不会
    • 是否可抢占:否
  • 短作业优先

    • 优点:“最短的”平均等待/周转时间
    • 缺点:对长作业不利
    • 是否导致饥饿:会
    • 是否可抢占:是
  • 高响应比

    • 结合了上面两种
    • 是否会饥饿:会
    • 是否可抢占:否
  • 时间片轮转

    • 时间片不能太大,太大了会退化为先来先服务
    • 时间片太小,进程切换频繁
    • 优:公平,相应快,适用分时操作系统
    • 缺:高频切换需要一定的开销,而且不区分任务的紧急程度
    • 是否导致饥饿:不会
    • 是否可抢占:是
  • 优先级调度

    • 优:可以用优先级区分各种紧急程度、重要程度,适用于实时操作系统
    • 缺:若一直有高优先级的进程进来,则低优先级的进程会饥饿
    • 是否饥饿:是
    • 是否可抢占:是
  • 多级反馈队列算法

    • 对其他的算法进行权衡
    • 是否可抢占:是
    • 是否饥饿:是
    • 优点:平衡优秀666

内存

基础知识

  • 概念

    • 内存可存放数据
    • 缓和CPU与硬盘之间的速度矛盾
    • 按字节编址vs按字编址
  • 进程运行基本原理

    • 指令的工作原理

      • 操作码+若干参数(可能包含地址参数)
    • 逻辑地址(相对地址)vs物理地址(绝对地址)

    • 过程

      • 编辑源代码文件

        • .java编辑文件
      • 编译

        • 由源代码生成目标代码(高级语言翻译为机器语言)
        • .class编译文件
      • 链接

        • 由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块,链接后形成完整的逻辑地址
        • .obj目标文件
      • 装入

        • 由装入模块装入内存运行,装入后形成物理地址
        • .exe可执行文件
      • 三种链接方式

        • 静态链接
        • 装入时动态链接
        • 运行时动态链接
      • 三种装入模式

        • 绝对装入
        • 可重定位装入
        • 动态运行时装入

内存空间的分配

  • 连续分配管理方式

    • 碎片

      • 内部碎片

        • 分配给某进程的内存区域中,如果有些部分没有用上
      • 外部碎片

        • 是指内存中的某些空闲分区由于太小而难以利用
    • 单一连续分配

      • 只支持单道程序,内存分为系统区和用户区,用户程序放在用户区
      • 无外部碎片,有内部碎片
    • 固定分区分配

      • 支持多道程序,内存用户空间分为若干个固定大小的分区,每个分区只能装一道作业

      • 无外部碎片,有内部碎片

      • 两种分区方式

        • 分区大小相等
        • 分区大小不等
    • 动态分区分配

      • 支持多道程序,在进程装入内存时,根据进程的大小动态地建立分区

      • 无内部碎片,有外部碎片

      • 外部碎片可用“紧凑”技术来解决

      • 相邻的空间分区要合并

      • 算法

        • 首次适应算法

          • 思想:从头到尾找合适的分区
          • 排序:空闲地区以地址递增次序排列
        • 最佳适应算法

          • 思想:优先使用更小的分区,以保留更多更大的分区
          • 排序:空闲分区以容量递增排列
        • 最坏适应算法

          • 思想:优先使用更大的分区,以防止产生太小的不可用的碎片
          • 排序:空闲分区以容量递减排列
        • 领近适应算法

          • 思想:在首次适应算法的基础上,每次从上次查找结束位置开始查找
          • 排序:空闲分区以地址递增排列
  • 非连续分配管理方式

    • 基本分页存储管理

      • 思想

        • 把进程分页,各个页面可离散地放到各个的内存块中
      • 计算

        • 页号=逻辑地址/页面大小
        • 页内偏移量=逻辑地址%页面大小
      • 页表

        • 页表记录进程页面和实际存放的内存块之间的对应关系
        • 一个进程对应一张页表,进程的每一页对应一个页表项,每个页表项由“页号”和“块号”组成
        • 每个页表项的长度是相同的
      • 如何实现地址转换

        • 1.计算出逻辑地址对应的页号
        • 2.找到对应页面在内存中的存放位置
        • 3.算出逻辑地址对应的页内偏移量
        • 4.物理地址=页面初始值+页面偏移量
      • 二级分页

        • 一级分页存在的问题

          • 所有页表必须连续存放,页表过大时需要很大的连续空间
          • 在一段时间内并非所有页面都用得到,因此没必要让整个页表常驻内存
        • 逻辑地址结构:(一级页号,二级页号,页内偏移量)

        • 如何实现地址转换

          • 按照地址结构将逻辑结构拆分成三部分
          • 从PCB中读出页目录表始址,根据一级页号查页目录表,找到下一级页表在内存中的存放位置
          • 根据二级页号查表,找到最终想访问的内存块号
          • 结合页内偏移量得到物理地址
    • 快表

      • 是一种访问速度比内存快很多的高速缓存

      • 用来存放最近访问的页表项的副本

      • 类似程序执行中的redis缓存

      • 引入快表后,地址转换会根据页号找快表

        • 如果快表中没有值,则去找页表,然后把找到的值赋给快表
        • 如果快表中有值,则直接从快表中取值
    • 基本分段存储管理

      • 分段

        • 将地址空间按照程序自身的逻辑关系划分为若干个段,每段从0开始编址
        • 每个段在内存中占据连续空间,但各段之间可以不相邻
        • 逻辑地址结构:(段号,段内地址)
      • 地址变换

        • 1.由逻辑地址得到段号、段内地址
        • 2.段号与段表寄存器中的段长度比较,检查是否越界
        • 3.由段表始址、段号找到对应段表项
        • 4,根据段表中记录的断肠,检查段内地址是否越界
        • 5.由段表中的“基址+段内地址”得到最终的物理地址
        • 6.访问目标单元
      • 分段vs分页

        • 分页的主要目的是为了实现离散分配,提高内存利用率。分段的主要目的是更好地满足用户需求
        • 分页对用户不可见,分段对用户可见
        • 程序员操作分段更容易
        • 分段更容易实现信息的共享和保护
        • 分页(单级页表)、分段访问一个逻辑地址都需要两次访文内存,分段存储中也可以引入快表机构
    • 段页式管理

      • 先分段+后分页

        • 将地址空间按照 程序自身的逻辑关系划分为若干个段,在将各段分为大小相等的页面
        • 将内存空间分为与页面大小相等的一个个内存,系统以块为单位为进程分配内存
        • 逻辑地址结构:(段号,页号,页内偏移量)
      • 分段和分页的缺点

        • 分页不方便按照逻辑模块实现信息的共享和保护
        • 分段如果段长过大,为其分配很大的连续空间不方便。而且段氏管理会产生外部碎片
      • 地址变换

        • 1.由逻辑地址得到段号,页号,页内偏移量
        • 2.段号与段表寄存器中的段长度比较,检查是否越界
        • 3.由段表始址、段号找到对应的段表项
        • 4.根据段表中记录的页表长度,检查页号是否越界
        • 5.由段表汇总的页表地址、页号得到查询页表,找到相应的页表项
        • 6.由页面存放的内存块号、页内偏移量得到最终的物理地址
        • 7.访问目标单元
      • 访问次数

        • 第一次查段表,第二次查页表,第三次访问目标单元
        • 可引入快表机构

内存空间的扩充(实现虚拟性)

  • 覆盖技术

    • 一个固定区

      • 存放最活跃的程序段
      • 固定区的程序段在运行过程中不会调入调出
    • 若干覆盖区

      • 不可能同时被访问程序段可共享一个覆盖区
      • 覆盖区中的程序段在运行过程中会根据需要调入调出
    • 必须由程序员声明覆盖结构,操作系统完成自动覆盖

    • 覆盖技术只用于早期的操作系统中,现在已成为历史。

    • 缺点:对用户不透明,增加了用户编程负担。

  • 交换技术

    • 内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中
      某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
    • 磁盘分为文件区和对换区,换出的进程放在对换区
  • 覆盖和交换的区别

    • 覆盖是同一个程序或者进程中的
    • 交换是在不同的进程(作业)之间的
  • 虚拟内存

    基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行。
    在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续
    执行程序。
    若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。
    在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存。

    • 基本概念

      • 传统存储管理方式的缺点

        • 一次性:作业数据必须一次全部调入内存
        • 驻留性:作业数据在整个运行期间都会常驻内存
      • 局部性原理

        • 时间局部性:现在访问的指令、数据在不久之后很可能被再次访问
        • 空间局部性:现在访问的内存单元周围的内存空间,很可能在不就后会被访问
        • 高速缓存技术:使用频繁的数据放到更高速的存储器中
      • 虚拟内存的定义和特征

        • 程序不需全部装入即可运行,运行时根据需要动态调入数据,若内存不够,还需换出一些数据

        • 特征

          • 多次性:无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存
          • 对换性:无需在作业运行时一直常驻内存,而是允许在作业运行过程中,将作业换入、换出
          • 虚拟性:从逻辑上扩充了内存容量,使用户看到的内存容量,远大于实际的容量
      • 如何实现虚拟内存技术

        • 访问信息不在内存时,由操作系统负责将所需的信息从外存调入内存(请求调页功能,缺页中断)

        • 内存空间不够时,将内存中暂时用不到的信息换出到外存(页面置换功能)

        • 虚拟内存的实现

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

      • 页表机制

        • 在基本分页的基础上增加了几个表项
        • 状态位:表示页面是否已在内存中
        • 访问字段:记录最近被访问过几次,或记录上次访问的时间,供置换算法选择换出页面时参考
        • 修改位:表示页面调入内存后是否被修改过,只有修改过的页面才需要在置换时写回外存
        • 外存地址:页面在外存中存放的位置
      • 缺页中断机构

        • 找到页表项后检查页面是否已在内存,若没在内存,产生缺页中断
        • 缺页中断处理中,需要将目标页面调入内存,内存满时还要换出页面
        • 缺页中断属于内中断,属于内中断中的“故障”,即可能被系统修复的异常
        • 一条指令在执行过程中可能产生多次缺页中断
      • 地址变换(与基本分页不同的地方)

        • 找到页表项需要检查页面是否在内存中
        • 若页面不在内存中,需要请求调页(缺页中断)
        • 若内存空间不够,还需要换出页面
        • 页面调入内存后,需要修改相应页面项
    • 页面置换算法

      • 最佳置换算法(OPT)

        • 规则:优先淘汰未来不会被访问的页面
        • 优缺点:缺页率最小,性能最好,但无法实现
      • 先进先出置换算法(FIFO)

        • 规则:优先淘汰最先进入内存的页面
        • 优缺点:实现简单,但性能差
      • 最近最久未使用置换算法(LRU)

        • 规则:优先淘汰最近最久没访问的页面
        • 优缺点:性能很好,但需要硬件支持,算法开销大
      • 时钟置换算法/最近未用算法(CLOCK)

        • 规则:(访问位)的方式,有访问的页面值为1,循环扫描各页面第一轮淘汰访问=0的,并将扫描过的页面访问位改为1。1轮没中,进行第二轮
        • 优缺点:实现简单,算法开销小,但未考虑页面是否被修改过
      • 改进型时钟置换算法CLOCK

        • 规则:(访问位,修改位)的形式,
          第一轮,淘汰(0,0)也就是没有访问也没有修改过的。
          第二轮,淘汰(0,1)也就是没有访问但修改过的,并且扫描后将1变为0
          第三轮,淘汰(0,0)也就是有访问但是没有修改过的
          第四轮,淘汰(1,0)也就是有访问且有修改过的
        • 优缺点:算法开销小,性能也好
    • 页面分配策略

      • 驻留集

        • 指请求分页存储管理中给进程分配的内存块的集合
      • 置换策略

        • 固定分配vs可变分配:区别在于进程运行期间助留集大小是否可变
        • 局部置换vs全局置换:区别在于发生缺页时是否只能从进程自己的页面中选择一个换出
      • 抖动(颠簸)现象

        • 页面频换换入换出的现象,主要原因是分配给进程的物理块不够

内存管理

  • 地址转换

    • 操作系统负责实现逻辑地址到物理地址的转换

    • 三种方式

      • 绝对装入
      • 可重定位装入
      • 动态运行时装入
  • 存储保护

    • 保证各进程在自己的内存空间内运行,不会越界访问

    • 两种方式

      • 设置上下限寄存器
      • 利用重定位寄存器、界地址寄存器进行判断

文件管理

基础

  • 定义:一组有意义的信息的集合
  • 属性:文件名、标识符、类型、位置、大小、保护信息等
  • 文件内部应该如何组织(文件的逻辑结构)
  • 文件之间应该如何被组织(目录结构)

文件的逻辑结构

  • 无结构文件

    • 文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。如:Windows 操作系统中的 .txt 文件
  • 有结构文件

    • 由记录组成,分为定长记录、可变长记录

    • 逻辑结构

      • 顺序文件

        • 串结构:记录顺序与关键字无关
        • 顺序结构:记录按关键字顺序排列
        • 可变长记录的顺序文件无法实现随机存取,定长记录可以
        • 最大缺点:不方便增加/删除 记录
      • 索引文件

        • 建立一张索引表,每个记录对应一个表项。各记录不用保持顺序,方便增加/删除记录
        • 索引表本身就是定长记录的顺序文件,一个索引表就是一条定长记录,因此索引文件可支持随机存取
        • 若索引表按关键字顺序排列,则可支持快速检索
        • 解决了顺序文件不方便增/删记录的问题,同时让不定长记录的文件实现了随机存取。但索引表可能占用很多空间。
      • 索引顺序文件

        • 将记录分组,每组对应一个索引表项
        • 检索记录时先顺序查索引表,找到分组,再顺序查找分组
        • 当记录过多时,可建立多级索引表

文件目录

  • 文件目录的实现

    • 一个文件对应一个FCB,一个FCB就是一个目录项,多个FCB组成文件目录
    • 对目录的操作:搜索、创建文件、删除文件、显示文件、修改文件
  • 目录结构

    • 单级目录结构

      • 一个系统只有一张目录表,不允许文件重名
    • 两级目录结构

      • 不同用户的文件可以重名,但不能对文件进行分类
    • 多级(树形)目录结构

      • 不同目录下的文件可以重名,可以对文件进行分类,不方便文件共享
      • 系统根据“文件路径”找到目标文件
      • 从根目录出发的是“绝对路径”
      • 从“当前目录”出发的路径是“相对路径”
    • 无环图目录结构

      • 在树形目录结构基础上,增加一些指向同一节点的有向边,使整个目录成为一个有向无环图
      • 为共享节点设置一个共享计数器,计数器为0时才真正删除该节点
  • 索引结点

    • 除了文件名之外的所有信息都放到索引结点中,每个文件对应一个索引结点
    • 目录项中只包含文件名、索引结点指针,因此每个目录项的长度大幅减小
    • 由于目录项长度减小,因此每个磁盘块可以放跟多的目录项,检索文件时磁盘的I/O的次数就少了很多

操作系统-思维导图整理相关推荐

  1. redis源码剖析(十六)——服务端思维导图整理

    redis服务端思维导图整理

  2. 有理数思维导图,七年级数学思维导图整理

    最近在整理有理数思维导图的时候突然发现,叫了这么多年的"有理数"竟然是个错误的叫法!看完安利后,瞬间觉得自己这么些年的数学是不是白学了!有理数可谓是数学学习过程中必备知识点,那今天 ...

  3. 考研马原 知识点 做题技巧 同类比较 重要会议 1800易错题 思维导图整理

    本文的思维导图将考研马原进行了整理并标记出重点内容,同时对于同类事件,按时间顺序的时间都进行了整理,而且对于1800中的易错题目等重点内容也有整理 思维导图源文件已经发布在我的资源当中,有需要的可以去 ...

  4. Java基础编程及思维导图整理

    我把Java基础编程及思维导图整理的超级详细,小白都能看懂 Java基础编程及其思维导图 目录: Java学习导图 一.Java基本语法 1.关键字与标识符 2.变量分类 3.运算符 4.流程控制 二 ...

  5. 考研思修 知识点 做题技巧 同类比较 重要会议 1800易错题 思维导图整理

    本文的思维导图将考研思修进行了整理并标记出重点内容,而且对于1800中的易错题目等重点内容也有整理 思维导图源文件已经发布在我的资源当中,有需要的可以去 我的主页 了解更多学科的精品思维导图整理 本文 ...

  6. 思维导图整理大厂面试高频数组23: 股票问题大总结, 彻底搞懂股票问题

    此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...

  7. ❤️思维导图整理大厂面试高频数组: 两万字详解各种数组求和(建议收藏)❤️

    此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...

  8. ❤️思维导图整理大厂面试高频数组19: 股票问题III的dp数组构建/初始化和空间优化难点, 力扣123❤️

    此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...

  9. ❤️思维导图整理大厂面试高频数组20: 股票问题IV的dp数组构建和几个重要注意点❤️

    此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...

最新文章

  1. CentOS7系统上Kubernetes集群搭建
  2. 修改Sublime Text3左侧导航字号大小及行高
  3. java 中线程池的种类,原理以及源码解析(1)
  4. 华为交换机初始化_华为交换机恢复出厂设置
  5. 中国重汽微服务管理_springcloud微服务架构实战:商家管理微服务设计
  6. 同一页面实现多个Tab选项卡功能
  7. 用U盘安装一个Linux系统
  8. maven配置testng_TestNG Maven Surefire插件配置
  9. html列自动变高,HTML_CSS三行三列DIV高度自适应的设置,用脚本控制三行三列div高度自 - phpStudy...
  10. Git和SourceTree配合使用
  11. C++总结学习(一)
  12. 问答列表html,HTML这个样子的图文列表怎么写
  13. linux 交叉编译 makefile,简单谈谈Makefile和交叉编译工具链
  14. elasticsearch自定义分词器---拼音分词器
  15. 结构化、半结构化和非结构化数据
  16. ios vue 添加本地音乐_苹果手机vue怎么添加自己的音乐
  17. windows下网络诊断基本命令
  18. TouchEvent
  19. 华硕主板固态硬盘不识别_华硕主板认不到固态硬盘怎么办?
  20. 使用 WordPress快速个人建站指南

热门文章

  1. 什么是字面量?(小白理解
  2. 视频太大怎么在线压缩变小
  3. 【机器学习】线性回归(理论)
  4. 【JUnit学习笔记】1:使用JUnit4进行简易单元测试的例子
  5. 一些通信方面的专业术语
  6. 2011年4月全球企业市值排名前100
  7. Layer弹出层销毁的问题
  8. 反向放大器的缺点-运算放大器-运放
  9. IDA 和 IDA-Python 学习笔记
  10. 文章详情 html代码,文章详情页.html