作業系統 Linux下的程式

(愛吃魚的喵)發表於2020-12-19

Linux的程式

Linux程式的兩種執行模式

  • 在Linux裡,一個程式既可以執行使用者程式,又可以執行作業系統程式。當程式執行使用者程式時,稱其為處於“使用者模式”;當程式執行時出現了系統呼叫或中斷事件,轉而去執行作業系統核心的程式時,稱其為處於“核心模式”。
  • 在Linux裡處理機就具有兩種執行狀態:核心態和使用者態。

Linux下程式概念及特徵

(1)、在Linux裡,把程式定義為“程式執行的一個例項”
(2)、程式一方面競爭並佔用系統資源(比如裝置和記憶體),向系統提出各種請求服務;程式另一方面是基本的排程單位,任何時刻只有一個程式在CPU上執行。

Linux程式實體的組成

Linux中,每個程式就是一個任務(task),一般具有以下四個部分:
(1)程式控制塊(在Linux裡,也稱為程式描述符。)。
(2)程式專用的系統堆疊空間;
(3)供程式執行的程式段(在Linux裡,稱為正文段);
(4) 程式專用的資料段和使用者堆疊空間

在這裡插入圖片描述

Linux的程式控制塊——程式描述符

在Linux中,程式的程式描述符是一個結構型別的資料結構:task_struct。

程式描述符組成內容
  • 程式標識(pid);
  • 程式狀態(state);
  • 程式排程資訊,包括排程策略(policy)、優先順序別(priority和rt_priority)、時間片(counter)等;
  • 接收的訊號(*sig);
  • 程式家族關係;
  • 程式佇列指標;
  • CPU的現場保護區;
  • 與檔案系統有關的資訊。

Linux的程式狀態

Linux的程式可以有五種不同的狀態

在這裡插入圖片描述
程式狀態

  • 可執行狀態
  • 可中斷狀態
  • 不可中斷狀態
  • 暫停狀態
  • 僵死狀態

程式的建立與撤銷

  • Linux中的每個程式,都有一個建立、排程執行、撤銷死亡的生命期。 Linux系統中的各個程式,相互之間構成了一個樹型的程式族系。

Linux的程式排程

Linux的程式排程型別

  • 在Linux中,程式排程被分為實時程式排程非實時程式排程兩種。

Linux程式描述符中與排程有關的欄位

  • Linux程式描述符中,有四個欄位與程式排程有關,它們是:policy、priority、rt_priority和counter。

Linux的三種程式排程策略

  • Linux程式描述符中的policy欄位,可以取三個值:SCHED_FIFO、SCHED_RR以及SCHED_OTHER。
    (1)SCHED_FIFO——實時程式的先進先出排程策略
    (2)SCHED_RR——實時程式的輪轉排程
    (3)SCHED_OTHER——非實時程式的輪轉排程

Linux的等待佇列

在這裡插入圖片描述

Linux程式間的通訊—訊息佇列

  • 訊息佇列是程式間的一種非同步通訊方法。所謂“非同步”,即傳送訊息的程式在訊息發出之後,不必等待接收程式做出反應,就可以去做其他的事情了。
"訊息"的資料結構

Linux中的每個訊息,由兩個部分組成:訊息頭和訊息緩衝區。
在這裡插入圖片描述

訊息佇列的資料結構

Linux訊息佇列是struct msqid_ds型的資料結構。

訊息佇列表的資料結構

程式間藉助訊息佇列來傳遞資料,因此係統中可以建立多個訊息佇列。Linux是通過“訊息佇列表”來管理所有訊息佇列的。
在這裡插入圖片描述

有關訊息佇列的系統呼叫
  • 建立一個新的訊息佇列:newque( )
  • 刪除一個訊息佇列:freeque( )
  • 向一個訊息佇列傳送一條訊息:msgsnd( )
  • 從一個訊息佇列中接收一條訊息:msgrcv( )

相關文章