專門用語
- 文中提及的task,thread,task與process都代表著運行於Linux的thread。
- 文中的Linux與Linux kernel指的皆為作業系統核心。
- 使用斜體字型標示Linux中的資料結構,變數或函式名稱。
- PID即為TID。
Linux與所有的作業系統核心一樣必須管理硬體資源以在現今的電腦世界中提供多工的作業環境。提到多工作業環境,Linux要能夠在任何時刻於所有正在運行的threads中找出特定的某個thread才能透過kernel function schedule的協助讓每個thread都被執行到。因此Linux使用名為task_struct的資料結構存放用以區分各個thread的資訊(稱之為特徵或finger print)1。
當我們更進一步區分threads時,便能將運行於Linux中的threads分為kernel threads與user threads。Kernel thread經由Linux或其驅動程式呼叫kernel function kernel_thread而產生出來負責處理作業系統中的雜事2直到有人將電腦關機,User thread則通常藉由應用程式呼叫fork API而產生出來提供特定功能3,使用者可以在任何時候結束它的運行。由於Linux隨時需要檢視所有threads的特徵,將這些特徵存放在記憶體中是避免降低作業系統效能4的辦法。
Memory與threads一樣被區分為兩個區塊:kernel space memory與user space memory。Kernel space memory存放與系統運作相關的資訊5,user space memory則為一般應用程式自由運用。此外Linux也採用virtual memory以有效運用記憶體並降低開應用發程式的困難度6。
Kernel thread與user thread都會有需要外來資訊的時候,外來資訊可能是作業系統中另一個thread所傳遞的資料,也有可能是外界硬體所傳遞的訊號,而Linux利用interrupt機制告知一個thread該處理外來資訊。
由以上介紹得知Linux的主要構成要素與功能有:
- Process management --> 允許多工環境
- Scheduler --> 允許多工環境
- Memory management --> 管理資訊站存區
- Interrupt handler --> 處理外部訊號
1 PID,PPID,優先順序。。。等資訊。
2 記憶體管理,工作排程。。。等雖雜但是很重要的事務。
3 瀏覽器,文字編輯器,影音撥放程式。。。等程式都屬於user thread。
4 從使用者的觀點來看,作業系統的效能取決於task response time。
5 task_struct,interrupt description table,page description table。。。等資訊。
6 每個程式的進入點/位址都是一樣的,無須於執行時再另行計算。
1 comment:
好文~
喚醒我腦海深處的記憶了
Post a Comment