106 OS homework 2-2 成果報告書

組長:B10415044、吳唯甄
組員:B10415017、時安劼
組員:B10415021、呂承叡
github: https://github.com/tomatothevegetable/xv6-public


🙂 使用情境說明(包含流程圖)

主要功能:

  1. 依照process的priority排程,值越小,priority越高
  2. 初始priority排程方式為先進先做,會依據目前RUNNABLE的process數量去分配priority
  3. priority相同時,則先執行deadline較近的
  4. 若現在時間已經超過deadline,priority將強制設為2
  5. 可利用setTime設定,讓process在某段指定的時間內固定為想要的priority,不受先進先執行與deadline影響

😇 成功畫面

  1. ptable
    查看process狀態

    foo創建4個test process,依據目前RUNNABLE和RUNNING的process數量分配priority
  1. changePriority
    輸入方式:changePriority pid priority
    changePriority 6 5 -> 將pid 6的priority改成 5

  2. setTime
    輸入方式:
    setTime pid priority startHour startMin endHour endMin deadlineHour deadlineMin
    setTime 7 3 15 51 15 52 15 53

    在15:51~15:52間將pid 7的priority設為3,deadline設為15:53

    endTime=15:52,時間到後priority改回原本的10

  3. 其他排程方式

    若priority相同,則會先執行deadline較近的

    deadline=15:53,若現在時間已經超過deadline,系統自動將priority設為2,盡快完成process


🏃 實作過程(修改哪些檔案[含圖片])

  1. ptable

    • ptable.c
    • sysproc.c
    • proc.c
  2. foo

    • foo.c
    • proc.c
      allocproc(void)

      wait(void)
  3. 排程

    • proc.c
      schedular(void)

  4. changePrioority

    • changePrioority.c

    • sysproc.c

    • proc.c

  5. setTime

    • setTime.c
    • sysproc.c
    • proc.c
  6. 其他

    • proc.h
    • trap.c

😎 結論

從理論上來看有非常多種排成方式。然而每一種方式都會有其優缺點,因此希望能結合多種排程,讓系統依據程序的需求使用適合的排程方式。
在實作過程中,較為困難的就是判斷哪種類型的process需要哪種排程。像是當輸入指令時會呼叫到 sh syscall判斷輸入的指令,而起初設定排程時並沒有考慮進去。所以當所有CPU被占去後就沒辦法執行輸入的指令。所以可能對於如何分辨process的重要程度是我們還可以努力嘗試的。


📅 組員分工

吳唯甄:基本排程功能、報告撰寫
時安劼:排程架構、排程deadline部分
呂承叡:設定與判斷排程時間、deadline與priority、CPU ticks