SlideShare a Scribd company logo
1 of 326
作業系統數位教材 ( 資四 AB)
 版權所有 : 作業系統 ( 第二版 ), 蔡玉彬 , 胡繼陽著 , 學貫出版社
教學目標
 作業系統的目的
 作業系統的歷史演進
 作業系統的分類
作業系統
第一章
概論
作業系統的目的
 提供使用者能夠執行程式的環境,以達到方便使
用與最有效率的目標。
 分配各項電腦的資源來解決問題。其中分配的過
程必須公正而且盡可能有效率。
 當成控制程式來提供兩個主要的服務功能:
– (1) 監督使用者程式的執行狀況,防止錯誤與不正確
的使用電腦,以及
– (2) 管理操作的狀況與控制周邊裝置的輸入與輸出。
電腦系統各部分
何謂作業系統
 由上往下看的觀點
– 可視為一個擴充機器 (extended machine)
 由下往上看的觀點
– 作為資源管理者 (resource manager) 的角色
 作業系統是一種資源管理者 (resource
allocator) 和常駐控制程式 (control program)
第一代電腦
 西元 1945-1955 年
 真空管建構
 無作業系統的存在
 代表系統: ENIAC
第二代電腦
 西元 1955-1965 年
 電晶體建置
 出現程式語言的觀念
 代表系統: TX-0
第三代電腦
 西元 1965-1980 年
 積體電路建置
 代表系統: IBM
System/360
IBM System/360
第四代電腦
 西元 1980-1990 年
 大型積體電路建置
 代表系統:個人電腦
後 PC 時代電腦
圖片來源:資策會 MIC
作業系統的分類
 基本單節點系統
 多節點系統
 特殊應用系統
基本單節點系統
 批次系統
 多重程式系統
 分時系統
 桌上型電腦作業系統
 平行系統
多節點系統
 網路作業系統
 分散式系統
 叢集式系統
特殊應用系統
 即時嵌入式作業系統
 多媒體系統
 手持式系統
批次系統
 使用者必須先把工作 ( 即
想要執行的程式 ) 提交
(submit) 電腦系統
 作業系統將其放入批次佇
列 (queue) 中,排隊等候
執行
 依序從佇列中取出等候的
工作,並執行該工作所指
定的程式
多重程式系統
 採用線上同時週邊作業的方式改善效率。
(Spooling - Simultaneous Peripheral Operation
On Line)
 線上同時週邊作業提供了工作池 (job pool) 的資
料結構
線上同時週邊作業
多重程式運算系統記憶體分配
 利用工作池可以進行工作
排班與 CPU 排班的動作
 工作排班引進多重程式運
作 (multiprogramming) 的
能力
 多重程式運作使得批次系
統能夠有效的利用不同的
系統資源
分時系統
 系統輪流分配 CPU 給每個需要服務的工作,因
為發生轉換的頻率很高,所以使用者可以在每一
個程式執行的時候與其交談。
 每個使用者在記憶體中存有自己的程式,當程式
執行的時候,通當只執行一個短暫的時間,且同
時輸入與輸出動作仍是交談式。
 允許多個使用者同時使用一部電腦
 可能會引發一些安全性的問題
桌上型電腦作業系統
 MS-DOS
 UNIX
 Microsoft Windows
 Linux
平行系統
 處理器共用時脈或記憶體
 對稱多重處理模型
 非對稱多重處理系統
對稱多重處理模型
網路作業系統
 透過網路,將超過一台以上的電腦連接起來,使
得在不同主機上的物件 (objects) 可以經由網路
彼此聯繫
 每台機器都執行本身本地端的作業系統,並擁有
各自的使用者
 使用者必須登入 (login) 機器獲得使用權
分散式系統
 資源共用
 加速計算
 可信度
 通訊功能
 採用主從式 (Client/Server) 架構或是點對點
(peer-to-peer) 架構
一般的主從式架構
叢集式系統
 目的
– 高效能
– 高利用性
– 簡單易用
 分類
– 對稱式叢集
– 非對稱式叢集
叢集式電腦系統架構
即時嵌入式作業系統
 軟式即時 (soft real-time) 系統
 硬式即時 (hard real-time) 系統
多媒體電腦系統
 品質保證( QoS )
客戶端
網路
伺服器
手持式電腦系統
 記憶體有限
 處理器速度不快
 以比較小的螢幕來顯示資
訊
 顧及省電與效能
惠普 (HP) 公司所推出的 iPaqH6365 智慧型手機
小結
 設計策略
 硬體掌控性
 分散式處理
 操作環境
作業系統
第二章
電腦與作業系統結構
教學目標
 電腦與作業系統的操作
 電腦系統的成員
 中斷系統設計
 保護機制設計
電腦系統的運作
一般電腦系統的架構
Intel Pentium 系統的架構
電腦系統的成員
 輸入與輸出
 主記憶體
 快取記憶體
 輔助記憶體
 磁碟
 其他輔助記憶儲存裝置
從磁碟載入資料到暫存器
所經過的記憶體
指令執行週期
階層式資料載入與儲存架構
硬碟機內部的構造
周邊 I/O 裝置的資料傳遞
 輪詢
 輸入與輸出的中斷
– 同步 I/O 中斷
– 非同步 I/O 中斷
 直接記憶體存取架構
I/O 中斷的種類
a) 同步 I/O 與 b) 非同步 I/O
裝置狀態表
保護機制設計
 硬體保護架構
– 使用者模式與
– 核心模式
 輸入與輸出保護
 記憶體保護
 執行權保護
模式切換
定義記憶體範圍的方式
檢查記憶體範圍的方式
小結
 周邊 I/O 裝置的資料傳遞方式,可以採用輪詢、
中斷驅動、或是 DMA 的方式來傳遞資料
 電腦所能夠執行的工作,都必須先存放在主記憶
體中
 確保電腦系統的正確執行,不受惡意或是未經除
錯的使用者軟體干擾,需要一些硬體的輔助才能
達到
作業系統
第三章
作業系統的服務
教學目標
 系統服務項目
 系統呼叫
 系統程式
 使用者介面
 系統結構
 系統設計和實現
系統服務項目
 一般系統服務
– 執行程式
– 輸入與輸出作業
– 除錯以及錯誤處理
– 檔案系統
– 通信
– 錯誤偵測
 其他服務功能
– 資源的分配與紀錄
– 保護系統
– 網路功能
– 服務品質( QoS )保證
區域網路架構
廣域網路架構
系統呼叫
 行程管理
 檔案管理
 記憶體管理
 輔助記憶體管理
 裝置系統管理
 通信管理
 資訊維護
系統呼叫範例函式
count = read ( fd, &buffer, nbytes ) ;
系統呼叫函式名稱
回傳值 參數
參數傳遞流程
系統呼叫流程
檔案系統的樹狀分佈
訊息傳遞與共享記憶體
系統程式
 公用程式
 程式語言
 套裝程式
使用者介面
 外殼
 命令列模式介面
 圖形化使用者介面
MVC 模式
事件驅動模式之 GUI 系統
鍵盤事件 /ISR
滑鼠事件 /ISR
事件處理
常式
使用者
訊息佇列
使用者
應用程式
GUI 元件 A
GUI 元件 B
GUI 系統
GUI 管理程式
GUI 系統
訊息佇列
事件處理
常式
裝置驅動程式
視窗應用程式
系統結構
 無結構的作業系統
 集成式系統
 分層系統
 虛擬機器
– IBM VM/370
– Java 虛擬機器
 主從式模型系統
MS-DOS 的呼叫層次設計
集成式系統架構
UNIX 系統架構
THE 系統架構
一般系統與虛擬機器系統架構的差
異
Java 虛擬機器系統架構
Java 程式的運作流程
主從式系統模型
分散式系統上的主從式模型
系統設計和實現
 定義系統目標與規格
– 將些關鍵性 (critical) 伺服器行程在核心模式執行,
以直接存取所有的硬體,但與其他行程之間的連繫仍
透過訊息傳遞的機制
– 在核心中建立最少的機制 (mechanism) ,但是將策略
(policy) 的決定留給使用者空間的伺服器決定
 實現系統
– 組合語言、 C 或是 C++ 語言
 進行效能的調校
小結
 作業系統提供了許多的系統服務與呼叫
 完成系統服務定義之後,需建立系統的結構
 需要使用結構化的方式來設計,將系統規劃成一
系列的層級,並且由各層級負責獨立的工作,減
少系統除錯的時間,目前許多作業系統紛紛採用
這樣的方式來設計。
 虛擬機器則是另外一種層級建立的方式
作業系統
第四章
行程與執行緒
教學目標
 行程的概念
 行程的操作
 執行緒
 行程間的通訊
行程與程式
 程式代表的是一個被的觀念,它只是一堆程式碼
,需要使用者明確地去要求執行才能有所作用
 行程則代表了一個主動的觀念,它可以主動的執
行其所被賦予的任務
行程的狀態
剛產生 結束
就緒 執行中
等待
資源配置完
成
執行結束
等待 I/O
或事件
I/O 完成或
事件發生
分派執行
中斷執行
行程控制表( PCB )
struct task_struct {
volatile long state;
unsigned long flags;
unsigned long policy;
int prio, static_prio;
unsigned int time_slice;
cpumask_t cpus_allowed;
/* 本行程依目前 CPU 規劃的狀態 */
struct thread_struct thread;
struct mm_struct *mm;
sigset_t blocked;
struct sigpending pending;
struct files_struct *files;
void *journal_info;
<< 其他省略 >>
}
行程狀態
輸出輸入
相關資訊
CPU 暫存器狀態
記憶體管理
相關資訊
CPU 排班相關資訊
行程的觀點與 CPU 的觀點
行程 1 的
CPU 執行時
間
行程 1 的
CPU 執行時
間
行程 1 的 I/O
等待時間
行程 1 的
CPU 執行時
間
行程 1 的 I/O
等待時間
行程 1 的
CPU 執行時
間
行程 3 的
CPU 執行時
間
由行程的觀點:單一行程的執行
模式
由 CPU 的觀點:行程間的切換執
行
●●●
●●●
行程 2 的
CPU 執行時
間
本文切換( Context Switch )
PC
SP
●
●
●
PC
SP
●
●
● PC
SP
●
●
●
CPU 暫存器組 新行程的記憶體舊行程的記憶體
(1) 儲存舊
行程狀態
(2) 回復新
行程狀態
程式碼
堆疊
(3) 新行程
開始執行
行程樹
行程的產生
行程的結束
 理由
– 該行程的父行程呼叫行程結束的系統呼叫,以結束
該行程的執行。
– 該行程已經執行完畢。
 分類
– 串接式結束
– 非串接式結束
執行緒的概念
執行緒的優點
 加快反應速度
 資源分享
 經濟性
– 本文切換
– 產生與結束執行緒
執行緒的層級
 使用者層級
 核心層級
兩個層級間執行緒的對應
 1:1 對應模式
 N:1 對應模式
 M:N 對應模式
1:1 對應模式
N:1 對應模式
M:N 對應模式
並行行程的分類
 彼此之間都互相獨立,執行過程中不會受其他
行程的影響,而各自完成自己的任務
 彼此之間有合作關係,透過共用資源(如資料
結構、訊號機制等)的使用,來互相溝通合作以
共同完成某些任務,但是它們的執行結果常常會
因為存取共用資源而彼此受到影響
行程間互相合作的好處
 資訊分享
 提升運算效能
 模組化
 便利性
如何達到行程間互相合作的目的?
 行程間的通訊( IPC )
– 共用記憶體模式
– 訊息傳遞模式
行程間通訊的模式
共用記憶體模式
共用
記憶體
行程 A 的位址空間 行程 B 的位址空間實體記憶體
(1) 建立記憶
體區塊,放
入位址空間
,並設成可
共用
(2) 取得記憶
體區塊,並
放入位址空
間
潛在問題!!
 A 和 B 兩行程同時用一台印表機做列印?
 同步機制
訊息傳遞模式
基本指令模式
 send (訊息) to (目的地)
 receive (訊息) from (來源)
訊息傳遞模式的行為分類
 單向與雙向
 直接與間接
 暫停式與非暫停式
 有緩衝區與無緩衝區
 可靠與不可靠
 對應模式
直接與間接
會晤現象
等待確認通知
等待確認通知 (2nd)
對應模式
訊息傳遞的實作方式
 信號( Signal )機制
– 例如: kill (行程代碼,信號種類)
 虛擬溝通管道
– 例如:管線( pipe )、信箱( mailbox )、訊息佇
列( message queue )和承接口( socket )等
 輸入輸出裝置
– 例如:檔案系統
信號之使用範例
虛擬溝通管道
訊息佇列之使用範例
檔案系統之使用範例
小結
 行程是作業系統內所有動作的核心,其基本狀態
包括剛產生、就緒、執行中、等待以及結束等
 作業系統必須提供一些機制,用來動態產生一個
新的行程和將它結束掉
 執行緒也是基本的執行單位,用來減少作業系統
內的行程個數,以及增加整體系統的執行效率
 行程間要互相合作必須靠行程間通訊( IPC )
的機制,包括共用記憶體和訊息傳遞兩種模式
作業系統
第五章
CPU排班
教學目標
 概觀
 排班準則
 排班演算法
 多處理器的排班
 排班演算法的評估
排班程式
行程執行模式
CPU 排班啟動的時機
 準備就緒
 執行結束
 等待某個事件
 等待的事件發生
 CPU 時間分量結束
分派程式
 本文切換
 由核心模式切回使用者模式
 跳到該行程接下來要執行的程式碼,讓行程重新
啟動
概觀
準備就緒
執行結束
等待某個事件
等待的事件發生
CPU 時間分量結束
CPU 排班程式
就緒佇列
分派程式
選好的下個
執行行程
行程開始執行
本文切換
觸發
排班的準則
 CPU 使用率
 整體成效
 行程所需時間
 等待時間
 回應時間
應用範例
 科學計算
– CPU 使用率高的演算法
 交談式系統
– 回應時間短的演算法
 一般狀況
– 平均
排班演算法
 先來先做
 最短工作優先
 優先權
 循環式
 多層佇列
 多層回饋佇列
先來先做
所需的 CPU 執
行週期時間
行程
A
41 毫秒
行程
B
2 毫秒
行程
C
1 毫秒
行程 A 先到
行程 C 先到
最短工作優先
到達
時間
所需的 CPU
執
行週期時間
行程
A
0.0 8 毫秒
行程
B
1.5 3 毫秒
行程
C
5.0 6 毫秒
行程
D
5.5 3 毫秒
不可搶先
可搶先
優先權
 為每個行程指定它的優先權
 選取下一個要被執行的行程時,是以當時具有最
高優先權的行程為第一優先
 可搶先 v.s. 不可搶先
 潛在問題
– 飢餓
 可被用來模擬其他種類的排班演算法
– 例如:先來先做、後來先執行、最短工作優先
循環式
行程 2 ●●● 行程 n行程 1
時間分量 1 時間分量 2 ●●● 時間分量 n
CPU
執行
計時器
遞減
循環式 (2nd)
到達
時間
所需的 CPU 執
行週期時間
行程 A 0.0 8 毫秒
行程 B 1.5 3 毫秒
行程 C 5.0 6 毫秒
行程 D 5.5 3 毫秒
時間分量為 3
循環式的問題
一段長度為 20 的時間 時間分量
大小
本文切換的
發生次數
40 0
12 1
5 4
1 19
多層佇列
多層回饋佇列
多處理器系統之排班
 目的
– 理論上,多一個處理器就可以同時多執行一項工作,
使系統的執行效能可以得到加倍的提昇
 分類
– 異質
– 同質
對稱式與非對稱式
 非對稱式多重處理
– 主從式的模式
 對稱式多重處理( SMP )
– 每個處理器的地位相當,都有自己所屬的 CPU 排班
程式
共用佇列與專屬佇列
CPU[0]
排班程式
CPU[n]
排班程式
就緒佇列
●●●
使用共用佇列的 SMP
CPU[0]
排班程式
CPU[n]
排班程式
就緒佇列
●●●
就緒佇列
使用專屬佇列的 SMP
同步控制
負載平衡
 目的
– 提高系統最大的效能,讓每個處理器都能維持忙碌的
狀態,避免某些處理器一直很忙碌並且還有一堆行程
等待處理,而某些處理器卻閒置著
 做法
– 拉遷移
– 推遷移
處理器偏好
 原因
– 將某行程移到另一個處理器執行的時候,必須把已經
放在原處理器的記憶體和各層快取中的所有資料作廢
,另外再搬移到新處理器的記憶體和各層的快取裡
– 很耗系統時間
 分類
– 軟性偏好
– 硬性偏好
排班演算法的評估
 定量評估
 模擬
 實作
小結
 行程在系統中,從要開始執行到執行結束所需碰到的排
班程式,包括長期、中期和短期排班程式
 討論的 CPU 排班演算法,包括先來先做、最短工作優
先、優先權、循環式、多層佇列以及多層回饋佇列
 多處理器系統的排班考量,包括對稱式多重處理和非對
稱式多重處理、共用佇列與專用佇列、處理器偏好以及
負載平衡等
 評估各種排班演算法效率的方法,通常包括定量評估、
模擬與實作
作業系統
第六章
行程同步
教學目標
 背景
 臨界區間問題
 同步所需的硬體資源
 號誌
 典型的同步問題
 監督程式
並行行程交錯執行的無法預期範例
int number ; // 在共用記憶體區塊
中
// 行程 A
main(){
<< 省略 >>
while(1){
<< 省略 >>
number++ ;
}
// 行程 B
main(){
<< 省略 >>
while(1){
<< 省略 >>
number-- ;
}
}
無法預期的範例( 2nd )
 Number 原先的值為 3
 行程 A 並行執行
number++
 行程 B 並行執行
number--
 Number 的執行結果應該
是 3
 Number++
– 暫存器 A = number
– 暫存器 A = 暫存器 A + 1
– number = 暫存器 A
 Number--
– 暫存器 B = number
– 暫存器 B = 暫存器 B - 1
– number = 暫存器 B
無法預期的範例( 3th )
步驟 執行行程 執行指令 執行結果
Step1 行程 A 暫存器 A = number 暫存器 A = 3
Step2 行程 A 暫存器 A = 暫存器 A + 1 暫存器 A = 4
Step3 行程 B 暫存器 B = number 暫存器 B = 3
Step4 行程 B 暫存器 B = 暫存器 B - 1 暫存器 B = 2
Step5 行程 B number = 暫存器 B number = 2
Step6 行程 A number = 暫存器 A number = 4
 此種狀況稱為「競爭狀態」
臨界區間
while(1)
{
<< 臨界區間( Critical section ) >>
<< 剩餘區間( Remainder section ) >>
}
入口區間( Entry section )
出口區間( Exit section )
解決臨界區間問題的要素
 互斥
 有限制的等待
 暢通性
軟體實作的範例演算法
ProcessA(){
while (1) {
flag[0] = true;
turn = 1; /* 禮讓行程 B*/
while (flag[1] == true and
turn == 1)
{} ; /* 有人,先等等 */
<< Critical Section >>
flag[0] = false;
<< Remainder Section >>
}
}
ProcessB(){
while (1) {
flag[1] = true;
turn = 0; /* 禮讓行程 A*/
while (flag[0] == true and turn
== 0)
{} ; /* 有人,先等等 */
<< Critical Section >>
flag[1] = false;
<< Remainder Section >>
}
}
同步所需的硬體支援
 目的
– 增加效率
– 正確性
 種類
– 測試並設定( Test-and-set )
– 比較並交換( Compare-and-swap )
Test-and-set 的意義
Boolean
Test-and-set(boolean *target)
{
boolean rv = *target;
*target = true;
return *target;
}
Test-and-set 的使用
boolean lock = false;
Process(){
while (1){
while (Test-and-set(lock)) ;
<< Critical Section >>
lock = false;
<< Remainder Section >>
}
}
Compare-and-swap 的意義
void
Compare-and-swap(boolean *a, boolean *b)
{
boolean temp = *a;
*a = *b;
*b = temp;
}
Compare-and-swap 的使用
boolean lock = false;
Process(){
while (1) {
key = true;
while (key == true) {
Compare-and-swap(lock, key);
}
<< Critical Section >>
lock = false;
<< Remainder Section >>
}
}
號誌
 結構
– 一個整數變數 s
– 一個相對應的等待佇列
– 兩個必須一次完成不能被中斷執行的命令
 Wait(s)
 Signal(s)
 種類
– 二元號誌
– 計數號誌
號誌的用途
 某些資料需要分享給
多個行程,並且在某
些情況下,我們必須
為這些資料提供互斥
的條件
 提供簡單的排班機制
號誌的實作
 目標
– 保持 wait 及 signal 運算的不可分割性
 單處理器的環境
– 不可搶先式排班
 在核心中執行是安全的
– 可搶先式排班
 禁止中斷
 多處理器的環境
– 忙碌等待於硬體提供之同步指令
– 原因
 避免所有的處理器都必須禁止中斷的重大負擔
禁止中斷之範例
atomic operation()
{
disable_interrupt();
real_work();
enable_interrupt();
}
忙碌等待之範例
wait(S){
while (Test-and-set(lock) == true) {
// do nothing
}
S--;
if (S < 0) {
lock = false;
block();
} else {
lock = false;
}
}
號誌的好處
 抽象的觀念,跟底層實作切割
 簡單明瞭,減少負擔
 提供多行程間的同步機制
 可以使用許多不同而互相獨立的號誌,來為許多
不同而互相獨立的程式區間提供同步的機制
 可以使用計數號誌讓多個行程“同時”進入一段臨
界區間中執行
 將忙碌等待的時間降到最低
死結和飢餓
行程 1 行程 2
wait(y)
wait(x)wait(y)
wait(x)
(1) 通
過
(2) 通
過
(3) 卡
住
(4) 卡
住
signal(y
)
signal(x
)
signal(y
)signal(x
)
典型的同步問題
 目的
– 提供同步問題的實例
– 檢驗各同步機制的正確性
 範例
– 生產者消費者問題
– 讀取者寫入者問題
– 哲學家用餐問題
生產者消費者問題
讀取者寫入者問題
哲學家用餐問題
監督程式
 目的
– 強制檢查,減低錯誤發生
 特性
– 高階,具物件導向的精神
 好處
– 可以讓多個並行的行程互相共享所需的資料
– 一次只有一個行程能在高階的同步化機制內動作
– 一定得通過同步機制的檢查才能進入臨界區間中執行
監督程式的架構
Monitor monitor_name {
variable declarations;
function_1 definition;
function_2 definition;
function_3 definition;
……
initialization code;
}
function()
{
wait(mutex);
<< 函式的主體 >>
signal(mutex);
}
情況變數
 定義的情況變數 x
– Condition x;
 結構
condition x {
semaphore x_sem;
int x_count;
}
 合法的運算
– x.wait();
– x.signal();
Wait 運算的定義
wait(x)
{
x.x_count++;
if (next_count > 0) {
signal(next);
} else {
signal(mutex);
}
wait(x.x_sem);
x.x_count--;
}
Signal 運算的定義
signal(x)
{
if (x.x_count > 0) {
next_count++;
signal(x.x_sem);
wait(next);
next_count--;
}
}
監督程式函式的更改
Function()
{
wait(mutex);
<< body of function >>
if (next_count > 0) {
signal(next);
} else {
signal(mutex);
}
}
Java 的範例
 Java 監督程式
– 同步函式
public class MyShareClass {
………………….
public synchronized void mySyncMethod() {
// 省略
}
}
– Wait() 和 notify() 方法
 java.util.concurrent 包裹
– 號誌
– 同步佇列
– 各類的鎖
– 不可分割運算
Win32 API 的範例
 可使用的同步物件
– 事件( Event )
– 互斥( Mutex )
– 號誌( Semaphore )
 產生物件的方法
– CreateXXX()
 消滅物件的方法
– CloseHandle()
 等待函式
– 等待單一物件
 WaitForSingleObject()
– 等待多個物件
 WaitForMultipleObjects()
 喚醒等待某物件的行程或
執行緒的函式
– SendEvent()
– ReleaseMutex()
– ReleaseSemaphore()
小結
 競爭狀態與臨界區間
 硬體提供給同步機制的指令
 號誌使同步化更容易
 高階的監督程式具強制檢查的優點
作業系統
第七章
死結處理
教學目標
 何謂死結
 發生死結的必要條件
 資源配置圖
 處理死結的方式
– 預防死結
– 避免死結
– 偵測死結與從死結回復
– 完全不理
何謂死結?
行程 1 行程 2
wait(y)
wait(x)wait(y)
wait(x)
(1) 通過 (2) 通過
(4) 卡住 (3) 卡住
發生死結的必要條件
 互斥
 佔用並等待
 不可搶先
 循環式等待
現實生活中的死結情況
資源配置圖
 節點
– 方塊節點
– 圓形節點
 連接線
– 要求模式
– 指定模式
初始狀態
狀態一
狀態二
發生死結狀態
資源配置圖與死結狀態之間的關係
 在資源配置圖中沒有封閉路徑,就一定代表沒有死結
狀態
 但死結狀態並不代表該資源配置圖中一定可以找到某
條封閉路徑
 縱使在資源配置圖中可以找出某條封閉路徑的話,也
不代表就會產生死結狀態
 但如果在一個每種系統資源都只擁有一個裝置的系統
中,假如可以在其資源配置圖內找出一條封閉路徑的
話,就代表該系統產生了死結狀態
處理死結的方式
 預防
 避免
 偵測與回復
 完全不理(鴕鳥演算法)
預防死結
 打破互斥
 打破佔用並等待
 打破不可搶先
 打破循環式等待
避免死結
 安全狀態
 資源配置圖演算法
 銀行家演算法
安全狀態
 定義
– 作業系統內部存在著一個系統資源的分配順序,使得
當作業系統依照這個分配順序來分配系統資源的話,
將會使得所有的行程都能順利的執行完畢而不會發生
死結
 方法
– 對所有位於這個資源分配順序內的行程 P ( i )來說
,目前的可用系統資源數量加上行程 P ( i )本身所
佔用的資源數量以及加上 P ( j ),其中( j < i ),
所佔用的資源數量一定能夠滿足行程 P ( i )的最大
需求數量
資源配置圖演算法
 資源配置圖原有
的關係
– 要求
– 指定
 新增的關係
– 可能要求
可能要求關係轉變成為要求關係
要求關係轉變成為指定關係
行程 P2 要求資源 R2 的使用權
一個封閉路徑的產生
發生了死結狀況
作業系統拒絕進行資源分配的動作
銀行家演算法
 目的
– 避免作業系統步入不安全狀態
 跟資源圖演算法的差異
– 可以成功應用在同種系統資源有多個裝置數量的環境
範例—初始狀態
顧客 最大會借金
額
目前借貸金額
王小明
陳小華
胡小頭
劉小文
林小強
7 萬
5 萬
8 萬
9 萬
2 萬
0
0
0
0
0
銀行事先準備了 10 萬元的現金
顧客 最大會借金額 目前借貸金額
王小明
陳小華
胡小頭
劉小文
林小強
7 萬
5 萬
8 萬
9 萬
2 萬
3 萬
0
0
0
0
銀行仍舊剩下 3 萬的資金來做週轉
顧客 最大會借金
額
目前借貸金額
王小明
陳小華
胡小頭
劉小文
林小強
7 萬
5 萬
8 萬
9 萬
2 萬
3 萬
1 萬
1 萬
1 萬
1 萬
剩下 2 萬的資金,處在不安全的狀
態
顧客 最大會借金額 目前借貸金額
王小明
陳小華
胡小頭
劉小文
林小強
7 萬
5 萬
8 萬
9 萬
2 萬
3 萬
1 萬
2 萬
1 萬
1 萬
死結的偵測
 重點
– 作業系統會定時或不定時的檢查目前系統內的行程狀
態,如果發現了死結情形,就嘗試解開這個死結
 優點
– 對作業系統的限制較少
– 不需要定義額外的安全狀態與不安全狀態
死結偵測演算法
 同種資源一個裝置數量環境
– 衍伸自資源配置圖的等待圖
 同種資源多個裝置數量環境
– 類似銀行家演算法
等待圖
從死結狀態中恢復
 結束造成死結狀況的行程的執行
 強制某個行程釋放其所擁有的系統資源
忽略死結
 鴕鳥演算法
 降低作業系統設計的複雜度,也不會嚴重的影響
到系統的穩定性
小結
 死結發生的必要條件有互斥、佔用並等待、不可
搶先和循環式等待等四個
 處理死結的方式包括預防死結、避免死結、偵測
死結與從死結回復、完全不理
作業系統
第八章
記憶體管理
教學目標
 記憶體的基本運作模式
 位址空間的概念
 連續記憶體的配置
 斷裂的問題
 分頁
 分段的概念
 兼採分段與分頁的實例
序論
 一開始因為記憶體的零件很貴,所以得省著用。
 拜 IC 設計技術的進步所賜,記憶體的容量不斷
增大,價格也逐漸便宜下來。
 CPU 的能力增加了,所以也增加了系統可以執
行的程式數目。
 記憶體單元由許多大小不一的使用者行程所共用。
 因為「共用」,所以需要「管理」。
記憶體的基本運作模式
 行程載入記憶體之後,如何知道程式碼所用到
的所有記憶體存取工作要對應記憶體的哪個位
址?
– 利用位址連結 (address binding) 達成。
 何時進行位址連結?
1. 編譯時 (compile time)
2. 載入時 (load time)
3. 執行時 (run time)
從原始檔編譯成可執行程式碼的過
程
動態載入 (Dynamic Loading) (1)
 是指使用者程式要用到的某些常式 (routine) 一
開始並不會載入記憶體中,只有當使用者程式呼
叫的時候才會載入。
 程式先以可重定位的程式碼型態存在磁碟中。
動態載入 (Dynamic Loading) (2)
 當使用者程式載入記憶體並執行到動態載入程式
時,呼叫可重定位的鏈結載入程式 (relocatable
linking loader) 來把要用的程式載入記憶體 並執
行。
 好處 :
– 不會使用到的程式碼永遠不會被載入記憶體。
動態鏈結 (Dynamic Linking)
 和靜態鏈結 (static linking) 區隔。
 做法 :
1. 當使用者程式要用到系統程式庫時,在程式碼參考
(reference) 系統程式庫的地方做個記號 (stub) 。
2. 這段記號用來指示如何去找尋要用的程式庫 ,如果已載入記
憶體的話該去哪個位址參考,如果還沒載入的話該去磁碟的哪
裡載入。
 優點 :
– 有用到的系統程式庫在記憶體裡只會存在一份,不會重複。
– 鏈結的工作只需進行一次。
– 使用動態鏈結將可使程式庫更新變得更簡單。
重疊 (Overlays)
 有時在執行的時候,並不需要把整個程式載入記
憶體中。
 在執行的過程中有時候只需要程式的某些部分,
而有時候只需要程式的另外一些部分。
 執行時只把必需的程式碼載入系統,不需要的部
分先不要載入,即可省下很多記憶體空間 。
 對象
– 記憶體小而要執行大程式的計算機系統。
採用重疊技巧的實例 - 兩階段組合
程式 (two-pass assembler)
 兩階段組合程式 :
– 採用兩階段步驟把程式的組合碼 (assembly code) 轉
為機器碼 (machine code) 的組合程式。
 要放入記憶體的資料 :
– 除了本身和其他需要的一般常式之外,還會產生第 1
次處理的程式碼、第 2 次處理的程式碼、符號表
(symbol table) 等。
範例 : 兩階段組合程式各部分所需
要的記憶體大小
項目 大小 (Byte)
第 1 次處理的程式碼 60K
第 2 次處理的程式碼 50K
符號表 15K
符號表 40K
置換 (Swapping)
行程 A
行程 A
行程 B
行程 B
實體記憶體 磁碟空間
置換出
( Swap
Out )
置換入
( Swap In )
位址空間的概念
 在程式碼產生的時候,可以看出牽涉到記憶體存取的部
分,會出現標示為記憶體位址的資料。
 這類由 CPU 所產生的位址,稱為邏輯位址 (logical
address) 。
 要執行時,程式的這些部分在經過一些必要的處理之後
,會變成對記憶體有意義的位址值。
 這樣的位址,稱為實體位址 (physical address) 。
 邏輯位址空間
– 所有邏輯位址所形成的集合。
 實體位址空間
– 而所有實體位址所形成的集合。
邏輯位址和實體位址的轉換方法
連續記憶體的配置
 可供使用者行程使用的記憶體空間可以被視為一
大塊連續的區域。
 如果僅有單一個行程來使用,問題會較單純。
 考慮同時有很多個行程在使用記憶體的情況下,
又是另一個問題。
單一分割配置 (Single-Partition
Allocation)
 系統內同一個時間只有一個行程在使用記憶體,則可將
整個記憶體空間視為單一的區塊。在這種狀況下進行的
記憶體配置,稱為單一分割配置。
 可以搭配重定位暫存器 (relocation register) 、邊界暫存
器 (boundary register) 以及 MMU 來完成。
 適用於把常駐作業系統置於低位址記憶體空間而使用者
行程使用高位址空間的系統。
 好處 :
– 提供記憶體保護 。
– 可以動態地改變常駐作業系統所占的記憶體空間大小。
利用邊界暫存器和重定位暫存器來
進行記憶體配置
多重分割配置 (Multiple-Partition
Allocation)
 把整個記憶體空間劃分為一些固定大小的分割,
每個分割只載入一個行程。
 當有空著的分割時,即從在佇列中等待的行程中
選出一個來載入記憶體。
 等到行程執行結束之後,其佔用的記憶體分割則
被釋放出來。
 此為固定分割方法的一般化 。
記憶體配置的範例
記憶體配置範例的運作歷程
配置記憶體的策略
 最先合適 (First-Fit) :
– 遇到第一個夠大的「坑洞」就把行程載入。
 最佳合適 (Best-Fit) :
– 把每一個夠大的「坑洞」都拿來看看,然後選其中最
小的一個來載入行程。
 最差合適 (Worst-Fit) :
– 也是把每個夠大的「坑洞」都拿來看看,然後選最大
的可用空間來載入行程。
效能比較
 最先合適和最佳合適在時間和記憶體空間的使用
率上優於最差合適。
 在記憶體空間使用率上,最先合適與最佳合適很
接近。
 最先合適的執行時間通常會比較短。
斷裂 (Fragmentation)
 要讓行程載入記憶體,得先配置一塊「足夠的空
間」 。
 所謂「足夠的空間」,除了記憶體的大小要滿足
行程所需之外,還得要是「連續」的空間才行。
 因為不連續的關係,而使得行程不能載入的狀況
,稱之為外部斷裂 (External
Fragmentation) 。
外部斷裂 (External Fragmentation)
 有外部斷裂發生時,會「浪費」記憶體。
 浪費的記憶體多寡,與選擇配置的演算法有關。
 所造成的記憶體浪費程度,主要是和記憶體空間
總量以及行程的平均大小有關。
 百分之五十法則 (50-percent rule)
– 在最佳的狀況下,當配置了 n 單位的記憶體空間時,
還是會因外部斷裂而多浪費了 n/2 單位的空間。
外部斷裂之範例
作業系統
P1
P2
P3
P4
100K
100K
150K
200K
可用空間 =100+150+100
=350
>200
(所需空間)
解決外部斷裂的方法
 內部斷裂 (Internal Fragmentation)
– 當有夠大的「坑洞」可以使用時,配置記憶體時就乾脆把整個
可用空間都要走。
– 所謂的內部斷裂,是指配置出來的記憶體裡有一小段用不到的
空間。
– 好處是減少了記憶體「小碎塊」發生的機會,可用的記憶體空
間也比較容易連續地聚集在一起。
 聚集 (compaction)
– 是把記憶體內零星的可用空間收集起來,並進一步「聚集」成
大一點的「坑洞」。
聚集的範例
作業系統
P1
P2
P3
100K
100K
150K
作業系統
P1
P2
P3
350K聚集
( a
)
( b
)
P4
分頁 (Paging)
 為了解決外部斷裂的問題。
 允許行程內的邏輯位址空間可以不連續。
 只要實體記憶體有足夠的可用空間,整個行程就
一定可以載入記憶體去執行。
一般分頁實作的設計
 把邏輯上行程所需的記憶體以及實體記憶體空間
切成許多大小相同的小區塊。
 實體記憶體上的小區塊稱為欄位 (frame) 。
 邏輯記憶體裡的則稱為分頁 (page) 。
 在行程還沒載入之前,所有的分頁都儲存在備份
儲存體上。
一般的分頁實作
分頁實作的運作實例
分頁大小「選得好」的例子
分頁表的實作 (1)
 儲存分頁表的方式,一般的作業系統都是為每一個行程
準備一個分頁表。
 如何將行程和分頁表做個關聯?
– 在行程控制區塊 (PCB , Process Control Block) 裡儲存一個指
向記憶體中分頁表位置的指標。
 基於效能上的考量,分頁表通常以硬體來實作, 最先想
到的是用暫存器來儲存。
 如果說系統允許分頁表很大,便改把分頁表存到主要記
憶體中,並用分頁表基底暫存器來儲存分頁表的基底
位址 。
分頁表的實作 (2)
 以 PTBR 來處理分頁表的好處是節省內容切換
(context-switch) 的時間,但是存取資料時需要多
耗費一倍的時間。
 解決方法 : 改用相關暫存器 (associative
register) 或翻譯側看暫存區 (translation look-
aside buffer, TLB) 。
 TLB 是由特別的高速記憶體所組成,裡面分為
兩個區域: key 區和 value 區。
使用 TLB 來進行分頁表實作
效能的評估
 用兩種指標來評估
1. TLB 的命中率 (hit ratio):
 要存取的分頁資料可以在 TLB 中找到的機率 。
2. 有效記憶體存取時間 (effective memory access
time) :
[ 有效記憶體存取時間 ] =
[ 命中率 ] × [ 在 TLB 可以找到分頁的記憶體存取總時間 ] +
(1-[ 命中率 ]) × [ 在 TLB 找不到分頁的記憶體存取總時間 ]
分頁的保護機制
 往存取權利與存取範圍兩個方向進行。
 存取權利的保護,是在分頁表上的分頁資料裡使用保護
位元 (protection bit) 來達成。
 存取範圍的保護,是在分頁表裡的每一項資料上另加個
有效 - 無效位元 (valid-invalid bit) 。
– 當此位元設為 1 時,代表此分頁表資料是有效的。換句話說,
此位元設為 0 時,則代表這項分頁表資料無效。
– 所謂分頁表資料無效,是指此分頁不存在於執行中行程的邏輯
位址空間內。
多層分頁 (Multilevel Paging)
 分頁表所占的記憶體空間還是得想辦法縮小,以
節省空間。
 記憶體也沒有足夠的連續空間容納整個分頁表。
– => 把原本在分頁表上的資料區分為很多群 ,形成有
層次的分頁表。
採用兩層分頁機制的邏輯位址之結
構
採用兩層分頁表的邏輯位址 / 實體位
址轉換
反轉分頁表 (Inverted Page Table)
 同樣是面對分頁表太大的問題,與其每個行程都配置了
一個分頁表,不如作業系統畫出一個特別的區域,專門
儲存所有行程的分頁資料。
 儲存分頁資料的地方,稱為反轉分頁表 (Inverted Page
Table) 。
 每一項反轉分頁表的資料會紀錄三項資訊,分別是行程
識別碼 (Process Identifier) 、此分頁在實體記憶體上對
應的欄位數和偏移量。
 實體記憶體上的每個欄位在反轉分頁表中最多只會出現
1 次。
IBM RT 的反轉分頁表實作
分頁共用 (Shared Pages)
 使用分頁機制可以共用相同的程式碼。
 做法 : 把可以共用的程式碼集中在幾個分頁上,
然後標示這些分頁。
 共用分頁上的程式碼,都是屬於可重入的
(reentrant) 程式碼。
 共用分頁是唯讀的,不應該被修改。
 採用反轉分頁表的實作對分頁共用會有困難。
分段 (Segmentation) 的概念
 從使用者的觀點來看,記憶體的模樣是由許多不同大小
的分段 (segment) 所組成,這些分段之間並沒有先後順
序的關係。
 由這種觀點出發,衍生出來管理記憶體的方法便稱為分
段法 (Segmentation) 。
 在分段法的機制中,每個分段都有一個名稱,也紀錄了
其長度。
 邏輯位址即由<分段號碼,偏移量>這樣的組合所表示。
使用者對於邏輯空間的看法
基本作法
採用分段法的實例
分段表 (Segment Table) 的實作
 和分頁表類似,可以參考分頁表的做法。
 但不適合用暫存器來儲存分段表項目,應該把分段表存
於記憶體裡。
 用分段表基底暫存器 (Segment Table Base Register ,
STBR) 儲存分段表的起始位置。
 用分段表長度暫存器 (Segment Table Length
Register , STLR) 記錄分段表的長度。
 採用相關記憶體暫存器 (associative memory register)
來儲存近來常用到的分段表資料,減輕因多一次記憶體
參考所帶來的影響。
分段帶來的效益:保護與共用
 分段法可以帶來兩項好處,分別是可以對資料或程式碼
進行保護和共用。
 保護措施 :
– 在分段表上為每個項目準備保護位元 (protection bit) 。
– 當保護位元設為 1 時,表示該項資料代表的分段是被保護著而
不能修改內容而且要照其屬性使用。
 可共用的原因 :
1. 資料與程式碼都會被劃分為一個一個獨立的分段,而且可以被
定義為唯讀與唯執行 。
2. 每個行程會有一個對應的分段表 ,還允許同一個分段出現在不
同行程的分段表項目中。
斷裂的問題
 採用分段法也會遭遇到斷裂 (fragmentation) 的
問題。
 分段法是屬於動態重定位 (dynamic relocation)
的做法,因此可以選擇用聚集的方式 來解決斷
裂的問題。
兼採分段與分頁的實例
 在 Intel Pentium 架構下的 Windows XP
 行程的邏輯位址空間可分為兩個部分 :
– 第一個部分由該行程自有的分段所組成,資料存放在
LDT(Local Descriptor Table) 裡。
– 第二個部分由所有行程共用的分段所組成,資料則存放在
GDT(Global Descriptor Table) 中。
 行程的邏輯位址是一組 ( 選擇子,偏移量 ) 的組合。
 在邏輯位址轉換為實體位址的過程中,會先產生對應的
線性位址 (linear address) 。之後遵循分頁的機制,再由
線性地址產生實體位址。
邏輯位址的意義
 選擇子為 16 位元的值,內容主要分為三個部分
分別用 s 、 g 、 p 來表示。
– s 分段號碼,佔 13 個位元
– g 表示此分段是位於 GDT 還是 LDT ,佔 1 個
位元
– p 代表此位址是否受到保護,佔 2 個位元
 偏移量則是個 32 位元的數字,用來指示要存取
的資料是位於分段中的哪個位置。 。
選擇子的內容
線性位址的內容
Intel Pentium 的位址轉換
小結
 位址空間的概念與記憶體配置的問題
 用分頁法來解決外部斷裂
 分段法的概念
 實作上可兼採分頁法與分段法
 效能上,分頁法優於分段法
 兼具簡單和效率,是設計記憶體管理機制的最基
本原則。
作業系統
第九章
虛擬記憶體
教學目標
 背景
 需求分頁
 欄位的配置
 分頁替換
 分頁替換演算法
 輾轉現象
 其他影響效能的因素
 需求分頁
序論
 管理記憶體的方法都基於一個共同的前提:
– 要執行的行程必須可以整個載入記憶體當中。
 如果程式所需要的記憶體大於整個實體記憶體,
那麼就無法執行。
 用虛擬記憶體的技巧來試著解決常常要執行「大
程式」的問題。
動機
 記憶體管理演算法,共通的前提是整個行程要載
入記憶體當中。 也就是要把整個程式的邏輯位
址空間都搬到實體記憶體裡。
 這樣一來造成了一個事實 :
– 程式的大小最多只會和實體記憶體的體積一樣大。
 有時候,把整個程式都載入記憶體是不必要的。
 既然實體記憶體不夠用,就找其他的東西來充當
記憶體。
定義
 所謂的虛擬記憶體,是把輔助儲存體
(secondary storage) 的一部分拿來虛擬成實體
記憶體使用。
 通常搭配分頁法 (paging) 來進行,最常見的技
巧是需求分頁 (demand paging) 。
 也可以搭配分段法 (segmentation) 來實作,例
如需求分段 (demand segmentation) 。
需求分頁 (demand paging)
 基本的精神:有使用的需求,才把分頁載入。
 將程式 ( 行程 ) 劃分成許多大小相同的分頁,然後當執
行中需要用到的時候,才把要用的分頁一個一個載入記
憶體。
 採用有效 - 無效位元 (valid-invalid bit) 來紀錄哪些分頁已
載入記憶體中,而哪些分頁現在還在磁碟裡。
 純粹需求分頁 (pure demand paging): 一開始只載入行
程進入點所在的分頁,之後再根據程式執行的需要,逐
一載入分頁。
分頁錯誤 (page-fault)
 在行程執行當中,有時會存取到還沒有載入記憶體的分
頁,而這種狀況即稱為分頁錯誤。
 遇到分頁錯誤的時候,通常會產生一個中斷,讓作業系
統接管一切。
 分頁錯誤的發生,會先從檢查有效 - 無效位元開始。
 如果要存取的分頁項目之此位元值是無效的,則代表偵
測到分頁錯誤,隨即發出中斷。此中斷是代表作業系統
沒有把行程要用的分頁載入,而不是代表無效位址錯誤。
分頁錯誤發生與處理的過程
效能分析
 指標
– 有效存取時間 :
 存取一次記憶體所耗費的平均時間。
– 記憶體存取時間 :
 真正存取一次記憶體所耗費的時間。
 沒有遇到分頁錯誤時
– 需求分頁的有效存取時間會等於記憶體存取時間。
 有分頁錯誤發生時
– 有效存取時間會大於記憶體存取時間 。
有效存取時間的計算
 在沒有分頁錯誤的情況下,有效存取時間會等於
記憶體存取一次的時間值。如果有分頁錯誤,就
得加上處理分頁錯誤的時間。
 假設發生一次分頁錯誤的機率為 p (0≦ p 1)≦ ,
則 :
[ 有效存取時間 ] =
(1 – p) × [ 記憶體存取時間 ] + p × [ 分頁錯誤處理時間 ]
採用純粹需求分頁?
 問題
– 發生分頁錯誤的機率一定很高,整個系統的效能一定
會大大受影響
 對策
– 有效率的需求分頁
– 最直接的想法
 一次多分配一點分頁欄位給要執行的行程
問題解決了?
 緊接著的問題
– 要分配多少分頁欄位給每個行程才是公平且合理的?
– 如果系統的實體欄位都分配光了那該怎麼辦?
 解決方法
– 欄位配置
– 分頁替換
欄位的配置 (allocation of frames)
 目的
– 當有很多行程存在於記憶體時,決定該為每個行程配
置多少欄位使用。
 方法
– 欄位配置演算法 (frame-allocation algorithm)
欄位數的最小值
 分配給每個行程的欄位最小數量得由計算機的架
構來決定。
 欄位的最大數自然限制於實體記憶體的數量。
 可以分配給每個行程的欄位數便介於這兩個值之
間。
欄位配置演算法
 平等分配 (equal allocation)
– 讓每個行程分到一樣多的欄位。
– 假設總共有 m 個欄位可用,要分配給 n 個行程,則每個行程就
可以分到 m/n 個欄位。
 比例分配 (proportional allocation)
– 根據每個行程所需的記憶體大小,依比例分配。
– 假設行程 pi
需要 si
單位的記憶體,而所有行程所需的記憶體總
量為 S 單位。
– 可用的欄位總數為 m ,分配給其中一個行程 pi
的欄位數為 ai
,
則 ai
的值 為 :
ai
= m × (si
/ S)
分頁替換 (page replacement)
 在行程執行的過程中,分頁會逐漸的佔據記憶體
空間。
 但如果是很多個行程一起跑的話,可能會發生所
謂的過度配置 (over-allocating) ,便增加記憶體
用完的機會。
 當記憶體被用完的時候,把佔用記憶體的分頁選
一些置換出來,騰出空間給別的行程用。
過度配置 (over-allocating)
 在允許多個行程同時執行的環境下,增加了行程
執行的數目,卻配置了超過記憶體實際可用量的
記憶體空間。
 這樣的情形在需求分頁中特別常見。
 當其中一個行程要載入新的分頁時,發現實體記
憶體已經沒有可用的欄位,這時候才知道發生過
度配置。
分頁替換的步驟
引進修改位元的分頁替換
 如果沒有可用欄位的時候,會需要進行兩次分頁轉換
( 移出分頁 1 次、寫入分頁 1 次 ) 。使分頁錯誤處理時間
增加一倍,也隨之增加有效存取時間。
 這樣的代價可用引進修改位元 (modify bit) 來減輕。
 首先為每個分頁與欄位多準備一個位元,一開始都設為
0 。
 如果某個欄位上的分頁資料有被寫入或修改的話,那麼
此欄位的修改位元會以硬體的方式設定為 1 ,代表此欄
位上的分頁有被修改過。
 當要選個「犧牲者」來取代的話,選擇修改位元為 0 的
欄位。
全域替換與區域替換
 在某些狀況下,系統會要求某個行程從其分配到
的欄位中選出一個來替換。
 此時,系統會要求優先權較低的行程選一個欄位
替換出來給高優先權的行程使用。
 原則
– 全域替換 (global replacement)
– 區域替換 (local replacement) 。
全域替換與區域替換 (2nd)
 全域替換
– 需要選一個欄位替換出去的行程,可以指定其他行程
的某個欄位替換出去。
 區域替換
– 需要替換出一個欄位的行程,只能從其擁有的欄位中
選擇一個出來。
 該選哪個分頁取代掉?
– 用分頁替換演算法來解決
分頁替換演算法
 觀察分頁錯誤的機率。分頁錯誤機率越低,表示
演算法的效能越好。
 藉著使用參考字串,計算出發生分頁錯誤的次數
來進行評估。
 用參考字串來計算分頁錯誤次數,還得知道有多
少欄位可用。
 一般來說,有越多欄位可以用,分頁錯誤發生的
次數會越少。
分頁替換的參考情形
FIFO 演算法
 當需要選一個分頁來替換的時候,選擇記憶體中
最先載入的分頁替換出去。
 在觀念上最直覺,設計上也最簡單,但是在效能
上的表現並不好。
 如果在參考字串中,某個分頁每個一段時間就會
被參考到,而這樣的出現週期剛好會造成每參考
一下便發生一次分頁錯誤,如此對效能會有很大
的影響。
採用 FIFO 演算法的分頁替換實例
最佳演算法
 「選出未來最長時間之內都不會被用到的那個分
頁替換掉」。
 可以保證分頁錯誤的機率最低,但在實際執行上
很困難。
 困難之處在於得預先知道參考字串的內容,也就
是得預先知道分頁參考的順序。
 如果有很多個行程同時執行,找出這些行程參考
分頁的順序會更困難。
採用最佳演算法的分頁替換實例
LRU 演算法
 LRU 演算法 (LRU algorithm) ,是當需要選出一
個分頁當「犧牲者」的時候,就選最近最少被使
用過的分頁出來替換。
 採用 LRU 演算法的分頁替換會比採用 FIFO 演
算法遇到較少的分頁錯誤。
搭配 LRU 演算法的分頁替換實例
LRU 演算法的實作
 要想辦法記錄當有發生分頁參考的行為時,是
位於哪個欄位的分頁被參考。又,是何時發生
參考行為的。
 有兩種方法來進行 :
1. 用計數器 (counter) 來紀錄。
2. 使用堆疊 (stack) 來進行。
使用堆疊來進行 LRU 演算法
各種類似 LRU 演算法的做法
 由於硬體配備上的限制,有些系統沒辦法實作出
全部的 LRU 演算法。
 雖然大部分的系統無法提供 LRU 演算法所需要
的硬體支援,但是至少都可以提供所謂的參考位
元 (reference bit) 讓分頁系統使用。
 利用參考位元,雖然無法得知分頁被參考的順序
,但就可以設計出一些接近 LRU 演算法的做法。
擴充參考位元演算法 (Additional-
Reference-Bits Algorithm) (1)
 把參考位元擴充成一個 8 位元的位元組 (byte) ,位元組
的初始值為 00000000 。
 在固定的週期下,根據原來的參考位元更新位元組的值
。
 假設週期為 100ms ,那麼每經過 100ms 的時間之後,
作業系統會把每個分頁對應的位元組向右平移一個位元
,捨棄最低的位元,將目前每分頁的參考位元值當作位
元組最高的位元。
 如此重複進行 8 次,那麼一個位元組的值剛好可以代表
8 個週期內的分頁參考歷程。
擴充參考位元演算法 (Additional-
Reference-Bits Algorithm) (2)
 把此位元組解釋成不帶正負號的整數 (unsigned
integer) ,那麼比較位元組的值就可以看出哪個
分頁較常被參考。
 位元組值越小,代表對應的分頁越不常被參考。
 這樣就可以根據 LRU 演算法的原則,把位元組
值最小的那個分頁選出來替換。
第二次機會演算法 (Second-Chance
Algorithm)
 在該選一個分頁當犧牲品替換出去的時候,首先根據
FIFO 演算法的原則,找出載入最久的分頁。
 檢查此分頁的參考位元,如果位元值為 0 的話,即替換
此分頁。
 如果位元值是 1 的話,便給此分頁「第二次機會」,先
不被替換。
 被給「第二次機會」的分頁,其參考位元會重設為 0 ,
而載入的時間也會被設為接受檢查時的時間。
加強第二次機會演算法 (Enhanced
Second-Chance Algorithm)
 在需要找一個分頁替換出去的時候,對分頁表上
的每個項目進行檢查。
 此時檢查由參考位元和修改位元所組成的有序配
對 (ordered-pair) 。
 有序配對的型態為 ( 參考位元,修改位元 ) 。
加強第二次機會演算法的有序配對
1. (0, 0):
– 這樣代表分頁從來沒被參考過,也沒被修改過,適合直接替換
出去。
2. (0, 1):
– 適合選來替換出去,不過替換出去之前要先把分頁內容寫回磁
碟去,
3. (1, 0):
– 代表分頁有被參考過,不過沒有被修改過。這樣的分頁也許很
快會再被參考,所以不適合選來替換掉。
4. (1, 1):
– 表示分頁既被參考過,內容也被修改過了。最不適合選來當犧
牲者。
計數器演算法 (Counter Algorithm)
 專門記下每個分頁被參考的次數,來當作決定
分頁替換的依據。
 為每個分頁準備個計數器,專門紀錄分頁的參
考次數。
 衍生出以下兩種做法:
1. 「最不經常使用」演算法 (LFU Algorithm) 。
2. 「最常使用」演算法 (MFU Algorithm) 。
分頁庫存演算法 (Page Buffering
Algorithm)
 把分頁寫回磁碟和讓行程重新啟動這兩個步驟如果能夠
同時進行,說不定可以縮短許多處理的時間。
 保留一個可用的欄位當「庫存 (buffer) 」。
 庫存欄位的功能在於犧牲者分頁寫回磁碟的同時,可以
把要載入的分頁寫入庫存欄位中。
 載入完成之後,即可重新啟動行程。
 犧牲者分頁寫回磁碟的工作完成之後,裝載犧牲者分頁
的欄位即清空,成為新的庫存欄位。
布雷第異常現象 (Belady’s anomaly)
 在同樣的分頁參考順序下,分頁錯誤的次數在理
論上會隨著可用欄位的總數增加而減少。
 但是這樣的趨勢並非在每種狀況下都成立,有時
候可用欄位的總數增加了,分頁錯誤的次數卻沒
有減少。
 這種違反一般趨勢的現象,即稱為布雷第異常現
象。
布雷第現象發生的時機
 採用最佳演算法的分頁替換不會發生。
 採用 LRU 演算法的也不會。
 FIFO 演算法則是布雷第異常現象的典型例子。
 雖然 FIFO 演算法不是每種狀況下都會遇到這種
異常現象,但卻是機會最高的。
使用 FIFO 演算法遇到的布雷第異常
現象
輾轉現象 (thrashing)
 當有很多個行程同時執行時,會競相爭取數目固定的實
體記憶體來使用。
 實體記憶體的空間不足而又有分頁錯誤產生時,已經分
配到欄位的行程得替換出一些欄位,讓分頁置換到磁碟
去。
 如果此分頁很快被參考到,則又會產生分頁錯誤,要求
其他行程替換出欄位來。
 如此重複下去,系統的時間就耗費在磁碟 I/O 上,行程
執行完成的時間也被延後了。
 這種非常高頻率的分頁替換,稱之為輾轉現象
(thrashing) 。
輾轉現象的原因
在 CPU 使用率與行程個數關係圖中
顯現的輾轉現象
局部區域模型 (locality model)
 認為當行程執行時,實際執行的順序可以視為在幾個不
同的局部區域 (locality) 間不斷地移動。
 局部區域,是指由某段時間內同時被使用之分頁所形成
的集合。
 因此,程式其實是由許多不同的局部區域所組成,而其
中可能有幾個局部區域是重疊的。
 透過局部區域模型,可以做出以下的假設 :
– 若根據某個行程正在使用的局部區域而分配了足夠的欄位給此
行程,那麼除了要載入局部區域所定義的分頁之外,不會有預
期外的分頁錯誤產生。
工作集合模型 (working-set model)
 是局部區域模型的一種延伸。
 藉著定義工作集合框架 (working-set window) 的大小來
進行。
 令每兩次進行分頁參考之間的間隔時間為 1 個單位時間。
然後假設框架的大小為 Δ ,表示要進行最近 Δ 個分頁參
考的觀察。
 此 Δ 個分頁所形成的集合,即定義為工作集合 (working-
set) 。
 工作集合可視為一個類似於程式內的局部區域。
工作集合的例子
以工作集合模型避免輾轉現象
 觀察的重點在於工作集合的大小,這樣才能決定
至少要分配之欄位數量。
 假設系統內任一個行程 Pi 的工作集合大小為
WSSi ,而 D 是欄位總需求量,此時可推得:
D = ΣWSSi
 假設實體記憶體的可用欄位總數為 m 。
 若某個時刻,欄位總需求量 D 大於實體記憶體
的可用欄位總數 m ,輾轉現象就會發生。
工作模型的用法
 作業系統監督每個行程的工作集合,並且根據其工作集
合的大小分配足夠欄位給各行程。
 分配完畢之後,如果還有額外的欄位可供另一個行程使
用,便載入此新的行程執行。
 每當各行程工作集合的總和大於可用欄位總數的時候,
作業系統便暫停記憶體中的一個行程,並將此行程的分
頁寫出,以便讓其他行程有可用的欄位使用。
 之後如果又有足夠的欄位,此被暫停的行程可重新載入
繼續執行。
分頁錯誤頻率 (page-fault
frequency) 策略
 輾轉現象會伴隨著高頻率的分頁錯誤。
 若能控制行程的分頁錯誤頻率,使其保持在某個程度之
下不再升高,則可避免輾轉現象的發生。
 為分頁錯誤頻率定出上限與下限。
 若偵測到分頁錯誤頻率大於上限,則要增加分配給行程
的欄位數。
 若分頁錯誤頻率小於下限,則逐次減少所分配的欄位數。
 控制分頁錯誤頻率於上限與下限之間,就可以達到避免
輾轉現象的效果。
為分頁錯誤頻率定上限與下限
其他影響效能的因素
 預先分頁 (Prepaging) 的方法
 分頁的大小 (Page Size)
 程式的結構 (Program Structure)
 I/O 互相上鎖 (I/O Interlock) 的狀況
 即時處理 (Real-time handling) 的需求
預先分頁 (Prepaging) 的方法
 在純粹需求分頁下,當剛開始執行行程時,一定會產生
一連串的分頁錯誤。這是因為系統要把起始局部區域
(initial locality) 載入記憶體的緣故。
 這樣子連續產生的分頁錯誤會大幅地影響系統的效能。
 為了避免這樣的狀況,可以採用預先分頁 (prepaging)
的方法。
 預先分頁,是把所有需要的分頁在同一個時刻一起載入
記憶體中。
分頁的大小 (Page Size)
 分頁越小的話,可以越精確地把真正需要使用的資料載
入記憶體。可以避免讓不必要的資料佔據記憶體空間。
 對需求分頁而言,較適合以較小的分頁來進行。
 但是越小的分頁會造成越多次的分頁錯誤,增加更多次
磁碟 I/O 的工作。
 由於分頁錯誤的代價還是遠大於內部斷裂所付出的代價
,故虛擬記憶體的分頁,還是傾向於使用較大的分頁。
程式的結構 (Program Structure)
int A[64][64];
for(j=0; j<64; j++){
for(i=0; i<64; i++){
A[i][j] = 0;
}
}
int A[64][64];
for(i=0; i<64; i++){
for(j=0; j<64; j++){
A[i][j] = 0;
}
}
I/O 互相上鎖 (I/O Interlock) 的狀況
(1)
 採用需求分頁時,會有某些狀況需要把一些分頁
「鎖」在實體記憶體裡。
 最常見的例子是當進行大量的資料 I/O 時 ( 如與
磁帶機傳輸資料時 ) ,會需要 I/O 緩衝區。而充
當 I/O 緩衝區的分頁,便需要「鎖」在實體記憶
體內。
I/O 互相上鎖 (I/O Interlock) 的狀況
(2)
 把 I/O 緩衝區分頁上鎖的方法 :
– 為每個欄位準備上鎖位元 (lock bit) 。
– 要進行 I/O 時,把 I/O 緩衝區分頁所在欄位之上鎖位
元設定為 1 ,這樣該欄位便不會被替換。
– I/O 完成之後,上鎖位元重設為 0 ,如此 I/O 緩衝區
分頁便回復一般分頁的身分。
 使用上鎖位元具有相當的危險性。
– 若遇到某些錯誤情況,使得某個欄位被上鎖之後無法
解開,那麼此欄位就永遠沒有辦法使用。
即時處理 (Real-time handling) 的需
求
 使用虛擬記憶體節省了記憶體空間,卻可能造成執行時
間的延長。
 如果執行的行程具備了即時處理 (real-time handling) 的
特性,那麼使用虛擬記憶體可能會使其執行失敗。
 即時行程被賦予較高的優先權,以便快速取得 CPU 使
用權,然後要在最短的時間內完成執行。
 使用虛擬記憶體時,會不可預期地拖長執行完成的時間
。
 因此,幾乎所有的即時系統都不使用虛擬記憶體。
需求分段 (demand segmentation)
 缺乏硬體支援分頁法的系統,通常會採用分段法來管理
記憶體,因此也會用分段法實作虛擬記憶體。
 需求分段 (demand segmentation)
– 「有需要之分段才載入記憶體」
 在實際的例子上, Intel 的 80286 CPU 沒有提供分頁法
所需的硬體機制,但是有提供可以支援分段法的硬體機
制。
 因此在此平台執行的 OS/2 作業系統便採用需求分段實
作虛擬記憶體。
OS/2 在 80286 平台的需求分段 (1)
 對分段的管理,則是用分段描述子 (segment descriptor)
來紀錄與追蹤。
 對虛擬記憶體的處理方法,是在分段描述子中加入一個
有效位元 (valid bit) ,用來表示此分段是否為「有效」。
 當行程參考到另外一個程式分段或資料分段的位址時,
硬體會檢查該分段的有效位元。
 若有效位元的值代表有效的,則行程會繼續執行。
 若有效位元的值代表不是有效的,便會產生分段錯誤
(segment fault) 的中斷,載入需要的分段,之後讓行程
繼續執行。
OS/2 在 80286 平台的需求分段 (2)
 遇到分段錯誤時,若實體記憶體的空間不夠了,
得選個分段替換出去。
 OS/2 在分段描述子當中加入了存取位元
(access bit) 。只要分段中有地方被讀寫過,存
取位元就會被設為 1 。
 系統準備一個佇列來保存每個分段的存取位元。
OS/2 在 80286 平台的需求分段 (3)
 每隔一段固定時間,系統會把所有存取位元為 1
的分段紀錄挪到最前面,接著重設所有分段描述
子上的存取位元。
 如此,最近有被存取過的分段總是會排在佇列中
較前面的位置。
 要選擇替換的分段,從佇列的最後面開始選。
OS/2 在 80286 平台的需求分段 (4)
 由於沒有特殊的硬體配備可以存放所有的分段資
訊,許多資訊得存在記憶體中,因此便造成了記
憶體空間上與執行時間上的浪費。
 使用分段法來實作虛擬記憶體,效能並不佳。
小結
 虛擬記憶體是拿其他儲存單元充當記憶體使用的機制
 把需要用到的程式部分載入記憶體就好
 可用分頁法來實作虛擬記憶體
 如果過度配置,得進行分頁替換
 考慮欄位配置與欄位替換的問題
 要避免輾轉現象
 還有幾個影響效能的因素
 也可以用分段法實作虛擬記憶體,只是效能較差

More Related Content

What's hot

ΠΛΗ31 ΜΑΘΗΜΑ 1.4
ΠΛΗ31 ΜΑΘΗΜΑ 1.4 ΠΛΗ31 ΜΑΘΗΜΑ 1.4
ΠΛΗ31 ΜΑΘΗΜΑ 1.4 Dimitris Psounis
 
資管所-計算機概論 健診二部曲之二
資管所-計算機概論 健診二部曲之二資管所-計算機概論 健診二部曲之二
資管所-計算機概論 健診二部曲之二逸 張
 
Ayrık yapılar algoritmalar
Ayrık yapılar algoritmalarAyrık yapılar algoritmalar
Ayrık yapılar algoritmalarEmrah Gürcan
 
κεφάλαιο 4 απαντήσεις στις ερωτήσεις βιβλίου
κεφάλαιο 4  απαντήσεις στις ερωτήσεις βιβλίουκεφάλαιο 4  απαντήσεις στις ερωτήσεις βιβλίου
κεφάλαιο 4 απαντήσεις στις ερωτήσεις βιβλίουΤΑΤΙΑΝΑ ΠΕΤΡΟΠΟΥΛΟΥ
 
正課第9週模擬試題_解答.pdf
正課第9週模擬試題_解答.pdf正課第9週模擬試題_解答.pdf
正課第9週模擬試題_解答.pdf逸 張
 
Παρουσίαση Κεφαλαίου 1 ΑΕΠΠ
Παρουσίαση Κεφαλαίου 1 ΑΕΠΠΠαρουσίαση Κεφαλαίου 1 ΑΕΠΠ
Παρουσίαση Κεφαλαίου 1 ΑΕΠΠGregory Davrazos
 
基本計概祕笈(張逸)
基本計概祕笈(張逸)基本計概祕笈(張逸)
基本計概祕笈(張逸)逸 張
 
QM-048-品管圈活動經驗分享
QM-048-品管圈活動經驗分享QM-048-品管圈活動經驗分享
QM-048-品管圈活動經驗分享handbook
 
資管所-計算機概論 健診三部曲.pdf
資管所-計算機概論 健診三部曲.pdf資管所-計算機概論 健診三部曲.pdf
資管所-計算機概論 健診三部曲.pdf逸 張
 
Διαγώνισμα Πληροφορικής Α Γυμνασίου
Διαγώνισμα Πληροφορικής Α Γυμνασίου Διαγώνισμα Πληροφορικής Α Γυμνασίου
Διαγώνισμα Πληροφορικής Α Γυμνασίου Fotini Pog
 
作業系統祕笈(張逸)
作業系統祕笈(張逸)作業系統祕笈(張逸)
作業系統祕笈(張逸)逸 張
 
系統程式 -- 第 11 章
系統程式 -- 第 11 章系統程式 -- 第 11 章
系統程式 -- 第 11 章鍾誠 陳鍾誠
 
103中華電信資訊類計概解答
103中華電信資訊類計概解答103中華電信資訊類計概解答
103中華電信資訊類計概解答逸 張
 
Λειτουργικά Συστήματα ΕΠΑΛ - Βασικές Έννοιες
Λειτουργικά Συστήματα ΕΠΑΛ - Βασικές ΈννοιεςΛειτουργικά Συστήματα ΕΠΑΛ - Βασικές Έννοιες
Λειτουργικά Συστήματα ΕΠΑΛ - Βασικές ΈννοιεςMinistry of Education
 

What's hot (20)

ΠΛΗ31 ΜΑΘΗΜΑ 1.4
ΠΛΗ31 ΜΑΘΗΜΑ 1.4 ΠΛΗ31 ΜΑΘΗΜΑ 1.4
ΠΛΗ31 ΜΑΘΗΜΑ 1.4
 
資管所-計算機概論 健診二部曲之二
資管所-計算機概論 健診二部曲之二資管所-計算機概論 健診二部曲之二
資管所-計算機概論 健診二部曲之二
 
Ayrık yapılar algoritmalar
Ayrık yapılar algoritmalarAyrık yapılar algoritmalar
Ayrık yapılar algoritmalar
 
κεφάλαιο 4 απαντήσεις στις ερωτήσεις βιβλίου
κεφάλαιο 4  απαντήσεις στις ερωτήσεις βιβλίουκεφάλαιο 4  απαντήσεις στις ερωτήσεις βιβλίου
κεφάλαιο 4 απαντήσεις στις ερωτήσεις βιβλίου
 
正課第9週模擬試題_解答.pdf
正課第9週模擬試題_解答.pdf正課第9週模擬試題_解答.pdf
正課第9週模擬試題_解答.pdf
 
系統程式 -- 第 1 章
系統程式 -- 第 1 章系統程式 -- 第 1 章
系統程式 -- 第 1 章
 
Παρουσίαση Κεφαλαίου 1 ΑΕΠΠ
Παρουσίαση Κεφαλαίου 1 ΑΕΠΠΠαρουσίαση Κεφαλαίου 1 ΑΕΠΠ
Παρουσίαση Κεφαλαίου 1 ΑΕΠΠ
 
ΠΛΗ31 ΜΑΘΗΜΑ 1.1
ΠΛΗ31 ΜΑΘΗΜΑ 1.1ΠΛΗ31 ΜΑΘΗΜΑ 1.1
ΠΛΗ31 ΜΑΘΗΜΑ 1.1
 
基本計概祕笈(張逸)
基本計概祕笈(張逸)基本計概祕笈(張逸)
基本計概祕笈(張逸)
 
QM-048-品管圈活動經驗分享
QM-048-品管圈活動經驗分享QM-048-品管圈活動經驗分享
QM-048-品管圈活動經驗分享
 
Python tutorial by example
Python tutorial by examplePython tutorial by example
Python tutorial by example
 
資管所-計算機概論 健診三部曲.pdf
資管所-計算機概論 健診三部曲.pdf資管所-計算機概論 健診三部曲.pdf
資管所-計算機概論 健診三部曲.pdf
 
Διαγώνισμα Πληροφορικής Α Γυμνασίου
Διαγώνισμα Πληροφορικής Α Γυμνασίου Διαγώνισμα Πληροφορικής Α Γυμνασίου
Διαγώνισμα Πληροφορικής Α Γυμνασίου
 
Βασικά Θέματα Πληροφορικής Εργαστήριο 2016
Βασικά Θέματα Πληροφορικής Εργαστήριο 2016Βασικά Θέματα Πληροφορικής Εργαστήριο 2016
Βασικά Θέματα Πληροφορικής Εργαστήριο 2016
 
作業系統祕笈(張逸)
作業系統祕笈(張逸)作業系統祕笈(張逸)
作業系統祕笈(張逸)
 
系統程式 -- 第 11 章
系統程式 -- 第 11 章系統程式 -- 第 11 章
系統程式 -- 第 11 章
 
Aepp-6.4-6.7-tsiotakis
Aepp-6.4-6.7-tsiotakisAepp-6.4-6.7-tsiotakis
Aepp-6.4-6.7-tsiotakis
 
103中華電信資訊類計概解答
103中華電信資訊類計概解答103中華電信資訊類計概解答
103中華電信資訊類計概解答
 
系統程式 -- 第 4 章
系統程式 -- 第 4 章系統程式 -- 第 4 章
系統程式 -- 第 4 章
 
Λειτουργικά Συστήματα ΕΠΑΛ - Βασικές Έννοιες
Λειτουργικά Συστήματα ΕΠΑΛ - Βασικές ΈννοιεςΛειτουργικά Συστήματα ΕΠΑΛ - Βασικές Έννοιες
Λειτουργικά Συστήματα ΕΠΑΛ - Βασικές Έννοιες
 

Similar to 作業系統數位教材(劉政雄)(1 9)

系統程式 -- 第 10 章
系統程式 -- 第 10 章系統程式 -- 第 10 章
系統程式 -- 第 10 章鍾誠 陳鍾誠
 
深入研究 Windows 系統服務 效能調校與故障排除
深入研究 Windows 系統服務    效能調校與故障排除深入研究 Windows 系統服務    效能調校與故障排除
深入研究 Windows 系統服務 效能調校與故障排除5045033
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
软件工程
软件工程软件工程
软件工程bill0077
 
基于Erlang的
基于Erlang的基于Erlang的
基于Erlang的hnoutman
 
CNC系统结构及控制方法
CNC系统结构及控制方法CNC系统结构及控制方法
CNC系统结构及控制方法sunlight
 
baidu fuye
baidu fuyebaidu fuye
baidu fuyedachmx
 
百度 fuye
百度 fuye百度 fuye
百度 fuyedachmx
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案Ady Liu
 
Power flow簡介
Power flow簡介Power flow簡介
Power flow簡介Sky Wu
 
软件工程 第八章
软件工程 第八章软件工程 第八章
软件工程 第八章浒 刘
 
Se2009 ch8
Se2009 ch8 Se2009 ch8
Se2009 ch8 浒 刘
 
Erlang高级原理和应用
Erlang高级原理和应用Erlang高级原理和应用
Erlang高级原理和应用Feng Yu
 
腾讯大讲堂30 运维工具让你的开发运营更轻松
腾讯大讲堂30 运维工具让你的开发运营更轻松腾讯大讲堂30 运维工具让你的开发运营更轻松
腾讯大讲堂30 运维工具让你的开发运营更轻松Michael Zhang
 
腾讯大讲堂30 运维工具让你的开发运营更轻松
腾讯大讲堂30 运维工具让你的开发运营更轻松腾讯大讲堂30 运维工具让你的开发运营更轻松
腾讯大讲堂30 运维工具让你的开发运营更轻松areyouok
 
+++º+ ¦¦ ¦ ¦¦ ¦+ =
+++º+ ¦¦  ¦ ¦¦ ¦+ =+++º+ ¦¦  ¦ ¦¦ ¦+ =
+++º+ ¦¦ ¦ ¦¦ ¦+ =guesta6295f3
 

Similar to 作業系統數位教材(劉政雄)(1 9) (20)

系統程式 -- 第 10 章
系統程式 -- 第 10 章系統程式 -- 第 10 章
系統程式 -- 第 10 章
 
深入研究 Windows 系統服務 效能調校與故障排除
深入研究 Windows 系統服務    效能調校與故障排除深入研究 Windows 系統服務    效能調校與故障排除
深入研究 Windows 系統服務 效能調校與故障排除
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
软件工程
软件工程软件工程
软件工程
 
Ch04
Ch04Ch04
Ch04
 
Ch04
Ch04Ch04
Ch04
 
基于Erlang的
基于Erlang的基于Erlang的
基于Erlang的
 
C N Cϵͳṹ Ʒ
C N Cϵͳṹ ƷC N Cϵͳṹ Ʒ
C N Cϵͳṹ Ʒ
 
CNC系统结构及控制方法
CNC系统结构及控制方法CNC系统结构及控制方法
CNC系统结构及控制方法
 
baidu fuye
baidu fuyebaidu fuye
baidu fuye
 
百度 fuye
百度 fuye百度 fuye
百度 fuye
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案
 
Power flow簡介
Power flow簡介Power flow簡介
Power flow簡介
 
第1章
第1章第1章
第1章
 
软件工程 第八章
软件工程 第八章软件工程 第八章
软件工程 第八章
 
Se2009 ch8
Se2009 ch8 Se2009 ch8
Se2009 ch8
 
Erlang高级原理和应用
Erlang高级原理和应用Erlang高级原理和应用
Erlang高级原理和应用
 
腾讯大讲堂30 运维工具让你的开发运营更轻松
腾讯大讲堂30 运维工具让你的开发运营更轻松腾讯大讲堂30 运维工具让你的开发运营更轻松
腾讯大讲堂30 运维工具让你的开发运营更轻松
 
腾讯大讲堂30 运维工具让你的开发运营更轻松
腾讯大讲堂30 运维工具让你的开发运营更轻松腾讯大讲堂30 运维工具让你的开发运营更轻松
腾讯大讲堂30 运维工具让你的开发运营更轻松
 
+++º+ ¦¦ ¦ ¦¦ ¦+ =
+++º+ ¦¦  ¦ ¦¦ ¦+ =+++º+ ¦¦  ¦ ¦¦ ¦+ =
+++º+ ¦¦ ¦ ¦¦ ¦+ =
 

More from Ying wei (Joe) Chou

109 我國製造業附加價值率
109 我國製造業附加價值率109 我國製造業附加價值率
109 我國製造業附加價值率Ying wei (Joe) Chou
 
華晨中國 獨立調查之主要調查結果概要
華晨中國 獨立調查之主要調查結果概要華晨中國 獨立調查之主要調查結果概要
華晨中國 獨立調查之主要調查結果概要Ying wei (Joe) Chou
 
Servitization in global markets - role alignment in global service networks f...
Servitization in global markets - role alignment in global service networks f...Servitization in global markets - role alignment in global service networks f...
Servitization in global markets - role alignment in global service networks f...Ying wei (Joe) Chou
 
Think with me, or think for me on the future role of artificial intelligenc...
Think with me, or think for me   on the future role of artificial intelligenc...Think with me, or think for me   on the future role of artificial intelligenc...
Think with me, or think for me on the future role of artificial intelligenc...Ying wei (Joe) Chou
 
The battle of superheros the rise of the knowledge platform strategy in the m...
The battle of superheros the rise of the knowledge platform strategy in the m...The battle of superheros the rise of the knowledge platform strategy in the m...
The battle of superheros the rise of the knowledge platform strategy in the m...Ying wei (Joe) Chou
 
The value investing-requiem rebirth or reincarnation
The value investing-requiem rebirth or reincarnationThe value investing-requiem rebirth or reincarnation
The value investing-requiem rebirth or reincarnationYing wei (Joe) Chou
 
The broadcasting in the internet age
The broadcasting in the internet ageThe broadcasting in the internet age
The broadcasting in the internet ageYing wei (Joe) Chou
 
Ssrn an analysis on the television broadacsting sector-the impact of ott serv...
Ssrn an analysis on the television broadacsting sector-the impact of ott serv...Ssrn an analysis on the television broadacsting sector-the impact of ott serv...
Ssrn an analysis on the television broadacsting sector-the impact of ott serv...Ying wei (Joe) Chou
 
Ssrn a critical review of digital marketing
Ssrn a critical review of digital marketingSsrn a critical review of digital marketing
Ssrn a critical review of digital marketingYing wei (Joe) Chou
 
Ssrn a brief inrtoduction to the basic of game theory
Ssrn a brief inrtoduction to the basic of game theorySsrn a brief inrtoduction to the basic of game theory
Ssrn a brief inrtoduction to the basic of game theoryYing wei (Joe) Chou
 
Small–medium enterprise formation and nigerian economic growth
Small–medium enterprise formation and nigerian economic growthSmall–medium enterprise formation and nigerian economic growth
Small–medium enterprise formation and nigerian economic growthYing wei (Joe) Chou
 
Online dating apps as a marketing channel a generational approach
Online dating apps as a marketing channel  a generational approachOnline dating apps as a marketing channel  a generational approach
Online dating apps as a marketing channel a generational approachYing wei (Joe) Chou
 
Making secret sharing based cloud storage usable
Making secret sharing based  cloud storage usableMaking secret sharing based  cloud storage usable
Making secret sharing based cloud storage usableYing wei (Joe) Chou
 

More from Ying wei (Joe) Chou (20)

廣東塑料交易所.pdf
廣東塑料交易所.pdf廣東塑料交易所.pdf
廣東塑料交易所.pdf
 
Oecd due-diligence-guidance-for
Oecd due-diligence-guidance-forOecd due-diligence-guidance-for
Oecd due-diligence-guidance-for
 
109 我國製造業附加價值率
109 我國製造業附加價值率109 我國製造業附加價值率
109 我國製造業附加價值率
 
華晨中國 獨立調查之主要調查結果概要
華晨中國 獨立調查之主要調查結果概要華晨中國 獨立調查之主要調查結果概要
華晨中國 獨立調查之主要調查結果概要
 
Servitization in global markets - role alignment in global service networks f...
Servitization in global markets - role alignment in global service networks f...Servitization in global markets - role alignment in global service networks f...
Servitization in global markets - role alignment in global service networks f...
 
Salary
SalarySalary
Salary
 
Why sharing is synergy
Why sharing is synergyWhy sharing is synergy
Why sharing is synergy
 
Think with me, or think for me on the future role of artificial intelligenc...
Think with me, or think for me   on the future role of artificial intelligenc...Think with me, or think for me   on the future role of artificial intelligenc...
Think with me, or think for me on the future role of artificial intelligenc...
 
The battle of superheros the rise of the knowledge platform strategy in the m...
The battle of superheros the rise of the knowledge platform strategy in the m...The battle of superheros the rise of the knowledge platform strategy in the m...
The battle of superheros the rise of the knowledge platform strategy in the m...
 
The anatomy of business falure
The  anatomy of business falureThe  anatomy of business falure
The anatomy of business falure
 
The value investing-requiem rebirth or reincarnation
The value investing-requiem rebirth or reincarnationThe value investing-requiem rebirth or reincarnation
The value investing-requiem rebirth or reincarnation
 
De Fi and the future of finance
De Fi and the future of financeDe Fi and the future of finance
De Fi and the future of finance
 
The broadcasting in the internet age
The broadcasting in the internet ageThe broadcasting in the internet age
The broadcasting in the internet age
 
Ssrn an analysis on the television broadacsting sector-the impact of ott serv...
Ssrn an analysis on the television broadacsting sector-the impact of ott serv...Ssrn an analysis on the television broadacsting sector-the impact of ott serv...
Ssrn an analysis on the television broadacsting sector-the impact of ott serv...
 
Ssrn a critical review of digital marketing
Ssrn a critical review of digital marketingSsrn a critical review of digital marketing
Ssrn a critical review of digital marketing
 
Ssrn a brief inrtoduction to the basic of game theory
Ssrn a brief inrtoduction to the basic of game theorySsrn a brief inrtoduction to the basic of game theory
Ssrn a brief inrtoduction to the basic of game theory
 
Small–medium enterprise formation and nigerian economic growth
Small–medium enterprise formation and nigerian economic growthSmall–medium enterprise formation and nigerian economic growth
Small–medium enterprise formation and nigerian economic growth
 
Online dating apps as a marketing channel a generational approach
Online dating apps as a marketing channel  a generational approachOnline dating apps as a marketing channel  a generational approach
Online dating apps as a marketing channel a generational approach
 
My future entrepreneurial self
My future entrepreneurial selfMy future entrepreneurial self
My future entrepreneurial self
 
Making secret sharing based cloud storage usable
Making secret sharing based  cloud storage usableMaking secret sharing based  cloud storage usable
Making secret sharing based cloud storage usable
 

作業系統數位教材(劉政雄)(1 9)