- 操作系统是运行在内核态的操作软件
- 操作系统的主要任务隐藏硬件 ,呈现给程序一些抽象
- 作为资源管理的操作系统 现代计算机包含处理器 存储器 时针 磁盘 鼠标 网络接口等
- 操作系统的任务的主要任务是记录那个程序在使用什么资源,对资源进行请求分配,评估使用代价,并且为不同程序和用户调解
- 互相冲突的资源请求
- 多路复用 空间复用
- 进程: 进程本质上是正在执行的一个程序
- 命令解释器 shell的进程从终端读命令
- 地址空间:每台计算机都有一些主存 ,用来保存正在执行的程序,简单操作系统中,如果运行第二个程序,第一个程序必须移出内存
- 多程序设计
- 进程的创建 守护进程
- 进程的层次结构
- 进程的状态: 运行态 就绪态 阻塞态
- 进程的实现: 为了实现进程模型 , 操作系统维护着一张表格 叫做 进程表
- 多道程序设计模型
- 线程: 由于线程比进程更轻量级 所以他们更容易创建 撤销
- 轻量级进程
- 进程中的不同线程不像不同进程之间那样存在很大的独立性。 所有的线程都有完全一样的地址空间 这意味着他们共享同样的全部变量
- 进程间通信 : 竞争条件 临界区 忙等待的互斥 屏蔽中段 锁变量
- 所以在等待一个循环 不停的测试 叫忙等待 用于忙等待的锁 叫做自旋锁
- 生产者 消费者 问题 有界缓存区 消费者的代码 首先检测count 是否为0 如是则睡眠
- 信号量的另一种用途 用于实现同步
- pthread中的互斥量 : 一个线程想要进入临界区 ,它首先尝试解锁相关的互斥量 另一种同步机制: 条件变量 生产者使用互斥量可以进行原子检查
*调度 调度程序 调度算法
- 进程行为
- 共同的目标是保持系统的所有部分尽可能忙碌 吞吐量 周转时间 CPU利用率 最小响应时间
- 批处理的系统中的调度
- 最短作业优先 最短剩余时间优先
- 交互系统中的调度 轮转调度 优先级调度
- 哲学家就餐问题
- 分层存储器体系 高速缓存 和磁盘
- 存储管理器 : 记录那些内存正在使用 那些内存是空闲的 ,在进程需要时为其 分配内存,在进程使用完成后释放内存
- 我们希望每个程序都使用一套私有的本地地址来进行内存寻址
- 地址空间是一个进程可用于寻址内存的一套地址集合,每个进程都有一个自己的地址空间,并且这个地址空间 地独立于其他进程的地址空间
*这个简单的解决办法是使用动态重定位 ,简单的把每个进程的地址空间映射到物理内存的 不同部分
- 交换技术 虚拟内存
- 内存紧缩
- 空闲内存管理: 在动态分配内存时,操作系统进行管理
- 使用链表的存储管理
- 虚拟内存 : 每个程序拥有自己的空间地址 ,这个空间被分割成多个块 每一页称为一页,每一页有连续的地址空间 内存管理单元把虚拟地址映射成虚拟地址
- 缺页中断 或者缺页错误
- 内存管理单元
-
讨论加速分页机制和处理大的虚拟地址空间的实现方案 先介绍加速分页问题
-
相联存储器 或者 快表
-
软甲TLB管理
-
针对大内存的页表
-
多级页表
-
页目录指针表
*当发生缺页中断,操作系统必须在内存中选择一个页面将其换出内存 ,以便为即将调入的页面腾出空间
- 虚拟内存的换页机制就是为了透明的满足这样一个场景: 多任务进程
- 换出 : 虚拟页处于已经分配但是未映射物理内存的状态
- 缺页异常 : 当应用程序访问已分分配但未映射至物理内存的虚拟页时
- 利用换页机制 操作系统可以把物理内存放不下的数据临时存放到磁盘上,等到需要的时候再放回物理内存,从而实现 能够为应用程序提供超过物理内存容量的内存空间
- 预取机制 当发生换入操作时 ,预测还有哪些页面即将被访问 ,提前将他们一并换入物理内存 从而减少缺页异常的次数
- 按需页分配
- 共享库
- 所有的计算机应用程序存储和检索信息
- 能够存储大量信息
- 使用的信息的进程终止时,信息仍旧存在
- 必须能使多个进程并发访问有关信息
####文件结构
####文件类型
####文件访问
####文件属性 ####文件操作 create delete open close read write ####目录管理
- 一级目录系统
- 层次目录系统
- 路径名 绝对路径名
- 相对路径名 工作目录
- 每个进程都有自己的工作目录
- 目录操作
####文件系统的实现
- 文件系统布局
- 文件的实现
- 连续分配
- 链表分配: 存储文件的第二个方法为每个文件构造磁盘块列表
- 采用内存中的表进行链表分配
- 文件分配表
- 将查找结果存入高速缓存
- 日志结构文件系统
####文件系统性能
*减少磁盘访问次数 块高速缓存 或者 缓存区高速缓存
###第五章输入/输出
- IO设备 分为块设备 和字符设备
- 电子部件称做设备控制器 或者适配器
- 内存映射IO
- 在计算机设计中,实际上任何事情都要设计权衡
- 现代个人计算机趋势是包含专有的高速内存总线
- 直接存储器存取 DMA: 包含一个地址寄存器 ,一个字节 计数寄存器 一个或者多个寄存器
- 大多数DMA使用物理地址进行传送 ,然后DMA控制器 必须使用MMU来完成虚拟地址到物理地址的转换
- 在DMA开始之前 ,磁盘首先要将数据读入其内部的缓冲区中 通过进行内部缓存 磁盘控制器可以在开始传送之前检验校验和
- 精确中断 和 不精确中断
- 冯洛伊曼结构: 1. 中央处理单元 2. 存储器 3. 输入输出
- 指令集:通常包含一系列不同功能的指令 用于数据搬移计算 内存访问 过程调用
- 数据搬移指令: mov
- 寄存器指令: add sub
- 内存读写指令 ldr str
- CPU在执行过程中,可以通过访存指令向物理内存写入数据或者从中读取数据
- 缓存结构:CPU缓存由若干个缓存行组成
分层存储体系 1. 高速缓存 2. 磁盘存储 操作系统把需要的程序从磁盘复制到内存并执行
这个简单的方法就是使用动态重定位,简单的把每个进程的地址空间映射到物理内存的不同部分
交换技术
虚拟内存: 每个程序拥有自己的空间地址,这个空间被分割成多个块,每一块称为一个页或者一个页面
分页: 内存管理单元把虚拟地址映射成物理内存地址 缺页中断 或者 缺页错误 分页的两个问题 : 虚拟地址到物理地址的映射必须非常快 2.如果虚拟地址空间很大,那么页表也会很大 转换检测缓存区或者是快表
针对大内存的页表 多级页表