計算機基礎與編程語言

1,編程語言的做用及與操做系統和硬件的關係linux

編程語言是一種語言,及它和其餘的語言同樣,都是用來溝通的介質。程序員編程的本質就是讓計算機去工做,而編程語言就是程序員與計算機溝通的介質,因此編程語言的做用就是與計算機進行溝通,經過這種語言讓計算機明白你想讓它乾的事情是什麼。ios

一套完整的計算機系統分爲:計算機硬件,操做系統,軟件。而操做系統控制着計算機硬件程序員

2,應用程序-》操做系統-》硬件web

應用程序也就是一般所說的軟件,程序用編程語言寫程序,最終開發出的結果就是一個軟件,既然是軟件,那就與騰訊qq、暴風影音、快播等軟件沒有區別了。這些軟件必須運行在操做系統之上,你確定會問:爲什麼要有操做系統呢?沒錯,遠古時代的程序員確實是在沒有操做系統的環境下,用編程語言之間操做硬件來編程的,你可能以爲這沒有問題,但其實問題是至關嚴重的,由於此時你必須掌握如何操做硬件的全部具體細節,好比如何具體操做硬盤(如今你得把硬盤拆開,而後你能看見的全部的東西,你都得研究明白,由於你編程時要用到它),這就嚴重影響了開發的效率,操做系統的出現就是運行於硬件之上,來控制硬件的,咱們開發時,只須要調用操做系統爲咱們提供的簡單而優雅的接口就能夠了。數據庫

3,cpu-》內存-》磁盤編程

cpu是人的大腦,負責運算緩存

內存是人的記憶,負責臨時存儲網絡

硬盤是人的筆記本,負責永久存儲架構

4,cpu與寄存器,內核態與用戶態及如何切換編程語言

計算機的大腦就是CPU,它從內存中取指令->解碼->執行而後再取指->解碼->執行下一條指令,周而復始,直至整個程序被執行完成。

每一個cpu都有一套可執行的專門指令集,任何軟件的執行最終都要轉化成cpu的指令去執行。因此Pentium(英特爾第五代x86架構的微處理器)不能執行SPARC(另一種處理器)的程序。這就比如不一樣的人腦,對於大多數人類來講,人腦的結構同樣,因此別人會的東西你也均可以會,但對於愛因斯坦的腦子來講,它會的你確定不會。

因訪問內存以獲得指令或數據的時間比cpu執行指令花費的時間要長得多,因此,全部CPU內部都有一些用來保存關鍵變量和臨時數據的寄存器,這樣一般在cpu的指令集中專門提供一些指令,用來將一個字(能夠理解爲數據)從內存調入寄存器,以及將一個字從寄存器存入內存。cpu其餘的指令集能夠把來自寄存器、內存的操做數據組合,或者用二者產生一個結果,好比將兩個字相加並把結果存在寄存器或內存中。

內核態:當cpu在內核態運行時,cpu能夠執行指令集中全部的指令,很明顯,全部的指令中包含了使用硬件的全部功能,(操做系統在內核態下運行,從而能夠訪問整個硬件)

用戶態用戶程序在用戶態下運行,僅僅只能執行cpu整個指令集的一個子集,該子集中不包含操做硬件功能的部分,所以,通常狀況下,在用戶態中有關I/O和內存保護(操做系統佔用的內存是受保護的,不能被別的程序佔用),固然,在用戶態下,將PSW中的模式設置成內核態也是禁止的。

內核態與用戶態切換  

  用戶態下工做的軟件不能操做硬件,可是咱們的軟件好比暴風影音,必定會有操做硬件的需求,好比從磁盤上讀一個電影文件,那就必須經歷從用戶態切換到內核態的過程,爲此,用戶程序必須使用系統調用(system call),系統調用陷入內核並調用操做系統,TRAP指令把用戶態切換成內核態,並啓用操做系統從而得到服務。

  請把的系統調用當作一個特別的的過程調用指令就能夠了,該指令具備從用戶態切換到內核態的特別能力。

5,存儲器系列,L1緩存,L2緩存,內存(RAM),EEPROM和閃存,CMOS與BIOS電池

 

計算機中第二重要的就是存儲了,全部人都意淫着存儲:速度快(這樣cpu的等待存儲器的延遲就下降了)+容量大+價錢便宜。而後同時兼備三者是不可能的,因此有了以下的不一樣的處理方式

存儲器系統採用如上圖的分層結構,頂層的存儲器速度較高,容量較小,與底層的存儲器相比每位的成本較高,其差異每每是十億數量級的

 

寄存器即L1緩存:

用與cpu相同材質製造,與cpu同樣快,於是cpu訪問它無時延,典型容量是:在32位cpu中爲32*32,在64位cpu中爲64*64,在兩種狀況下容量均<1KB。

高速緩存即L2緩存:

主要由硬件控制高速緩存的存取,內存中有高速緩存行按照0~64字節爲行0,64~127爲行1。。。最經常使用的高速緩存行放置在cpu內部或者很是接近cpu的高速緩存中。當某個程序須要讀一個存儲字時,高速緩存硬件檢查所須要的高速緩存行是否在高速緩存中。若是是,則稱爲高速緩存命中,緩存知足了請求,就不須要經過總線把訪問請求送往主存(內存),這畢竟是慢的。高速緩存的命中一般須要兩個時鐘週期。高速緩存爲命中,就必須訪問內存,這須要付出大量的時間代價。因爲高速緩存價格昂貴,因此其大小有限,有些機器具備兩級甚至三級高速緩存,每一級高速緩存比前一級慢可是容易大。

  緩存在計算機科學的許多領域中起着重要的做用,並不只僅只是RAM(隨機存取存儲器)的緩存行。只要存在大量的資源能夠劃分爲小的部分,那麼這些資源中的某些部分確定會比其餘部分更頻發地獲得使用,此時用緩存能夠帶來性能上的提高。一個典型的例子就是操做系統一直在使用緩存,好比,多數操做系統在內存中保留頻繁使用的文件(的一部分),以免從磁盤中重複地調用這些文件,相似的/root/a/b/c/d/e/f/a.txt的長路徑名轉換成該文件所在的磁盤地址的結果真後放入緩存,能夠避免重複尋找地址,還有一個web頁面的url地址轉換爲網絡地址(IP)地址後,這個轉換結果也能夠緩存起來供未來使用。

  緩存是一個好方法,在現代cpu中設計了兩個緩存,再看4.1中的兩種cpu設計圖。第一級緩存稱爲L1老是在CPU中,一般用來將已經解碼的指令調入cpu的執行引擎,對那些頻繁使用的數據自,多少芯片還會按照第二L1緩存 。。。另外每每設計有二級緩存L2,用來存放近來常用的內存字。L1與L2的差異在於對cpu對L1的訪問無時間延遲,而對L2的訪問則有1-2個時鐘週期(即1-2ns)的延遲。

內存:

再往下一層是主存,此乃存儲器系統的主力,主存一般稱爲隨機訪問存儲RAM,就是咱們一般所說的內存,容量一直在不斷攀升,全部不能再高速緩存中找到的,都會到主存中找,主存是易失性存儲,斷電後數據所有消失

除了主存RAM以外,許多計算機已經在使用少許的非易失性隨機訪問存儲如ROM(Read Only Memory,ROM),在電源切斷以後,非易失性存儲的內容並不會丟失,ROM只讀存儲器在工廠中就被編程完畢,而後不再能修改。ROM速度快且便宜,在有些計算機中,用於啓動計算機的引導加載模塊就存放在ROM中,另一些I/O卡也採用ROM處理底層設備的控制。

EEPROM(Electrically Erasable PROM,電可擦除可編程ROM)和閃存(flash memory)也是非易失性的,可是與ROM相反,他們能夠擦除和重寫。不太重寫時花費的時間比寫入RAM要多。在便攜式電子設備中中,閃存一般做爲存儲媒介。閃存是數碼相機中的膠捲,是便攜式音譯播放器的磁盤,還應用於固態硬盤。閃存在速度上介於RAM和磁盤之間,但與磁盤不一樣的是,閃存擦除的次數過多,就被磨損了。

 

還有一類存儲器就是CMOS,它是易失性的,許多計算機利用CMOS存儲器來保持當前時間和日期。CMOS存儲器和遞增時間的電路由一小塊電池驅動,因此,即便計算機沒有加電,時間也仍然能夠正確地更新,除此以外CMOS還能夠保存配置的參數,好比,哪個是啓動磁盤等,之因此採用CMOS是由於它耗電很是少,一塊工廠原裝電池每每能使用若干年,可是當電池失效時,相關的配置和時間等都將丟失。

6,磁盤結構,平均尋道時間,平均延遲時間,虛擬內存與MMU

磁盤

 

磁盤低速的緣由是由於它一種機械裝置,在磁盤中有一個或多個金屬盤片,它們以5400,7200或10800rpm(RPM =revolutions per minute 每分鐘多少轉 )的速度旋轉。從邊緣開始有一個機械臂懸在盤面上,這相似於老式黑膠唱片機上的拾音臂。信息卸載磁盤上的一些列的同心圓上,是一連串的2進制位(稱爲bit位),爲了統計方法,8個bit稱爲一個字節bytes,1024bytes=1k,1024k=1M,1024M=1G,因此咱們平時所說的磁盤容量最終指的就是磁盤能寫多少個2進制位。

每一個磁頭能夠讀取一段換新區域,稱爲磁道

把一個戈丁手臂位置上因此的磁道合起來,組成一個柱面

每一個磁道劃成若干扇區,扇區典型的值是512字節

  數據都存放於一段一段的扇區,即磁道這個圓圈的一小段圓圈,從磁盤讀取一段數據須要經歷尋道時間和延遲時間

平均尋道時間

機械手臂從一個柱面隨機移動到相鄰的柱面的時間成爲尋到時間,找到了磁道就覺得着招到了數據所在的那個圈圈,可是還不知道數據具體這個圓圈的具體位置

平均延遲時間
機械臂到達正確的磁道以後還必須等待旋轉到數據所在的扇區下,這段時間成爲延遲時間
 
 
虛擬內存:
許多計算機支持虛擬內存機制,該機制使計算機能夠運行大於物理內存的程序,方法是將正在使用的程序放入內存取執行,而暫時不須要執行的程序放到磁盤的某塊地方,這塊地方成爲虛擬內存,在linux中成爲swap,這種機制的核心在於快速地映射內存地址,由cpu中的一個部件負責,成爲存儲器管理單元(Memory Management Unit MMU)
 
PS:從一個程序切換到另一個程序,成爲上下文切換(context switch),緩存和MMU的出現提高了系統的性能,尤爲是上下文切換
7,磁帶
在價錢相同的狀況下比硬盤擁有更高的存儲容量,雖然速度低於磁盤,可是因其大容量,在地震水災火災時可移動性強等特性,常被用來作備份。(常見於大型數據庫系統中)。
8,設備驅動與控制器
I/O設備通常包括兩個部分:設備控制器和設備自己。

控制器:是查找主板上的一塊芯片或一組芯片(硬盤,網卡,聲卡等都須要插到一個口上,這個口連的即是控制器),控制器負責控制鏈接的設備,它從操做系統接收命令,好比讀硬盤數據,而後就對硬盤設備發起讀請求來讀出內容。

控制器的功能:一般狀況下對設備的控制是很是複雜和具體的,控制器的任務就是爲操做系統屏蔽這些複雜而具體的工做,提供給操做系統一個簡單而清晰的接口

設備自己:有相對簡單的接口且標準的,這樣你們均可覺得其編寫驅動程序了。要想調用設備,必須根據該接口編寫複雜而具體的程序,因而有了控制器提供設備驅動接口給操做系統。必須把設備驅動程序安裝到操做系統中。

9,總線與南橋和北橋

總線是計算機個功能部件之間傳送信息的公共通訊幹線。

北橋即PCI橋:鏈接高速設備

南橋即ISA橋:鏈接慢速設備

10,操做系統的啓動流程

1,Bios引導找到有操做系統的硬盤

2,MBR主引導記錄,從啓動設備上讀取第一個扇區的內容

3,grub選擇內核,而後讀到內存中

4,kernel找到內核代碼

11,應用軟件的啓動流程

雙擊應用程序,由操做系統到硬盤尋找這個程序的內容,而後將它讀到內存中,在由cpu調用,從而啓動應用軟件。

相關文章
相關標籤/搜索