天天看點

程式設計基礎概念:作業系統

程式設計基礎概念:作業系統

程式設計基礎概念

程式設計既然是一個學科和獨立的工業,就會有一套自成體系的概念術語和方法,甚至有一套自己的哲學。我們下面簡略了解一下。

想進一步了解,建議看看幾本書:

Hofstadte侯世達《Gödel, Escher, Bach》,中譯本《哥德爾.艾舍爾.巴赫:集異璧之大成》

Harold Abelson《Structure and Interpretation of Computer Programs》,這本書作為MIT入門教材很多年,簡稱SICP,中譯本《計算機程式的構造和解釋》

Bryant和O’Hallaron《Computer Systems: A Programmer’s Prospective》,中譯本《深入了解計算機系統》

作業系統

上面我們探索到了一台理論上的計算機是什麼樣子的。為了讓大家能使用計算機,這麼一台裸機肯定是不行的,不能讓大家自己去管理CPU,管理記憶體,管理輸入輸出裝置,管理程式裝載。這些底層的工作是統一的,不需要每一個使用計算機的人自己動手去做。

這就誕生了作業系統,把計算機的這些組成部件的管理給包起來,然後使用計算機的人其實使用的是作業系統。

作業系統可以看成是一個排程程式,它負責管理計算機這台裝置,包括CPU、記憶體和I/O裝置。那它排程什麼東西呢?如果一台計算機是一種專用的機器,其實不需要排程的,但是計算機設計之初就定位為一台通用的計算機器,是以原則上一台計算機會運作很多程式。如果規定這些程式要排隊,一個運作完之後才運作下一個,實際上也沒有什麼好排程的。

曆史上,電子計算機剛發明出來的頭幾年,是沒有什麼作業系統的,全是手工操作。程式員将穿孔的紙帶裝入輸入機,然後啟動輸入機把程式和資料輸入計記憶體,接着通過控制台開關啟動程式針對資料運作;計算完畢,列印輸出計算結果;使用者取走結果并卸下紙帶(或卡片)後,才讓下一個使用者上機。

而現在你熟悉的實際情況是一台計算機上會同時運作很多程式,我們邊寫作邊放音樂,還在通過網絡下載下傳檔案,甚至同時在social網絡上聊天。對這些程式任務的管理,是作業系統要處理的核心事務,每一個程式都需要占用計算機的計算資源,如CPU如記憶體如輸入輸出裝置,互相之間不能打架,是以需要一個排程機制。

曆史上誕生過很多種作業系統。

首先出現的是批處理系統,在它的控制下,計算機能夠自動地、成批地處理一個或多個使用者的作業(這作業包括程式、資料和指令)。這一下大大提高了效率,不過CPU的性能還是沒有充分利用,因為輸入輸出這些操作要通過機電裝置,是很慢的,作為純粹的電子裝置的CPU大部分時間要等着這些裝置完成工作。

為了克服這些沖突,出現了多道程式技術,允許多個程式同時進入記憶體并運作。我們這裡要了解“同時”這個詞的含義,它是一種對人的感受來講的“同時”,因為CPU隻有一個,嚴格說起來,是沒有同時的,一個瞬間隻執行一條指令。實際上,是讓這些任務交替在CPU中運作,它們共享系統中的各種硬、軟體資源。當一道程式因I/O請求而暫停運作時,CPU便立即轉去運作另一道程式。CPU很快,雖然它是交替為這些程式服務,但是從人的感受來講是多個任務同時在運作。

這樣一步一步演變成現代的作業系統。

比較主流的作業系統有:

Unix

Unix作業系統是一種強大的多任務、多使用者作業系統。1971年,Ken Thompson編寫了第一個版本,後來Dennis M.Ritchie加入改寫,是以我們一般把Thompson和Ritchie稱為Unix發明人。Unix是強大的系統,但是它的核心卻是非常小的,1979年釋出的正式Unix的核心是有40KB。

程式設計基礎概念:作業系統

(Ken Thompson,1943.2.4 - ,Dennis Ritchie,1941.9.9-2011.10.12,圖檔來源:維基百科)

Linux

1991年,芬蘭的Linus Torvalds釋出了Linux核心系統。後來很多開發者加入,

釋出了不同的發行版本,如UBuntu,Centos。

程式設計基礎概念:作業系統

(Linus Torvalds,1969.12.28 - ,圖檔來源:維基百科)

Windows

由Microsoft公司在1980年代研發。

Mac OS

由Apple公司在1970年代研發。