跳轉到內容

A-level 計算機/CIE/高階理論/系統軟體

來自華夏公益教科書,開放的書籍,開放的世界
A-level 計算機
硬體 系統軟體 安全


規範連結

作業系統的目的

  • 瞭解作業系統如何最大限度地利用資源
  • 描述使用者介面如何將硬體的複雜性隱藏在使用者面前
  • 瞭解處理器管理:多道程式設計,包括
    • 多道程式設計的概念和程序
    • 程序狀態:執行、就緒和阻塞
    • 低階排程和高階排程
    • 中斷的概念
    • 作業系統核心如何充當中斷處理程式,以及中斷處理如何用於管理低階排程
  • 瞭解用於記憶體管理的分頁,包括
    • 分頁和虛擬記憶體的概念
    • 分頁的必要性
    • 如何替換頁面
    • 展示磁碟抖動是如何發生的

虛擬機器

  • 瞭解虛擬機器的概念
  • 舉例說明虛擬機器的作用
  • 瞭解虛擬機器的優點和侷限性

翻譯軟體

  • 瞭解不同型別的翻譯軟體的必要性
  • 瞭解直譯器如何在不生成翻譯版本的情況下執行程式
  • 瞭解程式編譯的各個階段:詞法分析、語法分析、程式碼生成和最佳化
  • 瞭解如何使用語法圖或巴克斯-諾爾正規化 (BNF) 符號表示語言的語法
  • 瞭解如何使用逆波蘭表示法 (RPN) 進行表示式的計算

作業系統的目的

[編輯 | 編輯原始碼]

作業系統資源

[編輯 | 編輯原始碼]

作業系統管理三大資源:CPU記憶體輸入/輸出 (I/O) 系統。I/O 的訪問時間明顯更長,因此作業系統必須平衡這些資源的使用,以確保 CPU 在等待 I/O 完成時不會處於閒置狀態。

使用者介面

[編輯 | 編輯原始碼]

使用者介面是使用者與計算機和作業系統的互動方式。作業系統主要有兩種型別:命令列介面 (CLI) 和圖形使用者介面 (GUI)。

A Command Line Interface
CLI
A Graphical User Interface
GUI
CLI 和 GUI 的示例

命令列介面

[編輯 | 編輯原始碼]

命令列介面是純文字介面,在 20 世紀 90 年代之前很常見。為了使用 CLI,使用者需要知道執行所需操作的命令,這會導致使用者體驗不夠直觀。

圖形使用者介面

[編輯 | 編輯原始碼]

圖形使用者介面是一種更直觀的介面。GUI 通常包含 Windows、Icons、Menus 和 Pointers 系統。GUI 通常被認為比 CLI 更直觀和使用者友好。

處理器管理

[編輯 | 編輯原始碼]

程序是指儲存在記憶體中當前正在執行或等待執行的程式。程序由程序控制塊 (PCB) 控制。

PCB 會跟蹤以下資訊

程序 ID
程序的唯一識別符號。
狀態
程序是否正在執行、就緒或阻塞。
許可權
程序可以訪問哪些資料、記憶體和系統功能。
暫存器狀態
程序執行時 CPU 中每個暫存器的值。
優先順序
程序在排程演算法中是否足夠重要以獲得優先順序。
記憶體資訊
分配給程序的記憶體量。
I/O 資訊
與程序關聯的 I/O 裝置列表。

執行緒

[編輯 | 編輯原始碼]

執行緒是指正在執行的程序的一部分。程序可以是單執行緒多執行緒。多執行緒程序通常更有效地執行,因為不同的執行緒可以獨立執行。

執行緒可以在使用者級核心級執行。使用者級執行緒在使用者級排程,因此核心不參與執行緒排程。核心級執行緒在核心級排程,這使得訪問特權系統功能更加容易。

排程是指按照最佳利用資源的順序,分配給每個程序的執行時間。排程演算法是用於確定哪些程序按什麼順序執行的演算法。

每個程序都處於三種狀態之一:就緒執行阻塞。一次只能有一個程序處於執行狀態。新程序始終從就緒狀態開始。

為了說明排程演算法,我們將使用多個程序執行的示例。第一個程序 A 需要 10 個週期,第二個程序 B 需要 15 個週期,第三個程序 C 需要 5 個週期。B 和 C 在 A 之後到達。


Clipboard

待辦事項
說明示例


先來先服務
[編輯 | 編輯原始碼]

先來先服務 (FCFS) 是一種排程演算法,程序按其到達就緒佇列的順序執行。

在本例中,這意味著先執行程序 A,然後執行程序 B,最後執行程序 C。

最短作業優先
[編輯 | 編輯原始碼]

最短作業優先 (SJF) 是一種排程演算法,它優先考慮佇列中最短的作業。

在示例中,程序 A 仍然會先執行,因為 B 和 C 尚未到達,但它將隨後執行程序 C,然後是程序 B。

輪詢 演算法以重複的順序為每個程序分配每個時間片。

在時間片長度為 5 個週期的示例中,時間片將依次分配給 A、B、C、A、B、B。

最高響應比優先
[編輯 | 編輯原始碼]

最高響應比優先 排程演算法中,作業系統選擇具有最高響應比 的程序。響應比定義為 ,其中W是程序等待的時間,S是程序執行所需的時間。

基於優先順序
[編輯 | 編輯原始碼]

基於優先順序 的排程演算法根據優先順序標準選擇下一個要執行的程序。如果一個程序更重要,它將被更早地執行。

中斷 是傳送給作業系統的訊號,指示它停止當前程序並專注於不同的任務。

中斷用於在搶佔式排程演算法中強制執行時間片。

記憶體管理

[編輯 | 編輯原始碼]

作業系統不僅負責確定如何分配程序的時間,還負責確定如何分配程序的記憶體。因此,作業系統需要某種方法來確定如何在程序之間分配記憶體。

動態分割槽

[編輯 | 編輯原始碼]
If a partition between two partitions is released, the free space is now discontinuous
外部碎片

動態分割槽 是將主記憶體分割成連續的塊,這些塊的大小恰好適合程序。這樣做的好處是可以避免內部碎片,但會導致外部碎片

分頁 是作業系統將記憶體劃分成大小相等的頁面。每個程序使用這些頁面中的特定數量。

分頁的優點是可以與虛擬記憶體一起使用,以增加在給定時間可用的記憶體量。為此,主記憶體被劃分成稱為頁面幀 的頁面大小的空間。頁面可以從磁碟載入到這些頁面幀中。當一個程序完成或未執行時,頁面可以載入回磁碟。

為了確保頁面有效地進出記憶體,需要使用頁面替換演算法。一個常見的頁面替換演算法是將最不常使用的頁面放回磁碟,以騰出空間用於新頁面。

分段 與分頁類似,但記憶體被分成大小不固定、而是可變的塊。每個段對映到主記憶體的一部分,類似於分頁系統中頁面如何對映到頁面幀的方式。

虛擬記憶體

[編輯 | 編輯原始碼]

虛擬記憶體 是使用分頁來擴充套件可用記憶體量的地方。在虛擬記憶體系統中,頁面根據需要進出主記憶體。頁面被賦予邏輯地址,這些地址使用頁面對映 對映到頁面幀。

虛擬記憶體的主要問題是它會導致磁碟抖動。磁碟抖動是指頁面太頻繁地進出磁碟,這可能會損壞磁碟。

虛擬機器

[編輯 | 編輯原始碼]
An example of a virtual machine
VirtualBox 是一個虛擬機器管理器的例子。

虛擬機器 是一種在不同作業系統中模擬作業系統或程序的方式。為此,主機 作業系統與虛擬機器互動,而使用者與主機作業系統互動。

虛擬機器可以是系統 虛擬機器或程序 虛擬機器。系統虛擬機器模擬整個作業系統,而程序虛擬機器模擬在不同作業系統中執行的程式。程序虛擬機器可以在系統虛擬機器中執行。

翻譯軟體

[編輯 | 編輯原始碼]

翻譯軟體的型別

[編輯 | 編輯原始碼]

編譯器

[編輯 | 編輯原始碼]

編譯器 是一個程式,它將程式原始碼轉換為可執行檔案,然後可以分發。

直譯器

[編輯 | 編輯原始碼]

直譯器 是一個程式,它逐行讀取原始碼並執行它,而不生成可執行檔案。

彙編器

[編輯 | 編輯原始碼]

彙編器 是一個程式,它將彙編程式碼轉換為可執行檔案。

翻譯過程

[編輯 | 編輯原始碼]

詞法分析

[編輯 | 編輯原始碼]

詞法分析是將原始碼分解為其詞素的過程。 詞素是在程式中出現的單詞或符號。

例如,x = y + 1包含五個詞素:x=y+1

詞法分析還檢查每個詞素是什麼型別的標記。 標記可以是以下型別

識別符號
一個變數,例如x
關鍵字
用於控制程式的單詞,例如ifwhile。 關鍵字不能用作識別符號。
運算子
作用於變數的符號,例如+=
字面量
程式中使用的字面量值,例如"Hello"1
分隔符
將一個語句與另一個語句分隔開來的符號,例如分號或換行符。
註釋
程式設計師用來闡明程式碼作用的註釋。 註釋被編譯器忽略。

詞法分析的最終目標是生成一個標記列表,這些標記可以在語法分析中解析。

例如,程式碼x = y + 1可以透過詞法分析轉換為[(identifier,x),(operator,=),(identifier,y),(operator,+),(literal,1)]。 然後,這個標記陣列由語法分析進行解析。

語法分析

[編輯 | 編輯原始碼]

語法分析是將詞法分析中得到的標記串轉換為解析樹的過程。 解析樹是一種資料結構,它根據優先順序規則儲存標記。

A parse tree, as would be produced from syntax analysis
這個解析樹來自於表示式(x+y)*x-z*y/(x+x)

優先順序規則,也稱為運算順序,決定表示式中哪些運算先應用。 例如,乘法在加法之前應用。

完整的運算順序通常類似於此

  1. 函式呼叫、陣列訪問、欄位訪問
  2. 一元運算子
  3. 乘法和除法
  4. 加法和減法
  5. 比較
  6. 按位與、異或,然後是或
  7. 邏輯與,然後是或
  8. 賦值

由於優先順序較低的運算子後應用,因此優先順序較高的運算子往往位於解析樹的底部。

Syntax diagrams which define digits, constants, variables, factors, terms, and expressions in a certain system
語法圖是表示語言語法的另一種方式。

巴科斯正規化 (BNF)

[span>編輯 | 編輯原始碼]

巴科斯正規化是一種表達程式語言語法的形式。 BNF 使用佔位符和備選方案系統來實現這一點。

每個佔位符被定義為包含幾個備選方案之一。 符號::=表示“被定義為”。 符號|表示“或”。

例如,以下 BNF 定義可以根據右側的語法圖構建。

<digit> ::= 0|1|2|3|4|5|6|7|8|9
<variable> ::= x|y|z
<constant> ::= <digit>|<constant><digit>
<factor> ::= <constant>|<variable>|(<expression>)
<term> ::= <factor>|<term>*<factor>
<expression> ::= <term>|<expression>+<term>

請注意,一些定義,例如<constant>的定義,是遞迴的。 這很有用,因為它允許我們建立可能無限長的常量。

使用 BNF 相對於語法圖的優勢在於,BNF 可以輸入到計算機中並被計算機解釋,而語法圖不能以相同的方式解釋。

最佳化

[編輯 | 編輯原始碼]

最佳化是使程式碼更高效的過程。 這意味著刪除不必要的步驟並改寫複雜的表示式。

例如,表示式z = x^2 + 2*x*y + y^2可以簡化為z = (x+y)^2

最佳化通常在編譯器的後端完成,因為它將程式轉換為彙編程式碼,然後轉換為可執行檔案。

最佳化有益,因為

  • 它減少了程式執行所需的時間。
  • 它減少了程式在記憶體中佔用的空間。

逆波蘭表示法 (RPN)

[編輯 | 編輯原始碼]

逆波蘭表示法是一種表示表示式的形式,使得使用堆疊更容易地對其進行求值。 它與更常見的中綴表示法形成對比。

在中綴表示法中,運算元放置在運算子的兩側,運算子夾在它們之間。(例如,2+2) 而在 RPN 中,運算元先寫,運算子放在最後。(例如,2 2 +)

使用解析樹將中綴表示法轉換為 RPN
[編輯 | 編輯原始碼]

要將表示式,例如(2+x)^(3-y),轉換為 RPN,可以製作一個解析樹。

表示式 (2+x)^(3-y) 的解析樹
使用堆疊評估 RPN
[編輯 | 編輯原始碼]
Evaluating the RPN expression 3 10 5 + * with a stack

使用堆疊評估 RPN 表示式時,我們需要遵循一些規則

  1. 當遇到變數或數字時,我們將它的值壓入堆疊。
  2. 當遇到運算子時,我們從堆疊中彈出頂部的值,然後將運算子應用於它們。
  3. 當評估完成時,堆疊中應該剩下一個專案,即答案。
華夏公益教科書