---
# System prepended metadata

title: ch1

---

# ch1

### 作業系統—客戶端和電腦硬體之間的中介程式。

## 作業系統的功能
* 資源管理(resource allocator)
* 控制程序(control program)

## 作業系統的組成
* 核心(kernel):
不停執行。
* 開機程式(bootstrap):
重開機或開機時就加載到記憶體，讓cpu執行，加載kernel到記憶體。
![image](https://hackmd.io/_uploads/ByvZ52WRp.png)
(儲存在ROM或是EPROM的firmware韌體。)


# 電腦系統結構
由硬體、作業系統、應用程式、客戶端組成。

多個或一個CPU和其他裝置都在競爭記憶體週期(memory cycles)
![image](https://hackmd.io/_uploads/rknNZ6ZA6.png)

* I/O 和 CPU 可以同步執行。
* Device Controller 負責特定的裝置類型。
* CPU 移動數據在 主要記憶體 與 local buffers 之間。
* I/O 指數據從裝置到Controller的local buffer。
* Device Controller完成作業時，使用interrupt通知CPU。

### 中斷 Interrupt
**利用 Interrput Vector(包含所有Service Routines的位址)，將控制權轉移給ISR(Interrupt service routine)。**


主要功能:
* 必須保存中斷的instruction的位址。
* 當有interrupt正在處理的時候，新的interrupt會被停用，以防止丟失interrupt。
* Trap: 因錯誤或用戶請求，而由**軟體**產生的中斷。
* 作業系統是中斷驅動的。

![image](https://hackmd.io/_uploads/S1_24a-AT.png)

### 中斷處理 Interrupt Handing

1. 作業系統藉由 Registers 和 Program Counter(PC)保存CPU的狀態。
2. 決定中斷種類: polling, vectored interrupt system。
3. 根據種類由單獨的代碼片段(Separate segments of code)處理。
4. 不同的中斷有不同的長度。
![image](https://hackmd.io/_uploads/Bk3aBpZCa.png)


## I/O 結構
需要I/O結束CPU控制權才會回到客戶端程式:
* Wait instruction，閒置CPU直到下個interrupt。
* Wait loop。爭搶記憶體存取。
* 一次一個I/O。

不需要I/O結束CPU控制權才會回到客戶端程式:
* System Call 。向作業系統請求以允許客戶端等待 I/O 完成。
* Device-status table包含每一個I/O裝置的種類、狀態、位址。
* 作業系統索引到I/O裝置表來決定裝置狀態和更改欄位內容來涵蓋interrupt中斷。

## DMA(Direct Memory Access) 結構
一個接近記憶體速度的資訊傳遞的高速I/O裝置。

不需要CPU，直接從Device Controller傳輸數據塊(data block)到主記憶體。

每個數據塊只要一個interrupt。

也稱為Cycle stealing，因為偷取CPU的執行週期來傳輸數據塊。

CPU週期: 
1. 從記憶體中取出指令。
2. 從記憶體中獲取數據。
3. 執行。

## 儲存結構
* 主記憶體。
* 二級儲存(Secondary storage)。
主記憶體的擴充功能提供大的非揮發性儲存容量
* 磁碟。
磁碟表面分割成tracks,再分割成sectors。
Disk Controller 決定設備和電腦間的邏輯交互。
![image](https://hackmd.io/_uploads/rJORiT-Aa.png)

### 儲存層次結構Hierarchy
取決於speed、cost、volatility
![image](https://hackmd.io/_uploads/ryCZna-C6.png)

* 資訊會暫時複製，從慢到快的儲存裝置。

#### Caching
* 最先檢查資訊是否在裡面，若有CPU直接使用。否則複製到Cache。
* 通常小於被快取的空間。


## 電腦架構(Architecture)


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


多數系統使用單一通用處理器**single general-purpose processor**

也有專用處理器Special-Purpose Processors:

* Networks Processor
* GPU
* Floating Point Processor

多核處理器 Multiprocessors:
平行系統parallel systems, 緊耦合系統tightly-coupled systems。
優點:
* 增加吞吐量。
* 規模效應。
* 增加可靠性: 柔性降級和容錯。

分為**非對稱**與**對稱**多處理器。
![image](https://hackmd.io/_uploads/ryE64kGC6.png)

### 集群系統 Clustered Systems
類似於多處理器系統，但多個系統協同工作。
通常透過儲存區域網路SAN (storage-area network) 共用儲存。
提供一個故障後仍運作的高可用性服務。
同樣分為非對稱與對稱。對稱只有一台熱機中，非對稱則是多個節點相互監控並執行程序。

有些集群式系統是high-performance computing (HPC)，需要用平行化程式。

## 作業系統結構
Multiprogramming 需要高效能。
因為單一用戶很難讓CUP和I/O一直保持繁忙。
Multiprogramming會組織工作，**讓CPU盡可能保持繁忙**。 
系統中總作業的子集保持在記憶體中。
通過job scheduling選擇工作和執行。
當需要wait(如I/O)，OS會切換另一個工作。
![image](https://hackmd.io/_uploads/rJTzP1zC6.png)

Timesharing (multitasking)
CPU不斷的切換工作，讓客戶交互到每個工作。
* 回應時間要小於1秒，**回應時間盡可能縮短**。
* 每個用戶至少一個程式在記憶體中執行-> process。
* 如果多個工作準備同時執行-> CPU scheduling。
* 如果程序塞不下記憶體，Swapping會搬動程序進出。
* 虛擬記憶體 允許程序不完全在記憶體中執行。
![image](https://hackmd.io/_uploads/rkJUq1M0a.png)

## 作業系統操作
* Interrupt 由硬體驅動。
* 軟體錯誤或請求創建exception或trap。
* 其他進程問題包括無限循環、進程相互修改或作業系統修改。
* Timer防止無限循環、進程佔用資源。計數器為零產生中斷。

Dual-mode 操作允許作業系統保護自身和其他系統組件。
User mode, Kernel mode:
Mode bit由硬體提供。
提供區分系統何時運行使用者程式碼或核心程式碼的能力。
有些指令被指定為privileged，只能在內核模式下執行。
![image](https://hackmd.io/_uploads/r1LAfZG0T.png)

## 進程管理 Process Management

Process 是一個執行的軟體。系統工作的單元。
Program是被動實體，Process是主動實體。
Process需要資源完成工作，在終止的時候回收可回收的資源。

* 單線程進程:有一個PC指定下一行instruction執行的位置。
* 多線程進程:每個線程有一個PC。

Activities:
* 創建和刪除用戶與系統進程。
* 暫停和重新開始進程。
* 提供進程同步process synchronization機制。
* 提供進程通訊process communication機制
* 提供死鎖處理deadlock handling機制

## 記憶體管理
所有的instruction都在記憶體準備執行。
所有的數據在進程前後都在記憶體。
當最佳化 CPU utilization使用率 和 computer response給用戶時，記憶體管理什麼資訊在記憶體中。

Activites:
* 追蹤記憶體正在使用哪部分和被誰使用。
* 決定哪個進程和數據在記憶體中進出。
* Allocating and deallocating 分配記憶體空間。

## 儲存空間管理

抽象化的邏輯儲存單元: file
每個媒體均由儲存設備控制。(Varying properties include access speed, capacity, data transfer rate, access method (sequential or random))

### 文件系統管理
文件通常組織在dir中，存取控制決定誰能夠存取他。

OS activites:
* 創建和刪除文件。
* 原始操作文件和文件夾。
* 映射文件到secondary storage。
* 將文件備份到非揮發性的儲存設備上。

### Mass-Storage Management
使用磁碟，存大或者長周期的數據。
計算機運行的整體速度取決於磁碟子系統及其演算法。
OS activities:
* Free-space management。
* 儲存分配。
* 磁碟排程。
![image](https://hackmd.io/_uploads/r1wfzrM0T.png)

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

### I/O 子系統
OS要隱藏硬體的複雜性。
* 涵蓋I/O的記憶體管理:
    * buffering 傳輸數據時暫時儲存數據
    * caching 將部分資料儲存在更快的儲存中以提高效能
    * spooling 一項工作的輸出與其他工作的輸入重疊(Simultaneous Peripheral
Operations OnLine)
* 通用設備驅動程式介面General device-driver interface
* 特定硬體設備的驅動程式

## 安全與保護
* Protection 用於控制進程，或使用者對OS資源存取的任何機制。
* Security 防禦系統免受內部和外部攻擊。

系統分類用戶決定誰能做甚麼：
* 每個UserID包含name,number。與控制存取文件、進程有關。
* GroupID用於一致管理多個用戶。
* Privilege escalation權力提升。

## 電腦環境
* 傳統電腦: 
    * office env.
    * Home network.(NAT,FTTH,LAN)

* Client-Server Computing:
多個系統服務器回應用戶端的請求。

* P2P:
分散式系統，不區分客戶端和服務器。
每個節點都要加入p2p網路。

* Web-Based Computing:
有用於管理類似伺服器之間的網路流量的新設備類別load balancers

## 開源OS
以源代碼格式提供，而不僅僅是二進制閉源代碼。反對版權保護和數位版權管理 (DRM) 運動。

