1. 程式人生 > 實用技巧 >Linux作業系統 知識總結(一)

Linux作業系統 知識總結(一)

Linux基礎

  • 建立資料夾 mkdir, 刪除資料夾 rmdir

  • 檢視資料夾 cat,分頁檢視 more

  • 複製檔案cp, rm 刪除檔案 mv移動檔案

  • 統計檔案內容 wc -c 統計位元組數 -l 統計行 -m 統計字元數 -w 統計字數

  • 排序 sort -kn制定n開始排序 -r逆序

  • 修改檔案讀寫許可權 chmood ,分為數字許可權和字元許可權

  • touch -a 修改檔案時間標籤為現在時間

  • 重定向 命令 < 檔案 如:cat > file//快速建立檔案

  • 管道 |, 命令1 | 命令2,將命令連線起來。

vi編輯器

  • 1.命令模式:用於執行各個文字編輯命令。
  • 2.插入模式:用於完成文字錄入工作。
  • 3.末行模式:接收輸入命令並執行。

gcc

  • 預處理->編譯與彙編->連結
gcc [選項] 檔案列表

gcc -o tes test.c //編譯成可執行檔案

程序管理概念

  • 程序:是一個可併發執行的程式在一個數據集上的一次執行。
程序特性
1.動態性:程序建立而產生,由撤銷而消亡,因為排程而執行,因為等待而停頓。
2.併發性:在同一時間段內有多個程序在系統中活動。
3.獨立性:程序是獨立執行的基本單位,是作業系統分配資源和排程管理基本物件。
4.非同步性:每個程序獨立執行,按照著不可預知的速度前進。

程序基本狀態
1.就緒態:程序已經分配到除CPU之外的所有資源。
2.執行態:程序已經獲得CPU,正在執行,這時的程序狀態稱為執行態。
3.等待態:程序因某種資源不能滿足,或某事件尚未發生而暫停執行時,稱為等待態。

Linux核心執行模式

  • Linux的核心執行在核心態,而使用者程式則只能執行在使用者態。從使用者態轉換為核心態的唯一途徑是中斷(包括陷入)。一旦CPU響應了中斷,則將CPU的狀態切換到核心心態,待中斷處理結果返回時,再將CPU狀態切換回使用者態。
  • 由於程序在其執行期間經常會被中斷打斷,也經常需要呼叫系統呼叫函式,因此CPU也經常地會在使用者態與核心態之間切換。計算和處理時,程序進入使用者態,執行系統呼叫或中斷處理程式進入核心態,執行核心程式碼。呼叫返回後又回到使用者態繼續執行。

程序控制

  • 指對程序生命週期進行有效的管理,實現程序的建立、撤銷以及程序各狀態之間的轉換等控制功能。

  • 1.建立程序:建立一個新程序操作,根據建立引數建立程序的PCB,為其分配資源,然後將PCB鏈入程序連結串列和可執行佇列中,等待執行。

  • 2.撤銷程序:當一個程序執行終止時需要撤銷它。撤銷程序操作是:將程序的PCB從程序對列及連結串列中摘出,釋放程序所佔用的資源,最後銷去PCB.

  • 3.阻塞程序:當正在執行的程序因某種原因無法執行下去時,就會轉入等待狀態。阻塞的工作是將執行態轉換成等待態,阻塞進的操作是:中斷程序執行儲存CPU現場,然後將PCB插入到等待佇列中,最後呼叫程序排程程式,從可執行佇列中選擇一個程序投入執行。

  • 4.喚醒程式: 處於等待轉態的程序所等待的事件出現時核心喚醒它。喚醒程序是從等待態轉入到就緒態。喚醒程序的操作是:在等待程序中找到滿足喚醒條件的程序,將其PCB插入到可執行佇列中。

ps命令

  • 檢視程序資訊命令ps,該命令可檢視記錄在程序描述符task_struct中的幾乎所有資訊。
    ps [選項]
-e     :      顯示所有程序。
-t tty :      顯示終端tty上的程序。
-f     :      以全格式顯示。
-o     :      以使用者自定義格式顯示。
a      :      顯示所有終端上的所有程序。
u      :      以面向使用者格式顯示。
x      :     顯示所有不控制終端進。

程序排程

  • 程序排程的功能是按照一定的策略把CPU分配給就緒程序,使它們輪流地使用CPU。
    常用的排程演算法
(1)先進先出法:按照程序可執行佇列中的先後次序來排程,缺點是對緊迫任務的響應時間過長。
(2)短程序優先法:優先排程短程序執行,以提高系統的吞吐量,但對長程序不利。
(3)時間片輪轉法:程序按規定的時間輪流使用CPU。可滿足系統對使用者響應時間的要求,有很好的公平性。時間片長度的選擇應適當,過短會導致呼叫頻繁,過長則會使用者響應較慢。
(4)優先順序排程法:為每個程序設定優先順序,排程時優先選擇優先順序高的程序執行,使迫切的任務優先執行。排程法可以將優先順序為靜態優先和動態優先順序。靜態優先順序是預先指定的,動態優先順序則隨著程序的執行時間而降低或升高。
  • 實際應用中,會搭配多種策略結合使用,如時間片輪轉也可適當考慮優先順序因素,對緊急的可以分配長一點的時間片,或連續執行多個時間片。

Linux實時程序排程演算法

  • 1.排程策略:Linux將程序分為實時程序與普通程序(非實時)兩類,分別採用不同的的排程策略。
  • 2.實時優先順序:標示實時程序優先權的高低,範圍可在0(最低)99(最高),實時進項為199,非實時為0。
  • 3.靜態優先順序:程序的基本優先順序。程序在建立之初繼承了一個表優先程度,它決定程序的靜態優先順序,普通程序為範圍為100(最高)~139(最低),預設為120,實時程序的此項無實際意義。
  • 4.動態優先順序:程序排程使用的實際優先順序。它是對靜態優先順序的調整。
  • 5.時間片:程序當前剩餘時間。

Linux排程器

  • RT排程器:實時程序的原則是嚴格按優先順序排程,在同一優先上採用先進先出或輪轉法程序排程
(1)實時程序可執行佇列:採用rt_rq結構描述,其中包括了實時排程所需的各個資訊。
(2)實時程序的排程策略:先進先出法:程式依次選擇當前最高優先順序FIFO型別的程序,排程其執行。輪轉法:給每一個實時程序分配一個時間片,然後按照它們的優先順序加入到相應的優先順序佇列中。
(3)實時排程的實施:當一個實時程序就緒時,核心將會根據它的優先順序其放入相應佇列尾部。
  • CFS排程器
(1)排程策略的公平性:普通排程法就是完全公平排程法,CFS放棄了時間片的概念,保證在排程週期內都能分到的比例獲得執行機會
(2)CFS排程原理:是將CPU的使用權按比例分配給各就緒程序,據此算出各程序在一個排程週期內執行的時間。分配依據是程序負載權重。將每個設定為虛擬時鐘,用於程序計量程序已消耗的CPU時間。
(3)CFS的可執行佇列:當一個程序轉入就緒態後,核心將其插入紅黑樹中適當的位置;當一個程序被選為中執行,它的節點就在樹中摘去。
(4)CFS排程的實施:當一個普通程序就緒時,CFS排程器根據他的虛擬時鐘值插入到紅黑樹中。

CFS演算法

  • CFS排程演算法的核心思想是:虛擬執行時間,演算法認為,所有程序的虛擬執行時間相等時,才對所有的程序公平,這時說明cpu時間時按照程序的權重來平均分配的。所以每次都從排程樹中選擇一個虛擬執行時間最小的程序來執行。
  • 程序切換的時機是:當前執行時間和理想執行時間比較,如果大於,說明程序佔用了過多的時間,需要懲罰,這時就選擇其他的程序來執行。

排程時機

  • 1.當前程序放棄CPU,轉入睡眠、暫停或僵死態。
  • 2.當前程序讓出CPU,轉入就緒態。
  • 3.當前程序的時間片用盡。
  • 4.有更高優先的程序就緒。

程序互斥與同步

  • 互斥:禁止多個程序同時進入各自的訪問同一個臨界資源的臨界區,以保證對臨界資源的排他性使用。
  • 同步:指程序間為合作完成一個任務而互相等待、協調步調。

程序通訊分類

  • 從通訊的功能分類來分,可分為低階通訊和高階通訊兩類。

  • 1.低階通訊:只是傳輸少量的資料,用於通知對方某個事件。低階用資訊、訊號量傳送方式。

  • 2.高階通訊:可以用來在程序之間傳輸大量的資訊。高階用訊息、管道和共享記憶體。

  • 通訊同步來分,可分為同步通訊與非同步通訊兩類。

  • 1.通訊同步:是指通訊雙方程序共同參與整個通訊過程,步調協調地送和接收資料。傳輸方式:管道、共享記憶體。比如:打電話,雙方同時線上,才可通話。

  • 2.非同步通訊:通訊雙方的聯絡比較鬆散,通訊的傳送方不必考慮對方的狀態,傳送完就繼續執行。傳輸方式:訊號、訊息。比如:發電子郵件不必關心對方是否何時接收。

1.訊號量:分為核心訊號和IPC訊號量。IPC訊號量是使用者態程序使用的同步與互斥機制。
2.訊號:是程序間可互相傳送的控制資訊,一般只是幾個位元組的資料,用於通知程序有某個事件發生。
3.管道:是連線兩個程序的一個數據傳輸通道,一個程序向管道寫資料,另外一個程序從管道讀資料,實現兩程序之間同步傳遞位元組流。
4.訊息佇列:訊息是結構化的資料,訊息佇列是由訊息連結而成的鏈式佇列。
5.共享記憶體:共享記憶體通訊方式就是在記憶體中開闢一段儲存區,將這個區對映到多個程序的地址空間中,使得多個程序共享這個記憶體區。

作業系統儲存管理

  • 記憶體管理4種功能:
(1)儲存空間分配:為準備進入系統準備執行程序分配空間。記憶體回收:程序執行完成後,將其空間回收。
(2)儲存地址的變換:程式進入儲存後,必須把程式中的邏輯地址轉換為程式所有在實際記憶體地址,稱為地址變換,或稱地址對映。
(3)儲存空間的保護:確保每個程序都在自己的地址空間執行,尤其是不允許使用者程序訪問作業系統的儲存區域。
(4)儲存空間的擴充:借用外存空間來擴充套件記憶體空間,方法是讓程式的部分程式碼進入記憶體,需要時再調入記憶體。
  • 段式儲存管理:程式的地址空間由若干大小不等的段組成。段是邏輯上完整的資訊單位,劃分是按照資訊的邏輯完整性及共享和保護。
  • 頁式儲存管理:產生的記憶體碎片使記憶體地址不連續。頁式可以將存放不連續的儲存空間,使得記憶體每一個空閒的區域都可以被程式使用。

Linux頁故障及處理

  • 頁故障:是指在CPU解析一個線性地址時發生異常中斷。引起也故障的原因主要有非法訪問和缺頁。
  • 引起缺頁的原因有3種
1.該頁還沒有分配到頁幀。
2.該頁的頁幀已經被回收。
3.寫操作引發了寫時複製。
  • 缺頁處理過程
(1)如果相應的頁表項還沒有設定(內容為全0),表明該頁未分配過頁幀。此時將根據對映型別進行處理:如果是檔案對映,則為其分配一個新頁幀,然後呼叫虛存區操作集vm_ops中的 fault()函式,將頁面從檔案空間中讀入新頁幀;如果是匿名對映,就將其對映到核心中一個只讀的全0頁的頁幀。
(2)如果頁表項已存在但“存在位P”為0,說明該頁已被交換到交換區。這種情況將呼叫 do_swap_page()來處理,它根據頁表項中存放的交換地址在交換區中找到該頁,為其重新分配一個頁幀,將其從交換區讀入。
(3)如果頁表項存在,且頁表項的“存在位P”為1,“讀寫位R/W”為0,而觸發缺頁異常的標誌為寫操作,表示程序正試圖寫一個只讀頁。此時將呼叫寫時複製的處理函式do wp page(),將該頁複製到一個新頁幀中。

儲存擴充

(1)覆蓋技術:原理是將一個程式劃分為幾個模組。程式必要模組放在常駐記憶體,其餘模組共享一個或幾個儲存空間。它們平時駐留在外存中,在需要時才裝入記憶體,覆蓋暫時不用的模組。
缺點是:必須在程式設計時對程式進行模組劃分,並缺點模組之間的覆蓋關係。

(2)交換技術:在多個程式併發執行時,往往有一些程式因等待某事件而暫時不能執行。將不能執行的程式換到外存中,就可以獲得空閒記憶體空間,交換是以程序為單位進行交換。
優點:增加了併發執行程式數目,且對程式結構沒有要求。
缺點:對整個程序進行換人、換出操作需要花費大量的CPU時間。

(3)虛擬儲存器:上面兩種都不能稱為虛擬儲存,因為看到的還是實際大小。原理是:將程式的部分程式碼調入記憶體,其餘駐留外存空間中,在需要時呼叫入記憶體。儲存擴充也是最好的。

虛擬儲存器原理

  • 虛擬儲存器:是用外存模擬記憶體,實現記憶體空間的擴充。方法是:在外存開闢一個儲存空間(磁碟空間),稱為交換區。進啟動時,只有部分程式程式碼進入記憶體,其餘駐留在磁碟中,需要的時候調入記憶體。

  • 虛擬儲存器的實現技術主要有頁式虛存和段存虛存兩種。Linux採用頁式虛存技術,也是最常用。

  • 頁式虛擬:就是在頁式儲存管理管理上加入以頁為單位的內外存空間的交換,來實現儲存空間擴充功能。

shell程序執行過程圖

Linux狀態轉換圖