LAB
文章平均质量分 84
MGWxn
这个作者很懒,什么都没留下…
展开
-
MIT 6.S081 lab 11:Networking
背景在你开始写代码前,你可能会发现xv6 book中的第五章:中断和设备驱动是很有帮助的。你将使用一个叫做E1000的网络设备来处理网络通信。对于xv6(以及你写的驱动),E1000看起来像一个真的连接到以太网LAN的硬件设备。事实上,与你的驱动交流的E1000是被qemu模拟出来的,与LAN连接也是由qemu模拟的。在这个模拟的LAN中,xv6(访客)有一个IP地址,10.0.2.15.Qemu也给运行qemu的计算机提供了一个IP地址 10.0.2.2 .当xv6用E1000发送一个数据包给原创 2021-08-13 15:21:11 · 920 阅读 · 1 评论 -
MIT 6.S081 lab 10:Mmap
Lab: mmapmmap和munmap系统调用允许UNIX程序对地址空间进行细节控制。这可以被用来在多进程之间分享内存,把文件映射到进程地址空间,还有作为一部分用户层页错方案,比如在讲座中谈到的垃圾回收算法。在这个实验中,你将会给xv6添加mmap和munmap到xv6,关注于内存映射文件。mmap能够用于很多场景,但是这个实验只需要实现文件内存映射的相关特性即可。你可以假设addr一直是0,意味着内核应当决定在什么虚拟地址映射这个文件。如果失败,mmap会返回 0xffffffffffffffff。原创 2021-08-12 13:40:18 · 948 阅读 · 0 评论 -
MIT 6.S081 lab 9:File system
1 Large files在这个任务中你将要去增大xv6文件的最大值。现在xv6文件被限制到最多只能由268个块。这个限制源于xv6的inode包含12个直接块号,以及一个间接块号,这指向一个持有256个块号的块,所以最大值为12 + 256 = 268.bigfile命令会创建一个最长的文件,并且报告它的大小:$ bigfile..wrote 268 blocksbigfile: file is too small$这个测试会失败,因为bigfile期待的最大数是65803,但是未经修改原创 2021-08-11 14:56:20 · 996 阅读 · 1 评论 -
MIT 6.S081 lab 8:Lock
1 Memory allocatorXv6的user/kalloctest 程序关注于内存分配器:三个进程扩大和减小它们的地址空间,导致了很多对于kalloc和kfree的调用,而它们都会获取kmem.lock.kalloctest会打印(像"#fetch-and-add")在acquire中尝试获得一个其他进程已经持有的锁的迭代次数,如kmem、以及一些其他的锁。acquire中的迭代次数是一种粗糙的评估锁竞争次数的方式。在你完成这个lab之前,kalloctest的输出看起来有些类似于以下:$ ka原创 2021-08-10 13:00:33 · 965 阅读 · 1 评论 -
MIT 6.S081 lab 7:Multithreading
1 Uthread: switching between threads在本次练习中,你将要设计面向用户级线程系统的上下文切换机制,然后实现它。为了帮助你开始实现它,xv6提供了两个文件,user/uthread.c和user/uthread_switch.S,和一个在Makefile文件中提供的build uthread 程序的规则。uthread.c包括绝大多数用户级线程包,和三个简单的线程测试样例。这个线程包中丢失了部分创建线程和转换线程的代码。你的任务是提出一种创建线程和在线程切换中保存/恢复寄原创 2021-08-06 00:58:10 · 938 阅读 · 0 评论 -
Stanford CS144: Lab 4
1 文档解读如果本lab中测试点99及之后有问题,考虑是环境问题!!1.1 Receiving segments如果RST标志位被设置,把 inbound and outbound streams都设置为error状态,并且永久地kill这个连接。(设置isActive)解析后发送segment给TCPReceiver如果ACK 标志位被设置,那么给TCPSender ackno 和 window_size。(没有ACK 那么window_size都不需要传吗?因为第二次握手只有一个SYN标原创 2021-08-03 23:29:40 · 418 阅读 · 1 评论 -
Stanford CS144: Lab 3
1 文档解读lab3 是实现一个tcpSender,主要功能是:从streamIn中读取数据,然后封装到TCPSegment中。需要考虑的是发送多少数据,如何切分发送。注意lab 3的内容是发送方无限制的,即不考虑 发送方的存储能力,只考虑 接收方的窗口。所以是没有书上的慢启动等部分。1.1 Responsibility of TCPSender记录接收者的确认号 acknos 和 window size通过读取数据并发送,去尽可能填满window。这表示sender需要发送数据,直到s原创 2021-07-28 22:45:53 · 346 阅读 · 0 评论 -
Stanford CS144: Lab 2
1 介绍Lab 2 需要完成 TCP Receiver 模块,跟lab0、lab1不同,TCP Receiver 和 TCP协议是相关的。TCP Receiver 主要功能有:接受TCP帧重组数据流决定发送回去的确认信号ackno:表示希望发送者发送的第一个字节的seqnoswindow size:表示第一个未重组的字节到第一个未接受字节的距离2 实现64位 index到32位seqnos的转换因为seqnos会包含在数据帧中,所以为了减少overhead,会采用32位的seqn原创 2021-07-27 18:34:58 · 294 阅读 · 0 评论 -
Stanford CS144: Lab 1
1 介绍在链路层,由传输介质的物理特性决定了数据帧的长度。以以太网为例,链路层一个数据帧最大为 1518Byte,首部长18Byte,IP层首部长20Byte,传输层 UDP首部长 8Byte,TCP首部长 20Byte。因此TCP包的数据内容最大为 1460 Byte。而传输数据方的数据是很可能大于1460的,所以会拆分成多个数据包,因此Receiver需要去实现数据包的Reassembler,而这就是lab 1需要完成的内容。CapacityPDF中强调了capacity的含义:capa原创 2021-07-26 17:27:31 · 239 阅读 · 0 评论 -
MIT 6.S081 lab 6:Copy-on-Write Fork
1 Copy-on-Write Fork Lab实现xv6 4.6节中的COW技术。起始工作// 1.增加标志位PTE_C的宏,表示是否为COW页// riscv.h#define PTE_C (1L << 8) // COW page flag// 2.增添全局变量 pageCount 来对所有分配的物理页引用计数。// kalloc.cuint *pageCount[32];初始化pageCount需要用32个页去计数从 KERBASE- PHYSTOP(这原创 2021-07-25 15:31:02 · 724 阅读 · 0 评论 -
Stanford CS144: Lab 0
遵循一些代码的守则:不用 malloc() free() new delete不用空指针和智能指针不用模板,线程,锁,虚函数不用c风格的字符串,直接用cpp的string不要使用c风格的强制转换,使用cpp的 static_cast(在cs144中不太会用到)最好使用常量引用去传递函数的参数不会改变的变量设为常量不会改变内容的函数,设为const函数避免使用全局变量,尽量使得每个变量的作用域最小提交之前,通过 **make format ** 去检查代码风格。Part 1Lab原创 2021-07-22 10:51:41 · 324 阅读 · 0 评论 -
MIT 6.S081 lab 5:lazy page allocation
1 Lablab 5就是去实现xv6 book 4.6中写的 Lazy page allocation有个问题:page fault的trap是如何出现的?1.1 Eliminate allocation from sbrk()你的第一个任务是在sbrk系统调用中删除页分配的实现部分,这部分内容在 sysproc.c/sys_sbrk()中。sbkr(n)系统调用会给进程增加 n byte的空间,并且返回新空间的起始地址(等于old sz)。新的sbrk(n)应该只给进程的sz增加n,并且返回o原创 2021-07-20 16:58:53 · 437 阅读 · 0 评论 -
2021-06-21
1 Shell lab1.1 回收子进程Hint 中建议 waitfg中用一个忙循环,signal_handler中采用一次waitpid, 忙循环的意义何在???如果waitfg回收了前台,那么signal_handler 不会处理该进程,因为 他的waitpid截获不到这个pid了。1.2 外部程序发送停止或终止信号正常情况下是由shell直接键入信号,但理论上需要支持其他程序发送的信号,比如说子程序给自己发信号。在这种情况下,按照原来的模式会出现问题,因为原来的模式是:键盘 -&原创 2021-06-21 14:57:18 · 151 阅读 · 0 评论