# Ch6 Limited Direct Execution 本章講解作業系統如何透過 **Limited Direct Execution** 技術來有效地虛擬化 CPU。核心概念是讓使用者程式直接在硬體上執行以提升效率,同時藉由 **user space / kernel space 切換**與 **system call, trap** 等機制,讓作業系統保有對系統資源的控制權。此外,也探討了如何在多個 process 之間進行 **context switch**,以實現多工與公平使用 CPU 的目標。 ## 6.1 Direct Execution - 直接用 CPU 執行 program - **目的**: - 提升 program 執行效率 - 讓 program 得到最大的權限 - **基本流程**: :::info 在後面的章節會講解更多 ::: - 先把 program load 進去 memory - 執行每個 program 的 `main()` - 執行完成後,Free memory  - **問題**: - 如果沒有限制,program 可能會做出不合法的行為 - 作業系統無法**中止或切換**程式 - **解決方法**: - 限制使用者程式的行為:讓程式執行時受限於作業系統的規範與保護 ## 6.2 Restriced Operations - **背景**: - 為了防止使用者程式對電腦進行危險操作,必須限制其行為 - 但有時程式必須執行**受限的操作**(對硬碟的 I/O 請求、分配更多記憶體等) - **解決方法**: - 分出不同的執行模式 ### User space and kernel space 大部分的作業系統都會把程式的執行權限分為 **user space(user mode)** 與 **kernel space(kernel mode)** 兩種 - **User mode**:受限權限,無法直接操作硬體 - **Kernel mode**: - **可直接**操作硬體 - 可存取所有硬體資源 至於 **RISC-V** 架構中,可以分為三種模式: - **User mode(U-mode)**: 無法直接操作硬體 - **Supervisor mode(S-mode)**: - 可操作硬體 - 可執行**部分指令** - **Machinde mode(M-mode):** - 可操作硬體 - 可執行**全部指令**  硬體實作可以根據需求,選擇不同的特權等級的組合: - **M**:簡單嵌入式系統 - **M + U**:RTOS(Real Time OS) - **M + S + U**:大多數 OS(Linux...) ### System call 使用者程式**無法自行改變權限** -> 必須使用 **system call** 才行 下方是使用過程: - 程式執行 `main()` - `trap()` : User space ---> Kernal space - 繼續執行程式 - `return-from-trap()` : Kermal space ---> User space - 繼續執行程式  #### Trap - 儲存狀態到 PC, registers 中 - 提升權限階級 - User space ---> Kernal space #### Return-from-trap - 重新儲存狀態到 Process - 降低權限階級 - Kernal space ---> User space ## 6.3 Switch Between Process :::warning 如果一個 process 一直霸佔 kernal space 而不做 return-from-trap 的話,OS 就無法重新取得 CPU 控制權 ::: 為了解決 process 霸佔資源,我們使用以下兩種方法 - **合作式**:等待 system call - 常用於早期 OS - 預設程式會**自願交還權限** - 呼叫 `yield()` - 發生錯誤 - 如果遇到 zombie 將無能為力 - **非合作式**:Time Interrupt - 系統程式自行設定 process 執行時間上限,時間一到 CPU 觸發中斷 - 觸發中斷後權限將自動回交給 OS ### Context Switch :::warning 忘記可以去翻第四章 ::: OS 有權限從正在執行的 process 切換到另一個 process,這個過程稱為 **context switch**。  ## 延伸閱讀 [DAY1: RISC-V: 大綱與特權模式](https://ithelp.ithome.com.tw/articles/10289289)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up