MIT6.828
文章平均质量分 82
FirMoonLight
这个作者很懒,什么都没留下…
展开
-
HW7:xv6 locking
要求我们用一句话说明,上述的代码出现的问题。答:由于在第一次之后,并未就进行了操作,导致第二次的会永远获取不到锁,即死锁。在xv6的代码中,函数会通过指令,屏蔽中断;函数通过指令,将中断打开。但是,如果在的函数中,我们在函数的后面加上指令,而在函数的前面加上指令,并重新编译内核,那么xv6就有可能boot失败,请找出原因。答:从下图中可以看出,xv6在的地方被。在中,依次查找中的值,就可以查出调用栈了,调用栈为: -> -> -> ->-> -> -> -> ->从调用栈中可以原创 2022-12-05 21:11:07 · 334 阅读 · 0 评论 -
HW6:Threads and Locking
ph.c。原创 2022-11-28 23:43:43 · 308 阅读 · 0 评论 -
HW5: xv6 CPU alarm
这个HW的主要任务就是在进程使用CPU的时候,定期向其发送alert。添加这个功能的意义在于,一是可以限制进程占用CPU的时间,二是可以当进程想要执行定时任务的时候,可以利用这个alert。添加一个新的alarm(interval,handler)系统调用。如果应用程序调用alarm(n,fn),那么在程序消耗每个n“ticks”的CPU时间之后,内核将调用应用程序函数fn。当fn返回时,应用程序将从中断处继续。tick是xv6中相当随意的时间单位,由硬件定时器产生中断的频率决定。原创 2022-11-20 19:08:09 · 296 阅读 · 0 评论 -
x86的DPL,RPL,CPL
此时JMP和CALL指令对此的处理是不同的:对于nonconforming code segment,调用CALL指令时,如果CPL >= DPL, 就会发生控制转移;而调用JMP指令时,必须CPL == DPL才会发生控制转移。对于conforming code segment,调用CALL指令和JMP指令时,如果CPL >= DPL就会发生控制转移。原创 2022-09-30 21:53:05 · 2217 阅读 · 1 评论 -
Mit6.828 HW2 Shell
文章前面的简介中,已经向我们提供了大部分的代码,但是一些功能需要我们进行补充。因此我这边先简要梳理下的主要逻辑。通过gecmd获取命令,获取用户从界面输入的命令,最大为100个字节。parsecmd函数解析命令系统调用fork创建新的进程,来执行命令。原创 2022-09-23 07:56:27 · 390 阅读 · 0 评论 -
Lab 2: Memory Management
本次实验所有的工作都是为了完善mem_init函数,实现虚拟地址物理地址的映射。为了实现这个映射,需要搭配一些功能。首先是内存分配,boot_alloc,page_init,page_alloc,page_free,每次分配4096字节的数据,空闲链表进行分配。其次,进行虚拟地址到物理地址的映射,pgdir_walk,,等函数,最后虚拟地址批量映射到物理地址。原创 2022-09-12 23:58:21 · 251 阅读 · 0 评论 -
Lab 1: Booting a PC
介绍了如何安装qemu以及如同通过qemu来模拟操作系统的启动。原创 2022-09-12 23:22:12 · 344 阅读 · 0 评论