一、程序控制塊(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
struct
task_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...