程序控制塊 PCB 結構

2021-09-07 15:33:52 字數 4773 閱讀 1798

一、程序控制塊(pcb)結構

程序控制塊(pcb)是系統為了管理程序設定的乙個專門的資料結構。系統用它來記錄程序的外部特徵,描述程序的運動變化過程。同時,系統可以利用pcb來控制和管理程序,所以說,pcb(程序控制塊)是系統感知程序存在的唯一標誌。

linux系統的pcb包括很多引數,每個pcb約佔1kb多的記憶體空間。用於表示pcb的結構task_struct簡要描述如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

include/linux/sched.h

structtask_struct ;

排程資料成員:

1) vo latile long state

表示程序的當前狀態。程序執行時, 它會根據具體情況改變狀態。程序狀態總共有task runn ing ( 可執行狀態)、task interrupt ible ( 可中斷的等待狀態)、task uninterrupt ible(不可中斷的等待狀態)、task zomb ie( 僵死狀態)、task stopped(暫停狀態) 等5種。

2) long pr io rity程序優先順序, prio rity 的值給出了程序每次獲取cpu 後, 可使用的時間片長度( 單位是jiffies)。

3) unsigned long rt_priority rt_priority 的值給出了實時程序的優先順序, rt_priority 

1000給出程序每次獲取cpu 後, 可使用的時間片長度(單位是jiffies)。

4) long counter在輪轉法排程時counter表示當前程序還可執行多久。在程序開始時被賦為priority的值, 以後每隔乙個時鐘中斷遞減1,減到0時引起新一輪排程。

5) unsigned long policy表示該程序的程序排程策略。排程策略有:

sch ed_other 0, 非實時程序, 用基於優先權的輪轉法。

sch ed_fifo 1, 實時程序, 用先進先出演算法。

sch ed_rr 2, 實時程序, 用基於優先權的輪轉法

程序佇列指標:

1) struc t task_struct* next_task, * prev_task

在linux 中所有程序(以pcb 的形式)組成乙個雙向鍊錶,

next_task和prev_task是鍊錶的前後向指標。

2) struct task_struct* p_opptr, * p_pptr

struct task_struc t* p_cptr, * p_ysptr, * p_osptr

以上分別是指向該程序的原始父程序、父程序、子程序和新

老兄弟程序的指標。

3) struct task_struct* pidhash_next

struct task_struct** pidhash_pprev

用於鏈入程序hash表的前後指標。系統程序除了鏈入雙

向鍊錶外, 還被加到hash表中。

程序標識:

uid_t uid  gid_t gid uid和gid分別是執行程序的用

戶標識和使用者組標識。

pid_t pid  pid_t pgrp pid和pgrp分別是執行程序的

程序標識號和程序組標識號

時間資料成員:

long per_cpu_utime [ nr_cpus ] per_cpu_stime

[ nr_cpus]

per_cpu_utime 是使用者態程序執行的時間, per_cpu_

stime是核心態程序執行的時間

程序建立時間unsigned long start_time

檔案系統資料成員:

struct fs_struct* fs

fs儲存了程序本身與vfs( 虛擬檔案系統)的關係資訊。

struct fs_struct

其中root、rootm nt是根目錄的dentry 和其mount點的vfsmount。

pwd、pwdmnt 是當前工作目錄的dentry 和其mount 點的vfs..

mount。altroot、altrootmnt是儲存根節點被替換之後原來根目標

的dentry和其mount點的vfsmount。

記憶體資料成員:

1) struct mm_struct* mm

在linux 中, 採用按需分頁的策略解決程序的記憶體需求。

task_struct的資料成員mm 指向關於儲存管理的mm_truc t結

構。

2) struct mm_struct* active_mm

active_mm 指向活動位址空間。

3) mm_segm ent_t addr_ lim it

表示執行緒空間位址。

4) spinlock_t alloc_ lock

用於申請空間時用的自旋鎖。自旋鎖的主要功能是臨界區

保護。

頁面管理:

2) unsigned long min_flt, maj_ flt

該程序累計minor缺頁次數和major缺頁次數。

3) unsigned long nswap

該程序累計換出頁面數。

4) unsigned long swap_cnt

下一次迴圈最多可換出的頁數。

二、makefile

makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作,makefile帶來的好處就是——「自動化編譯」,一旦寫好,只需要乙個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。make是乙個命令工具,是乙個解釋makefile中指令的命令工具.

makefile來告訴make命令如何編譯和鏈結這幾個檔案。規則是:

1)如果這個工程沒有編譯過,那麼我們的所有c檔案都要編譯並被鏈結。

2)如果這個工程的某幾個c檔案被修改,那麼我們只編譯被修改的c檔案,並鏈結目標程式。

3)如果這個工程的標頭檔案被改變了,那麼我們需要編譯引用了這幾個標頭檔案的c檔案,並鏈結目標程式。

下面舉乙個簡單的例子:(進度條的實現)

1.vim proc.c寫入(進度條的實現)

2、vim makefile寫入

第一行中並沒有任何引數,只是在冒號(:)後列出編譯中所需的檔案,當第一行中的任何檔案中更改時,make就知道需要重新編譯了。

其中.phony意思表示clean是乙個「偽目標」,清除 所有 .o檔案 ,.o檔案就是目標檔案

3、執行make指令就可以編譯proc.c這個程式

程序控制塊(PCB)

為了描述和控制程序的執行,系統為每乙個程序定義了乙個資料結構 程序控制塊。它是程序實體的一部分,是作業系統中最重要的記錄型資料結構。或者說,os是根據pcb來對併發程式的程序進行控制和管理的。總而言之,pcb是程序存在的唯一標誌。程序控制塊中的資訊包括程序識別符號 處理機狀態 程序排程資訊 程序控制...

程序控制塊 PCB

程序控制塊是作業系統中最重要的資料結構,每個程序控制塊包含了作業系統在排程 資源分配 中斷處理 效能監控和分析所需的關於程序的所有資訊。程序控制塊資訊可以分為三類 程序標識資訊 處理器狀態資訊 程序控制資訊。程序識別符號主要包括 當前程序的識別符號 process id,pid 建立這個程序的父程序...

程序控制塊 PCB

程序控制塊 pcb 是系統為了管理程序設定的乙個專門的資料結構。系統用它來記錄程序的外部特徵,描述程序的運動變化過程。同時,系統可以利用pcb來管理和控制程序,所以說,pcb是系統感知程序存在的唯一標識。linux系統下的pcb包含了很多引數,每個pcb約佔1kb的記憶體空間大小。主要包含的內容 1...