1. 程式人生 > >linux系統程式設計-程序相關的基本概念

linux系統程式設計-程序相關的基本概念

1. 程式和程序

  1. 程式:指編譯好的二進位制檔案,在磁碟上,不佔用系統資源(CPU、記憶體)永久的,靜態的。
  2. 程序:是抽象的概念,佔用系統資源,在記憶體中執行(程式執行產生程序)暫時的,動態的。

例子:linux同時開兩個終端,分別打開了同一個程式,但是對應的程序是不同的。

2. 單道程式和多道程式

  1. 單道程式設計:以前的dos系統,所有程式排隊執行,執行完一個才輪到下一個
  2. 多道程式設計:現代作業系統,CPU劃分出時間片,基於時間中斷,輪流分配給每個程式(巨集觀並行,微觀序列)

3. CPU和MMU(在cpu內部)

cpu

在這裡插入圖片描述

mmu(在向對映時以4K為最小單元)

  1. 完成虛擬記憶體(32位計算機對應4G)和實體記憶體的對映
  2. 設定、修改記憶體訪問許可權(CPU對虛擬記憶體中3G使用者空間<linux中3級>和1G核心空間<linux中0級>的訪問許可權是不同的)

例子:執行a.out 和 app兩個程式,使用者區用了多少儲存空間,MMU以page(4K)為最小單位對映到實體記憶體,兩個程式對映到不同的區域,但是核心區只有一個(但是擁有各自的不同的PCB) 在這裡插入圖片描述

4. 程序控制塊(PCB)

PCB的本質是task_struct 結構體,/usr/src/linux-headers-3.16.0-30/include/linux/sched.h檔案中可以檢視struct task_struct 結構體定義,其內部成員有很多,我們重點掌握以下部分即可:

  • 程序id。系統中每個程序有唯一的id,在C語言中用pid_t型別表示,其實就是一個非負整數。
  • 程序的狀態,有初始化、就緒、執行、掛起、停止5種狀態。
  • 程序切換時需要儲存和恢復的一些CPU暫存器。
  • 描述虛擬地址與實體地址空間的對映資訊。
  • 描述控制終端的資訊。
  • 當前程序工作目錄(Current Working Directory)。
  • umask掩碼。
  • 檔案描述符表,包含很多指向file結構體的指標。
  • 和訊號相關的資訊。
  • 使用者id和組id。
  • 會話(Session)和程序組。
  • 程序可以使用的資源上限(Resource Limit)。