
MIT6.S081
文章平均质量分 83
MIT6.S081 labs
刘士博
我很懒~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第10章 总结
通过逐行学习xv6操作系统,本书介绍了操作系统的主要思想。有些代码行承载了主要思想(例如,上下文切换,用户/内核边界,锁,等等),其中每一行都很重要;其他代码行提供了实现特定操作系统的思想的实例,很容易就能用别的方法完成(例如,更好的调度算法,更好的表示文件的硬盘数据结构,更好的允许并行事务的日志系统,等等)。所有这些思想都在一套特殊而成功的系统调用接口的背景之下展现,即Unix接口,这些思想也被沿用到其他操作系统设计之中。原创 2024-12-04 20:44:34 · 121 阅读 · 0 评论 -
第9章 再探并发
好的并行性能,不考虑并发的正确性,易懂的代码,在内核设计中三者兼得非常困难。直接使用锁是获得正确的最好方式,但并不总能成功。这一章重点介绍了xv6被迫以复杂方式使用锁的例子,以及xv6使用类锁但不是锁的技术。原创 2024-12-04 20:44:04 · 701 阅读 · 0 评论 -
第8章 文件系统
xv6文件系统实现组织为7层,如图8.1所示。硬盘层在virtio硬件驱动上读写块。缓冲区缓存层缓存了硬盘块,并且同步对它们的访问,保证同一时间内只有一个内核进程可以修改保存在任何特定块内的数据。日志层允许更高的层将对几个块的修改打包在一次传输中,保证遇到crash时以原子方式更新这些块(即所有的要么都更新了要么都没更新)。inode层提供了单独的文件,每个文件由一个有着唯一的i-编号,并包含一些持有文件数据的块的inode表示。原创 2024-12-04 20:43:27 · 914 阅读 · 0 评论 -
第7章 调度
任何操作系统都有可能运行比CPU数更多的进程,所以需要对如何在进程之间分享CPU时间进行妥善安排。理想的共享应该对用户进程透明。常用的方法是在硬件CPU上复用进程,给每个进程都呈现一种假象,它拥有它自己的虚拟CPU。这一章阐述了xv6怎样实现这样的复用。原创 2024-12-04 20:42:49 · 1020 阅读 · 0 评论 -
第6章 锁
包括xv6在内的大部分内核,都交替执行不同的活动。交替执行的一个来源是多处理器硬件:计算机中有多个CPU独立执行,例如xv6的RISC-V。多CPU共享物理RAM,xv6利用共享,维护所有CPU都需要读写的数据结构。这种共享提高了一个CPU在更新一个数据结构到一半时,另一个CPU读取它的可能性。也提高了多个CPU同时更新同一个数据的可能性。没有仔细的设计,这种并行访问很可能导致错误的结果或者造成数据结构的破坏。即使是单处理器,内核也可能在不同线程之间切换CPU,导致它们的执行相互交替。原创 2024-12-04 20:42:18 · 740 阅读 · 0 评论 -
第5章 中断和设备驱动
驱动,是操作系统中管理特定设备的代码:它注册设备硬件,告诉设备执行操作,处理结果中断,并与可能在等待设备I/O的进程通信。驱动代码可能有很多小花招,因为驱动与它管理的设备协同执行。此外,驱动必须理解设备的硬件接口,这些接口可能很繁琐而且缺乏文档。需要操作系统关注的设备通常在操作系统中注册,以生成中断,中断是trap的一种。内核trap处理代码识别到设备产生中断后,调用驱动的中断handler;在xv6中,这个分发过程在devintr(kernel/tarp.c:177)中。原创 2024-12-04 20:41:23 · 344 阅读 · 0 评论 -
第4章 陷入与系统调用
有三种类型的事件会让CPU停止正常执行的指令,强制切换到指定的代码,处理这些事件。一种是系统调用,当用户程序执行ecall指令来让内核为它做一些事。另一种是异常:一个指令(用户或内核)做了一些非法的事,比方说除以0或者使用无效的虚拟地址。第三种是设备中断,当设备发信号说它需要关注时,比方说当磁盘硬件完成了读或写的请求。本书使用trap作为这些情况的通用术语。通常,不管trap发生时在执行什么代码,后面都需要恢复,这些代码不需要知道发生了什么不同的事。原创 2024-12-04 20:40:50 · 431 阅读 · 0 评论 -
第3章 页表
操作系统通过页表为每一个进程提供了它自己的私有地址空间和内存。页表决定了内存地址表示什么,也决定了哪部分物理地址可以被访问。它们允许xv6将不同进程的地址空间隔离开来,并将他们复用到同一物理内存上。页表提供了一个间接层,让xv6能玩一些小花招:将同一段内存(跳板页)映射到不同的地址空间,使用未映射的页来保护内核和用户栈。本章中其他部分解释了RISC-V硬件所提供的页表,以及xv6如何使用它们。原创 2024-12-04 20:40:05 · 842 阅读 · 0 评论 -
第2章 操作系统组织
xv6的隔离单元是进程(其他Unix操作系统也一样)。进程的抽象阻止了进程破坏或者监听另一个进程的内存、CPU、文件描述符等资源。它也阻止了进程破坏内核本身,这样进程就无法破坏内核的隔离机制。内核必须小心谨慎地实现进程抽象,因为问题应用或恶意应用可能会欺骗内核或者硬件,做一些坏事(例如规避隔离)。内核用来实现进程的机制包括用户/管理者模式标志,地址空间,以及线程时间切片。为了加强隔离,进程抽象欺骗程序,让它觉得拥有属于自己的私有机器。进程为程序提供了其他进程无法读写的私有内存系统,或者叫地址空间。原创 2024-12-04 20:39:26 · 411 阅读 · 0 评论 -
第1章 操作系统接口
操作系统的工作,一个是在不同程序之间共享计算机,一个是提供比硬件所提供的的服务更好用的服务集合。操作系统管理并抽象底层硬件,因此,举例来说,文字处理器不需要考虑自己用的是什么类型的硬盘硬件。操作系统将硬件在多个程序之间分享,让它们能同时运行(或看起来是同时运行)。最后,操作系统为程序间的交互提供受控的方法,这样它们就能共享数据或协同工作。操作系统通过接口向用户进程提供服务。设计一套好的接口很难。一方面,我们希望接口简单而狭窄,因为这样的接口容易正确地使用。原创 2024-12-04 20:38:41 · 474 阅读 · 0 评论