Linux系統(tǒng)概述
本章概述Linux系統(tǒng)。首先描述操作系統(tǒng)提供的主要服務(wù)。然后說明實(shí)現(xiàn)這些服務(wù)的程序 with a considerable lack of detail。本章的目的是理解系統(tǒng)整體,以后再詳細(xì)說明每個部分。
一個操作系統(tǒng)的不同部分
一個UNIX操作系統(tǒng)包括一個核心程序kernel和一些系統(tǒng)程序system programs。還有一些做某件事情的應(yīng)用程序application programs。核心是操作系統(tǒng)的心臟 。它跟蹤磁盤上的文件,啟動程序并運(yùn)行它們,給不同的進(jìn)程分配內(nèi)存和其他資源,從網(wǎng)絡(luò)接收和向網(wǎng)絡(luò)發(fā)送包,等等。核心很少自己干活,但它提供工具,用這些工具可以建立所有服務(wù)。它還阻止任何人直接存取硬件,強(qiáng)制每個人使用它提供的工具。這樣,核心給每個用戶與其他用戶之間提供保護(hù)。核心提供的工具通過系統(tǒng)調(diào)用system calls使用;要了解關(guān)于這的更多的信息,看手冊頁第二節(jié)。
系統(tǒng)程序使用核心提供的工具實(shí)現(xiàn)操作系統(tǒng)要求的不同的服務(wù)。系統(tǒng)程序和所有其他程序運(yùn)行在核心之上,叫做用戶模式user mode。系統(tǒng)程序和應(yīng)用程序的區(qū)別是目的:應(yīng)用程序意圖完成一些有用的工作(或游戲),而系統(tǒng)程序則為系統(tǒng)工作而需要。字處理器是應(yīng)用;telnet 是系統(tǒng)程序。區(qū)別經(jīng)常有些模糊,也許,只是為了強(qiáng)制分類。
雖然編程語言不必是操作系統(tǒng)的一部分,操作系統(tǒng)也可以包括編譯器及其相關(guān)的庫(Linux下是gcc和C庫)。文檔、有時甚至游戲,可以是操作系統(tǒng)的一部分。傳統(tǒng)上,操作系統(tǒng)被定義為安裝磁帶或磁盤上的內(nèi)容;對于Linux就更不清楚,因?yàn)樗植荚谌澜绲腇TP站點(diǎn)上。
核心的重要部件
Linux核心包括幾個重要部分:進(jìn)程管理、存儲器管理、硬件設(shè)備驅(qū)動、文件系統(tǒng)驅(qū)動、網(wǎng)絡(luò)管理和其他不同的部分。圖2.1顯示了它們的一些。
可能核心最重要的部分(沒有它們什么也不能工作)是存儲器管理和進(jìn)程管理。存儲器管理負(fù)責(zé)分配進(jìn)程的存儲器區(qū)域和對換空間區(qū)域、核心的部件及buffer cache。進(jìn)程管理產(chǎn)生進(jìn)程,用切換處理器上的活動進(jìn)程來實(shí)現(xiàn)多任務(wù)。
在最低級,核心對它支持的每種硬件包含一個硬件設(shè)備驅(qū)動。因?yàn)槭澜缟洗嬖诖罅坎煌挠布?,硬件設(shè)備驅(qū)動的數(shù)量極大。有許多不同的硬件,因此軟件控制方法不同。但其相似性可能分類驅(qū)動,支持相似的操作;每類的每個成員有相同的與核心其他部分接口,但具體實(shí)現(xiàn)是不同的。例如,所有的硬盤驅(qū)動與核心其他部分接口相同,即他們都有初始化驅(qū)動器、讀N扇區(qū)、寫N扇區(qū)。
核心自己提供的有些軟件服務(wù)有類似的抽象屬性,因此可以抽象分類。例如,不同的網(wǎng)絡(luò)協(xié)議已經(jīng)被抽象為一個編程接口:BSD socket庫。另一個例子是虛擬文件系統(tǒng)virtual filesystem(VFS)層,它從文件系統(tǒng)操作實(shí)現(xiàn)中抽象出文件系統(tǒng)操作。每個文件系統(tǒng)類型提供了每個文件系統(tǒng)操作的實(shí)現(xiàn)。當(dāng)一些實(shí)體企圖使用一個文件系統(tǒng)時,請求通過VFS送出,它將請求發(fā)送到適當(dāng)?shù)奈募到y(tǒng)驅(qū)動。
UNIX系統(tǒng)的主要服務(wù)
本節(jié)說明一些最重要的UNIX服務(wù),但不太詳細(xì)。以后的章節(jié)中將更詳細(xì)地說明。
init
UNIX系統(tǒng)里最重要的服務(wù)是由init 提供的。 init 是每個UNIX系統(tǒng)在核心引導(dǎo)最后啟動的第一個進(jìn)程。 init 啟動后,它做不同的啟動工作繼續(xù)引導(dǎo)過程(檢查和mount文件系統(tǒng)、啟動守侯程序等)
init 做的具體事情的列表依賴于用戶意愿; init 有多個啟動選擇。通常提供單用戶模式single user mode的概念,此時沒有用戶能登錄,root 在控制臺使用一個shell;通常的模式叫多用戶模式multiuser mode。一般說來這稱為運(yùn)行級run levels;單用戶和多用戶模式可以理解為2個運(yùn)行級,還可以有其他運(yùn)行級,例如,在控制臺上運(yùn)行X。
在普通操作中,init 確認(rèn)getty 正常運(yùn)行(允許用戶登錄),并收養(yǎng)孤兒進(jìn)程(父進(jìn)程已死的進(jìn)程;UNIX中,所有進(jìn)程 必須在一棵樹中,因此孤兒進(jìn)程必須收養(yǎng))。
當(dāng)系統(tǒng)關(guān)閉時,init 負(fù)責(zé)殺死所有其他進(jìn)程,unmount所有文件系統(tǒng)并停止處理器,根據(jù)設(shè)置。
從終端登錄
從終端登錄(通過串行線)和控制臺(當(dāng)不運(yùn)行X時)是由getty 程序提供的。 init 為每個允許登錄的終端啟動一個單獨(dú)的getty 實(shí)例 getty 讀用戶名并運(yùn)行l(wèi)ogin 程序,由它讀口令。如果用戶名和口令正確,login 就運(yùn)行shell。當(dāng)shell終止時,即用戶注銷,或login 因用戶名和口令不對而終止時, init 知道并啟動一個新的getty 實(shí)例。核心沒有登錄的概念,這都由系統(tǒng)程序處理。
Syslog
核心和許多系統(tǒng)程序會產(chǎn)生錯誤、警告和其他信息。這些信息在以后能看經(jīng)常是很重要的,甚至很久以后,所以它們應(yīng)該被寫到一個文件。這個程序是syslog 。它能設(shè)置成根據(jù)輸出信息的程序或重要程度將信息排序到不同的文件。例如,核心信息經(jīng)常與其他信息分開,單獨(dú)定向到一個分離的文件,因?yàn)楹诵男畔⒔?jīng)常更重要且需要有規(guī)律地閱讀以確定問題。
定時執(zhí)行命令: cron 和at
用戶和系統(tǒng)管理員經(jīng)常需要定時運(yùn)行命令。例如,系統(tǒng)管理員可能想運(yùn)行一個程序從老文件中清除暫存文件的目錄 (/tmp 和/var/tmp ),以免磁盤滿,因?yàn)椴⒎撬谐绦蚨颊_地清除自己的暫存文件。
cron 服務(wù)是做這個的。每個用戶有個crontab ,在這里列出他要執(zhí)行的命令和想執(zhí)行的時間。 cron 守侯進(jìn)程負(fù)責(zé)在特定的時間啟動命令。
at 服務(wù)與cron 類似,但它只執(zhí)行一次:命令在給定的時間執(zhí)行,但不可自動重復(fù)。
圖形用戶接口GUI
UNIX和Linux不將用戶接口合在核心中,而是用用戶級程序?qū)崿F(xiàn)。用戶接口同時提供文本和圖形環(huán)境。
這樣的安排使系統(tǒng)更靈活,但有容易對每個程序?qū)崿F(xiàn)不同的用戶接口的缺點(diǎn),使系統(tǒng)較難學(xué)。
Linux使用的主要的圖形環(huán)境叫X Window系統(tǒng)(簡稱X)。 X也不實(shí)現(xiàn)用戶接口;它只實(shí)現(xiàn)一個窗口系統(tǒng),即可以實(shí)現(xiàn)圖形用戶接口的工具。 3種最流行的基于X實(shí)現(xiàn)的用戶接口風(fēng)格是Athena、Motif和Open Look。
網(wǎng)絡(luò)
網(wǎng)絡(luò)連接2臺或更多的計(jì)算機(jī)使之能互相通信。連接和通信的實(shí)際方法有些復(fù)雜,但結(jié)果非常有用。
UNIX操作系統(tǒng)具有許多網(wǎng)絡(luò)特征。最基本的服務(wù):文件系統(tǒng)、打印、備份等都可以通過網(wǎng)絡(luò)完成。這可使系統(tǒng)管理更簡單,因?yàn)樗试S集中管理,同時獲得小型機(jī)和分布計(jì)算的優(yōu)點(diǎn),例如降低成本和更好的容錯能力。
然而,本書只概述網(wǎng)絡(luò);更多的信息請見《Linux網(wǎng)絡(luò)管理員指南》,包括一個網(wǎng)絡(luò)如何操作的基本說明。
網(wǎng)絡(luò)登錄
網(wǎng)絡(luò)登錄與普通登錄有一點(diǎn)不同??梢缘卿浀拿總€終端各有一條單獨(dú)的物理串行線。從網(wǎng)絡(luò)登錄的每個人,有一條單獨(dú)的虛擬網(wǎng)絡(luò)連接,并且可以有任意數(shù)量 。因此不可能為每個可能的虛擬連接運(yùn)行單獨(dú)的getty 。通過網(wǎng)絡(luò)登錄有若干不同的方法, telnet 和rlogin 是TCP/IP網(wǎng)絡(luò)中的主要方法。
網(wǎng)絡(luò)登錄為每種登錄方法提供一個單獨(dú)的守侯程序(telnet 和rlogin 使用不同的守侯程序),而不是使用一群getty ,來偵聽所有的輸入的登錄企圖。當(dāng)發(fā)現(xiàn)一個登錄企圖,就啟動一個自己的新實(shí)例來處理這個企圖;原來的實(shí)例繼續(xù)偵聽其他企圖。新實(shí)例的工作和getty 類似。
網(wǎng)絡(luò)文件系統(tǒng)
網(wǎng)絡(luò)服務(wù)的一個最有用的東西是通過網(wǎng)絡(luò)文件系統(tǒng)network file system共享文件。這個服務(wù)一般用Sun公司開發(fā)的網(wǎng)絡(luò)文件系統(tǒng)Network File System,或NFS。
通過網(wǎng)絡(luò)文件系統(tǒng),任何文件操作可以由一臺機(jī)器的一個程序通過網(wǎng)絡(luò)發(fā)送到其他任何機(jī)器。這愚弄了程序,使它以為其他機(jī)器上的所有文件是在程序運(yùn)行的機(jī)器上。這極大地簡化了信息共享,因?yàn)樗鼘Τ绦驘o須任何修改。
郵件
電子郵件通常是通過計(jì)算機(jī)通信的最重要的方法。一封電子信件用特定的格式存儲在一個文件中,使用特定的郵件程序來收發(fā)郵件。
每個用戶有一個收件箱incoming mailbox(一個特定格式的文件),所有新郵件存在這里。當(dāng)什么人發(fā)送郵件時,郵件程序定位收件人的郵箱,并在郵箱文件中添加信件。如果收件人的郵箱在另一臺機(jī)器上,信件就被發(fā)送到那臺機(jī)器,由它用它覺得最合適的方法來投遞郵箱。
郵件系統(tǒng)包括很多程序。投遞郵件到本地或遠(yuǎn)程郵箱使用一個程序(mail transfer agent或MTA,例如,sendmail 或smail ),而用戶使用的則有很多不同的程序(mail user agent或MUA,例如pine 或elm )。郵箱一般存在/var/spool/mail 中。
打印
同時只能有一個人使用某一臺打印機(jī),但各用戶不共享打印機(jī)是不經(jīng)濟(jì)的。因此打印機(jī)由軟件來管理,實(shí)現(xiàn)一個打印隊(duì)列print queue:所有的打印任務(wù)放進(jìn)一個隊(duì)列,打印機(jī)完成一個任務(wù)后,自動再打印下一個。這無須用戶來組織打印隊(duì)列,回避了直接控制打印機(jī)。
打印隊(duì)列軟件也把打印輸出spools到磁盤,即,當(dāng)任務(wù)在隊(duì)列中時,打印輸出存在一個文件中。這允許應(yīng)用程序快速地完成一個打印任務(wù)到打印隊(duì)列程序,應(yīng)用程序無須等到打印任務(wù)真正完成就可以繼續(xù)下去。這真的很方便,因?yàn)樗试S打印出一個版本,無須打印完成,就繼續(xù)修改一個新版本。
文件系統(tǒng)布局
文件系統(tǒng)分為許多部分,通常從根文件系統(tǒng)有: /bin , /lib , /etc , /dev , 及一些其他; /usr 文件系統(tǒng)包含程序和不改變的數(shù)據(jù); /var 文件系統(tǒng)包含改變的數(shù)據(jù)(例如log文件); /home 文件系統(tǒng)包含每個用戶的個人文件。依賴于硬件配置和系統(tǒng)管理員的決定,方法不同,甚至所有東西可能在一個文件系統(tǒng)中。
3章將更詳細(xì)地說明文件系統(tǒng)布局,Linux文件系統(tǒng)標(biāo)準(zhǔn)(Linux Filesystem Standard)中有更詳細(xì)的說明。
相關(guān)文章
Linux系統(tǒng)環(huán)境下如何獲得U盤拔插的信息
獲得U盤的插入或者拔取得信息的傳統(tǒng)方法是在內(nèi)核級運(yùn)行hotplug程序,相關(guān)參數(shù)通過環(huán)境變量傳遞過來,再由hotplug通知其他關(guān)注hotplug的應(yīng)用程序。這樣的做法效率有些低,現(xiàn)在通過一種特殊類型的socket netlink實(shí)現(xiàn)獲取U盤拔插的信息。netlink專門用于內(nèi)核空間和用戶空間的異步通信。2008-04-04linux系統(tǒng)單網(wǎng)卡綁定雙IP的具體操作方法
以下是對linux系統(tǒng)單網(wǎng)卡綁定雙IP的具體操作方法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下2013-08-08linux下查看swap分區(qū)被哪些進(jìn)程占用實(shí)現(xiàn)腳本
登錄一臺服務(wù)器,使用free命令查看內(nèi)存,卻發(fā)現(xiàn)swap分區(qū)被占用,到底是哪些進(jìn)程占用了這部分swap分區(qū),本文將解決你的疑惑,感興趣的你可以參考下2013-02-02