---
# System prepended metadata

title: 高等作業系統
tags: [112-1 study, ntust]

---


# Exercise

## week 1 and 2

![](https://hackmd.io/_uploads/Sy7Ln5O03.png)

## week 3

![](https://hackmd.io/_uploads/r1DqadhA2.png)

## week 5

![](https://hackmd.io/_uploads/BkKRM5zg6.png)

## week 6

![](https://hackmd.io/_uploads/ryTet3Axa.png)

## week 7

![](https://hackmd.io/_uploads/HkTNYhAxp.png)

## week8

![](https://hackmd.io/_uploads/Hy4TPFs-a.png)


  
  
## tomas論文

- 論文要解決的問題

    - 用戶級線程和內核線程的權衡
    
        用戶級線程有較高的性能和靈活性，但在與系統服務（如多程序、1/0和頁面錯誤）的集成方面存在問題。內核線程可以避免這些問題，但有較低的性能和通用性。
    
    - 內核對用戶級線程的支持不足

        現有的內核接口不能有效地向用戶級線程調度器傳遞內核事件，導致用戶級線程在處理器分配和同步方面失去控制。此外，現有的內核接口不能讓用戶級線程向內核反饋其並行性信息，影響內核對處理器的合理分配。
        
        在這篇論文中，作者們認為現有的內核接口不能有效地向用戶級線程調度器傳遞內核事件，導致用戶級線程在處理器分配和同步方面失去控制。例如，當一個用戶級線程在內核中阻塞或被抢占時，內核不會通知用戶級線程調度器，也不會讓用戶級線程調度器決定哪個線程應該在該處理器上運行。這樣就可能導致處理器的浪費或者錯誤的線程選擇。作者們提出了一種新的內核接口，叫做調度器激活，它可以將內核事件顯式地向用戶級線程調度器傳遞，讓應用程序可以完全控制其並行性。這樣就可以解決內核對用戶級線程的支持不足的問題。
        
- 論文提出的解決方案 : scheduler activations

    - 顯式向用戶級線程調度器傳遞內核事件
        當內核事件發生時（如處理器分配、1/0請求/完成、頁面錯誤等），內核會創建一個調度器激活，並將其分配給一個處理器，然後通過一個固定的入口點向用戶級線程調度器發起一個上調。這個上調可以讓用戶級線程調度器修改用戶級線程的數據結構，執行用戶級線程，並向內核發出請求。
        
    - 用戶級線程系統完全控制其並行性
    
        每個地址空間的用戶級線程系統知道它被分配了多少（以及哪些）處理器，並可以完全控制在這些處理器上運行哪些線程。當一個用戶級線程在內核中阻塞或被抢占時，它不會被內核直接恢復，而是通過一個新的調度器激活通知用戶級線程系統。這樣就可以保持每個地址空間有與其處理器數量相同的可運行調度器激活。
    
    - 向內核通知用戶級事件影響處理器分配的信息
    
        當一個地址空間的可運行線程數量發生變化時（如創建或銷毀一個線程），它會向內核通知它需要更多或更少的處理器。這些通知只是提示，並不保證內核會立即分配或收回處理器。這些通知也只是少數用戶級線程操作中的一部分，大多數操作不需要與內核溝通。這樣就可以保持高效的性能。

- 實作成系統 : SA-threads

    - SA-threads 是基於調度器激活的用戶級線程系統。這個系統可以支持多種用戶級線程調度策略，如靜態優先級、動態優先級、隨機、循環等。這個系統還可以支持多種同步原語，如信號量、互斥鎖、條件變量等。這個系統還可以處理各種內核事件，如頁面錯誤、信號、1/0等。在DEC SRC Firefly多處理器工作站上的測試結果顯示，SA-threads在功能上與內核線程相同，但在性能上有顯著的優勢。SA-threads的上下文切換時間比內核線程快了2.5倍，比其他用戶級線程系統快了1.5倍。SA-threads在處理內核事件時也比其他用戶級線程系統更有效率。SA-threads還可以支持更高的並行度和可擴展性。

## exkernel 論文

- 介紹

    它的設計理念是讓使用者程式的設計者來決定硬體介面的設計。外核心本身非常的小，它通常只負責系統保護和系統資源復用相關的服務。

    傳統的核心設計(包括單核和微核)都對硬體作了抽象，把硬體資源或裝置驅動程式都隱藏在硬體抽象層下。比方說，在這些系統中，如果分配一段物理儲存，應用程式並不知道它的實際位置。

    而外核的目標就是讓應用程式直接請求一塊特定的物理空間，一塊特定的磁碟塊等等。系統本身只保證被請求的資源當前是空閒的，應用程式就允許直接存取它。既然外核系統只提供了比較低階的硬體操作，而沒有像其他系統一樣提供進階的硬體抽象，那麼就需要增加額外的執行庫支援。這些執行庫執行在外核之上，給使用者程式提供了完整的功能。 
    
- 論文主題

    這份論文提出了一種新的作業系統架構，稱為外核（exokernel），它將資源的保護和管理分離，並將傳統的作業系統抽象化（如虛擬記憶體和進程間通訊）完全實現在應用層級。

- 論文動機

    這份論文認為傳統的作業系統限制了應用程式的效能、彈性和功能，因為它們固定了作業系統抽象化的介面和實現，並隱藏了硬體資源的細節。作者認為應用程式比作業系統更了解自己的資源管理目標，因此應該給予它們盡可能多的控制權。
    
- 論文方法

    這份論文設計了一個外核介面，它通過一組低階原始操作安全地對硬體資源進行多工處理和匯出。外核使用三種技術來實現資源的保護和回收：安全綁定（secure bindings）、可見回收（visible revocation）和中止協定（abort protocol）。外核上運行的函式庫作業系統（library operating systems）可以使用外核介面來實現高階抽象化，並根據應用程式的需求進行客製化、專門化或替換。
    
- 論文貢獻

    這份論文實現了一個原型外核系統，包括一個外核（Aegis）和一個函式庫作業系統（ExOS）。作者通過與Ultrix（一種成熟的單體式UNIX作業系統）以及其他相關研究的比較，展示了外核架構的以下優勢：（1）外核可以非常高效，因為它只提供少數簡單的原始操作；（2）硬體資源的低階、安全多工處理可以高效地實現；（3）傳統的作業系統抽象化可以在應用層級高效地實現，並且可以容易地延伸、專門化或替換；（4）應用程式可以創造特殊目的的抽象化實現，以符合它們的功能和效能需求。

## 期中重點圖

![](https://hackmd.io/_uploads/BJuUFnkM6.png)

![](https://hackmd.io/_uploads/HkQFKhkGT.png)

![](https://hackmd.io/_uploads/HkRTY3yz6.png)

![](https://hackmd.io/_uploads/rkuW9hyfa.png)

![](https://hackmd.io/_uploads/HJKz92Jfp.png)

![](https://hackmd.io/_uploads/S1uEq3kMp.png)

![](https://hackmd.io/_uploads/HyNBq2Jz6.png)

![](https://hackmd.io/_uploads/SyLUc31GT.png)

![](https://hackmd.io/_uploads/rJKP92yz6.png)

---

### chapter3

![](https://hackmd.io/_uploads/rkWR5n1M6.png)

![](https://hackmd.io/_uploads/S1qlihkM6.png)

![](https://hackmd.io/_uploads/By3-i2kGa.png)

![](https://hackmd.io/_uploads/Bkufi2yfa.png)

![](https://hackmd.io/_uploads/BkVNsnkz6.png)

![](https://hackmd.io/_uploads/Sk7ri2kMT.png)

![](https://hackmd.io/_uploads/SJELi3yzp.png)

![](https://hackmd.io/_uploads/Hy-Yo3kzT.png)

---

### chapter 4

![](https://hackmd.io/_uploads/r1qY23kza.png)

![](https://hackmd.io/_uploads/B1Mpnh1f6.png)

![](https://hackmd.io/_uploads/HkHAh3kMp.png)

![](https://hackmd.io/_uploads/S1gy62yfp.png)

![](https://hackmd.io/_uploads/H1Kyan1zT.png)

![](https://hackmd.io/_uploads/SJVxa2JMT.png)

## week 9

![](https://hackmd.io/_uploads/BkcRXm3Mp.png)


