
MIT 6.S081课程记录
文章平均质量分 93
记录MIT 6.S081学习过程
爱好学习的青年人
学习学习再学习
展开
-
MIT 6.S081 lec1 ~ lec6 总结 —— introducion、system call、pagetable、tarp机制
MIT 6.S081 课程总结不含xv6的 具体代码 的 总结Lec 1 Introduction操作系统的共性抽象硬件 (CPU和内存)硬件的可复用性程序之间的隔离性程序之间的协同、交互权限控制/安全、提供强大性能支持大量不同类型的应用程序操作系统结构硬件资源 + 内核空间(计算机资源的守护者) + 用户空间 = 计算机(本课程 关注点在Kernel、连接Kernal和用户空间程序的接口、Kernel内软件的架构)Kernel中的服务,其中一个服务是文件系统,另一原创 2021-10-11 22:11:43 · 467 阅读 · 0 评论 -
6.S081参考书笔记 —— 第3章页表
MIT的参考书book-riscv-rev1的第三章内容的代码部分文本较多,本文做了它的流程图和划重点,结合MIT参考书看比较更容易。第三章 页表页表是操作系统为每个进程提供自己的私有地址空间和内存的机制。页表决定了内存地址的含义,以及物理内存的哪些部分可以访问。它们允许xv6隔离不同进程的地址空间,并将它们复用到单个物理内存上。页表还提供了一层抽象(a level of indirection),这允许xv6执行一些特殊操作:在若干个地址空间中映射相同的内存(a trampoline page),并用原创 2021-09-13 18:53:55 · 829 阅读 · 0 评论 -
MIT 6.S081 lec16总结 —— ext3的log机制
这节课难度比较高Lec16 File system performance and fast crash recovery文章目录xv6 File system Logext3 File system Logext3如何提升性能xv6 File system Log我们会有一些用户程序调用write/create系统调用来修改文件系统。在内核中存在block cache,最初write请求会被发到block cache。block cache就是磁盘中block在内存中的拷贝,所以最初对于文件b原创 2021-11-03 20:40:56 · 383 阅读 · 0 评论 -
MIT 6.S081 lec14、15总结 —— File systems、Crash recovery
文章目录Lec14 File systemsLec15 Crash recoveryLec14 File systems文件系统背后的机制有关的内容对于硬件的抽象是如何实现的实现crash safety如何在磁盘上排布文件系统性能文件系统具有的类似的结构。按照分层的方式进行理解:在最底层是磁盘,也就是一些实际保存数据的存储设备,正是这些设备提供了持久化存储。在这之上是buffer cache或者说block cache,这些cache可以避免频繁的读写磁盘。这里我们将磁盘中的原创 2021-11-03 20:36:06 · 281 阅读 · 0 评论 -
MIT 6.S081 lec10总结 —— 锁
Lec10 Multiprocessors and locking为什么需要锁?为什么需要尽可能避免锁?出于正确性,我们需要使用锁,但是考虑到性能,锁又是极不好的(串行执行)。锁就是一个对象,就像其他在内核中的对象一样。有一个结构体叫做lock,它包含了一些字段,这些字段中维护了锁的状态。锁有非常直观的API:acquire,接收指向lock的指针作为参数。acquire确保了在任何时间,只会有一个进程能够成功的获取锁。release,也接收指向lock的指针作为参数。在同一时间尝试原创 2021-11-03 18:40:48 · 274 阅读 · 0 评论 -
MIT 6.S081 lec23总结 —— 读写锁、RCU算法的实现
内核共享了大量的资源,例如内存,CPU,磁盘缓存,inode缓存,这些东西都在后台被不同的进程所共享。这意味着,即使两个完全不相关的进程在执行两个系统调用,如果这两个系统调用需要分配内存或使用磁盘缓存或者涉及到线程调度决策,它们可能最终会使用内核中相同的数据结构,因此我们需要有办法能让它们在使用相同数据的同时,又互不影响文章目录读写锁 (Read-Write Lock)RCU读写锁 (Read-Write Lock)功能:可以有多个数据的读取者获取了读锁,这样可以获得并行执行读操作的能力;要么只能有原创 2021-11-03 17:24:33 · 390 阅读 · 0 评论 -
6.S081参考书笔记 —— 第7章调度、进程交互
MIT 6.S081 课程摘要/总结不含 xv6 的具体代码 分析Lec10 Multiprocessors and locking (Frans)为什么需要锁?为什么需要尽可能避免锁?出于正确性,我们需要使用锁,但是考虑到性能,锁又是极不好的(串行执行)。锁就是一个对象,就像其他在内核中的对象一样。有一个结构体叫做lock,它包含了一些字段,这些字段中维护了锁的状态。锁有非常直观的API:acquire,接收指向lock的指针作为参数。acquire确保了在任何时间,只会有一个进原创 2021-10-29 19:06:40 · 306 阅读 · 0 评论 -
Lab7: Multithreading
Lab7: Multithreading本实验将使您熟悉多线程。您将在用户级线程包中实现线程之间的切换,使用多个线程来加速程序,并实现一个屏障。Attention在编写代码之前,您应该确保已经阅读了xv6手册中的“第7章: 调度”,并研究了相应的代码。要启动实验,请切换到thread分支:$ git fetch$ git checkout thread$ make cleanUthread: switching between threads (moderate)在本练习中,您将为用户级原创 2021-10-29 16:15:52 · 1592 阅读 · 1 评论 -
Lab6: Copy-on-Write Fork for xv6 详解
Lab6: Copy-on-Write Fork for xv6问题xv6中的fork()系统调用将父进程的所有用户空间内存复制到子进程中。如果父进程较大,则复制可能需要很长时间。更糟糕的是,这项工作经常造成大量浪费;例如,子进程中的fork()后跟exec()将导致子进程丢弃复制的内存,而其中的大部分可能都从未使用过。另一方面,如果父子进程都使用一个页面,并且其中一个或两个对该页面有写操作,则确实需要复制。解决方案copy-on-write (COW) fork()的目标是推迟到子进程实际需要物原创 2021-10-27 19:59:48 · 6195 阅读 · 14 评论 -
Lab5: xv6 lazy page allocation
Lab5: xv6 lazy page allocation这个实验相对其他实验来说还是较为简单的,再加上老师上课直接演示了一半,所以这里直接放操作了文章目录Lab5: xv6 lazy page allocationEliminate allocation from sbrk() (easy)Lazy allocation (moderate)Lazytests and Usertests (moderate)操作系统可以使用页表硬件的技巧之一是延迟分配用户空间堆内存(lazy allocation原创 2021-10-27 16:44:44 · 1698 阅读 · 2 评论 -
Lab4: traps
Lab4: traps文章目录Lab4: trapsRISC-V assembly (easy)Backtrace(moderate)第一步第二步第三步Alarm(Hard)第一步第二步RISC-V assembly (easy)阅读***user/call.asm***中生成可读的汇编版,回答一下问题哪些寄存器保存函数的参数?例如,在main对printf的调用中,哪个寄存器保存13?main的汇编代码中对函数f的调用在哪里?对g的调用在哪里(提示:编译器可能会将函数内联)printf函数原创 2021-10-27 16:42:40 · 807 阅读 · 0 评论 -
Lab3: page tables (hard!) 详解
Lab3: page tables (hard!)这个实验难度被MIT的老师评价为第一文章目录Lab3: page tables (hard!)Print a page table (easy)第一步第二步第三步给每一个进程弄一个kernel_pagetable (hard)第一步 添加一个内核页表第二步 确保内核页表映射到该进程的内核栈第三步 修改scheduler第四步 释放内核页表简化 `copyin`/`copyinstr`(hard)第一步 替换`copyin()`、`copyinstr`原创 2021-10-27 16:40:33 · 2486 阅读 · 0 评论 -
MIT 6.S081 lec8、9总结 —— Page faults & Interrupts
MIT 6.S081 课程摘要/总结不含 xv6 的具体代码 分析Lec08 Page faults虚拟内存的有两个优点隔离性:虚拟内存使得操作系统可以为每个应用程序提供属于它们自己的地址空间。提供了一层抽象。处理器和所有的指令都可以使用虚拟地址,而内核会定义从虚拟地址到物理地址的映射关系,实现一些有趣的功能。page faultpage fault可以让这里的地址映射关系变得动态起来。通过page fault,内核可以更新page table,这是一个非常强大的功能。因为现在原创 2021-10-26 21:06:09 · 347 阅读 · 0 评论 -
MIT6.S081 Lec08笔记
MIT6.S081 Lec08笔记课前阅读 xv6手册 4.6节Xv6对异常的响应相当无趣: 如果用户空间中发生异常,内核将终止故障进程。如果内核中发生异常,则内核会崩溃。真正的操作系统通常以更有趣的方式做出反应。例如,**许多内核使用页面错误来实现写时拷贝版本的fork——copy on write (COW) fork。**要解释COW fork,请回忆第3章内容:xv6的fork通过调用uvmcopy(kernel/vm.c:309) 为子级分配物理内存,并将父级的内存复制到其中,使子级具有与原创 2021-10-23 20:47:42 · 633 阅读 · 1 评论 -
Lab2: system calls 引导/详解
Lab2: system calls 引导System call tracing(moderate)在本作业中,您将添加一个系统调用跟踪功能,该功能可能会在以后调试实验时对您有所帮助。您将创建一个新的trace系统调用来控制跟踪。它应该有一个参数,这个参数是一个整数“掩码”(mask),它的比特位指定要跟踪的系统调用。例如,要跟踪fork系统调用,程序调用trace(1 << SYS_fork),其中SYS_fork是kernel/syscall.h中的系统调用编号。如果在掩码中设置了系统调原创 2021-09-16 18:55:05 · 1734 阅读 · 0 评论 -
MIT6.S081 Lec04笔记
Lec04 Page tables 学习笔记安装老师的逻辑 从地址空间 硬件 虚拟内存代码3个方面整理了一下课程内容文章目录今天的课程中,我们想关注的是内存的隔离性。地址空间(Address Spaces)初步实现地址转换(理想化)实际上页表如何工作地址转换表是以page为粒度(不是地址)page table是一个多级的结构(节省空间)PTE中的flag页表缓存(Translation Lookaside Buffer)支持虚拟内存的硬件Kernel Page Tablekernel stack原创 2021-09-13 21:25:29 · 528 阅读 · 0 评论 -
MIT6.S081 Lec01笔记 ——Introduction and Examples
6.S081 / Fall 2020 [麻省理工操作系统 - 2020 年秋季]risc-v版本的xv6 跑在 RISC-V微处理器上,没用x86的指令集理论上,你可以在一个RISC-V计算机上运行XV6,已经有人这么做了。但是我们会在一个QEMU模拟器上运行XV6。Lec01 Introduction and Examples课程的目标理解操作系统的设计和实现。设计是指整体的结构,实现是指具体的代码长什么样。对于这两者,我们都会花费大量时间讲解。为了深入了解具体的工作原理,你们可以通原创 2021-09-05 19:48:46 · 425 阅读 · 0 评论