1. 程式人生 > >【併發程式設計】 作業系統介紹

【併發程式設計】 作業系統介紹

目錄

一、為什麼要有作業系統

二、什麼是作業系統

三、作業系統與普通軟體的區別

四、作業系統發展史


 

 一、為什麼要有作業系統

現代的計算機系統主要是由一個或者多個處理器,主存,硬碟,鍵盤,滑鼠,顯示器,印表機,網路介面及其他輸入輸出裝置組成。   

 一般而言,現代計算機系統是一個複雜的系統。

 其一:如果每位應用程式設計師都必須掌握該系統所有的細節,那就不可能再編寫程式碼了(嚴重影響了程式設計師的開發效率:全部掌握這些細節可能需要一萬年....)

 其二:並且管理這些部件並加以優化使用,是一件極富挑戰性的工作,於是,計算安裝了一層軟體(系統軟體),稱為作業系統。它的任務就是為使用者程式提供一個更好、更簡單、更清晰的計算機模型,並管理剛才提到的所有裝置。

總結:

程式設計師無法把所有的硬體操作細節都瞭解到,管理這些硬體並且加以優化使用是非常繁瑣的工作,這個繁瑣的工作就是作業系統來乾的,有了他,程式設計師就從這些繁瑣的工作中解脫了出來,只需要考慮自己的應用軟體的編寫就可以了,應用軟體直接使用作業系統提供的功能來間接使用硬體。

二、什麼是作業系統

作業系統就是一個協調、管理和控制計算機硬體資源和軟體資源的控制程式。

作業系統位於計算機硬體與應用軟體之間,本質也是一個軟體。作業系統由作業系統的核心(運行於核心態,管理硬體資源)以及系統呼叫(運行於使用者態,為應用程式設計師寫的應用程式提供系統呼叫介面)兩部分組成,所以,單純的說作業系統是運行於核心態的,是不準確的。

操作新系統示意圖

作業系統應該分成兩部分功能:

  1. 隱藏了醜陋的硬體呼叫介面,為應用程式設計師提供呼叫硬體資源的更好,更簡單,更清晰的模型(系統呼叫介面)
  2. 將應用程式對硬體資源的競態請求變得有序化。

三、作業系統與普通軟體的區別

1.主要區別是:你不想用暴風影音了你可以選擇用迅雷播放器或者乾脆自己寫一個,但是你無法寫一個屬於作業系統一部分的程式(時鐘中斷處理程式),作業系統由硬體保護,不能被使用者修改。

2.作業系統與使用者程式的差異並不在於二者所處的地位。特別地,作業系統是一個大型、複雜、長壽的軟體,

  • 大型:linux或windows的原始碼有五百萬行數量級。按照每頁50行共1000行的書來算,五百萬行要有100卷,要用一整個書架子來擺置,這還僅僅是核心部分。使用者程式,如GUI,庫以及基本應用軟體(如windows Explorer等),很容易就能達到這個數量的10倍或者20倍之多。
  • 長壽:作業系統很難編寫,如此大的程式碼量,一旦完成,作業系統所有者便不會輕易扔掉,再寫一個。而是在原有的基礎上進行改進。(基本上可以把windows95/98/Me看出一個作業系統,而windows NT/2000/XP/Vista則是兩位一個作業系統,對於使用者來說它們十分相似。還有UNIX以及它的變體和克隆版本也演化了多年,如System V版,Solaris以及FreeBSD等都是Unix的原始版,不過儘管linux非常依照UNIX模式而仿製,並且與UNIX高度相容,但是linux具有全新的程式碼基礎)

四、作業系統發展史

第一代計算機(1940~1955):真空管和穿孔卡片

第一代計算機的產生是計算機從機械時代進入電子時代的標誌。第一代計算機運用真空管構成的積體電路實現計算,而儲存器的儲存介質是一種打孔卡片。人們先把程式紙帶(或卡片)裝上計算機,然後啟動輸入機把程式和送入計算機,接著通過控制檯開關啟動程式執行。計算完畢,印表機輸出計算結果,使用者卸下並取走紙帶(或卡片)。第二個使用者上機,重複同樣的步驟。

特點:

沒有作業系統的概念

所有的程式都是直接操控硬體

工作過程:

程式設計師在牆上的機時表預約一段時間,然後程式設計師拿著他的外掛版到機房裡,將自己的外掛板街道計算機裡,這幾個小時內他獨享整個計算機資源,後面的一批人都得等著(兩萬多個真空管經常會有被燒壞的情況出現)。

後來出現了穿孔卡片,可以將程式寫在卡片上,然後讀入機而不用外掛板。

優點:

程式設計師在申請的時間段內獨享整個資源,可以即時地除錯自己的程式(有bug可以立刻處理)

缺點:

浪費計算機資源,一個時間段內只有一個人用。
注意:同一時刻只有一個程式在記憶體中,被cpu呼叫執行,比方說10個程式的執行,是序列的

第二代計算機(1955~1965):電晶體和批處理系統

第二代計算機的產生背景:

由於當時的計算機非常昂貴,自認很自然的想辦法較少機時的浪費。通常採用的方法就是批處理系統。

特點:
設計人員、生產人員、操作人員、程式人員和維護人員直接有了明確的分工,計算機被鎖在專用空調房間中,由專業操作人員執行,這便是‘大型機’。

有了作業系統的概念

有了程式設計語言:FORTRAN語言或組合語言,寫到紙上,然後穿孔打成卡片,再講卡片盒帶到輸入室,交給操作員,然後喝著咖啡等待輸出介面

工作過程:如圖

第二代計算機示意圖

第二代如何解決第一代的問題/缺點:
1.把一堆人的輸入攢成一大波輸入,
2.然後順序計算(這是有問題的,但是第二代計算也沒有解決)
3.把一堆人的輸出攢成一大波輸出

現代作業系統的前身:(見圖)

優點:批處理,節省了機時

缺點:
1.整個流程需要人蔘與控制,將磁帶搬來搬去(中間倆小人)

2.計算的過程仍然是順序計算-》序列

3.程式設計師原來獨享一段時間的計算機,現在必須被統一規劃到一批作業中,等待結果和重新除錯的過程都需要等同批次的其他程式都運作完才可以(這極大的影響了程式的開發效率,無法及時除錯程式)

第三代計算機(1965~1980):積體電路晶片和多道程式設計

第三代計算機的產生背景:

20世紀60年代初期,大多數計算機廠商都有兩條完全不相容的生產線。

一條是面向字的:大型的科學計算機,如IBM 7094,見上圖,主要用於科學計算和工程計算

另外一條是面向字元的:商用計算機,如IBM 1401,見上圖,主要用於銀行和保險公司從事磁帶歸檔和列印服務

開發和維護完全不同的產品是昂貴的,同時不同的使用者對計算機的用途不同。

IBM公司試圖通過引入system/360系列來同時滿足科學計算和商業計算,360系列低檔機與1401相當,高檔機比7094功能強很多,不同的效能賣不同的價格

360是第一個採用了(小規模)晶片(積體電路)的主流機型,與採用電晶體的第二代計算機相比,價效比有了很大的提高。這些計算機的後代仍在大型的計算機中心裡使用,此乃現在伺服器的前身,這些伺服器每秒處理不小於千次的請求。

如何解決第二代計算機的問題1:
卡片被拿到機房後能夠很快的將作業從卡片讀入磁碟,於是任何時刻當一個作業結束時,作業系統就能將一個作業從磁帶讀出,裝進空出來的記憶體區域執行,這種技術叫做
同時的外部裝置聯機操作:SPOOLING,該技術同時用於輸出。當採用了這種技術後,就不在需要IBM1401機了,也不必將磁帶搬來搬去了(中間倆小人不再需要)

如何解決第二代計算機的問題2:

第三代計算機的作業系統廣泛應用了第二代計算機的作業系統沒有的關鍵技術:多道技術

cpu在執行一個任務的過程中,若需要操作硬碟,則傳送操作硬碟的指令,指令一旦發出,硬碟上的機械手臂滑動讀取資料到記憶體中,這一段時間,cpu需要等待,時間可能很短,但對於cpu來說已經很長很長,長到可以讓cpu做很多其他的任務,如果我們讓cpu在這段時間內切換到去做其他的任務,這樣cpu不就充分利用了嗎。這正是多道技術產生的技術背景。

多道技術:

多道技術中的多道指的是多個程式,多道技術的實現是為了解決多個程式競爭或者說共享同一個資源(比如cpu)的有序排程問題,解決方式即多路複用,多路複用分為時間上的複用和空間上的複用。

空間上的複用:將記憶體分為幾部分,每個部分放入一個程式,這樣,同一時間記憶體中就有了多道程式。

時間上的複用:當一個程式在等待I/O時,另一個程式可以使用cpu,如果記憶體中可以同時存放足夠多的作業,則cpu的利用率可以接近100%,類似於我們小學數學所學的統籌方法。(作業系統採用了多道技術後,可以控制程序的切換,或者說程序之間去爭搶cpu的執行許可權。這種切換不僅會在一個程序遇到io時進行,一個程序佔用cpu時間過長也會切換,或者說被作業系統奪走cpu的執行許可權)。

空間上覆用的最大問題是:

程式之間的記憶體必須分割,這種分割需要在硬體層面實現,由作業系統控制。如果記憶體彼此不分割,則是一個程式可以訪問另一個程式的內容,這樣會造成兩點危害:

  • 首先是安全性,比如qq程式可以訪問作業系統的記憶體,那麼qq就能拿到作業系統的所有許可權。
  • 其次是穩定性,某個程式崩潰時有可能吧別的程式的記憶體也回收了。

第三代計算機的作業系統仍然是批處理

第四代計算機(1980~至今):個人計算機