MIT 6.S081 2020
文章平均质量分 96
_Equinox
遗憾是常态
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MIT 6.S081 2020 Lab11 networking 个人全流程
在本实验中,你将为 xv6 编写一个网络接口卡(NIC)的设备驱动程序。你将使用一个名为E1000的网络设备来处理网络通信。对于 xv6(以及你编写的驱动程序)来说,E1000 看起来就像是一块连接到真实以太网局域网(LAN)的真实硬件。实际上,你的驱动程序将与由 QEMU 提供的 E1000 模拟设备通信,该设备连接到同样由 QEMU 模拟的局域网中。在这个模拟的 LAN 中,xv6(作为“客户机”)的 IP 地址是10.0.2.15。原创 2025-06-19 14:22:15 · 849 阅读 · 0 评论 -
MIT 6.S081 2020 Lab10 mmap 个人全流程
传统 I/O 读写方式开销过大传统的文件 I/O 需要在 用户空间 和 内核空间 之间多次拷贝数据。大文件处理时,内存的开销比较大。映射文件到内存将文件的内容直接映射到进程的虚拟地址空间,使得访问文件就像访问普通内存一样高效:替代readwrite等系统调用;节省一次内核空间和用户空间的拷贝(零拷贝适合处理大文件或频繁访问的文件数据。实现进程间共享内存(IPC)使用MAP_SHARED标志,多个进程可以映射同一个文件区域,从而共享这段内存,实现快速通信。延迟加载/按需加。原创 2025-06-18 22:42:54 · 809 阅读 · 0 评论 -
MIT 6.S081 2020 Lab9 File Systems 个人全流程
xv6文件系统提供类似于Unix的文件、目录和路径名,并将其数据存储在virtio磁盘上以便持久化。文件系统需要磁盘上的数据结构来表示目录和文件名称树,记录保存每个文件内容的块的标识,以及记录磁盘的哪些区域是空闲的。文件系统必须支持崩溃恢复(crash recovery)。也就是说,如果发生崩溃(例如,电源故障),文件系统必须在重新启动后仍能正常工作。风险在于崩溃可能会中断一系列更新,并使磁盘上的数据结构不一致(例如,一个块在某个文件中使用但同时仍被标记为空闲)。原创 2025-06-17 22:54:17 · 1129 阅读 · 0 评论 -
MIT 6.S081 2020 Lab8 locks 个人全流程
在本实验中,你将学习如何重新设计代码以提高并行性。在多核计算机上,并行性差的一个常见表现是高锁竞争。为了减少竞争、提升并行性,通常需要同时修改数据结构和加锁策略。你将在本实验中对 xv6 的内存分配器和块缓存进行相关改进。记得切换分支到 lock。原创 2025-06-16 21:33:00 · 863 阅读 · 0 评论 -
MIT 6.S081 2020 Lab7 Multithreading 个人全流程
本实验将使你熟悉多线程编程。你将实现一个用户级线程库中的线程切换,使用多个线程加速程序运行,并实现一个屏障(Barrier)机制。原创 2025-06-06 18:36:02 · 888 阅读 · 0 评论 -
MIT 6.S081 2020 Lab6 Copy-on-Write Fork for xv6 个人全流程
可以阅读下 《xv6 book》 的第五章中断和设备驱动。问题在 xv6 中,fork()系统调用会将父进程的整个用户空间内存复制到子进程中。**如果父进程占用的内存较大,复制过程会非常耗时。更糟糕的是,这种复制往往是浪费的。**例如,在子进程中调用fork()后紧接着执行exec(),会导致子进程丢弃复制来的内存,很可能其中大部分根本没有被使用。另一方面,如果父子进程都使用了某个页面,并且有一个或两个要写这个页面,那就确实需要进行复制。解决方案**写时复制(COW)**的fork()原创 2025-05-31 23:52:44 · 1322 阅读 · 0 评论 -
MIT 6.S081 2020Lab5 lazy page allocation 个人全流程
可以阅读下4.6页面错误异常像应用程序申请内存,内核分配和映射这些内存其实是很耗费时间的。比如,一个 GB 的内存包含 262,144 个 4096 字节的页;即便每次分配的开销很小,这么多次操作累积起来仍然非常耗时。此外,一些程序会分配比实际使用更多的内存(例如,为了实现稀疏数组),或者会提前分配内存但迟迟不使用。为加快sbrk()sbrk()不再立即分配物理内存,而是仅记录下哪些用户地址被分配了,并在用户页表中将这些地址标记为无效。当进程首次尝试访问这些**“懒惰分配”**的页面时,原创 2025-05-25 13:50:29 · 1337 阅读 · 0 评论 -
MIT 6.S081 2020 Lab4 traps 个人全流程
做之前可以看看,了解XV6 下的陷入机制这个实验旨在探索系统调用如何实现了trap,会先做一个有关栈的练习,然后实现用户级陷入处理。: 涉及用户态 / 内核态切换的汇编代码。: 处理中断的所有代码。记得切换到 traps 分支。完整代码见:https://github.com/58164/MIT6.S081/tree/traps。原创 2025-05-18 14:58:44 · 807 阅读 · 0 评论 -
MIT 6.S081 2020 Lab3 page tables 个人全流程
好难哇www原创 2025-05-11 23:02:16 · 1321 阅读 · 0 评论 -
MIT 6.S081 2020 Lab2 system calls 个人全流程
警钟长鸣:记得切换分支先完整代码见:https://github.com/58164/MIT6.S081/tree/syscall这个任务要求你添加一个tracing 系统调用,来帮你在后续lab中进行debug。它接收一个int 类型的参数 mask,每一位都代表一个系统调用, 1 代表追踪,0则反之。在 kernel/syscall.h中我们可以看到每一个二进制位对应的系统调用pid 系统调用名 返回值trace 系统调用可以跟踪调用它的进程以及它后续fork的子进程。原创 2025-05-04 16:36:29 · 758 阅读 · 0 评论 -
MIT 6.S081 2020 Lab1 Xv6 and Unix utilities 流程(未实现Optional challenge exercises)
练练手原创 2025-04-15 00:31:59 · 1190 阅读 · 0 评论
分享