原创 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(內核線程)

 

原创 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