A-level 計算機/CIE/高階理論/系統軟體
|
規範連結 作業系統的目的
虛擬機器
翻譯軟體
|
作業系統管理三大資源:CPU、記憶體和輸入/輸出 (I/O) 系統。I/O 的訪問時間明顯更長,因此作業系統必須平衡這些資源的使用,以確保 CPU 在等待 I/O 完成時不會處於閒置狀態。
使用者介面是使用者與計算機和作業系統的互動方式。作業系統主要有兩種型別:命令列介面 (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 之後到達。
先來先服務 (FCFS) 是一種排程演算法,程序按其到達就緒佇列的順序執行。
在本例中,這意味著先執行程序 A,然後執行程序 B,最後執行程序 C。
最短作業優先 (SJF) 是一種排程演算法,它優先考慮佇列中最短的作業。
在示例中,程序 A 仍然會先執行,因為 B 和 C 尚未到達,但它將隨後執行程序 C,然後是程序 B。
輪詢 演算法以重複的順序為每個程序分配每個時間片。
在時間片長度為 5 個週期的示例中,時間片將依次分配給 A、B、C、A、B、B。
在最高響應比優先 排程演算法中,作業系統選擇具有最高響應比 的程序。響應比定義為 ,其中W是程序等待的時間,S是程序執行所需的時間。
基於優先順序 的排程演算法根據優先順序標準選擇下一個要執行的程序。如果一個程序更重要,它將被更早地執行。
中斷 是傳送給作業系統的訊號,指示它停止當前程序並專注於不同的任務。
中斷用於在搶佔式排程演算法中強制執行時間片。
作業系統不僅負責確定如何分配程序的時間,還負責確定如何分配程序的記憶體。因此,作業系統需要某種方法來確定如何在程序之間分配記憶體。

動態分割槽 是將主記憶體分割成連續的塊,這些塊的大小恰好適合程序。這樣做的好處是可以避免內部碎片,但會導致外部碎片。
分頁 是作業系統將記憶體劃分成大小相等的頁面。每個程序使用這些頁面中的特定數量。
分頁的優點是可以與虛擬記憶體一起使用,以增加在給定時間可用的記憶體量。為此,主記憶體被劃分成稱為頁面幀 的頁面大小的空間。頁面可以從磁碟載入到這些頁面幀中。當一個程序完成或未執行時,頁面可以載入回磁碟。
為了確保頁面有效地進出記憶體,需要使用頁面替換演算法。一個常見的頁面替換演算法是將最不常使用的頁面放回磁碟,以騰出空間用於新頁面。
分段 與分頁類似,但記憶體被分成大小不固定、而是可變的塊。每個段對映到主記憶體的一部分,類似於分頁系統中頁面如何對映到頁面幀的方式。
虛擬記憶體 是使用分頁來擴充套件可用記憶體量的地方。在虛擬記憶體系統中,頁面根據需要進出主記憶體。頁面被賦予邏輯地址,這些地址使用頁面對映 對映到頁面幀。
虛擬記憶體的主要問題是它會導致磁碟抖動。磁碟抖動是指頁面太頻繁地進出磁碟,這可能會損壞磁碟。

虛擬機器 是一種在不同作業系統中模擬作業系統或程序的方式。為此,主機 作業系統與虛擬機器互動,而使用者與主機作業系統互動。
虛擬機器可以是系統 虛擬機器或程序 虛擬機器。系統虛擬機器模擬整個作業系統,而程序虛擬機器模擬在不同作業系統中執行的程式。程序虛擬機器可以在系統虛擬機器中執行。
編譯器 是一個程式,它將程式原始碼轉換為可執行檔案,然後可以分發。
直譯器 是一個程式,它逐行讀取原始碼並執行它,而不生成可執行檔案。
彙編器 是一個程式,它將彙編程式碼轉換為可執行檔案。
詞法分析是將原始碼分解為其詞素的過程。 詞素是在程式中出現的單詞或符號。
例如,x = y + 1包含五個詞素:x、=、y、+和1。
詞法分析還檢查每個詞素是什麼型別的標記。 標記可以是以下型別
- 識別符號
- 一個變數,例如
x。 - 關鍵字
- 用於控制程式的單詞,例如
if或while。 關鍵字不能用作識別符號。 - 運算子
- 作用於變數的符號,例如
+和=。 - 字面量
- 程式中使用的字面量值,例如
"Hello"或1。 - 分隔符
- 將一個語句與另一個語句分隔開來的符號,例如分號或換行符。
- 註釋
- 程式設計師用來闡明程式碼作用的註釋。 註釋被編譯器忽略。
詞法分析的最終目標是生成一個標記列表,這些標記可以在語法分析中解析。
例如,程式碼x = y + 1可以透過詞法分析轉換為[(identifier,x),(operator,=),(identifier,y),(operator,+),(literal,1)]。 然後,這個標記陣列由語法分析進行解析。
語法分析是將詞法分析中得到的標記串轉換為解析樹的過程。 解析樹是一種資料結構,它根據優先順序規則儲存標記。

(x+y)*x-z*y/(x+x)優先順序規則,也稱為運算順序,決定表示式中哪些運算先應用。 例如,乘法在加法之前應用。
完整的運算順序通常類似於此
- 函式呼叫、陣列訪問、欄位訪問
- 一元運算子
- 乘法和除法
- 加法和減法
- 比較
- 按位與、異或,然後是或
- 邏輯與,然後是或
- 賦值
由於優先順序較低的運算子後應用,因此優先順序較高的運算子往往位於解析樹的底部。

巴科斯正規化是一種表達程式語言語法的形式。 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
最佳化通常在編譯器的後端完成,因為它將程式轉換為彙編程式碼,然後轉換為可執行檔案。
最佳化有益,因為
- 它減少了程式執行所需的時間。
- 它減少了程式在記憶體中佔用的空間。
逆波蘭表示法是一種表示表示式的形式,使得使用堆疊更容易地對其進行求值。 它與更常見的中綴表示法形成對比。
在中綴表示法中,運算元放置在運算子的兩側,運算子夾在它們之間。(例如,2+2) 而在 RPN 中,運算元先寫,運算子放在最後。(例如,2 2 +)
要將表示式,例如(2+x)^(3-y),轉換為 RPN,可以製作一個解析樹。


使用堆疊評估 RPN 表示式時,我們需要遵循一些規則
- 當遇到變數或數字時,我們將它的值壓入堆疊。
- 當遇到運算子時,我們從堆疊中彈出頂部的值,然後將運算子應用於它們。
- 當評估完成時,堆疊中應該剩下一個專案,即答案。
