![](https://img-blog.csdnimg.cn/20201113015418129.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
操作系统导论
操作系统学习
雫#1999
道阻且长
展开
-
《操作系统导论》第四部分 持久性 P5 文件系统的实现
文章目录C5 文件系统的实现5.1 关于文件系统的两个问题5.2 VSFS的整体组织(1) 将磁盘分成块(2) 用户数据的存放:数据区域(3) 记录每个文件的详细信息:inode表(4) 空闲空间的记录:位图(5) 文件系统信息的存储:超级块5.3 文件组织:inode(index node 索引节点)(1) inode结构寻址(2) inode结构中的内容(3) 多级索引5.4 目录组织5.5 空闲空间管理5.6 访问路径:读取和写入(1) 从磁盘读取文件(2) 写入磁盘5.7 缓存和缓冲(1) 减少读的原创 2020-12-28 19:06:58 · 319 阅读 · 0 评论 -
《操作系统导论》第四部分 持久性 P4 文件和目录
文章目录C4 文件和目录4.1C4 文件和目录4.1原创 2020-12-27 17:18:51 · 451 阅读 · 0 评论 -
《操作系统导论》第四部分 持久性 P3 廉价冗余磁盘阵列(RAID)
文章目录C3 廉价冗余磁盘阵列 RAID3.13.23.33.43.53.63.73.83.93.10C3 廉价冗余磁盘阵列 RAID3.13.23.33.43.53.63.73.83.93.10原创 2020-12-24 18:55:20 · 370 阅读 · 0 评论 -
《操作系统导论》第四部分 持久性 P2 磁盘驱动器
文章目录C2 磁盘驱动器2.1 接口2.2 基本几何形状2.3 简单的磁盘驱动器(1) 单磁道延迟:旋转延迟(2) 多磁道:寻道时间(3) 一些其它细节2.4 I/O时间2.5 磁盘调度(1) SSTF:最短寻道时间优先(2) SCAN:跨越磁道顺序(3) SPTF:最短定位时间优先C2 磁盘驱动器磁盘驱动器(Hard Disk Driver)又称“磁盘机”,是以磁盘作为记录信息媒体的存储装置磁盘驱动器既能将存储在磁盘上的信息读进内存中,又能将内存中的信息写到磁盘上,因此,就认为它既是输入设备,原创 2020-12-22 16:39:26 · 673 阅读 · 0 评论 -
《操作系统导论》第四部分 持久性 P1 I/O设备
文章目录C1 I/O设备1.1 系统架构1.2 标准设备1.3 标准协议1.4 利用中断减少CPU开销1.5利用DMA进行更高效的数据传送1.6 设备交互的方法1.7 纳入操作系统:设备驱动程序1.8 简单的IDE磁盘驱动程序C1 I/O设备在了解持久性部分的主要内容前,先介绍I/O设备的概念,并展示操作系统如何与它们交互,当然I/O对计算机系统非常重要,设想一个程序没有任何输入(每次运行都产生相同的结果),或者一个程序没有任何输出(得不到想要的结果),对于计算机系统来说,输入和输出都是必要的1原创 2020-12-21 21:25:54 · 642 阅读 · 0 评论 -
《操作系统导论》第三部分 并发 P5 常见的并发问题
文章目录C7 常见的并发问题7.1 有哪些类型的缺陷7.2 非死锁缺陷(1) 违反原子性缺陷(2) 违反顺序缺陷(3) 非死锁缺陷的小结7.3 死锁缺陷(1) 为什么发生死锁(2) 产生死锁的条件(3) 预防死锁(4) 通过调度避免死锁(5) 检查和恢复C7 常见的并发问题7.1 有哪些类型的缺陷并发缺陷有很多常见的模式,了解这些模式是写出健壮,正确程序的第一步在4个重要的开源应用中,研究人员检查了这几个应用已经修复的并发缺陷,主要分为两类,非死锁缺陷和死锁缺陷共有105个缺陷,其中大多数原创 2020-12-21 18:18:33 · 348 阅读 · 0 评论 -
《操作系统导论》第三部分 并发 P4 条件变量,信号量
文章目录C5 条件变量5.1 定义和程序5.2 生产者/消费者(有界缓冲区)问题5.3 覆盖条件5.4 小结C5 条件变量通过硬件和操作系统的正确组合来实现锁,但是锁并不是并发程序设计所需的唯一原语在很多情况下,线程需要检查某一条件满足之后,才会继续运行,如父线程需要检查子线程是否执行完毕,才能继续运行父线程volatile int done = 0;void *child(void *arg) { printf("child\n"); done = 1; return NULL;原创 2020-12-14 20:49:16 · 289 阅读 · 0 评论 -
《操作系统导论》第三部分 并发 P3 基于锁的并发数据结构
文章目录C4 基于锁的并发数据结构4.1 并发计数器(1) 简单不可扩展的计数器(2) 可扩展的计数器4.2 并发链表(1) 基本的并发链表(2) 扩展链表4.3 并发队列4.4 并发散列表4.5 小结C4 基于锁的并发数据结构如何对数据结构加锁,保证其高性能,让许多线程同时访问该结构,完成并发访问4.1 并发计数器计数器是最简单的数据结构,使用广泛且接口简答,以下是一个非并发的计数器:typedef struct counter_t { int value;}counter_t;v原创 2020-12-10 16:54:52 · 358 阅读 · 1 评论 -
《操作系统导论》第三部分 并发 P2 锁
文章目录C3 锁3.1 锁的基本思想(1) 线程获得锁和开锁的作用(2) 锁的意义(3) 用更多的锁增加并发3.2 评价一个锁的几个标准3.3 控制中断3.4 测试并设置指令/原子交换C3 锁对于并发编程的一个最基本的问题:程序员希望原子式执行一系列指令,但由于单处理器上的中断(或多线程在多处理器上并发执行),这变得不可实现,为了解决这个问题,在源代码中加锁,放在临界区周围,保证临界区能像单挑原子指令一样执行3.1 锁的基本思想lock_t mutex;lock(&mutex);原创 2020-12-10 14:53:57 · 401 阅读 · 0 评论 -
《操作系统导论》第三部分 并发 P1 并发简介,线程API
文章目录C1 并发1.1 创建线程1.2 共享数据1.3 不可控的调度1.4 原子性问题1.5 小结C2 线程API2.1 创建线程2.2 完成线程2.3 锁2.4 条件变量2.5 小结C1 并发我们将为单个运行的进程提供新的抽象:线程经典观点是一个程序只有一个执行点(一个程序计数器,用来存放要执行的指令),但多线程程序会有多个执行点(多个程序计数器,每个都用于取指令和执行),每个线程类似于独立的进程,但它们共享地址空间,从而能访问相同的数据单个线程的状态与进程十分相似,但如果有多个线程,从一原创 2020-12-03 18:58:07 · 192 阅读 · 0 评论 -
《操作系统导论》第二部分 内存虚拟化 P7 将页在内存和磁盘间交换
文章目录C9 超越物理内存:机制9.1 交换空间9.2 存在位9.3 页错误9.4 内存满了怎么办9.5 页错误处理流程9.6 交换何时真正发生9.7 小结C10 超越物理内存:策略10.1 平均内存访问时间 AMAT10.2 最优替换策略10.3 简单策略 FIFO,随机(1) FIFO 先入先出(2) 随机替换10.4 利用历史数据 LRU(Least-Recently-Used)(1) LRU的原理(2) LRU的实现10.5 近似LRU -- 时钟算法10.6 考虑脏页10.7 抖动10.8 小结原创 2020-12-01 19:18:18 · 503 阅读 · 0 评论 -
《操作系统导论》第二部分 内存虚拟化 P6 优化分页:快速地址转换,使页表更小
文章目录C7 分页:快速地址转换TLB7.1 TLB的基本算法7.2 示例:访问数组7.3 由谁来处理TLB未命中7.4 TLB的内容7.5 上下文切换时对TLB的处理7.6 TLB替换策略7.7 实际系统的TLB表项7.8 小结C7 分页:快速地址转换TLB使用分页作为核心机制来完成虚拟内存,可能会带来较高的性能开销,因为要使用分页,就需要将内存地址空间划分为大量固定大小的页,并且需要记录这些单元的地址映射信息。因为这些映射信息一般存储在物理内存中,所以在地址转换时,需要一次额外的内存访问以便找原创 2020-11-30 17:28:41 · 520 阅读 · 1 评论 -
《操作系统导论》第二部分 内存虚拟化 P5 分页简介
文章目录C6 分页:介绍6.1 一个简单例子6.2 页表存在哪里6.3 页表中有什么6.4 分页很慢6.5 小结C6 分页:介绍6.1 一个简单例子6.2 页表存在哪里6.3 页表中有什么6.4 分页很慢6.5 小结原创 2020-11-27 19:38:11 · 453 阅读 · 0 评论 -
《操作系统导论》第二部分 内存虚拟化 P4 空闲空间管理
文章目录C5 空闲空间管理5.1 空闲空间的几个假设5.2 空闲空间的底层机制(1) 分割与合并(2) 追踪已分配空间的大小(3) 建立一个空闲列表(4) 让堆增长5.3 基本策略(1) 最优匹配(2) 最差匹配(3) 首次匹配(4) 下次匹配(5) 示例5.4 其它方式(1) 分散空闲列表(2) 伙伴系统(3) 其它想法5.6 小结C5 空闲空间管理管理空闲空间可以很容易,如果需要管理的空间被划分为固定大小的单元,只需要维护这些大小固定的单元的列表,如果有请求就返回列表中的第一项但要管理的空闲原创 2020-11-26 20:50:09 · 561 阅读 · 0 评论 -
《操作系统导论》第二部分 内存虚拟化 P3 分段
文章目录C4 分段4.1 分段:泛化的基址/界限4.2 应该引用哪个段(1) 显式方式(2) 隐式方式4.3 栈怎么处理4.4 支持共享4.5 细粒度和粗粒度的分段4.6 操作系统支持4.7 小结C4 分段目前为止,一直假设将所有进程的地址空间完整的加载到物理内存中,利用基址和界限寄存器,操作系统很容易将不同进程重定位到不同的物理内存区域,但是在堆和栈之间,有一大块“空闲”空间,即内部碎片因此,简单地通过基址寄存器和界限寄存器实现的虚拟内存很浪费物理内存,如果剩余的物理内存无法提供连续区域来放置原创 2020-11-26 17:59:04 · 212 阅读 · 0 评论 -
《操作系统导论》第二部分 内存虚拟化 P2 地址转换机制
文章目录C3 机制:地址转换3.1 地址转换机制概述(1) 内存虚拟化的高效,控制和灵活性(2) 地址转换3.2 假设3.3 重定位的一个例子3.4 动态(基于硬件)重定位(1) 基址寄存器(2) 界限寄存器3.5 硬件支持3.6 操作系统的问题3.7 小结C3 机制:地址转换3.1 地址转换机制概述(1) 内存虚拟化的高效,控制和灵活性在CPU虚拟化时,使用了受限直接访问 LDE,LDE背后的想法很简单:让程序运行的大部分指令直接访问硬件,在一些关键点(进程发生系统调用和发生时钟中断)由操作原创 2020-11-25 16:38:51 · 644 阅读 · 0 评论 -
《操作系统导论》第二部分 内存虚拟化 P1 地址空间,内存操作的API
文章目录C1 抽象:地址空间1.1 早期系统1.2 多道程序和时分共享1.3 为每个进程抽象一个地址空间(1) 看到的地址都不是真实的物理地址1.4 虚拟化内存的目标1.5 小结C2 插叙:内存操作API2.1 内存类型2.2 malloc(),free()调用(1) malloc()(2) free()2.3 常见错误2.4 底层操作系统支持2.5 其它调用C1 抽象:地址空间1.1 早期系统早期的机器并没有提供多少抽象给用户,基本上,机器的物理内存很简单:操作系统曾经是一组函数,在物理内原创 2020-11-20 20:26:17 · 313 阅读 · 0 评论 -
《操作系统导论》第一部分 CPU虚拟化 P4 进程调度(下) MLFQ调度,比例份额调度
文章目录C5 调度:多级反馈队列 MLFQ5.1 MLFQ:基本规则5.2 尝试1:如何改变优先级(1) 实例1,单个长工作(2) 实例2,来了一个短工作(3) 示例3,考虑I/O的存在(4) 当前MLFQ的问题5.3 尝试2:提升优先级5.4 尝试3:更好的计时方式5.5 MLFQ调优及其它问题5.6 MLFQ小结C5 调度:多级反馈队列 MLFQ对于上一篇进程调度的讨论,得到了两类调度方法,一类是优化周转时间的调度方法(SJF,STJF),另一类是优化响应时间的调度方法(RP),但这些调度方式原创 2020-11-20 17:32:41 · 433 阅读 · 3 评论 -
《操作系统导论》第一部分 CPU虚拟化 P3 进程调度(上) FIFO,SJF,STCF,RP
文章目录C4 进程调度:介绍4.1 工作负载假设4.2 调度指标:周转时间4.3 先进先出 FIFO4.4 最短任务优先 SJF4.5 最短完成时间优先 STCF4.6 新度量指标:响应时间4.7 轮转 RP4.8 结合I/O4.9 无法预知运行需要的时间C4 进程调度:介绍上一节了解了底层机制(进程受限执行,上下文切换进程),接下来要搞清楚操作系统决定运行哪个进程的上层策略,即进程调度4.1 工作负载假设在探究进程调度策略之前,先做一些简化假设,这些假设与系统中运行的进程有关,有时称为工作负原创 2020-11-17 15:48:39 · 724 阅读 · 0 评论 -
《操作系统导论》第一部分 CPU虚拟化 P2 限制进程,进程间切换机制
文章目录C3 机制:受限直接执行3.1 受限直接执行3.2 受限制的操作3.3 在进程间切换3.4 担心并发吗C3 机制:受限直接执行3.1 受限直接执行3.2 受限制的操作3.3 在进程间切换3.4 担心并发吗原创 2020-11-16 20:57:56 · 409 阅读 · 0 评论 -
《操作系统导论》第一部分 CPU虚拟化 P1 进程,进程API
文章目录C1 抽象:进程1.1 抽象:进程1.2 进程API1.3 进程创建:更多细节1.4 进程状态1.5 数据结构C1 抽象:进程进程:进程就是正在运行的程序,程序本身是没有生命周期的,它只是存在于磁盘上的一些指令或静态数据。操作系统让这些字节运动了起来,让程序发挥了作用在实际使用计算机时,会同时运行很多程序,如浏览器,邮件,音乐播放器等等,一个正常的系统可能有上百个进程同时运行,每个进程都需要CPU为它提供服务,但是CPU是有限的,操作系统通过虚拟化CPU来提供这种服务通过让一个进程只运原创 2020-11-13 01:45:45 · 461 阅读 · 0 评论