1. 程式人生 > 其它 >第三章學習筆記

第三章學習筆記

第三章學習筆記

概要

本章討論了 Unix/Linux 中的程序管理;闡述了多工處理原則;介紹了程序概念;以一個程式設計示例來說明多工處理、上下文切換和程序處理的各種原則和方法。
多工處系統支援動態程序建立、程序終止,以及通過休眠與喚醒實現程序同步、程序關係,以及二叉樹的形式實現程序家族樹,從而允許父程序等待子程序終止;提供了一個具體示例來闡釋程序管理函式在作業系統核心中是如何工作的;然後,解釋了 Unix/Linux 中各程序的來源,包括系統啟動期間的初始程序、INIT 程序、守護程序、登入程序以及可供使用者執行命令的 sh 程序;接著,對程序的執行模式進行了講解,以及如何通過中斷、異常和系統調從使用者模式轉換到核心模式;
再接著,描述了用於程序管理的 Unix/Linux 系統呼叫,包括 fork、wait、exec 和 exit ;闡明瞭父程序與子程序之間的關係,包括程序終止和父程序等待操作之間關係的詳細描述;解釋瞭如何通過 INIT 程序處理孤兒程序,包括當前 Linux 中的 subreaper 程序,並通過示例演示了 subreaper 程序;接著,詳細介紹瞭如何通過 exec 更改程序執行映像,包括 execve 系統呼叫、命令列引數和環境變數;解釋了 1/0 重定向和管道的原則及方法,並通過示例展示了管道程式設計的方法。

學到了什麼

1.多工處理
一般來說,多工處理指的是同時進行幾項獨立活的能力。比如,我們經常看到有人
一邊開車一邊打電話。從某種意義上說,這些人正在進行多工處理,儘管這樣非常不好。
在計算機技術中,多工處理指的是同時執行幾個獨的任務。在單處理器(單CPU)系統
中,一次只能執行一個任務。多工處理是通過在不同任務之間多路複用CPU的執行時間
來實現的,即將CPU執行操作從一個任務切換到另一個任務。不同任務之間的執行切換機
制稱為上下文切換,將一個任務的執行環境更改為另個任務的執行環境。如果切換速度
足夠快,就會給人一種同時執行所有任務的錯覺這種邏輯並行性稱為“併發”。在有多個
CPU或處理器核心的多處理器系統中,可在不同CPU上實時,並行執行多項任務。此外,
每個處理器也可以通過同時執行不同的任務來實現多任處理。多工處理是所有作業系統的基礎。總體上說,它也是並行程式設計的基礎。

2.程序的概念
作業系統是一個多工處理系統。在作業系統中,任務也稱為程序在實際應用中,任
務和程序這兩個術語可以互換使用。
程序的正式定義:

  • 程序是對映像的執行。

作業系統核心將一系列執行視為使用系統資源的單一實體。系統資源包括記憶體空間
/O裝置以及最重要的CPU時間。在作業系統核心中,每個程序用一個獨特的資料結構表
示,叫作程序控制塊(PCB)或任務控制塊(TCB)等。在本書中,我們直接稱它為PROC
結構體。與包含某個人所有資訊的個人記錄一樣,PROC結構體包含某個程序的所有資訊
在實際作業系統中,PROC結構體可能包含許多欄位,而且數量可能很龐大。首先,我們來
定義一個非常簡單的PROC結構體來表示程序。

  • queue.c檔案

queue.c檔案可實現佇列和連結串列操作函式。enqueue()函式按優先順序將PROC輸入佇列中。在優先順序佇列中,具有相同優先順序的程序按照FIFO的順序排序。dequeue()函式可返回從佇列或連結串列中刪除的第一個元素。printList()函式可列印連結串列元素。

  • t.c檔案

t.c檔案定義MT系統資料結構、系統初始化程式碼和程序管理函式


I/O重定向是一個過程,這個過程捕捉一個檔案、命令、程式或指令碼,甚至程式碼塊的輸出,然後把捕捉到的輸出作為輸入傳送給另外一個檔案、命令、程式或指令碼。

I/O重定向符號
I/O重定向符號分為:基本I/O重定向符號和高階I/O重定向符號(與exec命令有關)。

實踐:

Env:

Ulimit: