摘要: 代码在Github上。 这一个实验是要实现最基础的mmap功能。mmap即内存映射文件,将一个文件直接映射到内存当中,之后对文件的读写就可以直接通过对内存进行读写来进行,而对文件的同步则由操作系统来负责完成。使用mmap可以避免对文件大量read和write操作带来的内核缓冲区和用户缓冲区之间的频繁 阅读全文
posted @ 2021-02-10 12:04 星見遥 阅读(3020) 评论(0) 推荐(0) 编辑
摘要: 代码在github上。 这次实验是要对文件系统修改,使其支持更大的文件以及符号链接,实验本身并不是很复杂。但文件系统可以说是XV6中最复杂的部分,整个文件系统包括了七层:文件描述符,路径名,目录,inode,日志,缓冲区,磁盘。 文件描述符类似于Linux,将文件、管道、设备、套接字等都抽象为文件描 阅读全文
posted @ 2021-02-09 20:12 星見遥 阅读(4169) 评论(0) 推荐(1) 编辑
摘要: 几乎所有操作系统都会运行数量远多于CPU数量的进程,因此需要对CPU进行分时共享。理想情况下这种共享应该是对用户进程透明的。一个常用的方法是通过多路复用将进程分配到硬件CPU上,使每个进程有其自己的虚拟CPU。 多路复用 XV6在两种情况下会对CPU的进程进程切换从而实现复用:一种是XV6的slee 阅读全文
posted @ 2021-02-08 20:35 星見遥 阅读(1117) 评论(0) 推荐(0) 编辑
摘要: 代码在github上 这一次实验是要对XV6内部的锁进行优化,减少锁争用,提高系统的性能。 Memory allocator (moderate) 第一个实验是对XV6内核的内存页面分配器进行改进,改进的策略在前面的章节中也讲过了。XV6原本是使用一个空闲页面链表,但是这样就会导致不同CPU上的ka 阅读全文
posted @ 2021-02-06 19:01 星見遥 阅读(3012) 评论(0) 推荐(0) 编辑
摘要: 代码放在github上。 这一次实验感觉挺简单的,特别是后面两个小实验。主要就是对多线程和锁进行一个学习。 Uthread: switching between threads 这一个实验是要实现一个简单的用户级线程,写完之后发现原来用户级线程的简单实现也没有想象的那么复杂。 首先定义一个conte 阅读全文
posted @ 2021-02-05 21:24 星見遥 阅读(2981) 评论(1) 推荐(0) 编辑
摘要: 在包括XV6的绝大部分操作系统都是多个任务交错执行的。交错的一个原因是多核硬件:多核计算机的多个CPU核心独立执行计算,如XV6的RISC-V处理器。多个CPU核心共享物理内存,XV6利用这种共享来维护所有核心都会读写的数据结构。而这种共享会导致一个CPU在读取某数据结构时,可能有另一个CPU正在对 阅读全文
posted @ 2021-02-05 11:05 星見遥 阅读(1322) 评论(0) 推荐(1) 编辑
摘要: epoll是Linux中用于IO多路复用的机制,在nginx和redis等软件中都有应用,redis的性能好的原因之一也就是使用了epoll进行IO多路复用,同时epoll也是各大公司面试的热点问题。 IO多路复用 IO多路复用是一种同步IO模型,使得一个线程就可以对多个文件描述符进行监听。当有文件 阅读全文
posted @ 2021-01-31 20:44 星見遥 阅读(937) 评论(0) 推荐(1) 编辑
摘要: 代码在github上。总体来说如果理解了COW机制的话,这个实验的完成也没有很复杂。 这一个实验是要完成COW(copy on write)fork。在原始的XV6中,fork函数是通过直接对进程的地址空间完整地复制一份来实现的。但是,拷贝整个地址空间是十分耗时的,并且在很多情况下,程序立即调用ex 阅读全文
posted @ 2021-01-31 12:19 星見遥 阅读(4057) 评论(0) 推荐(1) 编辑
摘要: 驱动是操作系统中用于管理特定设备的代码:驱动控制设备硬件,通知硬件执行操作,处理中断,与等待该设备IO的进程进行交互。 当设备需要与操作系统进行交互时,就会产生中断(陷阱的一种),之后内核的陷阱处理代码就会识别中断设备并调用对应的驱动处理程序。在XV6这一步发生在trap.c的devintr中。 大 阅读全文
posted @ 2021-01-30 11:00 星見遥 阅读(1495) 评论(0) 推荐(0) 编辑
摘要: quic协议分析 QUIC是由谷歌设计的一种基于UDP的传输层网络协议,并且已经成为IETF草案。HTTP/3就是基于QUIC协议的。QUIC只是一个协议,可以通过多种方法来实现,目前常见的实现有Google的quiche,微软的msquic,mozilla的neqo,以及基于go语言的quic-g 阅读全文
posted @ 2021-01-21 14:05 星見遥 阅读(14132) 评论(7) 推荐(2) 编辑