unix
計算機操作系統
UNIX操作系統(尤尼斯),是一個強大的多用戶、多任務操作系統,支持多種處理器架構,按照操作系統的分類,屬於分時操作系統,最早由KenThompson、Dennis Ritchie和Douglas McIlroy於1969年在AT&T的貝爾實驗室開發。它的商標權由國際開放標準組織所擁有,只有符合單一UNIX規範的UNIX系統才能使用UNIX這個名稱,否則只能稱為類UNIX(UNIX-like)。
1965年時,貝爾實驗室(Bell Labs)加入一項由通用電氣(General Electric)和麻省理工學院(MIT)合作的計劃;該計劃要建立一套多使用者、多任務、多層次(multi-user、multi-processor、multi-level)的MULTICS操作系統。直到1969年,因MULTICS計劃的工作進度太慢,該計劃被停了下來。當時,Ken Thompson(后被稱為UNIX之父)已經有一個稱為"星際旅行"的程序在GE-635的機器上跑,但是反應非常慢,正巧被他發現了一部被閑置的PDP-7(Digital的主機),Ken Thompson和Dernis Ritchie就將"星際旅行"的程序移植到PDP-7上。而這部PDP-7(如圖1-1所示)就此在整個計算機歷史上留下了芳名。
unix
MULTICS其實是"Multiplexed Information and Computing Service"的縮寫,在1970年時,那部PDP-7卻只能支持兩個使用者,當時,Brian Kernighan就開玩笑地稱他們的系統其實是:"UNiplexed Information and Computing Service",縮寫為"UNICS",後來,大家取其諧音,就稱其為"UNIX"了。1970年可稱為"UNIX元年"。
1971年,Ken Thompson寫了充分長篇的申請報告,申請到了一台PDP-11/24的機器。於是Unix第一版出來了。在一台PDP-11/24的機器上完成。這台電腦只有24KB的物理內存和500K磁碟空間。Unix佔用了12KB的內存,剩下的一半內存可以支持兩用戶進行Space Travel的遊戲。而著名的fork()系統調用也就是在這時出現的。
到了1973年的時候,Ken Thompson 與Dennis Ritchie感到用彙編語言做移植太過於頭痛,他們想用高級語言來完成第三版,對於當時完全以彙編語言來開發程序的年代,他們的想法算是相當的瘋狂。一開始他們想嘗試用Fortran,可是失敗了。後來他們用一個叫BCPL(Basic Combined Programming Language)的語言開發,他們整合了BCPL形成B語言,後來Dennis Ritchie覺得B語言還是不能滿足要求,於是就改良了B語言,這就是大名鼎鼎的C語言。於是,Ken Thompson 與Dennis Ritchie成功地用C語言重寫了Unix的第三版內核。至此,Unix這個操作系統修改、移植相當便利,為Unix日後的普及打下了堅實的基礎。而Unix和C結合成為一個統一體,C與Unix很快成為世界的主導。
unix
Unix的第一篇文章“The UNIX Time Sharing System”由Ken Thompson和Dennis Ritchie於1974年7月的 The Communications of the ACM發表。這是UNIX與外界的首次接觸。結果引起了學術界的廣泛興趣並對其源碼索取,所以,Unix第五版就以“僅用於教育目的”的協議,提供給各大學作為教學之用,成為當時操作系統課程中的範例教材。各大學公司開始通過Unix源碼對Unix進行了各種各樣的改進和擴展。於是,Unix開始廣泛流行。
在UNIX的各發行版中,Open Solaris是唯一一個由商業版轉為開放源代碼的個例。
在UNIX商業版中,Solaris是一個非常優秀的操作系統。
AIX(Advanced Interactivee Xecutive)是IBM公司所有的UNIX操作系統。AIX源自於System V Release 3,運行在IBM公司的Power PC硬體架構之上。
HP-UX(Hewlett Packard UNIX,HPUX)是美國惠普公司在System v的基礎上開發的UNIX操作系統。
1975年發表的UNIX V6版是比較成熟的版本,貝爾實驗室免費向美國各大學提供該版本,並開始廣泛地配備於各大學的PDP-11系列計算機上。1977年,UNIX首次移植到非PDP類型的計算機上。
除了貝爾實驗室外,另一個使用比較廣泛的UNIX版本是美國加州大學貝克利分校開發的BSD UNIX,該版本大量安裝在SUN工作站上。1993年推出了4.4BSD版本。BSD是網路的主要平台,對DARPA的TCP/IP提供了支持,其中的網路文件系統(NFS)提供了與很多計算機機種的連接,NFS及AT&T開發的遠程文件共享(RFS)使UNIX系統在網路支持方面保持領先地位。
Solaris曾是使用最廣泛、最成功的商業UNIX實現版本。Sun公司的操作系統最初叫做Sun OS,主要基於BSD UNIX版本。
是由矽谷圖形公司(Silicon GraphicsInc.,一般用簡稱:SGI)以System V與BSD延伸程序為基礎所發展成的UNIX操作系統,IRIX可以在SGI公司的RISC型電腦上運行,即是採行32位、64位MIPS架構的SGI工作站、伺服器。
unix
unix
Unix 操作系統因其開放性、可移植性、多用戶多任務以及穩定性等特點,加上本身強大的網路通訊功能,被廣泛的應用在各主要行業中。UNIX用戶協會最早從20世紀80年代開始標準化工作,1984年頒布了試用標準。後來IEEE為此制定了POSIX標準(即IEEE1003標準)國際標準名稱為ISO/IEC9945.它通過一組最小的功能定義了在UNIX操作系統和應用程序之間兼容的語言介面。POSIX是由Richard Stallman 應IEEE的要求而提議的一個易於記憶的名稱,含義是Portable OPerating System Interface(可移植操作系統介面) ,而X表明其API的傳承。
UNIX特性
● ● UNIX系統是一個多用戶,多任務的分時操作系統。
● ● UNIX的系統結構可分為三部分:操作系統內核(是UNIX系統核心管理和控制中心,在系統啟動或常駐內存),系統調用(供程序開發者開發應用程序時調用系統組件,包括進程管理,文件管理,設備狀態等),應用程序(包括各種開發工具,編譯器,網路通訊處理程序等,所有應用程序都在Shell的管理和控制下為用戶服務)。
● ● UNIX系統大部分是由C語言編寫的,這使得系統易讀,易修改,易移植。
● ● UNIX提供了豐富的,精心挑選的系統調用,整個系統的實現十分緊湊,簡潔。
● ● UNIX提供了功能強大的可編程的Shell語言(外殼語言)作為用戶界面具有簡潔,高效的特點。
● ● UNIX系統採用樹狀目錄結構,具有良好的安全性,保密性和可維護性。
● ● UNIX系統採用進程對換(Swapping)的內存管理機制和請求調頁的存儲方式,實現了虛擬內存管理,大大提高了內存的使用效率。
● ● UNIX系統提供多種通信機制,如:管道通信,軟中斷通信,消息通信,共享存儲器通信,信號燈通信。
操作系統要管理計算機系統的硬體資源和軟體資源,以便為用戶所使用。硬體資源一般指CPU(中央處理機)、存儲器(內存和外存)、外部設備等。軟體資源是指系統程序和數據,即操作系統、系統實用程序及應用軟體,以及用戶的程序和數據,它們都以文件的方式存放在存儲器中。操作系統由若干個功能模塊有機地聯繫在一一起,協調地進行工作。這些模塊是:處理機和進程管理模塊、存儲管理模塊、設備管理模塊、文件系統和用戶界面。
處理機和進程管理模塊
由於處理機(CPU)是計算機中關鍵的資源,進程的執行與CPU密切相關,因此處理機和進程管理模塊可簡稱為進程管理模塊。我們把確定哪些作業將調入內存運行和完成運行後撤出內存的工作稱為作業調度。把如何控制一個作業在運行階段的三個狀態間的轉換稱為進程調度。因而,如何充分發揮資源的利用率,使響應時間短,使各用戶作業等待執行的時間最短,是制訂相應的作業調度演演算法和進程調度演演算法的原則。只是在不同的操作系統中,對以上目標有不同的著重點,因而調度演演算法也就有所不同。
存儲管理模塊
存儲管理是對作業從進入就緒狀態起到運行結束之間所使用的存儲器(包括內存和外存)進行管理。可以將存儲管理模塊的任務分為存儲分配、地址映射和存儲保護3部分。
存儲分配
一個程序在編譯和鏈接后,得到一個稱為內存映像的文件。該文件描述了這個程序在運行時所需要的內存大小,其中包括代碼和數據區的地址。這些地址稱為邏輯地址,並且以首地址0為參考地址。每當一個作業調入內存,進入就緒狀態,存儲管理模塊就要根據可利用的內存空間與作業所需要的內存兩者進行計算,給該作業分配相應的內存空間。
地址映射
將一個作業裝入內存,意味著一個進程將被創建。存儲管理模塊會把該作業的映像文件首地址(為零)對準內存中進程的首地址。這個進程的首地址或起始地址是內存中的物理地址,稱為偏移量(offset)。映像文件的邏輯地址加上偏移量,得到內存中的地址值均為物理地址。計算邏輯地址到物理地址的轉換工作稱為地址映射。映像中所有的邏輯地址都可轉換為物理地址。
內存保護
內存空間總是被若干個進程分享,其中包括操作系統本身要常駐在內存中的那一部分。內存保護的任務是對內存空間中已劃分出的區域,知道它們各屬於哪些進程,並且知道每個進程有權訪問的區域。每當一個進程執行過程中需要訪問某個地址時,存儲管理模塊就要檢查一下這個進程是否有權訪問這個物理地址。通常,每個進程在內存中的區域是該進程可以訪問的合法地址。如果訪問的地址落在該進程的區域之外,即產生了非法訪問。一旦遇到非法訪問,內存保護就要拒絕訪問,並進行出錯處理。
設備管理模塊
外部設備包括文件存儲介質,例如磁碟、磁帶、光碟、硬碟等輸入輸出設備,例如字元終端、圖形終端、各種印表機、繪圖儀、顯示器等;以及專用的輸入輸出設備,例如數據採集儀、圖像攝入裝置、音頻輸入輸出設備等。
設備管理模塊的任務是為用戶提供方便和統一的界面,並根據作業對設備的申請,合理地分配這些資源,根據設備的性能和作用對設備分類,再用不同的驅動程序去驅動這些設備工作,以提高設備的效率。
文件系統
文件系統又可稱為信息管理模塊,或者文件管理模塊,主要負責對軟體資源的管理。所有的軟體資源都以文件的形式存放在存儲介質中,並以文件為單位,在計算機中傳遞信息。因此,文件被定義為一組相關信息元素的集合。所有的文件在計算機中形成一個文件系統,雖然與操作系統的一個管理模塊同名,但是由於它們出現的場合及上下文不同,通常是可以區分的。
用戶界面
用戶界面(user interface)又稱為用戶介面。用戶通過用戶介面使用操作系統。良好的用戶介面將使用戶感覺到操作系統的友好和方便。用戶介面通常包括作業控制語言、操作語言和系統調用。
1989年下半年,C程序設計語言的ANSI標準X3.159-1989得到批准。此標準被也採納為國際標準ISO/IEC9899:1990。ANSI是美國國家標準學會(American National Standards Institute)的縮寫,它是國際標準化組織(International Organization for Standardization,ISO)中代表美國的成25員。IEC是國際電子技術委員會(International Electrotechnical Commission)的縮寫。
ISO C標準現在由ISO/IEC的C程序設計語言國際標準工作組維護和開發。ISO C標準的意圖是提供C程序的可移植性,使其能適合於大量不同的操作系統,而不只是適合UNIX系統。此標準不僅定義了C程序設計語言的語法和語義,還定義了其標準庫。
1999年,ISO C標準被更新,並被批准為ISO/IEC 9899:1999,它顯著改善了對進行數值處理的應用軟體的支持。除了對某些函數原型增加了關鍵字restrict外,這種改變並不影響本書中描述的POSIX介面。restrict關鍵字告訴編譯器,哪些指針引用是可以優化的,其方法是指出指針引用的對象在函數中只通過該指針進行訪問。
1999年以來,已經公布了3個技術勘誤來修正ISO C標準中的錯誤,分別在2001年、2004年和2007年公布。如同大多數標準一樣,在批准標準和修改軟體使其符合標準兩者之間有一段時間延遲。隨著供應商編譯系統的不斷演化,對最新ISO C標準的支持也就越來越多。
POSIX是一個最初由IEEE(Institute of Electrical and Electronics Engineers,電氣和電子工程師學會)制訂的標準族。POSIX指的是可移植操作系統介面(Portable Operating System Interfacc)。它原來指的只是IEEE標準1003.1-1988(操作系統介面),後來則擴展成包括很多標記為1003的標準及標準草案。
Single UNIX Specification(SUS,單一UNIX規範)是POSIX.1標準的一個超集,它定義了--些附加介面擴展了POSIX.1規範提供的功能。POSIX.1相當於Single UNIX Specification中的基本規範部分。
POSIX.1中的X/Open系統介面(X/Open System Interface,XSI)選項描述了可選的介面,也定義了遵循XSI(XSI conforming)的實現必須支持POSIX.1的哪些可選部分。這些必須支持的部分包括:文件同步、線程棧地址和長度屬性、線程進程共享同步以及XOPEN__UNIX符號常量。只有遵循XSI的實現才能稱為UNIX系統。
FIPS代表的是聯邦信息處理標準(Federal Information Processing Standard),這一標準是由美國政府發布的,並由美國政府用於計算機系統的採購。FIPS151-1(1989年4月)基於IEEE標準1003.1-1988及ANSIC標準草案。此後是FIPS151-2(1993年5月),它基於IEEE標準1003.1-1990。在POSIX.1中列為可選的某些功能,在FIPS151-2中是必需的。所有這些可選功能在POSIX.1-2001習中已成為強制性要求。
類Unix操作系統具有可靠性高、安全性強和資料庫支持功能強大等優點,已成為最為安全、可靠、流行的大型伺服器操作系統,被廣泛應用於各行業的工業伺服器設備。然而,此類系統存在操作複雜、普適性低以及缺乏有效監測與維護手段等問題,並存在重要數據丟失和系統崩潰的風險,大幅縮短了硬體設備使用壽命。
目前常用的類Unix系統伺服器硬體檢測方法包括基於Linux Live技術的檢測方法、基於Windows togo技術的檢測方法和基於類Unix系統硬體檢測軟體的方法。雖使用Linux Live技術能抽取出開源軟體的源代碼,靈活定製硬體自動檢測軟體及生成所需的精簡版檢測報告。但由於Linux Live系統自帶的軟體驅動庫版本老舊且不完整,在不同硬體配置機器間的檢測中,需耗費大量時間從系統ISO驅動文件庫中查找及安裝驅動程序(>30min),且常由於缺乏與最新伺服器硬體匹配的驅動文件,造成系統無法啟動。基於Windows togo技術的檢測方法雖擁有完整的系統,但相較於基於Linux Live技術的檢測方法需要佔用的U盤空間大(16GB以上),且對於U盤的讀取速度要求過高。而基於類Unix系統硬體檢測軟體的方法又存在檢測功能單一、兼容性不足和操作難度大的問題。
UNIX和Linux的授權方式不同
從根本上講,UNIX和Linux最大的區別在於前者是對源代碼實行知識產權保護的傳統商業軟體。在UNIX發展初期,當時的UNIX版權歸AT&T公司所有。為了促進UNIX的發展,AT&T公司以低廉甚至免費的許可將UNIX源碼授權給學術機構做研究或教學之用,許多機構在此源碼基礎上加以擴充和改進,形成了所謂的UNIX衍生版,這些衍生版反過來也促進了UNIX的發展。
後來AT&T公司意識到了UNIX的商業價值,不再將UNIX源碼授權給學術機構,並對之前的UNIX及其變種聲明了版權權利。這對UNIX的發展產生了很大的影響。在隨後的幾十年中,UNIX的發展經常伴隨著產權糾紛。對於UNIX來說,應用比較廣泛的發行版大多數都是商業公司來維護,例如OracleSolaris、IBMAIX以及HPUX等。
Linux從一開始就是遵循GNU通用公共許可協議(GNU General Publice License,簡稱GNU GPL或GPL),GPL授予程序接受人以任何目的運行此程序的自由、再發行複製件的自由以及改進程序、並公開發布改進的自由。因此,任何個人或者公司都可以在GPL的允許範圍之內對Linux的代碼進行修改,並且進行再發行。另外,Linux可以運用於任何的領域,包括商業應用。
UNIX和Linux不存在技術上面的傳承關係
儘管Linux的設計思想受到了MINIX的很大影響,但是這種影響並不是技術上的,更多的是理念上的。Linux並沒有使用UNIX的一行代碼,是Linux完全從頭構建的操作系統。因此,Linux不是UNIX的衍生版,它是一個全新的操作系統。
UNIX和Linux對於硬體的要求不同
由於長期以來,UNIX都是由一些大型的公司在維護,因此UNIX通常與這些公司所生產的硬體相配套。例如,Oracle Solaris在很長的一段時間都只有SPARC平台的版本,HP-UX可以在HP的PA-RISC處理器、Intel的Itanium處理器的電腦上運行、IBMAlX則運行在IBM的Power PC架構之上。正因為如此,很大程度上限制了UNIX的廣泛應用。
UNIX是一個功能非常全面的操作系統,在某些方面超越Linux
經過30多年的不斷發展,UNIX的一些基本技術已變得十分成熟,有的已成為各類操作系統的常用技術。無數的實踐表明,UNIX是能達到大型主機可靠性要求的少數操作系統之一。目前許多UNIX大型:主機和伺服器在國內外的大型企業中每天24小時不間斷地運行。例如,不少大企業或政府部門,將其整個企業/部門信息系統建立並運行在以UNIX為主伺服器的客戶機/伺服器架構上。
Linux成功地模仿了UNIX系統和功能,它能夠在普通PC計算機上實現全部的UNIX特性,具有多任務、多用戶的能力。更為重要的是,Linux是一個開放源代碼的產品,任何個人或者公司都可以修改Linux內核的源代碼,實現或者增強自己想要的功能。
實際上,UNIX與Linux的區別還有很多,例如,UNIX擁有強大的網路功能,作為網際網路基石的TCP/IP協議就是在UNIX系統上開發和發展起來的。UNIX多用於超級計算機、小型機或者工作站,這些技術的成長與UNIX是分不開的。UNIX是歷史上影響最大、最成功的操作系統。
聯繫
Linux的起源可以追溯到古老的UNIX系統。正因為受到了UNIX的影響,才誕生了Linux。Linux繼承了UNIX的許多優良傳統,例如強大的網路功能、完善的命令以及良好的健壯性與穩定性。無論是從外觀上,還是從功能上,UNIX與Linux都是非常相似的。例如,UNIX的大部分常用命令都可以在Linux中找到相應的命令。
另外,Linux同樣是一個遵循POSIX標準的操作系統。因此,許多UNIX上面的應用可以非常方便地移植到Linux上面。同樣,Linux上面的應用也可以非常方便地轉移到UNIX上面。