3.1 Operating System Concepts 第三章 行程 (process) n 行程觀念 (Process Concept) n...

44
3.1 Operating System Concepts 第第第 第第 (process) 行行行行 (Process Concept) 行行行行 (Process Scheduling) 行行行行行行 行行行行行行 (Cooperating Processes) 行行行行行行 (Interprocess Communication) Client-Server 行行行行行
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    252
  • download

    0

Transcript of 3.1 Operating System Concepts 第三章 行程 (process) n 行程觀念 (Process Concept) n...

3.1Operating System Concepts

第三章 行程 (process)

行程觀念 (Process Concept) 行程排班 (Process Scheduling) 行程上的操作 行程間的合作 (Cooperating Processes) 行程間的通訊 (Interprocess

Communication) Client-Server 系統的通訊

3.2Operating System Concepts

行程 (process) 概念

行程與程式主要的不同點:程式是被放在外部的儲存裝置如磁碟上,而行程則被放在記憶體中。

程式在儲存裝置中是靜態的,而行程在記憶體中是動態的,它會隨著一些事件的發生而產生相對的改變。

行程指的是正在執行的程式。行程不只是程式碼 ( 有時也稱為本文區, text section) 而已。它還包含代表目前運作的程式計數器 (Program counter) 數值和處理器的暫存器內容。

3.3Operating System Concepts

行程觀念 一個作業系統執行各式程式 :

批次系統 (batch systems) – jobs分時系統 (Time-shared systems) – 使用者程式或

or tasks 書中的 job 及行程 (process) 幾乎是互用 . 行程 – 執行中的一個程式 ; 行程執行必須是順序執行 .

一個行程包含了 :程式計數器 (program counter)堆疊 (stack)資料區 (data section)

3.4Operating System Concepts

行程狀態 行程在執行時會改變其狀態。行程的狀態 (state) 部份是指該行程目前的動

作,每一個行程可能會處於以下數種狀態之一 : 新產生 (new): 該行程正在產生中。 執行 (running): 指令正在執行。 等待 (waiting): 等待某件事件的發生 ( 譬如輸出入完成或接收到一個信

號 ) 。 就緒 (ready): 該行程正等待指定一個處理器。 結束 (terminated): 該行程完成執行。

3.5Operating System Concepts

Process Control Block行程控制區塊 (PCB)

每個行程所擁有的相關資訊 . 行程狀態 (Process state) 程式計數器 (Program counter) CPU 暫存器 CPU 排程資訊 記憶體管理資訊 執行記錄資訊 (Accounting information) I/O 狀態資訊

3.6Operating System Concepts

Process Control Block (PCB)

3.7Operating System Concepts

行程控制區塊

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

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

當行程進行切換時,需要將目前行程的相關資訊記錄在該行程的 PCB 中,並將另一個行程的 PCB 載入至系統中,這個動作稱為內容切換 (context switch) 。

3.8Operating System Concepts

CPU 在行程與行程間的切換

3.9Operating System Concepts

行程排班

多元程式規劃系統的主要目的,是隨時保有一個行程在執行,藉以提高 CPU 的使用率。分時系統的目的是將 CPU 在不同行程之間不斷地轉換,以便訣使用者可以在自己的行程執行時與它交談。

為了達到這個目的,行程排班程式 (process scheduler)為 CPU 上執行程式選擇一個可用的行程 ( 可能由一組可用行程 ) 。

在單一處理器系統裏,不可能有一個以上的行程同時執行。如果有多個行程,其它的都必須在旁邊等待一直到 CPU 有空,才可能重新排列。

3.10Operating System Concepts

Ready Queue 及各類 I/O Device Queues

3.11Operating System Concepts

行程排班的示意圖

3.12Operating System Concepts

排班者 (Scheduler)

長程排班者 (Long-term scheduler or job scheduler) 選擇哪一個行程應該被置入 ready queue.

短程排班者 (Short-term scheduler or CPU scheduler) 選擇哪一個行程應該交給 CPU 執行 .

一個新的行程最初是置於就緒佇列中。它就一直在就緒佇列中等待,直到選來執行或被分派 (dispatched) 。一旦這個行程配置 CPU 並且進行執行,則會有若干事件之一可能發生 : 行程可發出 1/0 要求,然後置於一個 1/0 佇列中。 行程可產生出一個新的子行程並等待後者的結束。 行程可強行地移離 CPU( 如用中斷的結果一樣 ) ,然後放回

就緒佇列中。

中程排班的加入

一個行程在它整個生命期裏將在各個不同的排班佇列間遷移。作業系統必須按排班次序從這些佇列選取行程。行程的選取將由適當的排班程式 (scheduler) 來執行。

3.14Operating System Concepts

排班者 (Cont.)

短程排班者會常常被呼叫 (milliseconds) (must be fast).

長程排班者不常被呼叫 (seconds, minutes) (may be slow).

長程排班者控制多程式化的程度 (the degree of multiprogramming).

行程可以以下擇一描述 : I/O-bound process – 行程中花去的 I/O 時間比計算時間來得多 , 許多短的 CPU bursts.

CPU-bound process – 行程中花去的計算的時間比I/O 時間來得多 ; 一些常非常長的 CPU bursts.

3.15Operating System Concepts

內容切換 Context Switch

當 CPU 切換到另一個行程 , 系統必須儲存舊行程的狀態,然後將新行程的儲存狀態載入 .

Context-switch 時間是耗時 ; 當作切換時系統無法做有用的工作 .

耗去的時間要看硬體的支援程度 . Context-switch 是一種中斷,它的處理方式與發生中斷後處理方式相同 。

執行緒降低內容切換所花的時間。

3.16Operating System Concepts

Context Switch 內容切換之處理方式如下:

作業系統取得控制權,並將行程狀態儲存至行程控制區塊內。 執行中央處理器排程工作,並至 ready 佇列內選取一個行程 將被選取之行程之行程控制區塊載入系統內。 執行此被選取之行程。

When an interrupt occurs, the OS save the status of interrupted process, routine control to appropriate interrupt handler, then loading the saved state for the new process to execute.

3.17Operating System Concepts

行程的產生

父行程產生了子行程 , 而且接續產生的其他行程,形成一個行程的樹狀結構 .

資源分享 (Resource sharing)父子行程分享所有資源 .子行程分享父行程的部分資源 .父子行程不分享行程 .

執行 (Execution)父子行程同時執行 .父行程要等到子行程結束 .

3.18Operating System Concepts

行程的產生 (Cont.)在一個行程的執行期間,它可以利用產生行程的系統呼叫來產生數個新的行程。原先的行程就叫做父行程 (Parent process) ,而新的行程則叫做子行程 (children process) 。每一個新產生的行程可以再產生其它的行程,這可以形成一幅行程樹 (tree of processes) 。

3.19Operating System Concepts

UNIX System 上的行程樹

3.20Operating System Concepts

行程結束 行程執行最後一條程式 , 而且讓作業系統來決定

(exit).從子行程將資料輸出到父行程 (經由 wait).由作業系統來回收行程的資源 .

父行程可以結束子行程的執行 (abort).子行程已超過可使用的配置資源 .交給子行程的工作已不再需要 .父行程正要離開 .

當父行程結束,作業系統不允許子行程繼續 . 串連結束 (Cascading termination).

3.21Operating System Concepts

行程間的合作關係Cooperating Processes

獨立行程不能影響其他行程或其他行程被影響 . 互相合作的行程可以彼此互相影響 . 行程間合作的優點

資訊分享 (Information sharing):因為數個使用者可能對相同的一項資訊 (例如,公用檔案 ) 有興 趣,因此我們必須提供一個環境允許使用者能同時使用這些資源。

加速運算 (Computation speed-up): 如果我們希望某一特定工作執行快一點,則可以分成一些子工作, 每一個子工作都可以和其它子工作平行地執行。模組化 : 我們可能希望以模組的方式來建立系統,把系統功能分配到數個行 程。

模組化 (Modularity) 便利性 (Convenience):即使是單一使用者也可能同時執行

數項工作。

3.22Operating System Concepts

Producer-Consumer 問題

行程間合作的應用範例就是負責生產的行程所產生的資訊會被負責消耗資訊的行程所使用 . unbounded-buffer假設緩衝區沒有大小的限制 . bounded-buffer假設緩衝區大小是有限制的 .

3.23Operating System Concepts

緩衝區

當生產者和消費者同時執行時,需要有一個緩衝區給生產者存放產品,以提供給消費者使用。

緩衝區可分為:無限緩衝區有限緩衝區

緩衝區由作業系統提供的 IPC 機制來產生,或是直接經由程式設計師在程式中使用共享記憶體的機制來進行。

3.24Operating System Concepts

Bounded-Buffer – Shared-Memory Solution

Shared data#define BUFFER_SIZE 10

typedef struct {

. . .

} item;

item buffer[BUFFER_SIZE];

int in = 0;

int out = 0;

Solution is correct, but can only use BUFFER_SIZE-1 elements

3.25Operating System Concepts

Bounded-Buffer – Producer Process

item nextProduced;

while (1) {

while (((in + 1) % BUFFER_SIZE) == out)

; /* do nothing */

buffer[in] = nextProduced;

in = (in + 1) % BUFFER_SIZE;

}

3.26Operating System Concepts

Bounded-Buffer – Consumer Process

item nextConsumed;

while (1) {while (in == out); /* do nothing */nextConsumed = buffer[out];out = (out + 1) % BUFFER_SIZE;

}

3.27Operating System Concepts

行程間的通訊 (Interprocess Communication,IPC)

眾多行程間的溝通與一些動作同步所需的機制 . 訊息系統

行程間的彼此溝通不需訴諸共享的變數 (shared variables).

IPC facility 提供兩種操作 : send(message) – 訊息的大小可以是固定或變動 receive(message)

假如行程 P 與行程 Q 希望能彼此溝通 , 他們需要 : 建立兩行程間的溝通連線 (communication link) 經由送收機制來交換訊息

溝通連線的製作 實體的 (e.g., shared memory, hardware bus) 邏輯的 (e.g., logical properties)

3.28Operating System Concepts

製作上的一些問題

連線如何建立 ? 是否可以建立超過兩個行程以上的連線 ? 每對溝通中的行程可以建立多少條連線 ? 一個連線的容量是多少 ? 一個連線可以包容的訊息大小是固定或變動的 ?

一個連線是雙向或單向的 ?

3.29Operating System Concepts

行程間直接的溝通Direct Communication

行程間必須有明確的呼叫方式 : send (P, message) – 送一個訊息message給行程 P

receive(Q, message) – 從行程 Q 收到一個訊息message

溝通連線的屬性連線是自動建立的 .一個連線是只屬於一對溝通中的行程 .每對行程只存在著一個連線 .連線可以是單向的,但也可以是雙向的 .

3.30Operating System Concepts

直接溝通

每個行程要與其他行程進行溝通時,必須要明確地指出訊息傳送的目的地或接收訊息的來源。

可分為對稱與非對稱,而 send() 和 receive() 分別被定義成 對稱 –

send(A, message) /*傳送訊息給 A 行程 */ receive(B, message) /* 從 B 行程接收訊息 */

非對稱 – send(A, message) /*傳送訊息給 A 行程 */ receive(id, message)/* 從任何一個行程接收一個訊息。

其中 id 這個變數代表正在與接 收端進行溝通的行程 */

3.31Operating System Concepts

直接溝通(續)

使用 IPC 機制程式較容易撰寫。

do {…./* 生產者產生新的資料 p_product */…send( 消費者 , p_product);

}while (FALSE);

do {receive( 生產者 , c_product);…/* 消費者消耗 c_product */…

}while (FALSE);

生產者行程

消費者行程

3.32Operating System Concepts

行程間間接的溝通

訊息是有方向性的而且是從信箱 (mailboxes)收到 ( 也看成是 ports).每個信箱有唯一的 id.只有共享信箱的行程才可以溝通 .

溝通連線的特質只有共享共同信箱的行程才可以建立連線所以可以有很多行程共用一個連線 .每一對行程可以共享幾條溝通連線 .連線可以是單向,或是雙向的 .

3.33Operating System Concepts

行程間間接的溝通

相關操作 Operations產生一個新的信箱經由這個信箱送收訊息刪除一個信箱

相關指令的定義 : send(A, message) –送一個訊息

message 給信箱 A receive(A, message) – 從信箱 A 收一個訊

息 message

3.34Operating System Concepts

間接溝通

信箱的擁有者可以為行程作業系統

若信箱的擁有者為作業系統,則作業系統必須提供功能讓行程去:建立一個新的信箱 透過信箱去傳送和接收訊息銷毀一個信箱

3.35Operating System Concepts

行程間間接的溝通

信箱分享的問題 P1, P2, and P3 分享信箱 A. P1, 送訊息 ; P2 和 P3 同時下收的指令 .誰會收到訊息 ?

答案決定在所選擇的機制最多只有兩個行程可以建立連線 .一次只能有一個行程可以執行一個接收指令 .允許系統任意決定訊息接收者,送出訊息者可以被通知誰接收了訊息 .

3.36Operating System Concepts

同步Synchronization

訊息傳遞可以是等待 (blocking) 或非等待 (nonblocking),也稱為同步 (synchronous) 和非同步 (asynchronous) 。等待傳送 (blocking send):傳送行程等待著,直到接收行程或信箱接收訊息。

非等待傳送 (nonblocking send):傳送行程送出訊息及重新操作。

等待接收 (blocking receive): 接收者等待,直到有效訊息出現。

非等待接收 (nonblocking receive): 接收者收到有效訊息或無效資料。

3.37Operating System Concepts

在分散式系統環境下,於某部電腦內要求( Request)另一部電腦提供服務,並將服務的結果傳回,這就是一種主從式模式( Client/Server Model)。

要求服務的電腦稱為客戶端( Client)。

提供服務的電腦稱為伺服端( Server)。

主從式模式( Client/Server Model )

3.38Operating System Concepts

Client-Server Communication

Sockets Remote Procedure Calls Remote Method Invocation (Java)

3.39Operating System Concepts

插座 Sockets

插座 (Socket) 定義成通信的終端。一組行程使用一對插座 (雙方各一個 ) 在網路上通信。一個 IP位址和一個埠號碼 (Port number) 所組成。

3.40Operating System Concepts

遠端程序呼叫Remote Procedure Calls

遠端呼叫 (RPC) 是行程間的程序呼叫抽象觀念移植到網路系統上 .

Stubs – 為伺服器端 (server) 的真正程序執行時在客戶端 (client) 所建立的代理程式 .

客戶端的 stub 程式可以找到伺服器而且配置保護 (marshall) 對應的參數 .

伺服器端的 stub 程式收到這個訊息後,拆解被保護的參數 , 然後執行在伺服器端對應的程序 .

3.41Operating System Concepts

遠端程序呼叫( Remote Procedure Call)簡稱 RPC ,有時又叫遠端行程通訊( Remote Process Communication),它與行程內部通訊非常相似,只不過它是指分別在不同電腦內的二個行程彼此進行通訊並達成同步。

由於網路的發達,電腦與電腦的溝通情形愈加普遍,因此有時把遠端程序呼叫、遠端行程通訊、及行程內部通訊全都以行程內部通訊稱呼。

遠端程序呼叫

3.42Operating System Concepts

Execution of RPC

3.43Operating System Concepts

Remote Method Invocation

Remote Method Invocation (RMI) is a Java mechanism similar to RPCs.

RMI allows a Java program on one machine to invoke a method on a remote object.

3.44Operating System Concepts

Marshalling Parameters