原创 lab8
用戶棧參數 uint32_t argv_size=0; uint32_t i; //計算所有參數的長度總和 for (i = 0; i < argc; i ++) { argv_si
原创 lab6(stride scheduling)
Stride調度分析 論文鏈接:Stride Scheduling 在實驗中使用的Stride算法是結合時間片的一種優先級調度策略。每一個時間片結束時,選擇就緒狀態的進程中Pass值最小的進程分配一個時間片,在一個時間段中進程所獲得的時間
原创 lab7(管程)
管程 moniter結構 mutex:初始值爲1,用於對管程的互斥訪問 next:初始值爲0,作爲一個等待隊列,用於阻塞已獲得mutex的進程,next_count用於記錄阻塞於next的進程數,類似於條件變量中的等待隊列,喚醒等待進
原创 lab5(do_exit/do_kill/do_wait)
do_exit 調用exit的進程將成爲殭屍進程,同時將爲所有子進程尋找新的父進程,在ucore中將內核線程init作爲新的父進程。 在linux中會實現尋找同進程組的進程來作爲新的父進程,當找不到時在使用init。 // do_e
原创 lab4(get_pid)
MAX_PROCESS: 系統內最多進程數 MAX_PID: 是2倍的MAX_PROCESS, pid的範圍是 [0, MAX_PID) next_safe: 在 [last_pid, next_safe) 區間內可以取得有效的(未被佔用
原创 lab3_練習1/2
當缺頁中斷髮生時,調用alloc_page申請物理頁時需要檢查是否還存在空閒物理頁(在default_alloc_pages中),當不存在時,調用swap_out,將fifo隊首的頁換出內存,將頁寫入磁盤,在pte中記錄磁盤索引。 in
原创 lab2_練習2/3
物理地址分佈 ... ... ^ 0x00000 ^ start of ucore (0x100000) ^ end of ucore 首地址爲pages的n
原创 lab2_練習1(已優化)
static void default_free_pages(struct Page *base, size_t n) { assert(n > 0); struct Page *p = base; for (;
原创 lab1_練習6
kern/trap/trapentry.S 0x7b80 - esp 在tf入棧完畢後入棧 trapframe tf 0x7b84 - 0x00000000 - edi 0x7b88 - 0x000100b4 - esi 0
原创 lab1_練習5(kdebug.c)
#include <defs.h> #include <x86.h> #include <stab.h> #include <stdio.h> #include <string.h> #include <kdebug.h> #defi
原创 lab1_練習4(bootmain.c載入os)
### boot/bootmain.c bootmain => 0x7d10 <bootmain>: push %ebp 0x7d11 <bootmain+1>: mov 0x7df0,%eax # eax = SE
原创 lab0_練習3_bootasm.S(設置gdt 進入保護模式)
#include <asm.h> # with %cs=0 %ip=7c00. .set PROT_MODE_CSEG, 0x8 # 內核代碼段選擇子 cpl=0 index =
原创 lab1_練習1
ucore的鏡像文件ucore.img的生成 初始狀態如上圖,執行“make V=” 產生若干條gcc命令,參數-I用於添加頭文件的搜索路徑;-c 表示只產生目標文件。於是從若干.c文件產生對應的.o文件存放於obj目錄下。
原创 安裝硬件模擬器qemu
1.sudo apt-get install qemu-system 2.此時 /usr/bin 中的而可執行文件爲 qemu-system-x86_64 和 qemu-system-i386,沒有qemu 3.執行一條軟鏈接命令 sud