天天看點

計算機與作業系統基礎小結

  計算機基礎概念

  1946年二月美國,世界上第一台電子計算機ENIAC誕生,似乎從這一年開始世界便逐漸變得不一樣了。随着半個世紀的時間,計算機技術蓬勃發展,推動人類進入資訊社會。

  計算機操作界面:

  ①圖形使用者界面

  ②指令行界面

  在ENIAC計算機研制的同時,馮.諾依曼與莫爾小組合作研制EDVAC計算機,采用了存儲程式方案,即把解題過程中的每一步用指令表示,并按執行順序編寫成為程式,存放在存儲器中,稱為馮.諾依曼計算機。馮.諾依曼計算機有着如下幾個特點。

  (1)計算機由運算器,控制器,存儲器,輸入裝置,輸出裝置五部分組成。

  (2)采用存儲程式的方式,程式和資料放在同一個存儲器中,并以二進制碼表示。

  (3)指令由操作碼和位址碼組成。

  (4)指令在存儲器中按執行順序存放,有指令計數器(PC)指名要執行的指令所在的存儲單元位址。

  (5)計算機以運算器為核心,運算器進行數字運算有算術運算和邏輯運算兩大類,由控制器協調操作運算器和其他裝置之間的操作,存儲器以随機存儲器RAM為主,輸入輸出裝置與存儲器間的資料傳送都通過運算器。

  根據電子計算機所采用的實體器件的發展,一般把電子計算機的發展分成五個階段,習慣上稱之為五代。

  第一代:電子管計算機計算機時代

  第二代:半導體計算機計算機時代

  第三代:內建電路計算機計算機時代

  第四代:大規模內建電路計算機時代

  第五代:超大規模內建電路計算機時代

  計算機的硬體是計算機實作各種功能的基礎,軟體則是實作功能的方法,由指令加上資料構成的,将頻率轉換成資訊類型讓邏輯硬體能夠了解并運作。如遙控器紅外線操控功能和觸摸屏進行邏輯轉換變成二進制的機器語言形式能夠讓計算機了解。

  計算機語言有機器語言,微碼語言(彙編語言)和進階語言三大類,機器語言作為計算機最底層的語言,它的普适性最強但針對性弱,是由二進制直接實作的,在計算機剛出現那會人們便是利用機器語言來對計算機進行操作,但由于機器語言都由二進制代碼寫成,這對于程式員的壓力太大,效率更是低。基于這樣的背景下彙編語言應運而生。彙編語言利用符号代替二進制碼,是以彙編語言又叫做符号語言,使用彙編語言編寫的程式,硬體不能直接識别,要利用彙程式設計式将彙編語言轉化成機器語言這樣硬體才能夠識别。對于彙編語言來說這個過程我們稱之為彙編過程,利用彙編器來達成。彙編語言與晶片的耦合度很高,但在某個晶片上編寫的彙編語言基本無法移植到其它晶片上,移植性很差,是以就出現了進階語言。進階語言有很多種,C語言,JAVA,PHP,Python,perl等每種語言皆有其針對性。C語言和JAVA為系統級語言更接近于底層,PHP,Python,perl等則為應用級語言。雖然進階語言針對性強但越接近人類的自然語言,轉化成機器語言的效率就低,會産生很多中間代碼,在運作的時候所需要的額外開銷越大。

  進階語言可分為:

  ①系統級,應用級。

  ②可分為面向過程:按照嚴格的邏輯結構來編寫代碼。面向對象:相對自由,更注重資料處理的過程,而不是資料結構。

  ③可分為強語言(編譯性語言):C語言,C++,JAVA。不聲名變量就無法使用,源代碼必須經過編譯,不編譯無法使用。弱語言(解釋性語言):PHP,Python,shell,不聲明變量也可以使用,不經過編譯,經過解釋器也可以使用。

  作業系統基礎概念

  作業系統(Operating System,OS)是配置在計算機硬體上的第一層軟體,是對硬體系統,是對硬體系統的首次擴充。其主要作用是管理好這些裝置,提高他們的使用率和系統吞吐量,并為使用者和應用程式提供一個簡單的接口,便于使用者使用。

  目前我們使用的計算機是數字裝置即能夠進行數字資訊處理和運算的裝置。隻能了解二進制代碼的數字裝置。是以任何一個程式想要在計算機上運作,必須編碼成二進制代碼形式才能被底層硬體所接受,但底層硬體太過簡單和醜陋,是以為了友善程式員的開發,供貨商會為這些底層醜陋的硬體配置設定彙編接口,但這些彙編接口也很底層。為了能夠很很好的利用這些彙編接口則需要一個能完成彙編功能的程式——驅動程式。一開始,因為不同的硬體需要不同的彙程式設計式,為了能夠對計算機底層硬體進行使用,會為每一個底層硬體的彙編接口編寫一個對應的驅動程式進行驅動。但是随着計算機的不斷發展,後來的人覺得使用一個硬體就要編寫一個對應的驅動程式太過複雜,就有人專門開發這些計算機底層的硬體,封裝成一個整體,并且共享出來,這樣程式員在開發程式時就不需要自行編寫這些代碼,直接調用即可。這樣程式員在開發程式時,直接調用驅動程式就可以通路硬體,彙編成二進制流就可以被CPU直接處理了。

  作業系統又稱為硬體虛拟抽象層。是把硬體虛拟化抽象出來的。(如D盤圖示等)不直接去使用硬體,而是用一種代替,虛拟的方式去使用硬體。給硬體配置設定資源,監控,防止出現資源配置設定不合理的情況。資源配置設定不合理,資源浪費會導緻系統不運作。這裡的作業系統即為核心(kernal)。kernal這個監控程式隻是負責把底層的硬體驅動起來并且把底層硬體的各種資源虛拟化。如空間複用,時間複用。

  操作接口(shell),使用操作接口的程式顯示在界面時容易管理,反之則不容易管理。有的應用程式是需要與操作接口作用,産生圖示在界面上,有的直接通過作業系統通路核心,而不直接與操作接口作用顯示在界面上(如木馬)。

  作業系統核心可以很好的承上啟下,即作業系統的接口與核心kernal之間的聯系。核心可以很好的屏蔽底層醜陋的硬體将虛拟化的硬體資源放在計算機界面上友善使用者的使用。軟體尋找作業系統接口和使用作業系統的接口的過程叫system call,利用這個接口把我們需要的資訊,和需要做的操作通過接口傳遞到作業系統的核心中。即系統調用。調用系統接口的不是程式而是程序。程式是靜态的是死的,程序是動态的,是活的。應用程式通過操作接口shell,經過系統調用到作業系統核心,由核心進行彙編,将進階語言翻譯成彙編語言再翻譯成計算機能夠了解的機器語言,進而對硬體進行調用。

  一個完整的作業系統由核心和各種應用程式組成,核心通過屏蔽底層硬體醜陋的接口,虛拟硬體接口以友善使用者使用。這些抽象出來的接口,我們稱之為系統調用。在程式員程式設計時采用的代碼需要哪些接口,這些需要事先了解清楚再編寫代碼,否則所編寫的代碼與作業系統的接口無法比對上便無法在此作業系統上運作調試。是以程式員必須事先了解清楚作業系統有着哪些接口,但作業系統的接口有着上百個,這對于程式員來說也是一種很大的壓力,于是就有一些人将一些常用的到作業系統接口封裝成一個庫即Library。Library中包含了大量的方法,程式員可以基于庫接口進行程式設計也可以基于核心接口進行程式設計。在Linux領域,庫接口的調用更加自由,友善。這些庫也稱為API(Application Program Interface).

  如果程式員在程式設計時使用的是windows作業系統接口,想要在Linux作業系統中運作調試這一段程式,就要确定起初在編寫程式時的windows操作接口與現在要運作環境下的作業系統的API庫能否統一調用。即POSIX(Portable Operating System)可移植作業系統。任何一個遵守了POSIX 規範的程式代碼可以在不同的作業系統上使用。

  程式設計接口相容并不意味着二進制接口相容,也就是說,在程式員編寫代碼時對作業系統的接口能夠相容但并不意味着能将所編寫程式的語言轉化成二進制機器語言讓硬體進行操作。這裡的二進制接口相容即ABI(Application Binary Interface)。将程式的源代碼轉化為二進制代碼來實作。源代碼能不能編譯取決于API能不能相容,源代碼編譯後能不能執行取決于ABI能不能相容。

  通路界面程式可以分為兩大類:

  ①圖形使用者界面(GUI)

  ②指令行界面(CLI)

  我們常用的windows系統都有一個桌面,這個桌面就是圖形使用者界面,初學者使用電腦利用GUI會更容易上手,但是但凡是使用過CLI的人都知道,使用CLI的效率要比使用GUI的要高得多。CLI的入門門檻較高,這也導緻了許多人不喜歡使用。但是隻要一入門,你就會發現指令行界面是非常簡單的。使用起來幾乎是透明的,哪一個環節出現問題都能迅速找到并且解決。

  從1945年誕生的第一台計算機到50年代中期的計算機,都屬于第一代計算機。這是還未出現OS,對計算機的全部操作都是由使用者采取人工操作方式進行的。由程式員将事先已穿孔的紙帶,裝入紙帶輸入機,再啟動它們将紙帶上的程式和資料輸入計算機,然後啟動計算機運作。為了解決人機沖突和I/O裝置之間速度不比對的沖突,20世紀50年代末出現了脫機I/O技術。該技術是事先将裝有使用者程式和資料的紙帶裝入紙帶輸入機,在一台外圍機的控制下,把紙帶上的資料輸入到錄音帶上,當CPU需要這些程式和資料時再從錄音帶高速地調入到記憶體。為了能夠充分提高計算機資源的使用率,先把一批作業以脫機方式輸入到錄音帶上,并在系統中配上監督程式,在它的控制下,使這批作業能夠一個接一個地連續處理。雖然系統對作業的處理是成批進行,但在記憶體中始終隻保持一道作業,故稱為單道批處理。但單道批處理系統中的資源得不到充分的利用,因為記憶體中僅有一道程式是以該程式在發出I/O請求後,CPU便處于等待狀态。為了進一步提高資源使用率和系統吞吐量,在20世紀60年代中期引入了多道程式的設計技術,由此形成多道批處理系統。在該系統中,,使用者所I送出的作業先存放在外村上,并排成一個隊列。然後由作業排程程式按一定的算法從隊列中選若幹個作業進入記憶體,使他們共享CPU的和系統中的各種資源,由于同時在記憶體中有若幹程式,這樣便可以在運作程式A時,利用其因I/O操作而暫停執行的空擋時間在排程另一程式B執行,使多道程式交替執行,這樣就可以使CPU處于忙碌狀态。

本文轉自 wujunqi1996 51CTO部落格,原文連結:http://blog.51cto.com/12480612/1889800