從硬體層、核心層、Shell 層到應用程式層,UNIX 系統的層次架構確保了其穩定性、可移植性和安全性。核心層作為作業系統的核心,負責管理系統資源和硬體互動,提供諸如檔案系統、記憶體、程式和裝置管理等關鍵服務。Shell 層則作為使用者與系統的橋樑,解釋使用者命令並與核心通訊。應用程式層則提供了豐富的工具和應用,滿足使用者 diverse 的需求。UNIX 的安全機制包括使用者驗證、檔案許可權控制和檔案加密,保障系統和資料安全。豐富的命令列工具和指令碼語言提升了系統管理效率和自動化程度。層次化的檔案系統簡化了檔案管理,方便使用者快速定位和存取資源。UNIX 的多工和多使用者特性使其能夠同時處理多個使用者的請求和任務,提升系統資源利用率。UNIX 系統將持續強化雲端整合、安全防護和自動化管理,以適應不斷變化的技術環境。X Window 系統作為 UNIX 的圖形使用者介面,提供跨平台、模組化設計和網路透明性等特性,允許多個應用程式在同一顯示器上執行。視窗管理器則負責管理視窗的外觀和行為,提供諸如建立、銷毀、調整大小和焦點管理等功能,提升使用者經驗。不同的視窗管理器,如 GNOME、KDE 和 xfce,提供不同的功能和介面風格,滿足不同使用者的需求。此外,UNIX 系統支援使用者模式和核心模式兩種運作模式,使用者模式下應用程式只能存取自身資源,而核心模式下則可以存取所有系統資源。理解 UNIX 系統的程式管理,包括程式屬性、狀態和生命週期,對於系統管理和效能調校至關重要。

UNIX 系統架構及其特性

UNIX 系統自 1969 年問世以來,因其穩定性與靈活性而在各種硬體環境中廣受歡迎。無論是微處理器還是大型主機,UNIX 都能提供一致的執行環境。其架構設計使得作業系統能夠直接與硬體互動,為程式提供共同服務,並隔離硬體細節。

UNIX 系統架構

UNIX 系統的架構可以視為由多層組成,每一層都有其特定的功能。以下是 UNI 作業系統的主要層次:

UNIX 系統架構

  graph TD
    A[應用程式層] --> B[Shell 層]
    B --> C[核心層]
    C --> D[硬體層]
  • 硬體層:這是最內層,提供作業系統所需的基本服務,包括終端機、磁碟、記憶體及各種裝置控制器。
  • 核心層:這是作業系統的核心部分,直接與硬體互動並提供基本服務給使用者程式。核心負責檔案系統管理、記憶體管理、程式管理、儲存管理及裝置管理。
  • Shell 層:這是使用者最常接觸到的部分,作為命令直譯器,解釋使用者輸入的命令並傳遞給核心執行。不同的 Shell 提供不同的功能與便利性。
  • 應用程式層:這一層包含了各種工具與應用程式,如檔案管理工具(rm, cat, ls)、使用者管理工具(passwd, chmod)、程式管理工具(kill, ps)及 GUI 介面(X Window System)。

UNIX 的安全性

UNIX 提供多層次的安全保護:

  • 登入名稱與密碼:每個使用者都有獨立的登入名稱與密碼,這是最基本的安全措施。
  • 檔案許可權:每個檔案都有讀、寫、執行的許可權,分別針對擁有者、群組成員及其他使用者設定。這樣可以精確控制誰能夠讀取、修改或執行該檔案。
  • 檔案加密:敏感檔案可以加密,只有擁有者才能解密並讀取內容。

UNIX 工具與應用程式

UNIX 內建了豐富的工具與應用程式,這些工具可以分為必要工具與附加工具:

  • 必要工具:例如命令直譯器,這些工具是系統執行所必需的。
  • 附加工具:如電子郵件、排版工具(troff, nroff)、文書處理工具(awk, sed),這些工具提供額外的功能,提升使用者的工作效率。

Shell 的種類別

Shell 是 UNIX 最顯眼的一部分,不同種類別的 Shell 提供不同的功能:

  • Bourne Shell(sh):由 Steve Bourne 建立,最流行且隨每個 UNIX 系統捆綁提供。
  • C Shell(csh):由 Bill Joy 建立,允許命令別名和命令歷史功能,適合 UNIX 程式設計師使用。
  • Korn Shell(ksh):由 David Korn 建立,是 Bourne Shell 的超集合,功能更強大。
  • Bourne Again Shell(bash):來自 GNU 輕軟體基金會專案,根據 shell。

UNIX 的未來趨勢

隨著技術的進步,UNIX 的未來趨勢可能會朝向更高效率、更安全且更靈活的方向發展。以下幾點預測:

  1. 雲端整合:隨著雲端技術的普及,UNIX 可能會更多地整合雲端服務,提供更靈活的資源分配與管理。
  2. 安全強化:隨著網路攻擊手法的不斷演變,UNIX 的安全措施也將持續升級,確保系統的穩定性與安全性。
  3. 自動化與智慧化:人工智慧技術可能會進一步應用於 UNIX 的自動化管理中,提升維運效率。

視窗管理器與X Window系統

在X Window系統中,視窗管理器(Window manager)扮演著關鍵角色。X Window系統是一種圖形使用者介面(GUI)系統,允許多個應用程式在同一個顯示器上執行,並且提供了豐富的功能來管理這些應用程式。X Window系統的特點是其獨特且實用的功能,這些功能由X本身提供,因此對於所有的X視窗管理器和所有的UNIX/X11系統來說都是共通的。

X Window系統的特點

X Window系統具有一些獨特且實用的特點:

  • 跨平台性:X Window系統可以在多種作業系統上執行,包括UNIX、Linux和其他支援X11協定的系統。
  • 模組化設計:X Window系統是由多個模組組成的,這使得它可以靈活地組態和擴充套件。
  • 網路透明性:X Window系統支援網路透明性,這意味著應用程式可以在不同的機器上執行,而顯示和輸入仍然可以在本地機器上進行。

X Window系統的組成

X Window系統主要由以下幾個部分組成:

  • X伺服器:負責管理顯示器、鍵盤和滑鼠等輸入輸出裝置。
  • 客戶端:應用程式或程式,透過與X伺服器進行通訊來顯示圖形使用者介面。
  • 視窗管理器:負責管理視窗的外觀和行為,例如建立、移動、調整大小和關閉視窗。

視窗管理器的功能

視窗管理器提供了一系列功能來管理應用程式視窗,包括:

  • 建立和銷毀視窗:視窗管理器可以建立新的應用程式視窗,也可以銷毀不再需要的視窗。
  • 調整視窗大小和位置:使用者可以透過拖動或調整視窗邊框來改變視窗的大小和位置。
  • 焦點管理:視窗管理器會跟蹤哪個視窗當前具有焦點,以便將鍵盤和滑鼠事件傳遞給正確的應用程式。
  • 桌面背景和圖示管理:視窗管理器可以設定桌面背景影像和圖示,並允許使用者對這些圖示進行操作。

開源與專有

一些知名的開源視窗管理器包括GNOME、KDE、xfce等,這些管理器可以在任何安裝了X伺服器的系統上執行。而一些專有的視窗管理器則通常只能在特定型別的UNIX系統上執行。

UNIX作業系統概述

UNIX是一種多工、多使用者作業系統,最初設計用於研究和教育機構。UNIX以其穩定性、可移植性和高效性而聞名。以下是UNIX的一些關鍵特點:

UNIX的多工與多使用者能力

UNIX作業系統具有強大的多工與多使用者能力。這意味著多個使用者可以同時使用同一台電腦,每個使用者都可以執行多個程式。UNIX使用時分多工技術來實作這一點,即CPU會快速切換不同程式,使每個程式都有機會獲得執行時間。

UNIX命令與指令碼

UNIX提供了豐富的命令列工具,這些工具可以組合在一起來完成複雜的任務。例如,grep命令可以用來搜尋檔案中的文字、awk命令可以用來處理文字資料、sed命令則可以進行文字替換等。這些命令可以透過指令碼語言(如Bash)進行自動化處理。

UNIX檔案系統

UNIX使用了一種層次化結構來組織檔案和目錄。從根目錄(/)開始,所有檔案和目錄都組織成樹狀結構。這種結構使得檔案管理變得簡單且直觀。每個檔案或目錄都有一個唯一路徑名稱(pathname),這樣就可以方便地找到所需資源。

UNIX環境下的三種程式設計環境

1. 個人環境

雖然UNIX最初設計為多使用者環境下使用,但隨著Linux等免費版本UNIX系統出現以及Apple將UNIX作為其MacOS核心時分蘋果公司統治市場後至今更加普及化了 ,越來越多個人使用者也開始在個人電腦上安裝並使用UNIX系統。個人環境下使用者通常具有更高許可權以滿足其工作需求及重大事情發生時更容易挽救。

2. 時間分享環境

時間分享環境是指電腦資源被多個使用者分享使用並儲存時實際發生的一種方式。時間分享環境下每位使用者僅可獲得一定時間段去處理其任務並且在此期間內他們無法控制完整電腦資源。這種方式使得電腦資源得到更有效利用並減少了空閒時間造成不必要浪費及提高效率。

3. 伺服端/客戶端環境

伺服端/客戶端模式是分散式計算模型之一:將處理功能分割至伺服端與客戶端兩部分。其中:伺服端負責儲存及管理資料還有處理客戶端請求;而客戶端則負責接收來自使用者輸入資料進行處理並顯示結果。這種模式有助於增進電腦資源利用率及提升效率。

UNIX程式概述

在UNIX中「程式」指的是正在執行中的程式或作業單元(unit of work)。每當使用者執行一個新應用時就會產生一個新程式(process)。若有n位使用者同時執行相同應用則會有n個不同程式同時運作於該系統之中。

程式屬性

每一個進行都具有某些屬性(如表1.1所示),這些屬性會影響到該進行之執行情況:

屬性 說明
PID 進行識別號碼 (Process Identification Number)
PPID 父級程式ID (Parent Process ID)
UID 進行擁有者之使用者ID (User ID)
GID 進行擁有者所屬群組ID (Group ID)
EUID 有效之使用者ID (Effective User ID)
EGID 有效之群組ID (Effective Group ID)
優先順序 進行之優先順序

表1.1:程式屬性

程式狀態

一個程式在其生命週期內可能經歷多種狀態變化(如圖1.3所示)。以下是各程式狀態之說明:

UNIX程式狀態

```mermaid
graph TD
    A[開始] --> B[執行(使用者模式)]
    B --> C[執行(Kernel模式)]
    C --> D[記憶體中待命]
    D --> E[交換裝置中待命]
    D --> F[記憶體中睡眠]
    F --> G[交換裝置中睡眠]
    B --> H[被預留]
    A --> I[已建立]
    C --> J[僵死]

此圖示表示了UNIX中的各種程式狀態及其轉換關係:

| 程式狀態       | 說明                                                                 |
| -------------- | ---------------------------------------------------------------- |
| 執行(使用者模式)   | 在使用者模式下執行                                                |
| 執行(Kernel模式)   | 在Kernel模式下執行                                                |
| 記憶體中待命     | 準備好由Kernel進行排程                                      |
| 交換裝置中待命     | 準備好執行但需要交換到記憶體中                               |
| 記憶體中睡眠     | 無法執行並等待某事件發生                                       |
| 交換裝置中睡眠     | 被阻塞並在交換裝置中等待某事件發生                        |
| 被預留         | 與Kernel模式轉換回使用者模式時被預留                        |
| 已建立         | 新建立但尚未準備好執行                                         |
| 僵死           | 已經完成但還沒釋放資源                                          |

表1.2:程式狀態

## UNIX中的兩種運作模式

### 使用者模式與Kernel模式
在硬體視角看待時會發現有兩種不同運作模式:

- **使用者模式**(User Mode):當執行應用時通常以此模式進行即稱為「使用者模式」。在此情況下每個應用只能存取自己的指令碼及資料但不得存取Kernel指令碼或其他應用資料。
- **Kernel 模式**(Kernel Mode):當應用呼叫Kernel函式時即轉為此運作方式;若要執行任何要求Kernel干預或處理事項就必須轉換成此運作方式。「Kernel 模式」具有存取許可權能夠存取自己及其他所有相關指令碼。

#### UNIC中的典型情況
「典型」情況下以集合許多不同型別之各別運作程式構成整體「典型」UNIC套裝。其中:除了基本操作流程保障及維護那些掌管記憶體分配、專案帳務、以及規劃排序之核心軟體外還包含了一般各型別運作所需之相關專案及工具函式庫等支援工作。「典型」情況下所謂「典型」就是我們平常日常生活中的一般情況也就是說不包含異常或特別複雜事件發生時所需特別處理。

#### UNIC不適合即時處理
因為只有當要從核心模組轉回到一般原先樣貌或者說迴歸正常狀態之前才能被停止(preempted);若正值核心模組啟用狀態則無法被停止;因此說很難適用於即時處理事件。

## UNIX中的程式背景

「背景」即指目前該進行正確運作狀態之背景意涵:
將包括該背景中的地址空間區域 (address space)、堆積疊區域(stack space)、虛擬地址空間(virtual address space)、登記檔(set of registers)、以及相關帳務資料(accounting information)。

#### 若未正確指示「背景」
則可能導致目前所執行原始碼無法正確將目前所需要之引數資料傳遞過去造成問題;同樣地也可能造成一些影響直到整體結束時才發現問題出現;所以說要謹慎對待並注意清楚防止發生錯誤與問題出現。