MIT 6.828 课程 | 1-PC Bootstrap 发表于 2019-11-25 | 分类于 MIT6.828 | 0 | 阅读次数 2441 Introduction这个Lab分成3个部分第一部分主要专注于熟悉x86汇编语言、qemu x86仿真软件以及PC的上电之后的启动过程;第二部分主要讲的是6.828 kernel的boot loader,可见相应的boot目录;第三部分主要讲6.828 kernel的初始化,这个kernel叫做J 阅读全文 »
MIT 6.828 课程 | HW10-bigger files for xv6 发表于 2019-11-25 | 分类于 MIT6.828 | 0 | 阅读次数 3391 在这个实验中我们将会增加xv6文件最大的大小。当前的xv6 文件的大小是被限制在140 sectors,这个限制是因为xv6 inode包含了12个“直接”的 block numbers和一个“单间接”的block number,这个“单间接”的block number指向了一个包含128 bloc 阅读全文 »
MIT 6.828 课程 | 4-Preemptive Multitasking PartC 发表于 2019-11-25 | 分类于 MIT6.828 | 0 | 阅读次数 1948 Part C: Preemptive Multitasking and Inter-Process communication (IPC)partC主要是实现抢占式调度以及允许environment之间传递消息。Clock Interrupts and Preemption当运行user/spin测 阅读全文 »
MIT 6.828 课程 | HW6-Threads and Locking 发表于 2019-11-25 | 分类于 MIT6.828 | 0 | 阅读次数 1802 在这个作业中,我们将会使用hash table来研究threads和locks的并行编程。这个HW需要运行在一台真正的计算机上(not xv6,not qemu),并且这台机器是要求多核的;作业所需要的源代码:ph.c源代码的讲解首先我们来看一下ph.c中的main()函数intmain(int a 阅读全文 »
MIT 6.828 课程 | HW11-xv6 log 发表于 2019-11-25 | 分类于 MIT6.828 | 0 | 阅读次数 3158 这个作业将会从两方面来探索xv6 log(也就是日志文件系统)。一方面,你将会人为的创建一个 crash 来阐述为什么需要 log。另一方面,你将会解除掉 xv6 logging system 中一个低效的问题。Creating a Problemxv6 log 的目的是为了让文件系统中对磁盘更新的 阅读全文 »
MIT 6.828 课程 | HW4-lazy page allocation 发表于 2019-11-25 | 分类于 MIT6.828 | 0 | 阅读次数 2948 xv6应用程序使用sbrk()system call来向kernel 请求heap memory。在kernel中已经实现了,sbrk()分配物理内存并且映射它到进程的虚拟地址。有些程序分配了内存,但不使用他们,比如在实现大型稀疏矩阵的时候。复杂的kernel延迟分配每一页的内存直到应用程序尝试使用 阅读全文 »
MIT 6.828 课程 | 3-User Environments PartA 发表于 2019-11-25 | 分类于 MIT6.828 | 0 | 阅读次数 3553 在这个Lab中,我们将要实现基础的内核设施,让一个被保护的user mode environment成功运行(比如process)。我们将要去实现一个可以跟踪用户environment的数据结构,创建一个单独的用户environment并且把一个程序的镜像加载到里面,最后还要运行它。我们也会让JOS 阅读全文 »
MIT 6.828 课程 | HW5-CPU alarm 发表于 2019-11-25 | 分类于 MIT6.828 | 0 | 阅读次数 3204 在这个实验中,我们将会向xv6里面添加一个特性,这个特性将会定期发出一个警告当一个进程在使用CPU time的时候。这对compute-bound 进程来说是相当有用的,因为我们可以限制他们消耗CPU的时间,或者对于那些想要定期的行为的进程来说也是很有用的。更加普遍的来说,你将会实现一个用户级的中断 阅读全文 »
MIT 6.828 课程 | 4-Preemptive Multitasking PartB 发表于 2019-11-25 | 分类于 MIT6.828 | 0 | 阅读次数 2568 Part B: Copy-on-Write ForkUnix提供fork()system call作为主要的进程创建原语。fork()system call 复制调用进程(the parent)的地址空间,然后去创建一个新的进程(the child)。xv6实现的fork()是将parent pa 阅读全文 »
RPC | Thrift 发送过程 发表于 2019-10-20 | 分类于 RPC | 0 | 阅读次数 1962 这边梳理一下整个RPC通信以及数据包的过程(从看源代码角度出发的),首先是客户端调用ping这个函数,Test test;test.num1 = 1000;test.num2 = 1000;test.str = "000000";test.bs = "111111&qu 阅读全文 »