一、linux系統
作業系統主要完成兩個目標: 與硬體互動,為應用程式提供執行環境;
為了防止使用者程式直接和硬體互動,將cpu分為兩種執行模式, 稱使用者態和核心態;
linux是乙個多使用者多工的作業系統,一般主要有4個部分: 使用者程序,系統呼叫介面,linux核心,硬體;
本課程的重點主要是中斷和程序管理;
1.1 使用者程序
使用者應用程式執行在整個系統的最高層,當他在系統上執行的時候,就會成為作業系統的乙個程序;
1.2 系統呼叫介面
在應用程式中,通過系統呼叫來呼叫作業系統核心中特定的過程,實現特定的服務。
1.3 linux核心
linux核心是整個系統的核心, 負責啟動並執行程式,磁碟上檔案管理,記憶體管理等。
linux核心主要由以下5個子系統組成,可以看出主要包含記憶體管理,程序管理,裝置驅動管理,檔案系統,網路管理等功能模組。
1.4 硬體
包括了linux安裝需要的所有可能的物理裝置,如cpu,記憶體,硬碟等。
二、 中斷
中斷是一種由軟體或硬體產生的、向cpu發出的事件。
例如,當使用者按下某個鍵,外部裝置會發出乙個中斷請求,產生乙個中斷訊號,訊號通過裝置控制器的irq線傳送給中斷控制,
而中斷控制器與cpu相連, cpu收到該訊號後,會響應該中斷。
從按下鍵盤到cpu響應中斷的大致過程:
0. 外設產生訊號,併發送到i/o介面上,介面通過裝置驅動程式向中斷控制器傳送中斷請求
1. 中斷控制器將中斷訊號轉換為中斷向量給cpu讀取
2. cpu通過中斷向量號,到中斷描述符表idt中找到對應的中斷描述符
3. 通過中斷描述符,從全域性描述表中找到對應的段描述符,獲得中斷處理程式的入口位址
4. 確定中斷的發生源和優先順序, 判斷特權級是否發生變化
6. 進入中斷處理程式, 中斷處理程式會先在核心態的堆疊中儲存一些暫存器的值,也就是儲存現場
7. 處理程式給pic傳送應答,允許其進一步發出中斷
8. 執行裝置對應的中斷服務例程isp
isp解析鍵盤命令,獲得對應資料,送入記憶體等
9. isp執行結束,恢復現場,中斷返回,返回被中斷程序下一條指令處繼續執行
以上是i/o中斷處理過程,除了硬中斷,還有軟中斷,
比如戶程序執行乙個fork()函式,會觸發系統呼叫, 系統呼叫就是由軟中斷實現的
以系統呼叫看中斷上下文切換:
1. c庫函式執行,將系統呼叫號傳給eax暫存器,之後通過int $0x80產生中斷向量為128的程式設計異常(trap)
2. 切換到核心態後,通過系統呼叫號找到對應的系統呼叫處理程式的入口位址
3. 之後由硬體先自動儲存一些暫存器的值入核心棧,包括ss,esp,eflags, cs, ip(儲存cpu執行的上下文)
4. 執行系統呼叫服務例程,先儲存現場,在執行
5. 執行完後,恢復現場中斷返回
三、程序管理
3.1 程序
當使用者程式在系統上執行的時候,就是程序,
乙個程式可以對應多個程序
程序主要是動態的,存在生命週期,是暫時的
程序實體 = 程序控制塊pcb + 程式段 + 相關資料段
每個程序有自己獨立的位址空間
3.1 pcb
pcb實際上是乙個task_struct的資料結構, 它是程序存在的唯一標識
該結構在程序被建立的時候由系統為其建立,在程序執行結束時候,系統撤銷pcb
task_struct中儲存了與程序相關資訊,如state程序狀態,fs是可執行映像的檔案系統,
thread_info與程序描述符關聯等。
3.2 程序狀態
程序狀態有可執行,等待,暫停,僵死,狀態之間也會進行相互轉換
就緒和執行都屬於可執行狀態,通過雙向迴圈鍊錶將可執行態程序連線組成執行佇列
每個cpu都有執行佇列,通過執行佇列,可以加快程序的排程
3.3 程序棧和程序切換
linux系統為每個使用者程序分配了兩個棧: 使用者棧,核心棧
程序執行在使用者模式下就是使用的使用者棧,核心模式下就是使用的核心棧
當程序切換到另乙個程序時候,就會產生進行上下文的切換
程序切換包含兩步:
1) 切換頁全域性目錄安裝新的位址空間;
2) 切換核心態堆疊和硬體上下文;
在上面系統呼叫中,在中斷處理程式執行完返回之前,可能呼叫schedule()函式呼叫其它程序
從而發生程序上下文的切換, 即程序的上下文切換通常巢狀在中斷上下文切換中
呼叫關係: schedule() --> context_swtich() --> switch_to --> __switch_to()
context_swtich()完成切換第一步,switch_to和__switch_to完成第二步
硬體上下文:
程序恢復執行前必須裝入暫存器的一組資料稱為硬體上下文切換
硬體上下文提供了核心執行新程序前所需要的所有資訊
在切換的時候,會儲存prev程序的上下文,並用next硬體上下文代替prev
五、課程的體會
通過linux作業系統分析這們課程,更深入理解了linux作業系統的運作機制;
結合對核心原始碼的解讀以及實驗,理解了中斷和程序切換,明白程序切換和中斷上下文切換的不同;
從硬體到核心編碼實現,對於linux系統的整體理解更體系、更深入,也很感謝老師的耐心教導。
課程學習總結報告
要求 請您根據本課程所學內容總結梳理出乙個精簡的linux系統概念模型,最大程度統攝整頓本課程及相關的知識資訊,模型應該是邏輯上可以運轉的 自洽的,並舉例某一兩個具體例子 比如讀寫檔案 分配記憶體 使用i o驅動某個硬體等 納入模型中驗證模型。談談您對課程的心得體會,改進建議等。linux系統的組成...
Linux課程學習總結報告
程式設計師編寫的程式要想獲得執行,必須首先把靜態的程式變成乙個個動態的程序,程序因建立而產生,因排程而執行,因撤銷而消亡,這便是乙個程序的乙個生命週期。在電腦的記憶體中,有著成千上萬的程序,而cpu僅僅只有乙個,那該如何管理這些程序完成程序的排程呢?首先從程序的管理談起,程序由三部分構成 程序控制塊...
Python學習總結報告
python是一門物件導向的解釋性語言 指令碼語言 這一類語言的特點就是不用編譯,程式在執行的過程中由對應的直譯器向cpu進行編譯,一邊編譯一邊執行他屬於指令碼語言,不想編譯型語言那樣先將程式編譯成二進位制在執行。1 程式塊不是以 括起來來定義的,而是依據程式的縮進來表示程式的塊和 的層次 2 程式...