Linux作業系統分析

2022-09-07 17:33:10 字數 3326 閱讀 8192

馮諾依曼體系結構如圖所示,其中運算器、儲存器、控制器、輸入裝置和輸出裝置5大基本型別部件組成了計算機硬體。

計算機內部採用二進位制來表示指令和資料,將其存入儲存器中,然後啟動計算機工作,這就是儲存程式的基本含義。cpu從記憶體中不斷取下一條指令來執行,cpu負責解釋和執行這些指令,它們通過匯流排連線起來。

linux系統一般有4個主要部分:核心、shell、檔案系統和應用程式。核心、shell和檔案系統一起形成了基本的作業系統結構,它們使得使用者可以執行程式、管理檔案並使用系統。

在linux核心中用乙個資料結構struct task_struct來描述程序。struct task_struct的資料結構非常龐大,其中state是程序狀態,stack是堆疊等,因為涉及的內容過於龐雜,我們可以通過如圖所示的程序描述符的結構示意圖從總體上看清struct task_struct的結構關係,比如程序的狀態、程序雙向鍊錶的管理,以及控制台tty、檔案系統fs的描述、程序開啟檔案的檔案描述符files、記憶體管理的描述mm,還有程序間通訊的訊號signal的描述等。

程序排程策略:

sched_other:普通程序的時間片輪轉演算法

sched_fifo:實時程序的先進先出演算法

sched_rr:實時程序的時間片輪轉演算法

普通程序按照sched_other排程策略進行程序排程。 實時程序按照sched_fifo或sched_rr策略進行排程。 sched_fifo是按先進先出方法選擇下乙個使用cpu的程序。 sched_rr是實時程序的時間片輪轉法策略(round robin)。

如果發生了乙個中斷或異常,那麼cpu控制單元執行下列操作:

1,確定與中斷或者異常關聯的向量i(0~255)

2,讀idtr暫存器指向的idt表中的第i項

3,從gdtr暫存器獲得gdt的基位址,並在gdt中查詢,以讀取idt表項中的段選擇符所標識的段描述符

4,確定中斷是由授權的發生源發出的。

5,檢查是否發生了特權級的變化,一般指是否由使用者態陷入了核心態。

6,若發生的是故障,用引起異常的指令位址修改cs 和eip暫存器的值,以使得這條指令在異常處理結 束后能被再次執行

7,在棧中儲存eflags、cs和eip的內容

8,如果異常產生乙個硬體出錯碼,則將它儲存在棧中

9,裝載cs和eip暫存器,其值分別是idt表中第i項門描述符的段選擇符和偏移量字段。這對暫存器值給出中斷或者異常處理程式的第一條指定的邏輯位址

中斷/異常處理完後,相應的處理程式會 執行一條iret彙編指令,這條彙編指令讓cpu控制單元做如下事情:

1,用儲存在棧中的值裝載cs、eip和eflags寄 存器。如果乙個硬體出錯碼曾被壓入棧中, 那麼彈出這個硬體出錯碼 2,檢查處理程式的特權級是否等於cs中最低 兩位的值(這意味著程序在被中斷的時候是 執行在核心態還是使用者態)。若是,iret終止 執行;否則,轉入3

3,從棧中裝載ss和esp暫存器。這步意味著返 回到與舊特權級相關的棧

4,檢查ds、es、fs和gs段暫存器的內容,如 果其中乙個暫存器包含的選擇符是乙個段描 述符,並且特權級比當前特權級高,則清除 相應的暫存器。這麼做是防止懷有惡意的用 戶程式利用這些暫存器訪問核心空間

linux核心提供兩種主要的定時測量:

獲得當前的時間和日期 系統呼叫:time(), ftime()以及gettimeofday()

維持定時器 settimer(), alarm()

linux的計時體系結構

更新自系統啟動以來所經過的時間

更新時間和日期

確定當前程序的執行時間,考慮是否要搶占

更新資源使用統計計數

檢查到期的軟定時器

計時體系結構中的關鍵資料結構和變數

計時時鐘源clocksource

虛擬檔案系統實現了作業系統對其它各種不同檔案系統的支援,將對各種不同檔案系統的操作和管理納入到乙個統一的框架中。對使用者程式隱去各種不同檔案系統的實現細節,為使用者程式提供乙個統一的、抽象的、虛擬的檔案系統介面。

1.第一層為檔案系統介面層,如open、write、close等系統呼叫介面。

2.第二層為vfs (virtual file system)介面層。該層有兩個介面:乙個是與使用者的介面;乙個是 與特定檔案系統的介面。vfs與使用者的介面將所有對檔案的操作定向到相應的特定檔案系統函式 上。vfs與特定檔案系統的介面主要是通過vfs-operations來實現的。

3.第三層是具體檔案系統層,提供具體檔案系統的結構和實現,包括網路檔案系統,如nfs (network file system)。

以開啟檔案操作為例,open系統呼叫的服務例程是sys_open()函式,它接受三個引數:要開啟檔案的路徑名filename, 訪問模式的表示flags和檔案許可權掩碼mode。在核心中,sys_open實際呼叫do_sys_open函式來完成所有操作。

do_sys_open主要執行如下操作:

1,通過getname()從程序位址空間獲取該檔案的路徑名

2,呼叫get_unused_fd_flags(flags)函式從current->files結構中分配乙個空閒的fd。

3,呼叫do_filep_open(dfd, pathname, flags, mode, 0)找到檔案物件的指標struct file* f。

4,呼叫fd_install(fd, f),將f與fd關聯起來。實際是將f儲存在current->files->fdtab->fd陣列的第fd位置處。

對於linux整體而言,影響程式效能執行的因素有cpu,記憶體,磁碟i/o和應用程式等。

cpu:同一程式在單處理器和多處理器的效能有著很大的不同,可以在條件允許的情況下盡量使程式在多核環境下執行。提高並行性也是提高程式效能的較好途徑,它通過將運算分解位兩個互不影響的運算組合從而減少主要路徑上的運算。

記憶體:記憶體的大小、不同的記憶體分配方式以及對記憶體的讀寫都對應用程式的執行效能有著很大的影響。

應用程式:程式本身的時間複雜度和空間複雜度會極大影響應用程式的效能。應用程式開發者應該盡力針對各種情況做好**優化,做好測試工作,是整個應用程式能夠以更高的效率執行。

使用linux效能分析工具如perf、netstat、vmstat、gprof、top等,分析程式執行過程中是由於程序頻繁排程、io占用過高或是各種原因對應用程式的效能產生影響。

Linux作業系統分析 裝置驅動處理流程

字元裝置和塊裝置對映到作業系統中的檔案系統,由檔案系統向上提供給應用程式統一的介面用以訪問裝置。linux把裝置視為檔案,稱為裝置檔案,通過對裝置檔案的讀寫操作實現對真實外設的操作。從驅動程式的角度來從下到上看層次結構,包含了硬體裝置,裝置驅動程式 中斷處理程式,裝置服務程式 檔案系統和使用者程序四...

Linux作業系統分析 裝置驅動處理流程

字元裝置和塊裝置對映到作業系統中的檔案系統,由檔案系統向上提供給應用程式統一的介面用以訪問裝置。linux把裝置視為檔案,稱為裝置檔案,通過對裝置檔案的讀寫操作實現對真實外設的操作。從驅動程式的角度來從下到上看層次結構,包含了硬體裝置,裝置驅動程式 中斷處理程式,裝置服務程式 檔案系統和使用者程序四...

推薦系統 分析

收集使用者資訊的行為記錄模組 分析使用者喜好的模型分析模組 推薦演算法模組 推薦演算法 1.基於內容的推薦系統 content based recommendation 2.協同過濾推薦系統 collaborative filtering recommendation 3.混合推薦系統 hybrid...