Skip to content

Instantly share code, notes, and snippets.

@tjjh89017
Created February 5, 2015 16:03
Show Gist options
  • Save tjjh89017/f41388f51917eb7c692b to your computer and use it in GitHub Desktop.
Save tjjh89017/f41388f51917eb7c692b to your computer and use it in GitHub Desktop.

#Linux作業系統

##課程資料

  • 開課:許富皓教授
  • 開課單位:資工所
  • 修課年度:103年

##背景知識

  • X86 組合語言( AT&T 語法建議)
  • C 語言
  • 基礎 Linux 使用

##上課方式 上課主要以投影片為主,兩份分組 project ,沒有期中考只有期末開書考。上課老師會盡可能的讓同學理解之後,才往下一個章節移動,也鼓勵大家在課堂上發問。

##上課內容 主要以投影片內容跟 Linux source code 為上課教材,一開始快速介紹過 X86 的架構,這邊最主要講解 Paging Unit ,講解如何從 real mode 切換至 protect mode ,以及 page table 設計,如何從 vitrual address 轉換成 phyical address,還有 Linux 跟其他作業系統在 X86 架構運用差異。接下來快速帶過 BIOS 所占用的 address ,這部分如果在組合語言課程中有使用 DOS 或是其他 X86 Real mode OS 就會有簡單的認識,如果想要深入了解可以參考 OSDev 網站。這邊還要特別注意 X86 stack frame 的行為,不清楚可能會影響往後看 context switch 的部分。

然後就進入 OS 的主軸 Process 。講解常見的 Linux process 的狀態以及影響 process 的 signal ,接下來會先跳出去講 Linked list ,不過這邊的 List 跟資料結構課上的有一點不同,不同結構但是可以使用同一種操作,這邊會提到 Linux 中使用到的特殊的 C 語言技巧。

進入 schedule 的章節之後難度會大幅提高,會提及 sched class 的分類, run queue 的不同實作,比較會著重在 context switch 的那段組合語言中。因為只有 esp 數值改變就造成 context switch ,這部分可能需要花比較多時間。這邊要特別注意 C local variable 在組合語言中是存放在 stack 中的,所以在 context switch 之後,同一個名稱的變數,可能會代表不同記憶體位址,而有不同的數值。

最後講解在 3.7 以後出現的 PID namespace ,不過我這部分還沒有非常熟悉,不過如果有研究 docker 的人可以特別注意這個章節。

##作業 主要作業是要讓大家深入研究 Linux source code ,然後會 demo 時由助教提出問題,我們必須解釋為什麼會有這種行為跟設計,或是 Linux 怎麼解決這個問題,主要以為什麼要這麼做、這麼做的好處在哪為主要問題。

##評分方式

  • 兩次 project :總分 100 ,有時候會有助教加分
  • 期末考:總分 120
  • bonus :課程網頁上面會提到加分的題目或是比賽有成果的都可以加分

##心得 因為老師的上課方式,所以算是比較沒有壓力,內容也有一定深度, project 可能要花比較多時間準備,要看的程式碼一千行絕對跑不掉,尤其是接近期末死線一堆,偏偏 project 2 會比較複雜一點,會非常緊迫。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment