計算機簡史(操做系統篇)

引言windows

在人類編寫的軟件裏面,尚未哪種,是如此的重要的,以致於其的出現,深入的影響了整個程序界的走向,能夠說,一個操做系統的進化史就能在很大程度的表明了程序世界的發展軌跡函數

本質上,操做系統與其餘軟件並沒有任何的區別,都是邏輯+數據,而後它是如此之重要,因此人們把它與其餘軟件分離開來測試

操做系統稱呼爲系統軟件,其餘基於操做系統的軟件稱呼爲應用軟件google

然而這種劃分,經常給初學者帶來困惑與恐懼,使得他們不敢,不肯意用對待日常軟件的日常心去對待它,這是很很差的spa

在正式開始以前操作系統

  不管你是否相信,全部的軟件功能都是可以使用硬件實現的,就像是組裝積木,硬件就像是簡單的三角形,圓形木塊,軟件就是利用那些三角形,圓形拼成房子,汽車,拼成模擬的世界.net

   軟件實際上是一個過程,一個拼裝積木的過程,那麼若是有一天,你想要一個房子,而有人給你提供了一個房子形狀的積木(硬件),那麼拼裝的過程(軟件)就再也不須要了線程

  軟件存在的意義就在於,咱們的技術有限,硬件沒法提供一個完整的積木,只能使用軟件,對那些零散的積木去進行拼裝設計

  操做系統是一個軟件,應用程序一樣是軟件,都是一種過程htm

  它們之間的關係,與高級語言中 語言 與 編譯器 的關係相似

參考: http://blog.csdn.net/only_lonely/archive/2010/03/16/5386552.aspx

應用軟件說 : 哥們,幫我跟硬盤說下,我要XXX文件 –> 與機器無關的,抽象的語意

操做系統對應用軟件說 : 好的,您稍等 –> 與機器無關的,抽象的語意

操做系統對硬件說: 硬盤編號9527,把你的磁盤轉動三圈半... ... –> 與機器有關的,具體的語意

當硬件操做完畢

操做系統對應用軟件說 : "您要的文件在這裏,請拿好" –> 與機器無關的,抽象的語意

事實就是如此簡單

注意:

操做系統的核心就是抽象掉硬件的細節,爲更高層軟件服務,這纔是它的精髓

所謂的進程,線程,內存管理,系統與應用軟件分層,這些都只是操做系統爲了更好的完成任務,而創造出的一種概念,一種行爲方式

爲了讓你更好的明白,理解操做系統的核心,請你忽略,無視掉那些紛繁的概念,好的,如今,咱們有一個操做系統,純淨的,不含一絲雜質的操做系統,沒有進程,沒有線程,沒有那該死的內存管理,沒有那該死的R3與R0之分,它惟一擁有的只是一個叫作 中斷 的東西,好了~一切拖沓的鋪墊都已經結束,讓咱們開始吧

一 操做系統是死的!

在不少人的眼睛裏,操做系統是富有活力的,精力四射的,它無處不在,時刻運行,時刻準備爲你提供服務

其實,這是一種錯誤的理解,要理解這種錯誤,須要從CPU的工做方式提及

就在不久以前,咱們每臺電腦上只有一個CPU,而每一個CPU同一時刻內,只能作一件事情

你能夠想象一下,當CPU正在處理你的應用程序的時候.操做系統怎麼辦呢?

答案很簡單,操做系統的代碼沒有被運行,它就安靜的躺在那裏,像一具屍體

注意:操做系統並非像不少人認爲的那樣,是一個無處不在的管家,它只在有須要的時候運行

操做系統只在須要的時候運行?

什麼是須要的時候呢?

很簡單,當應用程序或硬件呼叫它的時候,有一種被硬件支持的方式 "中斷" 高效地實現了應用程序(硬件)調用操做系統(硬件)的服務

什麼是中斷? 百度一下,你就知道,若是你把它當成函數調用,我也不十分介意

http://baike.baidu.com/view/121718.htm

好的,如今咱們有了一個屍體般的操做系統,當你調用它的時候,它爲你服務,當你永遠不調用它(這是可能的),它將永遠不被執行,這就是最簡單的操做系統(如今已經被淘汰,但歷史上真的曾經存在),沒有線程,沒有進程,沒有該死的內存管理,你看見了,只要你願意,一切均可以如此簡單

請看下面的一個簡單代碼

    while(true)

     {

          // do something bad

      }

在咱們僅擁有的"純淨"操做系統中,這樣的應用程序代碼將會是一個災難,你的機器將會陷入癱瘓,

毫無疑問,這樣作是很差的~

並且有個特別有意思的地方,操做系統的發展能夠簡單的被認爲,就是爲了更好的解決上述代碼所帶來困擾

是的,沒錯!

   while(true)

     {

          // do something bad

      }

這是一段神奇的代碼,操做系統的一次又一次的發展,進化,就是爲了減緩,下降上面代碼帶來的杯具~

二 中斷讓屍體動起來

如前所述,操做系統就像屍體,你不去用中斷去刺激它,它永遠不會動一下

那如何讓屍體(操做系統)動起來,像個正常的人同樣?

很簡單,不斷的用中斷,去刺激它就行,

感謝萬能的計算機,讓這個世界上,有一種中斷叫時間中斷

何謂時間中斷?

就是每隔一個固定的時間,觸發一箇中斷,打斷CPU的執行序列,去執行操做系統的代碼

嗯,如今好了~屍體已經動起來了

但是,一個動起來的屍體,有什麼用呢?

讓咱們再來看一下那段神奇的代碼

while(true)

     {

          // do something bad

    }

當你的計算機陷入到上述代碼不能自拔的時候,操做系統有機會藉由時間中斷,搶奪過CPU的擁有權,從而使得它有機會終止那個錯誤的程序,或者安排另外一個程序運行

安排另外一個程序運行

我但願讀者不要忽視這句話,安排是個動詞,是一我的才能作到的事情,而不是一具屍體能夠作到的,經過時間中斷,屍體般的操做系統,作到了人才能作到的事情,這在醫學上叫作什麼呢? 借屍還魂?

這是問題的一個方面,另外一個方面是 "另外一個程序運行",嗯~有意思了哦,

作一個惡毒的假設,若是你的電腦在聽音樂的時候不能看小說,在打字的時候,不能聽音樂,在掛QQ的時候,沒法瀏覽網頁,你會想砸掉電腦,另買一個嗎?(要是我,我會有那種衝動),CPU一個時刻只能運行一個程序,正是有了時間中斷,快速的切換,纔可以讓咱們的電腦看上去,好像可以同時運行多個程序

接下來的,要引出一個內存的概念

別懼怕,這裏要說的是一個最基本的內存的概念.

什麼是內存,內存就是一個地方,存放着程序的代碼,數據,讓CPU去存取,操做

嗯,回到剛纔的話題,時間中斷製造出了多任務的假象,可使得計算機好像是能同時運行多個程序

只有一個問題,那多個運行的程序,存放在哪裏呢?

它們連同操做系統(操做系統也是個軟件)存放在同一個內存裏

讓咱們再看一下,那段悲情的代碼

while(true)

     {

          // do something bad

    }

while(true)的問題,經過時間中斷解決了,但是那句 do something bad 呢?

你知道的,連同操做系統在內的全部程序都存在內存裏面

若是,那句 do something bad 恰巧把操做系統代碼所在的內存中的內容給破壞

當下一個時間中斷降臨時,將會發生什麼?

2012 ... ...

三 麪包,有了~奶酪,也有了

若是,這個世界上,有某種東西,可讓每一個應用程序之間獨立運行,不受干擾,

若是,這個世界上,有某種東西,可使得就算應用程序設計的再糟糕,再亂來,也沒法破壞其餘應用程序所擁有的內存

是的,那不是幻想,是真實存在那種東西,那種東西是一系列技術的集合,籠統的咱們把它叫作虛擬內存技術.

嗯,麪包有了,奶酪也有了,一瞬間,世界變的美好起來了,不是嗎?

有關於虛擬內存技術的實現細節,拜託,若是要說,那能夠再寫5000字

有興趣的童鞋,能夠baidu或者google

值得一提的事是,從虛擬內存地址到真實內存地址的映射,是由硬件提供的~

抽象硬件,給應用程序更好的接口,這本是操做系統的責任,如今卻由硬件完成,這再一次證實了,硬件與軟件之間,沒有明顯的界限

出於娛樂的目的,咱們再看一下,那段神奇的代碼

while(true)

     {

          // do something bad

    }

你能夠在do something bad 中任意加上你認爲足夠胡鬧的代碼,而後測試一下,看它能不能幹掉你的操做系統

四 一點聲明

本文並非嚴謹的論文,僅僅是從一個方面,粗淺的講述了一下操做系統的發展歷程,本文沒有涉及到的內容,概念有不少,可是,只要把握操做系統的核心--"抽象硬件,爲應用程序提供更方便的接口",從這裏出發,不要心懷畏懼,一切都會很簡單 :-)

五 windows下的一個小例子

  當按下鍵盤上A鍵時,鍵盤(硬件)觸發一箇中斷,操做系統運行,檢索出是哪一個鍵按下,而後把按鍵信息發送到當前激活的窗口的消息循環,而後,當該程序運行的時候(時間中斷),從消息循環中取出消息,識別,然後處理... ... :-)

 

only_lonely 原創,歡迎轉載,請務必註明出處

相關文章
相關標籤/搜索