作業系統 (Operating System)

定義

OS 是讓使用者妥善使用軟硬體資源的一種系統程式,不同對象對於 OS 會有不同要求:

  • 使用者:便利、效能、圖形化介面、使用者體驗
  • 手機:方便、效能、省電
  • OS 本身:電腦資源的分配者,負責管理且公平分配資源

Kernel(核心)

電腦隨時都在運行的核心程式,一開機就會執行。

  • 系統程式 (System Program)

    • Kernel 安裝完就有
    • 協助 OS 運作的程式,像是檔案總管、計算機、小畫家、踩地雷
    • 應用程式 (Application Program):Kernel 安裝之後還要自己再去裝的
    • 協助使用者解決問題的程式,像是 LOL、楓之谷
  • 靴帶式程式、開機程式 (Bootstrap Program)

    • 通常已燒在 ROM、存在韌體、EEPROM 裡面,載入主記憶體之後,作用是載入 Kernel 開機

Interrupt Driven

現在的作業系統是中斷驅動式 (interrupt driven)。
如果沒有行程要執行、沒有 I/O 裝置要服務、沒有使用者需要回應時,則作業系統將安靜的進入等待事件的發生

「中斷」服務判別

硬體中斷 (Interrupt)

I/O 等硬體設備需要 CPU 時,會對 CPU 發出中斷。
例如 I/O Interrupt。

軟體中斷 (trap)

Trap 又稱為 exception,是一種軟體的中斷,當 Error 發生時就會發生 trap。
例如:用 Java 寫分數除以 0。

System Call

  • 使用作業系統某些服務的時候所產生的中斷,是由指令所引發的中斷,目的是為了要保護系統資源
  • 使用者介面需要使用作業系統的相關服務時需要呼叫 (User mode → Kernel mode)

System Call 非常底層,OS 通常會將它包裝成 API,方便使用者使用,好處是可攜性與易用。
例如:新增、刪除檔案。

System Call 的傳遞方式

  • By Register:透過暫存器傳遞

    • 傳遞快,但一次只能傳一個參數,超過 Register 許可值就無法執行
  • By Address:指標

    • 需要大量參數傳遞時可用,將參數位址丟給 OS 去查詢,缺點是較慢
    • By Stack:暫存陣列
    • First in, Last out
    • 大量處理,比暫存器慢

直接記憶體存取 (Data Memory Access, DMA)

有些裝置會使用 DMA,允許大量資料轉移,且不需要中斷服務的介入

通常用於需要高速傳送的裝置,例如螢幕
CPU 不介入這些大量資料的傳輸,改由 DMA 處理
待 DMA 完成,才通知 CPU 來做處理
使得 1 次 CPU 收到的中斷,可以處理很多東西

中斷處理 (Interrupt Handling)

  • polling:一個一個問
  • vectored:每個裝置都有編號、根據中斷的編號找到該裝置

多重程式與分時系統

多重程式 (Multiprogramming)

容許好幾個程式同時執行。

分時系統 (Time-sharing system)

  • CPU 排程
  • 把時間分割成許多小塊,分享給 program,也是 Multiprogramming

比較

差異在 Time sharing 系統盡量讓每一個 process 使用相同份量的 CPU 時間 (equal share)。
例如:在有 3 個 process 的 time-sharing 系統中,每一個 process 在單位時間中都有 1/3 的機會(或時間)。

Time-sharing 就是把時間分割成許多小塊,又分為以下幾種:

  • 分享給 process → multiprocess
  • 分享給 thread → multithreading
  • 分享給 program → multiprogramming (= multiprocess)

以上資源是我自己整理過後的筆記,若有錯誤歡迎隨時和我聯繫