操作系統概述

                             操作系統概述

對于一個真正的計算機系統來說,我們可以說它是由硬件+軟件組成。沒有軟件的計算機,我們稱它為裸機。當然,它也干不成什么事。所以,要想使得計算機真正的工作,還需要有軟件的支持。軟件又分為系統軟件和應用軟件,而操作系統就是一款我們所需要了解的系統軟件。

1.2.1什么是操作系統

操作系統是計算機系統中的一個系統軟件,是一些程序模塊的集合——它們能以盡量有效、合理的方式組織和管理計算機的軟硬件資源,合理的組織計算機的工作流程,控制程序的執行并向用戶提供各種服務功能,使得用戶能夠靈活、方便、有效的使用計算機,使整個計算機系統能高效、順暢地運行。

1.2.2操作系統的發展歷史

批處理系統

早期在操作系統還沒形成的過程中,寫程序是一件很麻煩的事,程序員使用機器語言或匯編語言在讀卡紙片上來編寫程序,編寫好的程序交給操作員,由操作員將紙片制作成卡片,然后再將卡片放入專門的I/O設備中,等待調入到內存中去讓處理機去操作。

這樣做的缺點:

*  系統資源的利用率低
在操作員操作卡片進入I/O設備的時候,處理機處于空閑狀態,所有造成資源利用低

*  系統的吞吐量低
使用單道批處理系統,每次內存只存放一道作業,這樣使得系統吞吐量低

*  交互性差
一旦程序的某個小地方出錯了,就要重新開始。

UNIX的誕生

隨著硬件設備的發展,為了增強系統的資源利用率,吞吐量,以及解決交互性問題,大概在60年代左右,由Bell實驗室,MIT,GE共同發起了Multics的計劃。從字面意思可以理解Multics為復雜的,多數的意思。它的計劃就是想讓一臺大型主機可以提供300個以上的聯機終端。

后來,由于計劃進度落后,資金短缺,Bell實驗室就退出了這項計劃。在原先參加Multics的計劃中,有一個叫Ken Thompson,他當時開發了一個小游戲,這個小游戲叫做 space travel。他就想測試一下這個小游戲。當時流行的主機是DEC(數字設備公司)下的PDP,VAX。在當時,比較主流的是PDP-11,VAX-11。在當時,這種主機的價格高達上萬美元,這是一般用戶消費不起的,這就讓Thompson很煩惱,但是碰巧,在實驗室里有一臺被廢棄的PDP-7沒人使用,于是他就在這臺主機上用匯編語言編寫一個系統核心程序。終于在1969年,編寫出了一個核心工具程序,以及一個小小的文件系統。這個系統被稱為Unics。

沒想到Thompson編寫的這個操作系統這么好用,所以在Bell實驗室就流行起來了。但是由于是以匯編語言編寫的,所以它的移植性很差。因為當時的計算機的架構的不同,所以每次安裝到不同架構上的機器上時,都要重新編寫,真的不方便。到達1971年左右,一個叫Ritchie將B語言改寫成C語言,再和Thompson重新用C語言來更改UNICS,最后正式更名為Unix.

bell實驗室是屬于AT&T公司的,AT&T公司對于UNIX是采取較開發的態度。所以Unix公開源代碼,使得UNix的修改能夠移植到不同架構的機器上去。所以UNix與當時的加州Berkeley大學合作。Berkeley大學取得源代碼后,重新編寫適合自己機器的版本,最終將它命名為:Berkeley Software Distribution(BSD)

Minux的誕生

由于UNIX的高移植性的強大功能,加上當時沒有版權糾紛,所以讓很多商業公司開始了Unix的發展,例如AT&T自家的 System V。當System V 發行到第七版UNIX后,它便開始將UNIX的版權收回去。因此也爆發了商業糾紛。導致unix發展停滯不前。

隨后,個人PC機的發展使得UNIX的這些研究人員覺得有壓力,他們想開始研究,但是由于版權問題,所以使用UNIX出現了很大的困難。在當時,有一個大學教授Andrew,他為了用于教學,避免版權糾紛,他在完全不看 UNIX核心源代碼的情況下,自己編寫了Minix,并且強調它與Unix能夠兼容。這個Minix版本并不是完全免費的,無法在網絡上提供下載,必須要透過磁盤/磁帶購買才行。另外,這個教授不許任何人去修改或增加代碼,所以讓這個操作系統并沒有廣泛流傳。

GNU計劃

1983年,一個叫做Richard Stallman公開發起的自由軟件集體協作計劃。它的目標是創建一套完全自由的操作系統GNU。那么GNU是什么?GNU就是“GNU

is not UNIX”。因為在當時,UNIX由于版本問題造成大多數人都無法使用UNIX操作系統,所以Richard Stallman發起了這個運動。1985年,Richard Stallman又創立了自由軟件基金會(Free Software Foundation)來為GNU計劃提供技術、法律以及財政支持。為了維護GNU組織的合法權益,避免其他人拿著GNU組織開發的程序去進行一些不正當的行為,1989年Richard Stallman又撰寫了GNU協議:GPL(General Public License)。這就是最初的第1版,它的大致內容就是:

*  如果發布了可執行的二進制代碼,就必須同時發布可讀的源代碼。

*  發布任何基于GPL許可的軟件時,不管你是基于這個軟件源碼進行二次開發還是怎樣,修改之后軟件依然要遵循GPL協議,且修改人不能添加任何限制的條款。

那么,對于某些商業公司,它只以而二進制的形式來發布軟件,以此來保護軟件開發者的合法權益。但是如果哪怕是軟件開發者開發的程序里面有兩三行基于GPL協議的代碼,那么整個程序也屬于GPL協議范圍,版權也歸GNU組織所有,所以這樣做的結果就導致了GPL協議并沒有應用的很廣泛。所以GPL就有了另一個協議:LGPL(the Lesser General Public License)。這個協議就寬松了很多,它大致的內容就是:

軟件開發者沒有參考基于LGPL的全部代碼,而是調用了遵循LGPL的庫,那么這個就沒關系,可以不用開源。

但是LGPL并沒有多大的改觀,仍然有很多的限制。后來,人們普遍認為一個限制性弱的許可證對于自由軟件的發展是有戰略意義上的好處的,于是通過不斷的修改GPL協議,GPLv2、GPLv3出現了。但是要知道的是,GPL的出發點是代碼的開源,我們能免費使用和引用、修改、衍生代碼,但不允許修改后和衍生的代 碼做為閉源的商業軟件發布和銷售。這也就是為什么我們能用免費的各種linux,包括商業公司的linux和linux上各種各樣的由個人,組織,以及商 業軟件公司開發的免費軟件了。

其它開源協議

由于GPL協議太嚴格了,所以后來也出來了一些寬松點的協議。比如:BSD協議,Apache協議。

BSD開源協議是一個給于使用者很大自由的協議?;旧鲜褂谜呖梢浴睘樗麨椤?,可以自由的使用,修改源代碼,也可以將修改后的代碼作為開源或者專有軟件再發布。但”為所欲為”的前提當你發布使用了BSD協議的代碼,或則以BSD協議代碼為基礎做二次開發自己的產品時,需要滿足三個條件:

*  如果再發布的產品中包含源代碼,則在源代碼中必須帶有原來代碼中的BSD協議。

*  如果再發布的只是二進制類庫或軟件,則需要在類庫或軟件的文檔和版權聲明中包含原來代碼中的BSD協議。

*  不可以用開源代碼的作者/機構名字和原來產品的名字做市場推廣。

BSD 代碼鼓勵代碼共享,但需要尊重代碼作者的著作權。BSD由于允許使用者修改和重新發布代碼,也允許使用或在BSD代碼上開發商業軟件發布和銷售,因此是對 商業集成很友好的協議。而很多的公司企業在選用開源產品的時候都首選BSD協議,因為可以完全控制這些第三方的代碼,在必要的時候可以修改或者二次開發。包括蘋果的MAC OS,Webkit瀏覽器內核在內的軟件都使用了BSD協議。

Apache Licence是著名的非盈利開源組織Apache采用的協議。該協議和BSD類似,同樣鼓勵代碼共享和尊重原作者的著作權,同樣允許代碼修改,再發布(作為開源或商業軟件)。需要滿足的條件也和BSD類似:

*  需要給代碼的用戶一份Apache Licence

*  如果你修改了代碼,需要在被修改的文件中說明。

*  在延伸的代碼中(修改和有源代碼衍生的代碼中)需要帶有原來代碼中的協議,商標,專利聲明和其他原來作者規定需要包含的說明。

*  如果再發布的產品中包含一個Notice文件,則在Notice文件中需要帶有Apache Licence。你可以在Notice中增加自己的許可,但不可以表現為對Apache Licence構成更改。

Apache Licence也是對商業應用友好的許可。使用者也可以在需要的時候修改代碼來滿足需要并作為開源或商業產品發布或銷售。最后,用一句話概括 Apache License 就是,你可以用這代碼,但是如果開源你必須保留我寫的聲明;你可以改我的代碼,但是如果開源你必須寫清楚你改了哪些;你可以加新的協議要求,但不能與我所公布的協議要求產生沖突;你用這代碼干什么我不管,但是你不能讓我承擔任何責任。

Apache旗下的軟件包括Apache web服務器、Hadoop、Open Office等軟件都是采用的Apache License。

當然還有很多開源協議,這里就列出這兩種,我們記住就好。

POSIX標準

自UNIX誕生之后,起初免費公開的源代碼使得美國各大高校對其做研究,比較有名的就是加利福尼亞大學伯克利分校研發出的BSD Unix。當然還有AT&T公司自主研究的System V,很多商業廠家意識到了UNIX的價值,于是基于BSD或System V上各自都研發自己的UNIX。比較著名的有:sun公司研發的Solaris、IBM研發的AIX、DEC公司為自己的VAX主機研發的操作系統VMS、HP公司研究的HP-UX。

對于早期來說,程序員編寫程序面臨著這樣一個問題,假如A主機和B主機的硬件架構不一樣,那么基于A平臺開發的程序無法在B主機上運行。那么可想而知,早期如果程序員想將在A主機上編寫的代碼移植到B主機上幾乎是很難的。于是,POSIX計劃就誕生了。我們可以理解為POSIX標準就是為了實現UNIX環境下應用程序的可移植性。于是,一款基于POSIX標準的庫誕生了,這就是我們所說的:應用程序編程接口(API)。它的作用是,軟件開發者在編寫程序時不再直接和內核打交道,因為這種方式太過于底層,而且程序移植起來極其困難。而API將一些程序的公共功能組織到了一起,也就是說,程序員在需要某種功能的時候,不需要再直接編寫這個功能,而是直接從API接口中調用相關的功能的共享庫,這樣大大提高了程序開發的效率和程序的可移植性。

但是,我們要知道的是,程序在基于API接口進行程序開發使得程序能在各種不同硬件架構的平臺上進行移植。也就是說,假如windows和Linux的API接口相同,那么在Windows上能編譯的程序移植到在Linux上也能夠進行編譯,這是站在開發角度來說。而在二進制程序的角度來看,我們在Windows上編譯生成的二進制文件是不能在Linux上運行的,這是由于他們的應用二進制程序(ABI)的接口不同。只能這樣說,目前,POSIX標準大多數都是對API的規定,而對ABI的規定很少,以至于出現我們上述所說的區別。

                                                

blob.png

  

然而至今,POSIX標準不局限于UNIX類的操作系統,包括我們即將要學的Linux也是參照POSIX規范而編寫的。在 90 年代初,POSIX 標準的制定正處在最后投票敲定的時候,那是1991-1993 年間。此時正是Linux剛剛起步的時候,這個UNIX 標準為Linux 提供了極為重要的信息,使得Linux 的能夠在標準的指導下進行開發,能夠與絕大多數UNIX 系統兼容。在最初的Linux 內核代碼中(0.01 版、0.11 版)就已經為Linux與POSIX 標準的兼容做好了準備工作。在0.01 版的內核/include/unistd.h 文件中就已經定義了幾個有關POSXI 標準要求的常數符號,并且在注釋中就寫到“ok,這也許是個玩笑,但我正在著手研究它呢”。

Linux的誕生

1981 年IBM 公司推出享譽全球的微型計算機IBM PC??墒且驗樵谙?6位CPU的轉化上錯失機會,在以IBM的PC/AT以及兼容機為中心的16位PC市場上,慘敗給Microsoft的MS-DOS、從而從市場上消失。在1981-1991 年間,MS-DOS 操作系統一直是微型計算機上操作系統的主宰。此時計算機硬件價格雖然逐年下降,但軟件價格仍然是居高不下。當時Apple 的MACs 操作系統可以說是性能最好的,但是其天價沒人能夠輕易靠近。當時的另一個計算機技術陣營是Unix 世界。但是Unix 操作系統就不僅是價格貴的問題了。為了尋求高利率,Unix 經銷商將價格抬得極高,PC小用戶就根本不能靠近它。曾經一度受到Bell Labs 的許可而可以在大學中用于教學的UNIX 源代碼一直被小心地守衛著不需公開。對于廣大的PC 用戶,軟件行業的大型供應商始終沒有給出有效的解決該問題的手段。正在此時,出現了MINIX 操作系統,并有一本詳細的書本描述它的設計實現原理。由于Andrew的書寫的非常詳細,并且敘述有條有理,幾乎全世界的計算機愛好者都在看這本書以理解操作系統的工作原理。其中也包括Linux 系統的創始者Linus Benedict Torvalds。

當時(1991 年),Linus Benedict Torvalds 是赫爾辛基大學計算機科學系的二年級學生,也是一個自學hacker。這個21 歲的芬蘭年輕人喜歡鼓搗計算機,測試計算機的能力和限制。但當時缺乏的是一個專業級的操作系統。MINIX 雖然很好,但只是一個用于教學目的簡單操作系統,而不是一個強有力的實用操作系統。

到 1991 年,GNU 計劃已經開發出了許多工具軟件。最受期盼的Gnu C 編譯器已經出現,但還沒有開發出免費的GNU 操作系統。即使是MINIX 也開始有了版權,需要購買才能得到源代碼。而GNU 的操作系統HURD 一直在開發之中,但并不能在幾年內完成。對于 Linus 來說,已經不能等待了。從1991 年4 月份起,他開始醞釀并著手編制自己的操作系統。剛開始,他的目的很簡單,只是為了學習Intel 386 體系結構保護模式運行方式下的編程技術。但后來Linux的發展卻完全改變了初衷。

1991 年初,Linux 開始在一臺386sx 兼容微機上學習minix 操作系統。通過學習,他逐漸不能滿足minix系統的現有性能,并開始醞釀開發一個新的免費操作系統。根據Linus 在comp.os.minix 新聞組上發布的消息,我們可以知道他逐步從學習minix 系統到開發自己的Linux 的過程。

Linus 第1 次向comp.os.minix 投遞消息是在1991 年3 月29 日。題目是“gcc on minix-386 doesn’toptimize”,是有關gcc 編譯器在minix-386 上運行的優化問題,由此可知,Linus在1991年的初期已經開始深入研究了minix 系統,并在這段時間有了改進minix 操作系統的思想,而且在進一步學習minix 系統中,逐步演變為想自己重新設計一個基于Intel 80386 體系結構的新操作系統。他在回答有人提出minix 上的一個問題時,所說的第一句話是“閱讀源代碼”(“RTFSC (Read the F**ingSource Code :-)”)。他認為答案就在源程序中。這也說明了對于學習系統軟件來說,你不光需要懂得系統的工作基本原理,還需要結合實際系統,學習實際系統的實現方法。因為理論畢竟是理論,其中省略了許多枝節,而這些枝節問題雖然沒有太多的理論含量,但卻是一個系統必要的組成部分,就象麻雀身上的一根羽毛。

從 1991 年的4 月份開始,Linus 幾乎花了全部時間研究386-minix 系統(hack the kernel),并且嘗試著移植GNU 的軟件到該系統上(GNU gcc、bash、gdb 等)。并于4 月13 日在comp.os.minix 上發布說自己已經成功地將bash 移植到了minix 上,而且已經愛不釋手、不能離開這個shell 軟件了。

第一個與Linux 有關的消息是在1991 年7 月3 日在comp.os.minix 上發布的(當然此時還不存在Linux這個名稱,當時Linus 的腦子里想的可能是FREAX ?,FREAX 的英文含義是怪誕的、怪物、異想天開等)。其中透露了他正在進行Linux 系統的開發,并且在Linux 最初的時候已經想到要實現與POSIX(UNIX 的國際標準)的兼容問題了。

在 Linus 的下一發布的消息中(1991 年8 月25 日 comp.os.minix),他向所有minix 用戶詢問“What wouldyou like to see in minix?”(“你最想在minix 中見到什么?”),在該消息中他首次透露出正在開發一個(免費的)386(486)操作系統,并且說只是興趣而已,代碼不會很大,也不會象GNU 的那樣專業。開發免費操作系統這個想法從4 月份就開始醞釀了,希望大家反饋一些對于minix 系統中喜歡那些特色不喜歡什么等信息,由于實際的和其它一些原因,新開發的系統剛開始與minix 很象(并且使用了minix 的文件系統)。并且已經成功地將bash(1.08 版)和gcc(1.40 版)移植到了新系統上,而且在過幾個月就可以實用了。

最后,Linus 申明他開發的操作系統沒有使用一行minix 的源代碼;而且由于使用了386 的任務切換特性,所以該操作系統不好移植(沒有可移植性),并且只能使用AT 硬盤。對于Linux 的移植性問題,Linus當時并沒有考慮。但是目前Linux 幾乎可以運行在任何一種硬件體系結構上。到了 1991 年的10 月5 日,Linus 在comp.os.minix 新聞組上發布消息,正式向外宣布Linux 內核系統的誕生(Free minix-like kernel sources for 386-AT)。這段消息可以稱為Linux 的誕生宣言,并且一直廣為流傳。因此10 月5 日對Linux 社區來說是一個特殊的日子,許多后來Linux 的新版本發布時都選擇了這個日子。所以RedHat 公司選擇這個日子發布它的新系統也不是偶然的。

通過上述說明,我們可以對上述Linux 的五大支柱歸納如下:

UNIX 操作系統 — UNIX 于1969 年誕生在Bell 實驗室。Linux 就是UNIX 的一種克隆系統。UNIX 的重要性就不用多說了。

MINIX 操作系統 — Minix 操作系統也是UNIX 的一種克隆系統,它于1987 年由著名計算機教授Andrew S. Tanenbaum 開發完成。由于MINIX 系統的出現并且提供源代碼(只能免費用于大學內)在全世界的大學中刮起了學習UNIX 系統旋風。Linux 剛開始就是參照Minix 系統于1991 年才開始開發。

GNU 計劃– 開發Linux 操作系統,以及Linux 上所用大多數軟件基本上都出自GNU 計劃。Linux 只是操作系統的一個內核,沒有GNU 軟件環境(比如說bash shell),則Linux 將寸步難行。

POSIX 標準 — 該標準在推動Linux 操作系統以后朝著正規路上發展起著重要的作用。是Linux 前進的燈塔。

INTERNET — 如果沒有Intenet 網,沒有遍布全世界的無數計算機駭客的無私奉獻,那么Linux 最多只能發展到0.13(0.95)版的水平。


原創文章,作者:N24_小輝,如若轉載,請注明出處:http://www.www58058.com/54903

(0)
N24_小輝N24_小輝
上一篇 2016-10-27
下一篇 2016-10-27

相關推薦

  • Linux命令幫助及history命令的使用

    1.Linux命令幫助的獲取詳解 在Linux中獲取命令幫助時,內部命令和外部命令的獲取方式是有區別的: 即  (1)內部命令:#help COMMAND ?            #man bash  (2)外部命令:<1> # COMMAND –hel…

    Linux干貨 2016-08-05
  • 常見文件管理命令及bash特性

    cat:查看文件文本內容  -n:顯示行號  [root@study ~]# cat -n /etc/passwd  1  root:x:0:0:root:/root:/bin/bash  2  bin:x:1:1:bin:/bin:/sb…

    系統運維 2016-11-06
  • iptables/netfilter入門到進階

    防火墻的概念 Firewall:工作于主機或網絡邊緣,對于進出本主機或網絡的報文根據事先定義的規則作匹配檢測,對于更改被規則匹配到的報文做出相應處理的組件 網絡層防火墻(包過濾防火墻): 優點:對用戶來說透明,處理速度快且易于防護 缺點:一旦黑客突破防火墻,就可以請以偽造數據包源地址、目的地址和IP端口號 代理服務型防火墻(Proxy Service) 優點…

    2017-06-17
  • shell 編程(一)

    shell腳本編程:  編程語言的分類:根據運行方式    編程運行:源代碼->編譯器(編譯)--程序文件    解釋運行:源代碼-->運行啟動時解釋,由解釋器邊解釋運行; 根據其編程過程中功能的實現是調用庫還是調用外部的程序文件:   shell腳本編程:      利用系統上的命令編程組件進行編程:   完整的編程:     利用庫或編程組件進行編程; …

    Linux干貨 2016-12-23
  • 創建私有CA及dropbear的編譯安裝

    使用openssl創建私有CA 配置文件/etc/pki/tls/openssl.cnf certs           = $dir/certs         &nb…

    Linux干貨 2016-09-26
  • 馬哥教育網絡班21期+第六周課程練習

    第六周作業 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; cp /etc/rc.d/rc.sysinit /tmpvim /tmp/rc.sysinit # 命令模式下,輸入一下內容:%s@\(^[[:space:]]…

    Linux干貨 2016-10-17
欧美性久久久久