![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MIT6.828操作系统
Small_Pond
这个作者很懒,什么都没留下…
展开
-
MIT6.828_Homework_Shell_MIT_6.828
1. step_3_Homework_Shell_MIT_6.828下载sh.c文件1.1. 源码阅读每个Step里的基础知识都不包括xv6讲义里的知识。 讲义的下载链接 Sep 3, 2014基础知识execv, strchr, access.在parsecmd中使用到strchr:查找字符串s中首次出现字符c的位置。execv:// 函数原型 程序...原创 2019-05-25 10:53:13 · 8043 阅读 · 4 评论 -
LAB3_User-Level Environments_PartB Page Faults, Breakpoints Exceptions, and System Calls
1. PartB: Page Faults, Breakpoints Exceptions, and System Calls1.1. 处理页错误1.1.1. Exercise 5.修改 trap_dispatch() 将 page fault exceptions 分配到 page_fault_handler(). 记住你可以用make run-xor make run-x-nox是启动...原创 2019-06-19 10:33:46 · 569 阅读 · 0 评论 -
MIT6.828_HW5_xv6 CPU alarm
1. MIT6.828_HW5_xv6 CPU alarm在本练习中,您将向xv6添加一个功能,该功能会定期向使用CPU时间的进程发出警报。 这可能对计算密集型进程有用,这些进程希望有效降低它们占用的CPU时间,或是即需要计算但又要采取某些定期操作的进程。 更一般地说,您将实现一种原始形式的用户级中断/故障处理程序。您应该添加一个新的alarm(interval,handler)系统调用。 如...原创 2019-06-19 17:18:49 · 1121 阅读 · 1 评论 -
MIT6.828_HW6_Threads and Locking
MIT6.828_HW6_Threads and Locking在此作业中,您将使用哈希表探索使用线程和锁的并行编程。 你应该在具有多个核心的真实计算机(不是xv6,而不是qemu)上完成这项功课。开的虚拟机只有单CPU单核,所以两个线程与一个线程的程序跑出来是两倍的效果。需要先关闭虚拟机,修改处理器数1,核心数2。再次运行。./a.out 20: put time = 0.007024...原创 2019-06-19 17:19:55 · 1545 阅读 · 0 评论 -
MIT6.828_HW7_xv6 locking
MIT6.828_HW7_xv6 lockingDon’t do thisMake sure you understand what would happen if the xv6 kernel executed the following code snippet: struct spinlock lk; initlock(&lk, "test lock"); acqui...原创 2019-06-21 15:52:44 · 1603 阅读 · 0 评论 -
LAB3_User-Level Environments_PartA_User Environments and Exception Handling
1. Part A: User Environments and Exception Handling新的头文件inc/env.h包含JOS中用户环境的基本定义。内核使用Env数据结构来跟踪每个用户环境。 在本实验中,最初只会创建一个环境,但您需要设计JOS内核以支持多个环境; lab4将通过允许用户环境fork其他环境来利用此功能。1.1. Exercise1-分配环境数组Modify...原创 2019-06-17 19:34:53 · 826 阅读 · 0 评论 -
LAB4_Preemptive Multitasking_PartA Multiprocessor Support and Cooperative Multitasking
1. Introduction激动人心的时刻,我们终于走到了Lab4,OS开始实现进程调度了~在本实验中,我们将在多个同时活动的用户模式环境中实施抢占式多任务处理。PartA:为 JOS 增添多处理器支持特性。实现 round-robin scheduling循环调度。添加一个基本的环境(进程)管理系统调用(创建和销毁环境,分配和映射内存)。PartB:实现一个类Unix...原创 2019-06-21 21:02:04 · 852 阅读 · 0 评论 -
MIT6.828_HW10_Bigger file for xv6
MIT6.828_HW10_Bigger file for xv6当前 xv6 文件大小限制在 140 个扇区。直接索引节点 12 个, 以及一个一级索引节点,其指向一个 sector,可包含 512/4 = 128个扇区。即总和为12+128 = 140个扇区。我们需要为xv6的文件节点添加一个二级索引节点,其包含128个一级索引节点的地址,每个一级索引节点又包含了128数据扇区。最终一个文件...原创 2019-07-07 17:43:19 · 1126 阅读 · 0 评论 -
LAB4_Preemptive Multitasking_PartB Copy-on-Write Fork
1. LAB4_Preemptive Multitasking_PartB Copy-on-Write Fork但是,对子进程中的fork调用几乎会立即调用exec,后者用新程序替换子进程的内存。 例如,这就是shell通常所做的事情。更高版本的 Unix 利用虚拟内存硬件来允许父子进程共享映射到各自地址空间的内存,直到其中一个进程实际修改它。 这种技术称为写时复制(Copy-on-Writ...原创 2019-07-03 13:49:01 · 754 阅读 · 0 评论 -
MIT6.828_HW11_xv6 log
MIT6.828_HW11_xv6 logFirst, you’ll artificially create a crash which illustrates why logging is needed. Second, you’ll remove one inefficiency in the xv6 logging system.1.1. Creating a Problemxv6日志...原创 2019-07-09 17:01:35 · 846 阅读 · 0 评论 -
MIT6.828_HW8_User-level threads
MIT6.828_HW8_User-level threadsuthread creates two threads and switches back and forth between them. Each thread prints “my thread …” and then yields to give the other thread a chance to run.对thread...原创 2019-07-04 11:09:23 · 782 阅读 · 0 评论 -
Lab5_File system, Spawn and Shell
1. Introduction在本实验中,我们将实现spawn,一个加载并运行磁盘可执行文件的库调用。 然后,我们要充分利用内核和操作系统库,以便在控制台上运行shell。 这些功能需要一个文件系统,本实验室引入了一个简单的读/写文件系统。You should run the pingpong, primes, and forktree test cases from lab 4 again...原创 2019-07-13 16:54:57 · 768 阅读 · 0 评论 -
LAB4_Preemptive Multitasking_PartC Preemptive Multitasking and IPC
1. LAB4_Preemptive Multitasking_PartC: Preemptive Multitasking and Inter-Process communication (IPC)在PartC 部分,我们要实现抢占非协作式环境,并且实现进程间通信。1.1. Clock Interrupts and Preemption如果一个进程获得CPU后一直死循环而不主动让出CPU的...原创 2019-07-06 15:39:38 · 523 阅读 · 0 评论 -
MIT6.828_HW9_barriers
MIT6.828_HW9_barriers在这个任务中,我们使用由pthread库提供的条件变量来实现barrier。barrier 是一个应用程序点,必须所有线程到达这个点才能继续执行。条件变量是一种类似于xv6的 sleep 和 wakeup 的序列协调技术。下载源码,编译执行。$ gcc -g -O2 -pthread barrier.c$ ./a.out 2pthread_co...原创 2019-07-07 10:27:55 · 955 阅读 · 0 评论 -
LAB_1_Part1_PC Bootstrap
1. LEC_1_LAB_1_Booting a PCLab 1: Booting a PCGDB调试中常用指令:1.1. 简介实验分为三个部分:熟悉汇编语言、QEMU x86模拟器、PC上电启动过程检查我们的6.828内核的boot loader程序,它位于lab的boot目录下。深入研究6.828内核本身的初始模板,位于kernel目录下。1.2. QEMU安装在VMw...原创 2019-05-27 14:53:02 · 1321 阅读 · 0 评论 -
LAB_1_Part2_The Boot Loader
1. LEC1_LAB_1_Booting a PC1.1. Part 2: The Boot Loader对于6.828,我们将使用传统的硬盘启动机制,这意味着我们的boot loader必须满足于512字节。boot loader由一个汇编语言源文件boot / boot.S和一个C源文件boot / main.c组成。1.1.1. boot.SBIOS将boot.S这段代码从硬盘的...原创 2019-05-27 14:57:46 · 2644 阅读 · 0 评论 -
LAB2_Part2_Virtual Memory
1. Part2:Virtual Memory首先要熟悉x86的保护模式的内存管理体系,也就是分段和页转换。1.1. Exercise 2如果您还不熟悉分段与分页,请查看“Intel 80386参考手册”的第5章和第6章。 仔细阅读有关页面转换和基于页面的保护的部分(5.2和6.4)。 我们建议您浏览有关细分的部分; 虽然JOS使用分页硬件进行虚拟内存和保护,但在x86上无法禁用分段转换和...原创 2019-06-06 08:59:19 · 683 阅读 · 0 评论 -
LAB1_Part3_The Kernel
1. Part 3: The Kernel我们现在将开始更详细地研究JOS内核。(最后你会写一些代码!)。与引导加载程序一样,内核从一些汇编语言代码开始,这些代码设置可以使C语言代码正确执行。1.1. 使用虚拟内存来解决位置依赖问题操作系统内核通常被链接到非常高的虚拟地址(例如0xf0100000)下运行,以便留下处理器虚拟地址空间的低地址部分供用户程序使用。 在下一个lab中,这种安排的原...原创 2019-05-29 09:47:35 · 669 阅读 · 0 评论 -
MIT6.828_HW2_Boot_xv6_MIT6.828
1. LEC_2_HW_Boot_xv61.1. 寻找_start地址并设定断点nm 命令:names, nm命令主要是用来列出文件中的某些符号(一些函数和全局变量等)。$ nm kernel | grep _start8010a48c D _binary_entryother_start8010a460 D _binary_initcode_start0010000c T _star...原创 2019-05-29 09:49:58 · 2533 阅读 · 1 评论 -
LAB2_Part3_Kernel Address Space(内核地址空间)
1. LEC3_LAB2_Part3_Kernel Address Space1.1. 初始化内核地址空间1.1.1. Exercise 5.Fill in the missing code in mem_init() after the call to check_page().Your code should now pass the check_kern_pgdir() and c...原创 2019-06-08 08:56:56 · 834 阅读 · 0 评论 -
LAB2_Part1_Physical Page Management
1. 简介在本实验中,我们将编写操作系统的内存管理代码。 内存管理有两个组成部分。第一个部分是内核的物理内存分配器,以致于内核可以分配和释放内存。 分配器将以4096字节为操作单位,称为一个页面。 我们的任务是维护一个数据结构,去记录哪些物理页面是空闲的,哪些是已分配的,以及共享每个已分配页面的进程数。 我们还要编写例程来分配和释放内存页面。内存管理的第二个组件是虚拟内存,它将内核和用户软件...原创 2019-06-02 19:07:51 · 973 阅读 · 1 评论 -
MIT6.828_HW3_XV6 System calls
1. LEC5_HW3_XV6 System calls修改xv6来添加一个系统调用。1.1. Part1: System call tracing修改xv6的内核,每个系统调用打印一行信息。需要使用从github上down下来的xv6-public工程。Hint: modify the syscall() function in syscall.c.proc结构体// Per-pr...原创 2019-06-08 16:02:50 · 2700 阅读 · 4 评论 -
MIT6.828_HW4_xv6 lazy page allocation
1. LEC6_HW4_xv6 lazy page allocation操作系统可以与页表硬件一起使用的许多巧妙技巧之一是堆内存的惰性分配。Xv6应用程序使用sbrk()系统调用向内核请求堆内存。 在我们给你的内核中,sbrk()分配物理内存并将其映射到进程的虚拟地址空间。 有些程序分配到内存但从不使用它,例如实现大稀疏数组。精妙的内核延迟每页内存的分配,直到应用程序尝试使用该页面 - 如页面错...原创 2019-06-08 18:11:07 · 2188 阅读 · 0 评论 -
Lab6_Network Driver
1. Introduction在本实验中,我们将为 NIC(Network Interface Card, 网络接口卡)编写驱动程序。这个网卡基于Intel 82540EM芯片,也称为E1000。除了编写驱动程序之外,我们还需要创建一个system call 来访问我们的驱动程序。我们将实现缺失的网络服务器代码,以在网络堆栈和驱动程序之间传输数据包。我们还可以通过完成Web服务器将所有内容绑定...原创 2019-07-17 16:37:39 · 862 阅读 · 0 评论