mit6.1810
文章平均质量分 95
Zevin~
这个作者很懒,什么都没留下…
展开
-
xv6 makefile详解
这是kernel目录底下的链接脚本,指导着我们把kernel的依赖文件链接成一个目标文件。%.o就是一个通配符,所有的.o都依赖于.c文件,这些都是kernel下的程序。makefile就是一个深搜的过程,最上面的语句是顶级目标,顶级目标还有依赖。所以就是上面没有的,要在下面实现,再下面都实现了,上面的顶级目标才能实现。主要描述的就是处理链接脚本的方式,以及生成可执行文件的内容布局。这里的mkfs/mkfs程序,就是将后面的。kernel下的许多程序函数,都需要在。.c就是下面这样编译的,规则是不一样的。原创 2022-12-17 22:01:52 · 1427 阅读 · 0 评论 -
mmap(memory-mapped file)
对于文件的读写,内核会从文件的offset开始,将数据拷贝到内核中,设置好PTE指向物理内存的位置,后程序就可以使用load或者store来修改内存中文件的内容,完成后,使用munmap,将dirty block写回文件中,我们可以很容易找到哪个block是dirty,因为对应的PTE_D被设置了。这段代码实现将文件text.txt 打开,并用mmap函数将文件映射到虚拟内存中,通过执政start对文件进行读写,可以在中断中看到由文件写入的数据,程序结束后,可以查看text.txt文件,来查看写入的数据。原创 2022-12-14 16:31:50 · 583 阅读 · 0 评论 -
基于xv6的Copy-On-Write
当shell执行指令的时候会fork(),而这个fork()出来的进程首先会调用的就是exec来执行对应的命令,如果我们将fork()创建的进程对地址空间进行了完整的拷贝,那将是一个巨大的消耗因为在实际应用中,fork()拷贝的大部分内存都是不会用到的,最典型的就是在UNIX系统中,通常调用fork()后便会调用exec(),而exec()做的第一件事就是把原来的地址空间给舍弃掉,那么原来拷贝过来的数据就全没用了所以这个时候就需要copy-on-write机制fork()exec()fork()原创 2022-12-10 15:15:58 · 801 阅读 · 4 评论 -
[mit6.1810] Lab system calls
在这个lab中我们会实现一些系统调用,这些系统调用类似于我们使用的write,它实际上是用户层的一个接口,而他真正的实现是在内核中实现的,由kernel来实现的,中间我们需要trap陷入内核,内核执行完,用户层就能够获得对应的结果。原创 2022-11-13 21:40:09 · 1353 阅读 · 5 评论 -
[mit6.1810] lab Utilities
在这个lab中我们会先学习操作系统中的系统调用是如何运用的,并实际运用这些系统调用来编写一些程序。原创 2022-11-13 17:56:37 · 634 阅读 · 5 评论