发新话题
打印

Linux及Unix歷史及各種功能簡介

Linux及Unix歷史及各種功能簡介

作業系統扮演的角色
一部運作正常的電腦,不論是超級電腦還是桌上型 PC,大致上主要由三個部份所構成的,這三個部份分別是硬體,作業系統和應用程式。硬體,顧名思意,就是像 CPU,硬碟等這些構成電腦的電子元件,而應用程式則是使用者利用來完成特定目標的程式,例如 ms word是專門作文書處理的應用程式,netscape 是 brower。應用程式是一個集合,代表所有執行於作業系統以上的軟體,基本上我們每天開機使用的都是一個又一個的應用程式。那作業系統又是什麼?作業系統位於幕後,是位默默耕耘的功臣,雖然不像硬體看得見,或是像應用程式可以直接使用,它卻影響整部電腦的效率甚巨。它的兩個最重要的任務是提供應用程式介面及資源管理。

控制硬體是件極複雜的事,以讀寫軟碟為例,必須啟動馬達,移動磁頭等等,如果開發應用程式須要包含硬體的控制,那麼難度馬上增加好幾倍,而且不同廠牌的硬體又會有不同的操作方法,等於對每一家硬體廠商須要重寫一次。還好,應用程式控制硬體的方式大同小異,以軟碟為例,不外乎格式化(format),讀出資料,寫入資料等少數幾個動作。把這些硬體的常用動作,寫成類似函式庫的形式,提供給應用程式呼叫,就是作業系統核心的主要任務之一。這些由作業系統核心提供給應用程式用的類函式統稱為系統呼叫(system calls),從此以後,應用程式不必再擔心軟碟的運作,它只須呼叫 system call的 read 或 write ,它甚至不須要管它要寫入資料的是硬碟還是軟碟,使得應用程式的開發可以專心在它的特色功能上。

作業系統依特性可分為單工與多工,DOS是一個單工的作業系統,單工作業系統的預設是,一個應用程式執行完畢後才會執行另一個程式,因此它允許應用程式可以無限制地使用系統的資源,例如CPU 時間,記憶體和 IO等等,這個應用程式甚至可以佔據系統,不再將主導權交回作業系統。這類單工的作業系統只須提供上述的系統呼叫便已足夠。而多工的作業系統,如Linux ,它允許多個應用程式同時進行,共用 CPU時間和記憶體,因此只提供系統呼叫的服務是不夠的,還必須做資源的管理,讓這些同時在執行的應用程式不會互相干擾,例如一個程式不能寫入另一程式的記憶體,才能確保這些應用程式都能順利地完成任務。

提供應用程式介面及資源管理並不是完全獨立的,而是相輔相成,因為當程式透過系統呼叫去存取 IO 或要求記憶體時,系統呼叫會呼叫作業系統,作業系統將所有來自程式的要求整合後,在滿足它們的要求時,也作資源管理。

一般多工作業系統可分為下列次系統:行程管理(為了簡單化,此處將行程和程式視為同義),記憶體管理,檔案系統,IO 及網路系統。這些次系統分別管理整部電腦的一些重要資源,行程管理是管理CPU時間的分配,其它的次系統從名字,即可得知它們所管理的資源。

Unix 歷史簡介
何 謂 Unix ?
這 是 一 個 十 分 有 趣 的 問 題 , 如 果 問 題 何 謂 M$-DOS ? 何 謂 VMS 或 何 謂 NT ? 回 答 它 們都 是 OS 倒 也 不 會 有 人 有 異 議 。 不 過 對 於 Unix , 問 題 就 變 得 複 雜 了 。 不 是 說 Unix不 是 OS , 但 這 回 答 對 於 很 Unix 玩 家 來 說 總 顯 得 過 於 片 面 及 少 看 了 Unix 。

Unix 原 本 是 一 個 由 Bell Labs 發 展 出 來 的 多 用 戶 (Multi-User) 多 工(Multitasking) 的 OS 。 Unix 這 名 字 主 要 是 對 之 前 Bell Labs 曾 參 與 的 Multics計 劃 的 反 嘲 。 由 於 其 Source Code 簡 單 易 理 解 及 高 移 植 性 ( 首 個 使 用 高 階 程 式 語 言編 寫 成 的 OS) , 加 上 初 AT&T 對 Unix Source Code 版 權 的 態 度 蠻 開 放 ( 或 者 正確 來 說 應 是 AT&T 還 未 發 覺 Unix 是 這 麼 值 錢 的 ) 被 不 少 大 學 及 公 司 移 植 到 很 多不 同 的 平 台 。 現 在 上 至 超 級 電 腦 如 Cray , 下 至 個 人 電 腦 如 Macintosh 及 IBM PC 都有 Unix 。 所 以 比 較 正 確 來 說 , Unix 是 代 表 了 一 系 列 的 OS , 包 括 一 些 不 含 任 何 原身 Bell Labs Unix 程 式 碼 但 擬 似 Unix 的 OS ( 就 是 所 謂 的 Unix-clone , Linux 就是 當 中 的 俵 俵 者 ) 。

現 在 由 最 初 Bell Labs 發 展 出 Unix Source code 版 權 屬 於 SCO 而 其 名 字 UNIX ( 全大 階 ) 則 屬 於 The Open Group (TOG) 所 有 。 TOG 制 定 了 一 系 列 UNIX 標 準 , 當 任 何生 產 商 的 OS 要 符 合 其 標 準 才 可 用 UNIX 這 個 名 字 , 如 DEC 的 Digital UNIX 。

然 而 , 這 也 還 不 能 把 Unix 完 整 地 描 述 出 來 。 在 Larry Wall 及 Randal L.Schwartz. 所 著 的 『 Programming Perl 』 的 辭 解 (Glossary) 中 , 就 打 趣 地 說Unix 是 一 個 大 而 不 斷 演 進 的 語 言 , 當 中 包 含 了 大 量 互 相 不 協 調 的 語 法 。 講 Unix 的人 總 認 為 它 很 易 學 , 因 為 它 可 以 很 容 易 地 被 改 變 成 自 己 熟 識 的 語 法 。 這 解 析 有 點 反Unix 味 , 但 也 顯 示 出 對 於 很 多 人 來 說 , Unix 已 超 越 了 一 個 OS , 象 徵 了 一 套 操 作環 境 、 語 言 甚 至 哲 學 及 文 化 。 或 者 借 一 句 『 君 處 牆 外 , 焉 能 知 宮 庭 之 美 ? 』 , 只 有真 正 了 解 及 喜 愛 Unix 的 人 才 會 明 白 Unix 的 哲 學 及 文 化 。

怎 了 ? 過 玄 嗎 ? 太 過 含 糊 嗎 ? 其 實 就 以 擬 似 Unix 來 說 , 也 有 程 度 之 分 。 M$-DOS 在設 計 時 就 借 了 Unix 不 少 靈 感 , 如 樹 狀 結 構 的 檔 案 系 統 (Tree-structured FileSystem) 及 管 道 (pipe) 等 。 Windoze NT 本 身 也 支 援 POSIX.1 ( 一 套 定 義 了 Unix基 本 的 System Call 的 標 準 ) , 但 總 沒 有 人 會 認 同 它 們 是 Unix 的 一 種 。 個 人 認 為UNIX FAQ part6 中 對 Unix 的 定 義 不 錯 , 給 我 弄 得 糊 塗 的 朋 友 參 考 。

『 我 們 所 提 的 Unix 指 的 是 一 個 通 常 是 由 C 寫 成 的 作 業 系 統 , 它 有 階 層 式 的 檔 案 系統 , 統 合 了 檔 案 和 裝 置 (device) I/O , 其 系 統 函 式 呼 叫 ( system call ) 介 面 包含 了 如 fork() , pipe() 等 服 務 , 而 且 它 的 使 用 者 介 面 包 含 cc , troff , grep ,awk 之 類 的 工 具 及 某 一 種 shell 。 』

Multics 的 失 敗
要 談 Unix 的 歷 史 , 一 定 要 回 溯 到 1965-68 年 美 國 電 話 及 電 報 公 司 (AmericanTelephone and Telegraph Inc., AT&T) 、 通 用 電 器 公 司 (GeneralEletrics, G.E.) 及 麻 省 理 工 學 院 (Massachusetts Institute of Technology,MIT) 的 Multics (MULTiplexed Information and Computing Service) 計 劃 。

在 那 時 期 , 大 部 份 電 腦 都 是 採 用 批 次 處 理 (Batch Processing) 方 式 。 為 了 顯 示 多用 途 (general-purpose) 及 多 用 戶 (multiuser) 的 分 時 系 統 (timesharingsystem) 是 可 行 的 , MIT 以 在 試 驗 CTSS(Compatible Time-Sharing System) 當 中所 得 的 研 究 成 果 取 得 了 G.E 的 同 意 合 作 為 G.E. 的 大 型 電 腦 GE-635 開 發 一 套 全 新 的分 時 作 業 系 統 ─ ─ Multics 。

由 於 Multics 有 不 少 設 計 在 當 時 是 頗 新 穎 具 富 創 意 的 , 因 此 吸 引 了 不 少 研 究 機 構 的注 意 。 而 其 中 那 時 仍 和 AT&T 同 一 家 的 貝 爾 實 驗 室 (Bell Labraries,BellLabs) 更 在 六 十 年 代 末 曾 正 式 參 於 過 Multics 計 劃 , 那 時 剛 由 加 州 柏 克 萊 大 學(University of California at Berkeley, UCB) 去 到 Bell Labs 的 KenThompson 就 是 Multics 研 究 小 組 的 一 員 。

不 過 Multics 的 發 展 進 度 很 慢 , 原 本 預 算 兩 年 有 成 果 但 過 了 很 久 仍 沒 有 多 大 進 展 。到 了 1969 年 , Bell Labs 終 於 決 定 放 棄 , 退 出 了 Multics 計 劃 。 Bell Labs 的Dennis Ritchie ( K&R 的 R ) 曾 描 述 當 時 Bell Labs 由 管 理 層 到 研 究 員 都 認為 Multics 的 開 發 是 太 遲 及 太 貴 了 。

Multics 自 Bell Labs 退 出 後 , 仍 有 繼 續 發 展 。 Honeywell 在 1972 年 購 入 了 G.E.的 電 腦 部 門 後 更 把 Multics 進 出 商 業 市 場 , 但 始 終 不 算 太 成 功 。 在 Multics 比 較 流行 的 八 十 年 代 , 約 有 75 至 100 台 每 台 價 值 數 百 萬 美 元 的 大 型 電 腦 跑 Multics 。1977 年 , MIT 也 退 出 Multics 的 發 展 工 作 。 後 來 Honeywell 在 八 十 年 代 中 期 把 其電 腦 上 的 事 業 賣 給 Bull 後 , Multics 的 發 展 亦 終 於 在 1988 年 打 上 一 個 句 號 。
『 角 落 中 乏 人 問 津 的 PDP-7 』 ( "little-used PDP-7 in a corner" )
然 而 , Thompson 曾 在 Multics 計 劃 當 中 為 GE-635 寫 了 個 叫 做 「 太 空 旅 行 」(Space Travel) 的 遊 戲 程 式 。 這 個 程 式 模 擬 了 一 個 太 空 船 和 太 陽 系 的 環 鏡 。 BellLabs 放 棄 Multics 後 , Thompson 打 算 找 一 台 機 器 把 「 太 空 旅 行 」 移 植 (port) 過去 , 於 是 便 和 Ritchie 向 Bell Labs 提 議 買 一 台 電 腦 以 便 他 們 建 立 一 台 自 己 的 交 談式 、 多 用 戶 、 分 時 系 統 , 不 過 他 們 的 申 請 並 沒 有 被 接 納 。 最 後 , Thompson 在 一 角落 裡 發 現 了 一 台 很 少 人 用 的 PDP-7 (Programmed Data Processor) 。


PDP-7 是 迪 吉 多 (Digital Equipment Corporation, DEC) 在 1964 年 進 出 的 迷 你 電腦 (minicomputer) 。 這 台 約 和 Commodore 64 同 級 的 電 腦 ?作 業 系 統 對 於 Thompson來 說 十 分 簡 陋 , 於 是 Thompson 就 順 帶 以 他 在 Multics 計 劃 中 學 到 的 技 術 和 經 驗 ,為 這 台 過 時 的 電 腦 上 撰 寫 一 套 新 作 業 系 統 。 這 套 作 業 系 統 有 很 多 構 想 是 來 自Multics , 包 括 樹 狀 結 構 (tree-structured) 的 檔 案 系 統 、 用 戶 層 面 的 命 令 解 釋 器(Command Interpreter) , 簡 單 表 現 文 字 檔 及 對 週 邊 設 備 (Device) 的 綜 合 化 存 取等 。

最 初 , Thompson 並 不 是 在 PDP-7 上 撰 寫 他 的 新 系 統 , 而 是 先 在 一 台 GE-635 上 使 用GEMAP 組 譯 器 (Assembler) 的 巨 集 (Macros) 編 寫 程 式 , 再 經 由 一 後 置 處 理 器(postprocesser) 產 生 可 供 PDP-7 讀 取 的 紙 帶 (paper tape) 。 這 樣 一 來 一 回 , 由GE 到 PDP-7 , 直 到 一 個 雛 型 的 核 心 (Kernel) 、 一 個 編 輯 器 (Editor) 、 一 個 組 譯器 (Assembler) 、 一 個 簡 單 的 Shell ( 命 令 解 釋 器 , Command Interpreter ) 及 一些 公 用 程 式 如 rm 、 cat 、 及 cp 等 完 成 了 , 整 個 系 統 可 以 自 給 自 足 後 , 所 有 開 發 工作 才 在 PDP-7 上 繼 續 。

而 這 套 作 業 系 統 最 初 由 與 Thompson 共 事 的 Brian W. Kernighan ( K&R C 中 的K ) 命 名 為 Unics (UNiplexed Information and Computing System) , 和Multics 開 了 個 玩 笑 。 1971 年 間 改 成 Unix , 用 Uni 對 Multi , cs 對 x 。 提 起Unix 的 名 字 , 很 多 人 都 疑 惑 正 確 的 寫 法 是 全 大 楷 的 'UNIX' , 還 是 只 有 起 首 大 階 的'Unix' 。 Ritchie 就 解 釋 說 'UNIX' 言 個 寫 法 源 自 1974 年 CACM 的 文 件 "The UNIXTime-Sharing System" , 當 時 這 班 先 鋒 研 究 者 剛 剛 得 了 個 新 的 typesetter 及 開 發了 troff 。 一 大 班 人 正 對 small caps 字 款 著 了 迷 , 導 致 了 'UNIX' 的 產 生 。 仲 使Ritchie 在 往 多 次 以 Unix 並 不 是 任 何 句 子 的 縮 寫 為 理 由 想 在 幾 份 Bell Labs 的 文件 用 回 'Unix' , 最 後 都 失 敗 。 而 後 來 UNIX 的 註 冊 商 標 也 是 以 全 大 寫 為 準 。

First Edition Unix
到 了 1970 年 , 這 班 Unix 的 研 究 者 獲 得 配 合 一 台 新 的 十 六 位 元 電 腦 DEC PDP-11/20, 條 件 就 是 要 為 Unix 加 入 較 佳 的 文 件 處 理 工 具 。 不 過 台 電 腦 迅 速 地 送 到 研 究 者 的桌 上 後 , 它 的 磁 碟 足 足 慢 了 三 個 月 才 運 到 。 就 在 這 機 在 碟 未 到 的 等 候 時 間 中 ,Thompson 用 PDP-11 的 組 合 語 言 (Assembly Langauge) 重 寫 了 整 個 Unix 核 心 及 基本 的 命 令 。 當 時 那 台 PDP-11/20 只 有 24KB 記 憶 體 (Memory) , 這 個 最 早 期 的PDP-11 版 Unix 就 佔 用 了 12KB , 其 餘 的 記 憶 就 被 拿 來 跑 用 戶 的 程 式 和 作 RAM Disk。 僅 有 500KB 的 磁 碟 空 間 以 及 在 毫 無 記 憶 保 護 (Memory Protection) 的 情 況 下 , 支持 三 個 用 戶 同 時 作 編 輯 和 格 式 化 文 件 和 那 群 先 鋒 開 發 者 繼 續 Unix 的 發 展 工 作 。

1971 年 11 月 , 這 班 懶 惰 的 開 發 者 終 於 把 第 一 版 Unix 的 說 明 書 (Manual) 定 稿 。 往後 每 一 由 Bell Labs 發 展 出 來 Unix 的 版 本 都 以 同 時 出 版 的 說 明 文 件 的 版 號 為 準 。如 所 謂 Unix Version 1 (V1) 其 實 就 是 指 第 一 版 (First Edition) Unix 說 明 書 所載 的 Unix 。 所 以 在 Bell Labs 內 部 一 直 都 稱 呼 nth Edition Unix , 不 是 外 間 的Unix Version n 。 V1 已 有 了 基 本 的 檔 案 系 統 、 fork() 、 roff (troff 的 前 身 )及 ed 等 , 並 被 用 作 處 理 專 利 文 件 的 工 具 。 而 pipe() 就 在 第 二 版 (Version 2) 中 初次 出 現 。
C 的 誕 生
在 開 發 V1 時 , 由 於 PDP-7 和 PDP-11 的 組 合 語 言 差 異 很 大 , 令 移 植 的 工 作 非 常 因 難。 Thompson 這 時 突 發 奇 想 , 覺 得 如 用 高 階 語 言 (High-level Langauge) 來 撰 寫Unix , 移 植 和 維 護 的 工 作 都 會 變 得 簡 單 得 多 。 對 於 C 語 言 極 度 盛 行 的 今 日 , 這 想法 可 能 不 怎 麼 。 但 在 當 時 絕 對 是 十 分 瘋 狂 , 執 行 效 率 要 高 且 記 憶 體 使 用 要 省 的 系 統程 式 (System Software) 必 需 要 用 組 合 語 言 來 撰 寫 的 觀 念 早 已 根 植 在 當 時 每 一 個 電腦 人 心 中 。

Thompson 首 先 嘗 試 使 用 FORTRAN 來 寫 , 不 過 沒 有 成 功 。 後 來 他 找 來 一 個 叫 BCPL 的語 言 , 在 使 用 期 間 整 理 了 BCPL 的 若 干 功 能 , 成 了 另 一 個 新 的 程 式 語 言 B 。 V1 中 就有 少 量 公 用 程 式 是 用 B 來 撰 寫 。 後 來 Ritchie 加 入 了 Unix 的 開 發 行 列 , 很 快 發 現了 B 語 言 有 若 干 缺 點 , 如 資 料 型 態 (Data Type) 的 缺 乏 等 。 Ritchie 著 手 改 良 B 語言 , 誕 生 了 著 名 的 C 語 言 。

1973 年 初 , C 語 言 的 重 要 特 性 大 都 完 成 了 。 在 各 方 條 件 都 足 夠 的 情 況 下 ,Thompson 、 Ritchie 及 他 們 的 同 伴 在 同 年 的 夏 天 把 Unix 的 核 心 用 C 重 寫 。 這 也 是所 謂 的 第 四 版 (Version 4, V4) , 有 九 成 多 的 程 式 碼 是 用 C 來 寫 。 在 整 個 作 業 系 統史 上 , 這 是 一 件 很 重 要 的 事 , 也 是 Unix 的 轉 折 點 。 這 意 味 著 Unix 可 以 很 容 易 被 修改 , 也 使 其 成 為 第 一 個 在 源 程 式 層 面 上 可 移 值 (source-portable) 的 作 業 系 統 , 可以 在 很 短 時 間 移 值 (port) 另 一 台 的 電 腦 中 。

TOP

Linux 歷史簡介
  


由於版權問題,Unix 的源碼不再適用於教學,1987 年 Andrew Tanenbaum 遂寫了 MINIX 作為教學的工具,MINIX的意思為mini-Unix,它是一個簡化的作業系統,適合入門者學習作業系統,因為簡單,剛開始時獲得眾人的青睞,但好景不長,原因是它過於簡單反而不切實用。

1991 年,Linus Torvalds 開始使用 MINIX,他對 MINIX 提供的功能不滿意,自行發展 Linux,他把Linux 的原始碼放在 Internet 上,允許人們自由使用 (under GNU Public License)。Linux是第一個完全免費的 Unix,很快地,許多人開始修改及加強 Linux,如今,Linux 除了可以在原先設計的 Intelx86(x>=3) 上執行外,它也被移植到 Alpha, Sun Sparc, Motorola 68K, MIPS, PowerPC等等的平台上。

由於 Linux 提供和 Unix 類似的介面,因此,在資源的抽象化上及資源分享的型式上就必須和 Unix 相同,它和其它Unix不同的地方在於實作這些介面時所使用的資料結構及演算法。

Linux是一個多工的作業系統,許多程式可以一次讀到記憶體內,作業系統執行某個程式一陣時間後,就會切換去執行另一個程式。所以記憶體是被空間分割,分成數個區塊,每個區塊稱為 memory partition,內含一個隨時可以執行的程式。CPU是被時間分割,每段時間執行一個在記憶區塊內的程式,時間到了便切換到另支一程式。在 Intel x86 平台上,CPU 每秒約切換100次,在Alpha 平台則切換約 1024 次,這些切換次數可依需要而修改,大致而言,降低切換次數會使諸如鍵盤,mouse的反應變慢,但應用程式執行的效率會提高,相反地,如果提高切換次數則會使程式的執行變慢,因為更多的 CPU 時間被用來切換程式。

Linux 核心和傳統的 Unix 一樣,是屬於集成式的作業系統核心 (monolithic kernel),和目前流行的微核心(microkernel)不同。它們將行程管理,記憶體管理和檔案系統包在一起,成為一個單一的可執行檔,而週邊硬體裝置管理則另外分開,成為一組驅動程式,每一個驅動程式的目的是控制某一類型的硬體裝置,例如控制軟碟機。這種設計是為了降低核心更動的頻率,不必為了新硬體裝置更改核心,而且驅動程式也比較好寫。但是Linux 核心的進步非常迅速,這種設計反而不利於核心的實驗更新,為了克服這個缺點,Linux 提出模組 (module)機制,這是種軟體容器,它和核心的介面要比傳統 Unix 的驅動程式來的有彈性,可以用來提供新功能給核心,當然也適用於寫驅動程式。
      * Linux 的優點:

      那幹嘛要使用 Linux 做為我們的主機系統呢?這是因為 Linux 有底下這些優點:

          o 穩定的系統:Linux 本來就是建立在 Unix 上面發展出來的作業系統,因此,Linux 具有與 Unix系統相似的的程式介面跟操作方式,當然也繼承了 Unix 穩定並且有效率的特點。常聽到安裝 Linux的主機連續運做一年以上而不曾當機、不必關機是稀鬆平常的事;

          o 免費或少許費用:由於 Linux 是基於 GPL 的基礎下的產物,因此任何人皆可以自由取得 Linux,至於一些『安裝套件』的發行者,他們發行的安裝光碟也僅需要些許費用即可獲得!不同於 Unix需要負擔龐大的版權費用,當然也不同於微軟需要一而再、再而三的更新你的系統,並且繳納大量費用囉!

          o 安全性、漏洞的修補:如果你常玩網路的話,那麼你最常聽到的應該是『沒有絕對安全的主機』!沒錯!不過 Linux由於支援者日眾,有相當多的熱心團體、個人參與其中的開發,因此可以隨時獲得最新的安全資訊,並給予隨時的更新,亦即是具有相對的較安全!

          o 多工、多使用者:與 Windows 系統不同的, Linux主機上可以同時允許多人上線來工作,並且資源的分配較為公平,比起 Windows 的單人假多工系統要穩定的多囉! 這個多人多工可是Unix-Like 上面相當好的一個功能,怎麼說呢?你可以在一部 Linux主機上面規劃出不同等級的使用者,而且每個使用者登入系統時的工作環境都可以不相同,此外,還可以允許不同的使用者在同一個時間登入主機,以同時使用主機的資源。

          o 使用者與群組的規劃:在 Linux的機器中,檔案的屬性可以分為『可讀、可寫、可執行』等參數來定義一個檔案的適用性,此外,這些屬性還可以分為三個種類,分別是『檔案擁有者、檔案所屬群組、其他非擁有者與群組者』。這對於專案計畫或者其他計畫開發者具有相當良好的系統保密性。

          o 相對比較不耗資源的系統:Linux 只要一部 p-100 以上等級的電腦就可以安裝並且使用愉快囉!還不需要到P-III等級的電腦呢!不過,如果你要架設的是屬於大型的主機(服務上百人以上的主機系統),那麼就需要比較好一點的機器了。不過,目前市面上任何一款個人電腦均可以達到這一個要求囉!

    * Linux 的缺點:

      反正 Linux 好處說不完啦!不過雖然 Linux具有這樣多的好處,但是他先天上有一個足以致命的地方,使他的普及率受到很大的限制,就是 Linux 需要使用 『指令列』的終端機模式進行系統的管理!雖然近年來有很多的圖形介面開發使用在 Linux 上面,但畢竟要熟悉 Linux還是以指令列來使用是比較好的,因此要接受 Linux的玩家必須比較要能熟悉對電腦下指令的行為,而不是用滑鼠點一點 icon就行了!不過如果只是要架一些簡單的小站呢?是不是大家都可以做的到?沒錯!其實只要對 Linux 做一些小小的設定就可以架站了!

          o 沒有特定的支援廠商:因為所有的套件都是免費的,自然也就沒有專人會到府服務啦!不過,這點倒是不需要擔心,因為拜網路風行之賜,你要問的問題幾乎在網路上都可以找到答案喔!看你有沒有用心去找就是了!

          o 圖形介面作的還不夠好:其實是因為 VBird 不玩 X-window啦,所以也不知道目前發展到怎樣的一個地步了!基本上 VBird 常說的一句話就是:『Windows 上面有的咚咚 Linux上面也一定可以找的到!,但 Linux 有的服務 Windows 可不見得有喔!』只不過,您可得自己找到自己想要的介面囉!

檔案系統
Linux 支援非常多檔案系統格式,包含 DOS 的 FAT 等數十種不同的檔案系統,但是對應用程式而言,看到卻是統一的介面,不論它讀寫的是 DOS 的 FAT 或是 ext2fs,讀寫都是呼叫相同的函式,它甚至不知道正在讀寫的是那一種檔案系統。

這主要歸功於 Linux 的檔案系統分成上下兩個部份,上面的稱為虛擬檔案系統(virtual filesystem),它提供給應用程式一個統一的介面,這個介面是個樹狀結構,從根目錄/開始,所有的檔案都包含在它層層的子目錄下,這些檔案不只包含一般存放在硬碟裡的正常檔案,還有一些特別的檔案,例如在 /dev/ 下的檔案不是正常檔案,而是用來和驅動程式溝通的虛擬檔案,你在/dev/mouse 這個檔案中寫入 1,這個 1 不會進到硬碟裡,而是傳給 mouse 的驅動程式。在目錄 /proc/下的也全是虛擬檔案,目的是用來和作業系統核心溝通。把驅動程式模擬成一般的正常檔案是 Unix 的特色,事實上讀寫 modem和讀寫檔案在較高層次上來說也很類似,而且這種統一的作法使作業系統看起來更一致,容易管理。

如上所述,虛擬檔案系統包含一般放在硬碟或光碟之類儲存媒體裡的正常檔案,網路上別部機器提供的網路檔案系統,如 NFS,代表驅動程式的特殊檔案/dev/*,及其它一些特殊用途的檔案,如/proc/*。這些全放在根目錄下的目錄結構裡,由虛擬檔案系統控制,大家可以猜的出來,虛擬檔案系統的核心只是個切換器(switch),當我們要讀某個檔案時,例如讀 /dev/mouse,虛擬檔案系統會先解析路徑 /dev/mouse,當它找到 mouse這個項目時,它知道它是周邊裝置的特殊檔案,就把這個讀的命令丟給相對應的驅動程式。

Linux檔案系統的上層是虛擬檔案系統,下層便是個別檔案系統的實作,每個檔案系統都提供給虛擬檔案系統一個固定的資料結構,資料結構包括這個檔案系統的參數,如一個 sector 有幾個 bytes,另外還包含一組標準呼叫函式,如 read 和 write。當虛擬檔案系統收到一個 read命令時,它先找出對應的檔案系統,再呼叫這個檔案系統提供的 read 函式,把相關的參數傳過去。

檔案系統可以隨時掛上或卸載,前提是核心支援這個系統,當作業系統啟動時會先掛上根檔案系統 (root),通常的 ext2fs 格式,之後會再掛上 /etc/fstab 中指定的其系統。

記憶體管理
記憶體管理的主要任務有以下幾點:

提供記憶區塊以滿足程式的要求。
保護程式的記憶區塊,確保不受其它程式不當的侵犯。
提供一個機制,讓合作的程式可以共享記憶區塊。
Linux 記憶體管理的基礎是要求分頁的虛擬記憶體模型 (demand paged virtual memory model),讓我們就虛擬記憶體,分頁和要求分頁一一作說明:
虛擬記憶體是說程式直接存取的記憶體不再是實體記憶體的位址,以 x86 為例,在DOS下的程式,它可以自由地在某一記憶體位址中填入任何一個值,例如在 1000:0000 這個byte上填入ff。但是在多工的系統中這麼做很容易引起衝突,例如當同時有兩個程式同要在同一個位址上填值時,它們不當會改寫對方的資料,。但是程式若以合法的方式要求在某一個地址作存取時,作業系統應該要儘量滿足這種要求,解決的方法就是讓程式看到的位址不再是實體記憶體的位址,程式可以要求存取任一個可能的記憶位址(稱為邏輯位址),但是當它把這個要求送出來時,作業系統和硬體的配合,會把這個位址轉換成作業系統之前為它保留的記憶區塊裡(實體位址),所以對不同的程式,儘管存取同一邏輯記憶位址,作業系統會把它們指到不同的實體記憶位址上,因此不再有衝突。這整過程對程式而言都是透明的,它們不知道位址被改過。這種轉換的機置會讓系統的效率降低,但是卻是多工系統不可或缺的。

分頁是以頁為記憶體管理的單位,目前大多數 CPU 都支援這種機制,在 x86 平台上,一頁是 4K bytes,在 alpha 平台上是 8Kbytes,因此在 x86 平台上,64MB 的記憶體相當於16000 頁。分頁機制是讓記憶體的配置以頁為單位,例如程式向作業系統要 5Kbytes 的記憶空間時,作業系統就會給它兩頁的記憶體(因為一頁太少了,不夠用)。很明顯地,這種機制非常浪費(在上面的例子中,有 3Kbytes 的記憶體浪費了),因此 Linux 2.2版後提供另一種稱為 SLAB 的機制,它為許多小量的記憶體或常用的資料結構分別成立一些cache,因此當程式要求這些記憶體時,作業系統就給它合適的記憶體,不必再給一整頁的記憶區塊,因而提高記憶體的使用效率。分頁機制亦是常見實作虛擬記憶體的方式,它讓邏輯位址和實體位址的轉換以頁為單位,當程式向作業系統要求記憶體,作業系統在給予某頁時,同時也把邏輯位址和實體位址的轉換建立起來。

為再加提高效率,程式向作業系統要求記憶時,作業系統會先向程式回應 OK,但並不馬上配置記憶體,直到程式真的要存取這塊記憶體了,作業系統才會配置這塊記憶體。

現在我們可以回應本節開頭提到的記憶體管理的主要任務:

記憶區塊是以頁為單位提供給程式使用。
記憶體的保護也是以頁為單位,例如頁甲是屬於程式甲,程式乙無權存取。
記憶體的共享亦是以頁為單位。
  
Linux 的記憶體管理中還有一個很重要的機制,稱為記憶置換(swapper),這是當實體記憶體不足時,例如原本記憶就不多或是正在執行一個大程式,如果又有程式要求配置記憶體,作業系統會把不常存取的記憶頁的內容先存到硬碟裡,把這頁實體記憶體拿來滿足程式的要求。之後若有程式要存取被置換到硬碟的那一頁記憶體內容,作業系統就會把它讀回來,但是放在那裡?是否須要放到原來的實體位址上,不用,那裡有空位就放那裡,只要把邏輯位址和實體位址的對應改一下即可,這裡可以看出虛擬記憶體的好處,若是實體記憶體仍然吃緊,找不出空位,那只好找另一個不常用的記憶頁,請它暫時到硬碟去,位置空出來給這筆急用的資料了。

TOP

行程管理
何謂行程?就是執行中的程式。

在介紹行程管理之前,我們先提一下 CPU 的執行模式,基本上,許多 CPU 除了執行指令外,還會訂定數種優先等級,當 CPU在不同的優先等級下執行相同的指令會得到不同的結果。 Intel x86 的保護模式定了四種等級,但是 Linux 只用到其中兩種,核心模式(kernel mode) 及使用者模式 (usermode)。核心模式有較大的權限,可以任意存取週邊設備,通常作業系統核心都是以核心模式在執行,而使用者模式權限小,限制多,應用程式均以使用者模式執行。

當應用程式正常執行時,有下列幾個狀況會切換到核心模式(事實上就是 CPU從正在執行的程式切換到作業系統核心碼),一是程式主動呼叫系統服務函式,例如程式想讀取硬碟裡的檔案,或是程式向系統要求多一點記憶體。二是用硬體要求CPU 反應,例如你在鍵盤敲入一個字母,負責鍵盤的晶片要求處理這一筆資料,另一例是電腦內的時鐘每一固定時間會通知 CPU,告訴 CPU說時間又過了一個 tick(在x86上,約0.01秒),CPU就會切換到核心模式,執行與此事件相對應的核心碼,這時有許多要做,其中一項是計算目前這個程式己經執多久了,是否該換手執行讓下一個程式了,如果時間未到,核心事情處理完後會讓原先的程式繼續進行。幾乎每一種可能發生的事件,核心都早已備好對應的程式碼。三是程式作了不該作的事,例如讀取不屬於它的記憶體,或直接存取週邊設備,這時 CPU也會轉到核心模式,讓作業系統核心決定如何處置這個有問題的程式,最普遍的處置就是停止這個程式的執行,把錯誤回報到終端機。

瞭解核心模式和使用者模式後,我們可以介紹行程管理了,之前我們並沒有對行程和程式作區分,在這一節必須作區分。例如執行一個從一數到十的程式,每秒數一下,須十秒的時間程式才能執行完畢,我在十一點時執行這個程式,在十一點過五秒又再執行一次這個程式(幸好 Linux是多工作系統),當我執行這個程式時,作業系統會把對應的檔案讀進記憶體,作一些設定,然後讓 CPU去執行它,第二次執行時作業系統會做同樣的事,但是當然會放在不同位址的記憶區塊(作業系統不會管這兩個程式是否同一個)。所以到了十一點過八秒時,和這個例子相關的有三個東西,第一是仍然躺在硬碟裡的程式碼,第二是數到八,在記憶中未執行完畢的那段與程式對應記憶區塊,第三是數到三的另一記憶區塊。為了作區分,躺在硬碟裡仍然稱為程式,在記憶體中執行的每一個體稱為行程,這裡有兩個行程,每個行程都是獨立的個體,有不同的變數值,可能也會有不同的狀態,例如第一個行程要到記憶體,第二個行程要不到等等。

作業系統核心中的行程管理主要目的就是管理這些正在執行或等待執行的行程們(躺在硬碟裡的程式歸檔案系統管),行程管理的核心是排程器,目的是為行程們安排 CPU 的時間。在 Linux 中行程也分等級,共三個等級 SCHED_FIFO, SCHED_RR 和SCHED_OTHER。前兩種等級有優先權,設計給即時應用軟體使用的,當沒有前兩個等級的行程時,第三等級的行程才有機會執行,這個等級的行程是以類似輪流的方式執行,事實上它們也是互相比等級,等級最高的會選為下一個執行的對象,但是高等級執行完後等級會重算,通常等級會降下來,所以會輪到當初次高等級的行程執行。等級的算法有一個簡單的公式,在函式 goodness() 中,它位於/usr/src/Linux/kernel/sched.c 中,改這個公式是 hacker 喜歡的把戲,可以試試看系統如何變化。

Linux是而UNIX為藍本而發展出的UNIX類操作系統,其檔案系統跟UNIX非常相似.
Linux檔案系統採用一個反樹枝狀的檔案系統目錄層,.以"/"為整個檔案系統目錄頂層,在Linux上這個"/"統稱為root(根目錄).而對下延
伸就是整個系統的檔案目錄架構,每一個檔案目錄都根據其特性分門別類.
為達至各LINUX版本的檔案系統標準化,各LINUX版本都會根據
(Filesystem Hierarchy Standard –FHS)標準.令其版本跟別的發行版本的系統程式及儲存位置達到一至,對於系統管理及程式開發更為容易,令整個LINUX系統相容性大大提高.

最新的FHS版本為2.3,如希望獲得HFS資料可到以下網站

http://www.pathname.com/fhs/

認識檔案系統目錄層

目錄  簡介  
bin 一般指令執行檔案 儲存一般性使用指令,如cp,df,mv等工具,供所有使用者使用
boot 系統啟動檔案和核心影像 儲存linux開機核心及其開機時所需影像檔  
dev 硬件裝置目錄 儲存裝置目錄位置
etc 系統設定檔案 儲存設定檔案,如網絡設定,各式服務器設定,使用者資料等等,這裡不會放置任 何可執行檔案
lib 系統分享程式庫檔案及核心模組 提供分享程式庫檔案及核心模組,給系統程式及編軟件使用
media 移動式裝置掛載點 這個是FHS2.3新增的一個掛載點,設定為FLOOY,CDROM,USB等移動式裝置預設 掛載點
mnt 預設臨時掛載點 在FHS2.3前,mnt是系統的預設外掛裝置及系統掛載點,FLOOY,CDROM,USB及硬 碟分區都會掛載到mnt,現在到mnt定義為臨時掛載位置
opt 一些外加程式的儲存位置 給予外加程式的安裝目錄,定義安裝在/opt/套件名稱目錄之內
sbin 系統執行檔案 系統執行檔案,儲存系統管理相關程式,只有管理員才能執行
srv 服務儲存 另一個FHS2.3新增目錄,定義為提供一些服務儲存位置,如FTP,WWW,RSYNC等.較適合一些大型網站,儲存大量的服務檔案.
tmp 程式臨時檔案 程式暫存檔位置
usr 第二層檔案系統,通常提供非核心所提供的程式儲存位置及執行檔案位置 第二個主目錄,目錄下同樣提供一個完整檔案系統目錄結構給予外加程式使用.如bin,sbin,lib等
var 經常流動檔案儲存位置 var儲存經常流動檔案,如電郵,資料庫,網站及系統日誌等。
root 管理員的家目錄  
home 使用者家目錄

TOP

发新话题