6.S081
文章平均质量分 96
是小肖啊!
这个作者很懒,什么都没留下…
展开
-
lab11 net
以上就是基本的交互框架,但是因为设备驱动是内核,是纯软件,而网卡设备是硬件,所以双方的交互就有点麻烦。这里通过了一个很神奇的操作,就是寄存器映射,将硬件的寄存器给映射到了内核的地址空间中,我们访问内核的某个地址,就是在访问硬件的寄存器,这一下子就打通了内核和硬件之间的桥梁。至此,准备工作就做完了,我们现在就需要增加内核代码,使其能够和网卡配合,完成数据报的发送和接受。这个lab很有意思,它的hints基本就是给了你所有的伪代码,你一个一个去实现就行了。中,就将寄存器映射的起始地址赋值给了。原创 2023-08-30 16:20:13 · 216 阅读 · 0 评论 -
lab10 mmap
我们应该按照hints提示的,创造一个VMA的结构体,并且在进程的proc的结构体中存储一个VMA的数组。lab对munmap的情况做了简化,只会从头开始unmap,因此在将数据写回磁盘时,直接调用filewrite函数,它在内部会自动调用file的偏移。修改exit函数,使其能够在进程用过mmap的情况下,将没有被munmap都处理掉,至此mmap_test可能可以通过了。,它们在查找页表的时候,如果发现pte无效,会panic,这里直接忽略,因为可能是mmap还没有分配物理地址的区域。原创 2023-08-30 09:53:33 · 186 阅读 · 0 评论 -
lab9 fs
这个函数的意思是,目前寻找的文件的inode是ip,现在要去addrs数组的index项指向的那个多级地址块上的第bn个block的地址,如果第bn块处没有地址,那么就创建一个。而如果我们没设置,说明实际上要访问的是target,在这种情况下,我们只需要在open函数分配fd和file之前,将ip指针切换成target的ip地址即可,因此,找一个适当的位置截胡即可。然后,修改bitmap函数,首先可以看一下bitmap如何处理直接地址和一级地址,学习一下基本的思路,我们这里基本就是嵌套一下一级地址的情况。原创 2023-08-29 12:48:00 · 178 阅读 · 0 评论 -
lab8 lock
但是这里采用的方式比较偷懒,也比较巧,即没有存储的一开始就放在key=0的表槽链表,引用计数为0的,直接不处理,反正它们都可能在。这是因为如果我在borrow里如果找到了一个可以借的freelist,那么我还是会获取两个锁,这也是有可能造成问题的,因为我们没有限制获取锁的顺序。首先,锁肯定是要去保护一些东西的,之前的bcache的那个大锁,是因为保护的东西太多了,所有buf都是被它保护着,这就导致很慢了,因为可能不同的cpu没有冲突,但依然要等很久。对于某个key对应的表槽的那个锁,它只需要管理。原创 2023-08-27 19:14:52 · 180 阅读 · 0 评论 -
lab7 thread
在这个练习中,你将为一个用户级别线程系统设计上下文切换机制,并实现它。原创 2023-08-25 17:29:17 · 124 阅读 · 0 评论 -
lab6 cow
cow的目标就是延迟分配,并且直到必须要复制的时候才会分配物理内存如果能够通过cowtest和usertest,则通过这个lab。原创 2023-08-24 21:43:47 · 105 阅读 · 0 评论 -
lab5 lazy
而栈指针往下,除了一个guardpage是没有映射之外,其他的page都应该是有映射的,即pte的有效位为0。函数,这个函数就是将父进程的页表原模原样的拷贝给子进程,但是有的虚拟页面连父节点自己都没有映射,子节点哪来的映射,因此碰到找不到pte或者pte有问题的情况,直接continue就行了。第4个的问题在于,如果是系统调用,那它会先在usertrap中进入syscall的处理流程,不会进入我们新添加的流程,所以会有问题。第1个是参数为负数,特判一下就行,如果是负数,就按原来的方式处理。原创 2023-08-22 18:22:05 · 93 阅读 · 0 评论 -
lab4 traps
系统调用的过程很复杂,设计的也很巧妙。并且由于内核态和用户态的虚拟地址空间不一样,导致了一些麻烦的操作。不过在各种状态的切换中,进程的trapframe包含了这个进程所有的信息,拥有一个进程某个时刻的trapframe,就可以在任意时候将这个进程恢复到这个状态,这也是这个lab考察的内容在这个lab中我们不需要自己去做各种东西的切换,只需要提供一个正确的trapframe即可系统调用会经历那四个阶段,时钟中断导致的进程切换和恢复最起码也会经历最后的两个阶段。原创 2023-08-21 18:05:15 · 150 阅读 · 0 评论 -
lab3 pgtbl
在这个lab中,你将探索页表,并且修改它们以简化从用户空间拷贝数据到内核空间的函数在开始之前,需要完成kern/vm.c。原创 2023-08-18 11:47:41 · 149 阅读 · 0 评论 -
lab2 system calls
在kalloc.c文件中,可以发现空闲页面被存放在kmem的freelist中,这个freelist是一个链表,每一个结点代表一个大小为PGSIZE的空闲页面,我们可以通过next指针找到下一个结点。sysinfo函数的参数是一个struct sysinfo类型的指针,它是一个传出参数,也就是copyout函数的第二个参数。在proc.c文件中,看起来代码很多,但是可以发现,所有的进程都是存放在proc数组的,这个数组的元素类型是就是struct proc,因此可以直接访问这个进程的state,代码如下。原创 2023-08-15 19:43:11 · 213 阅读 · 0 评论 -
lab1 utilities
【代码】lab1 utilities。原创 2023-08-12 14:24:47 · 227 阅读 · 0 评论