You are on page 1of 36

行程的概念

作者 : 陳鍾誠
單位 : 金門技術學院資管系
Email: ccc@kmit.edu.tw
URL : http://
ccc.kmit.edu.tw

日期 : 01/17/10
大綱
 行程定義
 執行中的程式

 相關概念
 電腦的架構
 CPU+ 記憶體結構  機器語言 組合語言  高階語言
 行程控制區塊 (Process Control Block)
 內文切換
 行程的行為
 行程的狀態
 排程

2 陳鍾誠 - 01/17/10
行程的概念
 行程的定義 :
 執行中的程式 中斷向量

 多工 Multi-Tasking
作業系統
 很多個程式共同執行

 解決辦法
 每次仍然只有一個程式真正佔用
CPU 執行。 程式 1

 要切換程式時,使用上述的 Task-
Switching 程序
程式 2
 其他程式處於等待狀態
 等甚麼 ? (I/O, 排程 )

程式 3
3 陳鍾誠 - 01/17/10
電腦的架構
 CPU+ 記憶體結構

 機器語言

 組合語言

 高階語言

4 陳鍾誠 - 01/17/10
行程 – 高階語言

int sum = 0;
for (int i=0; i<10; i++)
sum = sum + i;

5 陳鍾誠 - 01/17/10
行程 – 組合語言

WORD sum 0
WORD i 0

LOAD R1, sum


int sum = 0; LOAD R2, i
LOOP COMP R2, 10
for (int i=0; i<10; i++) JGT EXIT
sum = sum + i; INC R2
ADD R1, R2, R1
JMP LOOP
EXIT STORE sum, R1
STORE i, R2

6 陳鍾誠 - 01/17/10
行程 – 機器語言
位址

00 00 LOAD R1, sum 01 01 00 28


00 04 LOAD R2, i 01 02 00 2C
00 08 LOOP COMP R2, TEN 04 02 00 30
00 0C JGT EXIT 0A 00 00 1C
00 10 INC R2 1C 02 00 00
00 14 ADD R1, R2, R1 03 01 02 01
00 18 JMP LOOP 09 00 00 08
00 1C EXIT STORE R1, sum 02 01 00 28
00 20 STORE R2, i 02 02 00 2C
00 24 RETURN 00 00 00 00
00 28 WORD sum 0 00 00 00 00
00 2C WORD i 0 00 00 00 00
00 30 WORD TEN 10 00 00 00 0A
7 陳鍾誠 - 01/17/10
行程 – 硬體狀態

記憶體

暫存器 LOAD R1, sum 01 01 00 28


ALU
( 加法器… ) R1
0028 00 00 00 00
R2

Control Unit IR=01 01 00 28


( 控製單元 ) PC=00000000

8 陳鍾誠 - 01/17/10
行程的基本元素
 相對應的程式碼
暫存器 程式

 資料區段 + 行程堆疊
資料

 CPU 中各暫存器的值
堆疊

9 陳鍾誠 - 01/17/10
行程的基本元素 – 程式
位址
00 00 LOAD R1, sum 01 01 00 28
00 04 LOAD R2, i 01 02 00 2C
00 08 LOOP COMP R2, TEN 04 02 00 30
00 0C JGT EXIT 0A 00 00 1C
00 10 INC R2 1C 02 00 00
00 14 ADD R1, R2, R1 03 01 02 01
00 18 JMP LOOP 09 00 00 08
00 1C EXIT STORE R1, sum 02 01 00 28
00 20 STORE R2, i 02 02 00 2C
00 24 RETURN 00 00 00 00
00 28 WORD sum 0 00 00 00 00
00 2C WORD i 0 00 00 00 00
00 30 WORD TEN 10 00 00 00 0A
10 陳鍾誠 - 01/17/10
行程的基本元素 – 資料
位址
00 00 LOAD R1, sum 01 01 00 28
00 04 LOAD R2, i 01 02 00 2C
00 08 LOOP COMP R2, TEN 04 02 00 30
00 0C JGT EXIT 0A 00 00 1C
00 10 INC R2 1C 02 00 00
00 14 ADD R1, R2, R1 03 01 02 01
00 18 JMP LOOP 09 00 00 08
00 1C EXIT STORE R1, sum 02 01 00 28
00 20 STORE R2, i 02 02 00 2C
00 24 RETURN 00 00 00 00
00 28 WORD sum 0 00 00 00 00
00 2C WORD i 0 00 00 00 00
00 30 WORD TEN 10 00 00 00 0A
11 陳鍾誠 - 01/17/10
行程的基本元素 – 堆疊
 main()
 f1(p1)

 f2(p2) 0000 main 的下一個執行點


0004 f1 的下一個執行點
 sum(ary, size) 0008 參數 p1 的值
000C f2 的下一個執行點
0010 參數 p2 的值
0014 sum 的下一個執行點
0018 參數 ary 的指標值
001C 參數 size 的值

12 陳鍾誠 - 01/17/10
堆疊的範例
呼叫 swap 前 呼叫 swap 後
int main() {
int a, b; 0 保存的 ebp 24 保存的 ebp
a = 16; b=32;
swap(&a, &b); -4 a 20 a
return a-b; b b
-8 16
}
-12 &a 12 &b
堆疊
void swap(int *a, int *b) {
-16 &b 8 &a
int c;
c = *a; *a = *b; *b=c; 4 返回地址
}
0 保存的 ebp

-4 c

註: ebp 為堆疊的基底指標
相對於 esp 的位址
13 陳鍾誠 - 01/17/10
行程的基本元素 – 暫存器
 CPU 中各暫存器的值 ( 包含程式計數器 PC)
記憶體

暫存器 LOAD R1, sum 01 01 00 28


ALU
( 加法器… ) R1
0028 00 00 00 00
R2

Control Unit IR=01 01 00 28


( 控製單元 ) PC=00000000

14 陳鍾誠 - 01/17/10
行程的組成
 作業系統應該記載哪些行程資訊 ?
 這個資訊稱為 PCB

 行程控制區塊( PCB)
 儲存行程在執行時相關的資訊。

 PCB 中通常包括了
 行程狀態
 CPU 暫存器
 排程資訊
 I/O 狀態

15 陳鍾誠 - 01/17/10
行程的資料結構
 行程的狀態 (Process State)
 紀錄行程目前所處的狀態
 暫存器 (Registers)
 程式計數器 Program Counter
 狀態暫存器 Status Register
 記憶體 (Memory)
 程式區
 資料區
 堆疊區
 資源 (Resource)
 開啟的檔案
 使用的裝置

16 陳鍾誠 - 01/17/10
行程控制區塊
 行程控制區塊 - PCB (Process Control
Block)
 作業系統所儲存的行程資料結構
行程狀態
行程代號
程式計數器
暫存器

記憶體限制
己開啟的檔案串列

17 陳鍾誠 - 01/17/10
行程的狀態

允許進入 中斷

就緒 執行

排程器分派

I/O 或事件結束 I/O 或等待事件

18 陳鍾誠 - 01/17/10
Linux 的行程狀態欄位
在 Linux 中,行程的狀態記錄在行程描
述器中的 state 欄位:
volatile long state; /* -1 不可執行, 0 可執行, >0 被停止
*/
#define TASK_RUNNING 0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define TASK_ZOMBIE 4
#define TASK_STOPPED 8

19 陳鍾誠 - 01/17/10
Linux 的行程狀態
 可執行狀態 TASK_RUNNING :
 行程正在執行或是等待被執行時。

 可中斷狀態 TASK_INTERRUPTIBLE :
 等待某些事件發生時,如等待信號的傳遞。

 不可中斷狀態 TASK_UNINTERRUPTIBLE :
 與 TASK_INTERRUPTIBLE 一樣,不同的是信號傳遞時並不會造成狀態的改變。

 停止狀態 TASK_STOPPED :
 收到 SIGSTOP 、 SIGTSTP 、 SIGTTIN 或 SIGTTOU 信號時。

 彊死狀態 TASK_ZOMBIE :
 當子行程結束時,父行程尚未呼叫類似 wait() 的系統呼叫來得知子行程的狀態並
作適當處理,於是子行程就會處於這個狀態。

20 陳鍾誠 - 01/17/10
內文切換
 內文切換 - 作業系統如何切換執行程式 ?

 當 CPU 的使用權由一個行程轉到另一個行程時需進行內文切換。

 切換的功能通常稱為 Context Switch.

 Context-Switch 時必須把所有暫存器的值儲存起來。

 等到該程式又被執行時才再度將這些暫存器取回來,放入 CPU 的
對應暫存器中。

 程式計數器在儲存時應該儲存下一個執行指令的位址。

21 陳鍾誠 - 01/17/10
內文切換的過程
行程 P0 作業系統 行程 P1
中斷或系統呼叫
執行中

將狀態儲存至 PCB 0

由 PCB 1 載入狀態

中斷或系統呼叫 執行中

將狀態儲存至 PCB 1

由 PCB 0 載入狀態

執行中
22 陳鍾誠 - 01/17/10
Linux 的內文切換
( 1)
行程 prev 的行程描述器

0x1d001d00 ESP
stack
esp:0x1f002100
eip:0x1b01c000 0x1c100100 ESI data

text
0x1c001100 EDI 行程 prev
行程 next 的行程描述器

0x1b00a100 stack
EIP
data
esp:0x1a00c100 CPU 暫存器 text
行程 next
eip:0x1a00a000

主記憶體

23 陳鍾誠 - 01/17/10
Linux 的內文切換( 2 )
行程 prev 的行程描述器

0x1d001d00 ESP
esp:0x1d001d00 stack

eip:0x1b01c000 0x1c100100 ESI data

text
0x1c001100 行程 prev
行程 next 的行程描述器 EDI

0x1b00a104 stack
EIP
esp:0x1a00c100 data
CPU 暫存器 text
eip:0x1a00a000 行程 next

主記憶體

24 陳鍾誠 - 01/17/10
Linux 的內文切換( 3 )
行程 prev 的行程描述器

0x1a00c100 ESP stack


esp:0x1d001d00
0x1c100100 data
eip:0x1b01c000 ESI
text
行程 next 的行程描述器 0x1c001100 行程 prev
EDI

0x1b00a108 stack
EIP
esp:0x1a00c100 data
eip:0x1a00a000 CPU 暫存器 text
行程 next

主記憶體
25 陳鍾誠 - 01/17/10
Linux 的內文切換
( 4)
行程 prev 的行程描述器

0x1a00c100 ESP
stack
esp:0x1d001d00
eip:0x1d001d18 0x1c100100 ESI data

text
0x1c001100 行程 prev
EDI
行程 next 的行程描述器

0x1b00a10c stack
EIP
data
esp:0x1a00c100 CPU 暫存器 text
eip:0x1a00a000 行程 next

主記憶體
26 陳鍾誠 - 01/17/10
Linux 的內文切換
( 5)
行程 prev 的行程描述器

0x1a00c100 ESP
stack
esp:0x1d001d00
eip:0x1d001d18 0x1c100100 ESI data

text
0x1c001100 行程 prev
EDI
行程 next 的行程描述器

0x1a00a000 stack
EIP
data
esp:0x1a00c100 CPU 暫存器 text
行程 next
eip:0x1a00a000
主記憶體

27 陳鍾誠 - 01/17/10
Linux 的內文切換
( 6)
行程 prev 的行程描述器

0x1a00c100 ESP stack


esp:0x1d001d00
0x1c100100 data
eip:0x1d001d18 ESI
text
0x1c001100 行程 prev
EDI
行程 next 的行程描述器

0x1a00a00c stack
EIP
data
esp:0x1a00c100 CPU 暫存器 text
行程 next
eip:0x1a00a000
主記憶體

28 陳鍾誠 - 01/17/10
多工執行
 多工 Multi-Tasking
中斷向量
 很多個程式共同執行

 解決辦法 作業系統
 每次仍然只有一個程式
真正佔用 CPU 執行。
程式 1
 要切換程式時,使用上
述的 Task-Switching
程序
程式 2
 其他程式處於等待狀態
 等甚麼 ? (I/O, 排程 )

程式 3
29 陳鍾誠 - 01/17/10
行程的行為
 行程的執行會在兩個狀態間不停的切換
 CPU 暴衝
 I/O 暴衝

 行程一開始都是CPU 暴衝,接著是 I/O 暴


衝,然後再回到 CPU 暴衝和 I/O 暴衝。

 在正常的狀況下,行程就在這兩個狀態間一直循
環,最後以 CPU 暴衝作為結束。
30 陳鍾誠 - 01/17/10
CPU 暴衝與 I/O 暴衝
load store
add store CPU 暴衝
read from file

等待 I/O I/O 暴衝

store increment
index CPU 暴衝
write to file

等待 I/O I/O 暴衝

load store
add store
CPU 暴衝
read from file

31 陳鍾誠 - 01/17/10
CPU 暴衝時間統計示意圖
160
140
120
100
80
60
40
20

0 8 16 24 32 40
32 陳鍾誠 - 01/17/10
行程排程
 為了增加 CPU 的使用效率而提出多個行程的觀
念。

 一個單 CPU 的系統來說,隨時只能有一個行程


在執行。

 其他行程則必須等待 CPU 空閒下來,然後再經


由排程器選出,才能取得 CPU 的使用權。

 如何排程是影響作業系統效能最重要的因素。
33 陳鍾誠 - 01/17/10
排程佇列
 一個行程在執行期間會在各種不同的佇列中進
出。

 一個系統中通常有
 工作佇列

 就緒佇列

 等待佇列

 裝置佇列

34 陳鍾誠 - 01/17/10
就緒佇列與裝置佇列
PCB7 PCB2
head
tail 暫存器 暫存器
就緒佇列 … …

head PCB5 PCB1

tail
暫存器 暫存器
磁碟 1 佇列 … …

head PCB9
tail
暫存器
磁碟 2 佇


35 陳鍾誠 - 01/17/10
結語
 行程就是執行中的程式

 要了解電腦的架構才能理解行程概念

 行程控制區塊 PCB
 是作業器統用來儲存行程資料的結構

 內文切換作業系統切換行程時必做的動作

 行程的行為是由 – CPU 暴衝與 IO 暴衝 輪流

 行程的狀態 – 1. 執行中 2. 等待輸出入 3. 等待排程

 排程時,由工作佇列中取得可執行的行程,加以執行。

36 陳鍾誠 - 01/17/10

You might also like