原创 MIT 6.828 2018 Lab_1

教學大綱:教學日曆 實驗地址:Lab1 本次實驗共分爲以下三個部分: PC Bootstrap The Boot Loader The Kernel 1.PC Bootstrap 32位PC物理地址空間 +----------

原创 MIT_6.828_Lab2 Part2

實驗地址:Lab2 虛擬地址翻譯爲物理地址的流程如下: Selector +--------------+ +-----------+ ---------->|

原创 MIT_6.828_Lab_3: User Environments Part A

項目地址:Lab 3 Environment State 在文件inc/env.h文件中,定義了環境(進程)結構體: struct Env { struct Trapframe env_tf; // Saved register

原创 MIT_6.828_2018_Homework:Barriers

地址:Barriers 這次作業的目的是實現線程間的同步。具體實現參考別人如下: static void barrier() { //bstate.round++; pthread_mutex_lock(&bstate.

原创 MIT_6.828_Lab4 Part B

實驗地址:Lab 4 在上次的實驗中,dumbfork()爲子進程分配空間,然後將父進程的代碼和數據複製進去,完成新的進程的創建。但是這樣可能帶來效率低下的問題。因爲一般來說,fork()之後常常執行exec()函數,exec()

原创 MIT_6.828_2018_Homework: Threads and Locking

作業地址:Threads and Locking 這次作業的目的在於讓我們對多線程有個大概的瞭解,以及多線程可能引發的問題,通常可以通過加鎖來解決。 源碼下載地址:ph.c 源碼如下: #include <stdlib.h> #i

原创 MIT_6.828_2018_Homework_xv6_CPU_alarm

作業地址:xv6 CPU alarm 此次作業就是添加一個系統調用alarm(),可以週期性的進行某個函數的調用。 Step 1 在user.h中添加這個系統函數的聲明: int alarm(int ticks,void(*han

原创 Homework: boot xv6(MIT6.828 LEC2作業)

地址:Homework: boot xv6 環境部署 複製項目到本地 在目錄6.828下面使用命令:git clone git://github.com/mit-pdos/xv6-public.git將項目複製到本地。之後使用

原创 MIT_6.828_2018_Homework:bigger files for xv6

地址:bigger files for xv6 題目要求:原來的一個文件的最大大小爲12+128=140個blocks,現在將前12個直接塊取一個出來存放另一個“doubly-indirect”塊,這樣就新增了128*128-1個

原创 MIT_6.828_2018_Homework:User-level threads

地址:User-level threads 之前的swtch()是在內核中進行切換的,這次的切換實在用戶態。 實現如下: .text /* Switch from current_thread to next_thread. M

原创 MIT_6.828_Lab4 Part A

項目地址:Lab 4 Getting Started 在merge的時候發生了衝突,需要手動消除。 Multiprocessor Support 該內核支持多核,BSP用低物理地址來引導其他的CPU加載系統。 利用LAPIC做的三

原创 MIT_6.828_Lab2 Part3

實驗地址:Lab2 Exercise 5. Fill in the missing code in mem_init() after the call to check_page(). Your code should now p

原创 MIT_6.828_2018_xv6_lazy_page_allocation

作業地址:xv6 lazy page allocation Part One: Eliminate allocation from sbrk() 在sysproc.c中找到sys_sbrk(void)函數,註釋掉: /* i

原创 MIT_6.828_Lab_3: User Environments Part B

項目地址:Lab 3 Handling Page Faults Exercise 5. Modify trap_dispatch() to dispatch page fault exceptions to page_fault_

原创 MIT_6.828_2018_Homework_shell

shell源碼地址:sh.c 執行簡單命令 找到sh.c中case ' '處,在此書寫執行普通命令的代碼。注意到: struct execcmd { int type; // ' ' char *