硬體(CPU、記憶體、I/O)、作業系統、應用程式、使用者
- 作業 2 題目(1. a):
What are the two main functions of an operating system?
Please explain each function.
- resource allocator
負責分配資源給各 process- control program
監督各 process 的執行,避免出錯或不合法使用,例如除 0 的不合法操作
- 作業 2 題目(1. b):
Describe the procedures / steps required when starting up a computer.
- When a computer startup, the first step is that the BIOS start working. It includes a power-on self-test that initialize and identify system devices. The second step is the executing of the bootstrap program that initializes all aspects of the system and loads operating system kernel. When two steps are done, the computer starts.
提及:多元程式規劃(multiprogramming)、工作池(job pool)、分時(time sharing)、多工(multitasking)、行程(process)、工作排班(job scheduling)、CPU 排班(CPU scheduling)。
提及:中斷驅動式(interrupt driven)作業系統、陷阱(trap)。
提及:程式計數器(program counter)
在行程管理方面,作業系統必須負責下列的功能:
- 在 CPU 排班行程和執行緒
- 使用者和系統行程的產生 & 刪除
- 行程暫停 & 恢復
- 提供行程同步的機制
- 提供行程通信的機制
- 提供處理死結的機制
在記憶體管理方面,作業系統必須負責下列的功能:
- 記錄正在使用的記憶體部分 & 誰在使用
- 決定哪些行程 & 資料要移入或移出記憶體空間
- 在需要時配置和回收記憶體空間
提及:檔案(file)的概念。
在檔案管理方面,作業系統必須負責下列的功能:
- 建立 & 刪除檔案
- 建立 & 刪除組織檔案的目錄
- 做為處利檔案 & 目錄的原始支援
- 對映檔案到輔助記憶體
- 備份檔案到穩定(非揮發性)儲存裝置上
在磁碟管理方面,作業系統必須負責下列的功能:
- 可用空間管理
- 記憶體配置
- 磁碟排班
I/O 子系統包含:
- 對於同時周邊作業,提供緩衝、快取、連線的記憶體管理元件
- 通用裝置驅動程式介面
- 特定硬體裝置驅動程式
提及:保護、使用者辨識符號(user ID)、安全性識別碼(Security ID, SID)、群組識別符號(group ID)。
- 作業 2 題目(2. b):
What are some O.S. service(s) / system call(s) that the “Open file” operation need?
- File-system manipulation 負責檔案管理, I/O operations, ReadFile(), CloseHandle()
提及:應用程式介面(application programming interface, API)、系統呼叫介面(system-call interface)
舉例:複製來源檔的內容到目的檔
可以概略分成六大類:
- 行程控制(process control)
- 檔案的管理(file manipulation)
- 裝置的管理(device manipulation)
- 資訊的維護(information maintenance)
- 通信(communication)
- 保護(protection)
提供程式開發 & 執行的便利環境:
- 檔案管理(File management)
- 狀態資訊(Status information),提及:登錄檔(registry)
- 檔案的修改(File modification)
- 程式語言支持(Programming-language support)
- 程式的載入 & 執行(Program loading and execution)
- 通信(Communications)
- 背景服務
將設計完成的整個作業系統分成較小的元件分別製作是比較合理的方法。
本節將討論這些元件是如何連接在一起以構成所謂的核心。
2.7.1 - 簡單結構(simple structure)
優點:在系統呼叫介面或是核心內的通訊上額外的負擔很小。
缺點:許多功能結合在同一層次,難以維護又脆弱。
2.7.2 - 分層方法(layer approach)
層次選定後,每層皆只能使用較低層的功能 & 服務。
優點:結構清晰、易於除錯。
缺點:難以明確定義各層次之內容、冗長的系統呼叫。
- 作業 3 題目(1. a):
What is the layered approach and what is its main advantage?
- 優點:降低設計複雜度、有助於分工、測試除錯維護容易
- 採取 Top-Down 方式切割系統功能 / 元件以降低複雜度
- 元件 / 模組之間依呼叫關係分層,即上層可以使用下層的功能,但下層不可以使用上層的功能
- 使用 Bottom-up 方式進行測試
2.7.3 - 微核心(microkernel)
優點:系統功能易擴展、核心不需反覆修改。
缺點:系統功能越多效能越差。
2.7.4 - 模組(modules)
目前作業系統最好的設計方法是使用可載入的模組核心(loadable kernel module)。
優點:動態製作並連接服務以避免微核心的缺點、更有彈性、更有效率。
- 作業 3 題目(1. b):
What is the modular kernel approach and what is its main advantage?
- 優點:類似 layered approach 但是更有彈性且效能更好
- 許多 OS 實施可加載的核心模組
- 使用物件導向方法
- 每個核心元件都是獨立的
- 每個核心元件都通過已知介面與其他元件溝通
- 每個核心元件都可以根據核心需求來做加載
- 作業 3 題目(1. c):
In what ways is the modular kernel approach similar to the layered approach?
- 每個核心元件都定義了保護介面
- 模組化核心較靈活,因為任何模組都可以調用其它模組
2.7.5 - 混合系統
將主機上的硬體和作業系統核心都視為硬體進行操作。
- 作業 2 題目(4. a):
Describe the concepts of VM.
Please include the architecture (in diagram).
- A virtual machine (VM) is a software program or operating system that not only exhibits the behavior of a separate computer, but is also capable of performing tasks such as running applications and programs like a separate computer.
- 作業 2 題目(4. b):
What are the differences between VMware and VM?
Please include advantage and disadvantage of each.
- VMware build on host OS, but VM build on directory on hardware.
- VMware:
- 優點:同一部 Host hardware 上可以執行多個 OS,跑多個 virtual machine,可以節省成本。
- 缺點:會增加問題偵測和排除上的難度。
- VM(virtual machine):
- 優點:提供可測試的安全隔離環境,做為測試開發中的 OS 一個良好的負載平台。
- 缺點:共用hardware,執行速度會比較慢。
2.75.1 - VMware
2.75.2 - VM(virtual machines)
提及:除錯(debugging)、性能調整(performance tuning)、瓶頸(bottleneck)。
提及:系統建立(system generation, SYSGEN)、表格驅動(table driven)。
3.1.1 - 行程
程式並非行程。
當可執行檔案被載入到記憶體後,程式才會變成行程。
行程是程序運行的過程,它是系统進行資源分配和調度的一個獨立單位。
行程可能包含:
- 程式碼(或稱為文本區, text section)
- 程式計數器(program counter)的數值
- 處理器的暫存內容
- 存放暫用資料(副程式的參數、返回位址、區域性變數)的行程堆疊(stack)
- 堆積(heap, 動態配置的記憶體)
3.1.2 - 行程狀態
行程的狀態有以下五種
- 新產生(new)
- 就緒(ready)
- 執行(running)
- 等待(waiting)
- 結束(terminated)
- 作業 3 題目(2. a):
Explain the each state's transition in detail of process states.
- new → ready:
當 memory space 足夠時,可由 long-term scheduler 決定將此 Job 載入到 memory 中。- ready → running:
由 short-term scheduler 決定讓高優先權 process 取得 CPU。- running → ready:
執行中的 process 會因某些事件發生而被迫放棄 CPU,回到 ready queue。- running → waiting:
執行中的 process 因為 I/O 裝置的呼叫或事件的發生而被迫暫停。- waiting → ready:
等待中的 process 因為 I/O 裝置或事件的完成,結束回到 ready 狀態。- running → terminated:
Process 完工或異常終止。
3.1.3 - 行程控制表(process control block, PCB)
又稱任務控制表(task control block)。
表內的相關資訊包括:
- 行程狀態
- 程式計數器:指明下個要執行的指令位址
- CPU 暫存器,其中包括:
- 累加器(accumulator)
- 索引暫存器(index register)
- 堆疊指標(stack pointer)
- 一般用途暫存器(general-purpose register)
- 狀況代碼(condition-code)
- CPU 排班法則相關資訊:
- 行程的優先順序(priority)
- 排班佇列(scheduling queue)的指標
- 其他的排班參數
- 記憶體管理資訊:
- 基底暫存器(base register)
- 限制暫存(limit register)
- 分頁表(page table)數值的資訊
- 記憶系統區段表(segment table)
- 會計資訊:包括 CPU & 實際時間的使用數量、時限、帳號、工作、行程號碼…
- 輸入 / 輸出狀態資訊
3.1.4 - 執行緒(thread)
提及:行程排班程式(process scheduler)。
3.2.1 - 行程排班
提及:工作佇列(job queue)、就緒佇列(ready queue)、裝置佇列(device queue)、分派(dispatched)。
3.2.2 - 排班程式(scheduler)
- 作業 3 題目(2. b):
Please define “short-term scheduling,” “mid-term scheduling,” and “long-term scheduling.”
- short-term scheduling:
從 ready queue 中挑出一個高優先權的 process,分派 CPU 給它執行。- mid-term scheduling:
當 memory 空間不足但有其它高優先權的 process 需要空間時,此 scheduler 會會挑選一些執行中的 process 將其 swap out 到 disk 中保存,以空出空間供等候中的 process 使用,等到有足夠的空間時,再將它們 swap in 回 memory,ready for execution。
(★★★ 此程式在 real-time system 和 batch system 中不會被採用。)- long-term scheduling:
從 job queue 中挑選一些 jobs 載入到 memory 中。
3.2.3 - 內容轉換(content switch)
提及:狀態儲存(state save)、狀態還原(state restore)
提及:獨立行程(independent process)、合作行程(cooperating process)。
行程間通訊的理由:資訊共享、加速運算(多處理器才有效果)、模組化、方便性
4.1.1 - 動機
單執行緒 v.s. 多執行緒:
多執行緒伺服器架構:
4.1.2 - 利益
多執行緒的 4 大好處:
平行(parallelism) ≠ 並行(concurrency)
舉例:
簡而言之,就是要提高 CPU 在多執行緒的情況下的使用效率。
5.1.1 - CPU ─ I/O 分割(burst)
5.1.2 - CPU 排班程式(CPU scheduler)
通常指的是短程排班程式(short-term scheduler)。
5.1.3 - 可搶先排班
scheduling 的時間點:
其中 1 和 4 是不可搶先(nonpreemptive)或合作(coopertive)的,必須讓它完成,不得中斷。
而 2 和 3 是可搶先的(preemptive),可以被中斷,但要注意:
5.1.4 - 分派程式(dispatcher):
真正在執行 context switch、把 CPU 控制權交給 scheduler 選定的 process 的程式,包括:
過程會產生分派潛伏期(dispatch latency)。
五大標準
五大方向:
分成 user-level 和 kernel-level 兩種線程。
processor 可能會是以下幾種型態:
NUMA(Non-Uniform Memory Access):
將系統分成很多個節點(node),節點內部存取的時間,比跟節點外的存取時間快很多!
如果在 SMP 下,要保持每個 CPU 有最好的效率,需要考慮 load balancing(平衡每個 CPU),會有週期性的 push migration 跟pull migration:
Multicore Processors 會將 multiple processor trend 到一個 chip 上,跟傳統的 Multiprocessor 比起來快很多,而且也比較節省能源。
Real-Time system 分為兩種:
5.6.1 - 降低潛伏期
影響 real-time system 的主要因素為 latency:
5.6.2 - 以優先權為基礎的排班
5.6.3 - 單調速率排班法(rate-monotonic scheduling)
5.6.4 - 最早截止優先排班(Earliest-deadline-first, EDF)
「理論上」最佳的排班法,而且 CPU 使用率市 100%。但事實上因為行程的中斷和內容轉換會花費時間,所以不可能達到這個使用率水準。
5.6.5 - 比例分享排班(proportional share)
需配合許可控制策略來工作。
5.6.6 - POSIX 即時排班
5.8.1 - 定量模式(deterministic modeling)
用行程的平均 waiting time 做分析。
5.8.2 - 佇列模式(queueing modeling)
Little’s formula:
5.8.3 - 模擬(simulations)
5.8.4 - 實作(implementation)
提及:競爭情況(race condition)
當 process 要進入臨界區間時,要先經過 entry section 的同意,出來時也要經過 exit section。要解決 critical section problem 要滿足三個條件:
Critical section 在作業系統的 kernel 中,可以設計成:
假設有兩個行程:
用 lock 的方式保護 critical section。現在主要用不可中斷的方式達到 lock 的功能,主要使用兩種方式:
利用 acquire() 和 release() 取用 lock,但是如果取不到 lock 的話,就會進入 busy waiting。這種鎖又被稱為「自旋鎖(spinlock)」。
6.6.1 - 號誌的用法
一個介於 0 到指定最大值的整數變數。利用 wait() 和 signal() 來改變,當執行完 wait() 則減 1、執行完 signal() 則加 1。當變數等於 0 時,就要等到執行完 signal() 才能再執行 wait()。
6.6.2 - 號誌製作
為了改善 busy waiting 的問題,會將所有的 semaphore(有 value 跟 pointer)連成一個 waiting queue。而 waiting queue 有兩種執行方式:
6.6.3 - 死結(deadlock)和飢餓(starvation)
6.6.4 - 優先權倒置(priority inversion)
用優先權繼承協定解決(priority-inheritance protocol)。
6.7.1 - 有限緩衝區問題(bounded-buffer problem)
假設 n 個 buffers,每個都有資料,三個 semaphore 預設值為 mutex=1、full=0、empty=n。
6.7.2 - 讀取者─寫入者問題(readers─writers problem)
有一個 data set,有很多 process 同時共享著。
6.7.3 - 哲學家進餐問題(dining-philosophers problem)
要解決這個 deadlock,有幾個解決辦法:
Monitors 是一種處理 synchronization 的高階方式,但不是所有作業系統都支援。
6.8.1 - 監督程式的用途
提及:訊號和等候(Signal and wait)、訊號和繼續(Signal and continue)。
Monitor 由 shared data、operations 跟 initialization code 所組成,而他本身是一種抽象資料型態(Abstract Data Type, ADT)。
6.8.2 - 使用監督程式解決哲學家進餐問題
6.8.3 - 使用號誌製作監督程式
6.8.4 - 監督程式內的恢復行程
提及:條件式等待(conditional-wait)、優先級數(priority number)。
包含了很多資源 (resource),而資源也有很多種型態。process 要用資源時,要經過三個步驟:
7.2.1 - 必要條件
要形成 deadlock,必須同時滿足 4 個條件:
7.2.2 - 資源配置圖(Resource-Allocation Graph, RAG)
頂點分兩種:process 跟 resource。
邊也分兩種:request edge(process → resource)和 assignment edge(resource → process)。
如果 RAG 的圖中沒有 cycle,那一定沒有 deadlock;但若圖中有 cycle,那會有兩種情形:
其中第 3 種被大部分的 OS 廣泛使用(包括 UNIX、Windows),將死結問題交由程式設計師來處理。
據 7.2.1 所說,想造成死結必須同時滿足 4 個條件,所以我們可以試圖讓其中一個條件不成立。
7.4.1 - 互斥(Mutual exclusion)
全部資源皆共用則不會造成互斥,但這不太可能達成,因為有些資源必須是無法共用的。
7.4.2 - 佔用與等候(Hold and wait)
要使這項條件不成立,process 必須保證必須保證在要求一項資源時,不能佔用任何其他資源,除非他可以一次取得所有資源。
7.4.3 - 不可搶先(No preemption)
若一 process 握著一些資源並申請了一個無法立即獲得的資源(需等待),就要先釋放全部自己擁有的資源(實際上為設為可搶先),再重新申請。
7.4.4 - 循環式等候(Circular wait)
對 resource type 強制安排線性順序,不讓 circular wait 的條件達成。
確保 system 不會進到 unsafe state。
7.5.1 - 安全狀態(safe state)
提及:安全序列(safe sequence)
7.5.2 - 資源配置圖演算法
只有在不形成 cycle 時才能接受請求。
7.5.3 - 銀行家演算法(Banker’s algorithm)
注意:
假設有 個 process, 個 resource type,其資料結構為:
7.7.1 - 行程的終止
7.7.2 - 資源的搶先
將某些資源改為可搶先(共用)並讓給其他行程,直到消除死結循環。需要考慮:
8.1.1 - 基本硬體
提及:基底暫存器(base register)、界限暫存器(limit register)。
CPU 能夠直接存取 register 跟 memory 的內容。Register 或指令的運作通常都在一個 CPU 時脈週期內完成,但 Main memory 可能會花費數個 CPU 時間週期,造成 memory stall;這時就需要使用速度介於兩者之間的 cache。
8.1.2 - 位址連結(address binding)
記憶體位置的連結可以在三個時間點:
8.1.3 - 邏輯位址(Logical address)空間 & 實體位址(Physical address)空間
address 分為兩種:
memory unit:
全名為記憶管理單元(Memory-Management Unit, MMU)。
提及:重定位暫存器(relocation register)。
8.1.4 - 動態載入(dynamic loading)
提及:重定位鏈結載入程式(relocatable linking loader)。
8.1.5 - 動態鏈接(dynamically linked)& 共用程式庫
運用記號(stub)存放要用到的 memory-resident library routine,當要執行時,會把 stub 換成 address of routine,也就是說只有被叫到的模組才會進到 memory。
在程式執行時,process 有時會需要暫時離開記憶體,之後再搬回來執行,搬出搬入的動作稱為 roll out 跟 roll in。而在這裡的硬碟(disk)稱作 backing store。
8.2.1 - 標準置換
提及:就緒佇列(ready queue)、雙緩衝(double buffering)。
8.2.2 - 行動系統的置換
iOS 跟 Android 都不支援置換,取而代之他們直接終止應用程式,但會將程式終止前的狀態儲存在快取記憶體。
8.3.1 - 記憶體保護
提及:暫態(transient)。
8.3.2 - 記憶體配置
提及:多重分割分配(Multiple-partition allocation)。
找可用的記憶體空間有三種方法:
8.3.3 - 斷裂(fragmentation)
提及:百分之五十規則(50-percent rule)。
斷裂有兩種:
要解決斷裂的方法就用聚集(compaction),將 process 移來移去,讓其餘的記憶體空間能夠聚在一起,但是 process 必須是 dynamic 才可以這樣做,而且 I/O 在這裡也是個問題。
8.4.1 - 基本方法
分段法(segmentation):將 logical address 分成兩部分,segment-number 和 offset。
8.4.2 - 分段硬體
分段表(segment table):包含分段基底值(segment base)跟分段界限值(segment limit)。
目前最佳的記憶體解決方式,但還是無法解決內部斷裂(Internal fragmentation)。
8.5.1 - 基本方法
Frames 跟 pages 的大小相同,當 program 需要 個 pages 時,作業系統會去physical memory 找 個 free frame 來放,frame 間並不需用連續。作業系統會設置分頁表(page table),轉換 logical address 變成 physical address。
提及:頁數(page number, p)、頁偏移量(page offset, d)。
8.5.2 - 硬體的支援
Page table 是存放在記憶體中,作業系統運用 page-table base register(PTBR)記錄起始位置跟 page-table length register(PTLR)記錄 page table 的大小。缺點:因為必須存取記憶體兩次,速度慢了一倍;第一次是 page table,第二次才是要找的 data。
解決方法:用翻譯旁觀緩衝區(Translation Look-aside Buffer, TLB)保存部分常用的 page table。過程:
提及:硬體繞線固定(wired down)、儲存位址空間辨識符號(address-space identifier, ASID)、命中率(hit ratio)、有效記憶體存取時間(effective memory-access time)。
8.5.3 - 保護
有效─無效位元(valid-invalid bit)。
提及:分頁表長度暫存器(page-table length register, PTLR)。
8.5.4 - 共用分頁
提及:可重進入的程式碼。
8.6.1 - 階層式的分頁(Hierarchical page table)
8.6.2 - 雜湊分頁表(Hashed page table)
提及:叢集式分頁表(clustered page table)。
8.6.3 - 反轉分頁表(Inverted page table)
8.6.4 - Oracle SPRC Solaris
提及:TLB 走遍(TLB walk)。
虛擬記憶體是讓程式以為有連續的記憶體空間可以使用,但事實上會將部分資料存放在 disk 上,當有需要時再交換進來真正的記憶體。
9.4.1 - 基本分頁替換演算法
提及:欄的配置演算法(frame-allocation algorithm)、分頁替換演算法(page-replacement algorithm)、參考串(reference string)。
9.4.2 - FIFO 分頁替換演算法
提及:畢雷地異常(Belady's anomaly)。
9.4.3 - 最佳分頁替換演算法(Optimal page-replacement algorithm)
9.4.4 - 近來最少使用分頁替換演算法(Least Recently Used, LRU)
LRU 的實作分成兩種:counter 和 stack。
LRU 和 Optimal 都是用 stack 演算法,所以都不會發生 Belady’s Anomaly 的現象。
9.4.5 - LRU 近似分頁替換演算法(LRU Approximation Algorithms)
因為 LRU 需要特別的硬體支援,而且使用後還是很慢,所以產生 LRU 近似演算法、Second-Chance Algorithm 跟 Enhanced Second-Chance Algorithm。
9.4.6 - 計數基礎分頁替換演算法(Counting Algorithms)
9.4.7 - 頁緩衝演算法(Page-Buffering Algorithms)
9.4.8 - 應用程式和分頁替換
提及:未格式化磁碟(raw disk)。
9.5.1 - 最少量的欄數
9.5.2 - 配置演算法
9.5.3 - 全體和區域的配置
9.5.4 - 不一致的記憶體存取(non-uniform memory access, NUMA)
提及:地址群組(lgroup)。
輾轉現象:非常頻繁替換分頁的行為;輾轉狀態:某 process 替換分頁的時間比執行的時間多。
9.6.1 - 輾轉現象的原因
9.6.2 - 工作組模式(Working-set model)
預估 process 在不同時間內所需要的 frame 數量,並提供足夠的 frame 防止thrashing。使用參數 ∆ 來定義 working-set window,如果 ∆ 太小,會無法包含整個 locality;如果 ∆ 太大,就會重複很多 locality,在 ∆ 等於無限大時,就等於整個 program。而令 D 代表 process 對 frame 的總需求量,如果 D > 可用量時,就會發生 thrashing。
9.6.3 - 分頁錯誤頻率(Page-fault frequency)
解決 thrashing 更直接的策略,如果錯誤率太高,就增加 frame 給 process;如果錯誤率太低,就會收回一些 frame。
9.6.4 - 結語
9.7.1 - 基本的功能
特性:
9.7.2 - Windows API 中的共用記憶體
步驟:
9.7.3 - 記憶體對映 I/O(memory-mapped I/O)
9.8.1 - 夥伴系統(Buddy system
以固定大小的區段組成更大的連續 page,分配大小為 2 的次方。優點是可以快速合併成更大的 chunk,但也容易造成 fragmentation,像是 33KB 的資料就只能使用 64KB 的 page,浪費了 31KB 的空間。
9.8.2 - 平板分配(Slab allocator)
Slab 是由一或多個 physically contiguous page 組成,而 cache 由一或多個 slab 組成,object 會去使用 cache。這個方法就沒有 fragmentation 的問題。
10.1.1 - 檔案特性
檔案的屬性有下列幾項:
提及:擴展文件屬性(extended file attribute)。
10.1.2 - 檔案運作
開啟檔案時,會有以下資訊:
10.1.3 - 檔案型態
提及:殼腳本(shell script)、魔數(magic number)。
10.1.4 - 檔案結構
10.1.5 - 內部檔案結構
10.2.1 - 循序存取(Sequential access)
一筆筆資料存取,照順序,例如磁帶。
10.2.2 - 直接存取(Direct access)
找到指定位置後存取。
提及:邏輯記錄(logical record)、相對性的區段號碼(relative block number)、配置問題(allocation problem)。
10.2.3 - 其他的存取方法
10.3.1 - 儲存結構
10.3.2 - 目錄概觀
可以對目錄做:
10.3.3 - 單層目錄(Single-level directory)
10.3.4 - 雙層目錄(Two-level directory)
10.3.5 - 樹狀目錄(Tree-structured directories)
提及:現用目錄(current directory)。
10.3.6 - 非循環圖型目錄(Acyclic-graph directories)
提及:鏈(link)、解析(resolve)、硬式連結(hard link)。
10.3.7 - 一般圖型的目錄(General graph directories)
提及:安裝點(mount point)。
10.5.1 - 多位使用者
提及:擁有者(owner)、使用者(user)、群組(group)。
10.5.2 - 遠端檔案系統
10.5.2.1 - 客戶─伺服器類型
Network File System(NFS)是常見的方法。
10.5.2.2 - 分散式資訊系統(distributed information system)
提及:分散式命名服務(distributed naming services)、領域名稱系統(domain name system)、黃頁(yellow page)、網路資訊服務(network information services, NIS)、網路檔案分享系統(common internet file system, CIFS)、輕量級目錄存取協定(lightweight directory-access protocol, LDAP)。
10.5.2.3 - 失效模式
10.5.3 - 一致性語意(consistency semantics)
10.6.1 - 存取型態
可以控制的作業類型有:
10.6.2 - 存取控制
提及:存取控制列表(Access Control List)。
10.6.3 - 其他保護方法