計算機基礎知識
一、為何要學習計算機基礎?
好多人覺得自己有點基礎就都想著直接敲代碼,覺得基礎知識很容易,很簡單,就不怎麽用心去學。然而,我覺得基礎知識很重要。就像蓋一棟樓房一樣,你先要打好地基,再去蓋房。
Python是一門編程語言,即通俗一點說就是語言。
我們都知道世界上有很多種語言,比如:漢語,英語,阿拉伯語等等眾多的語言。要想用這些語言去和人溝通,如果你想和英國人說話,你必須得會英語吧。而我們的計算機也有它自己的語言,你要想讓計算機幫助我們做事情,你就需要和它溝通吧。那你就得懂得計算機語言吧,也就是編程。當然計算機也有很多語言,比如:C,Java,PHP,Python,C#等。所以我們就先從學習基礎知識開始。也有人說學習基礎理論知識很枯燥,但是,那還是得學。你要把它當成自己的興趣,一點一點的去投入它,相信你會是很棒的。
程序用編程語言來寫程序,最終開發的結果就是一個軟件。就像大家都知道的QQ,騰訊視頻,酷狗音樂等一系列軟件。這些軟件要想運行必須得有系統控制它吧。當然,有人會問:為什麽要用操作系統呢?當然,很久以前的那些程序員確實是在沒有操作環境下,編程語言是操作硬件來編寫的。你可能覺得沒問題,但是其實問題很嚴重。如果一直像以前那樣會嚴重影響效率的。操作系統是出現在硬件之上的,是用來控制硬件的。所以,我們開發時只需要調用操作系統為我們提供的簡單的接口就可以了。
如上圖所示,我把計算機的系統分為了上面三大塊。硬件,操作系統,應用程序。要想學習軟件知識,我想那些硬件的知識或多或少還是得了解點的,現在我們就來談談硬件一類的知識。
二、計算機硬件介紹
1. 硬件的目的:為了運行軟件給它的一些指令。我們可以優先從硬件中提取出這三個主要的東西,分別是: CPU,內存,硬盤
2. 在現實生活中,人腦是用來計算的,在計算機中,用來計算的是什麽呢?當然是CPU了。多數CPU都有兩種模式,即內核態與用戶態。這裏的即內核態與用戶態將會在下面的內容中講到。
3.如果我們把計算機理解為人的大腦,我們可以總結為幾句話:
CPU是人的大腦,負責運算
內存是人的記憶,負責臨時存儲
硬盤是人的筆記本,負責永久存儲
輸入設備是人的耳朵或眼睛,負責接受外部的信息傳給CPU
以上所有的設備都通過總線連接,總線相當於人的神經
總線示意圖
三、處理器(寄存器及內核態與用戶態切換)
1.計算機的大腦是CPU,它從內存中取指令-?解碼-?執行,然後在取指令,解碼,執行,周而復始,直至整個程序被執行完成。
2. 寄存器是一個存儲設備,最快的一種存儲設備就是寄存器。
3.寄存器的分類
①通用寄存器:用來保存變量和臨時結果的。
②程序計數器:它保存了將要取出的下一條指令的內存地址。在指令取出後,程序計算器就被更新以便執行後期的指令
③堆棧指針:它指向內存中當前棧的頂端。該棧包含已經進入但是還沒有退出的每個過程中的一個框架。在一個過程的堆棧框架中保存了有關的輸入參數、局部變量以及那些沒有保存在寄存器中的臨時變量
④程序狀態字寄存器(Program Status Word,簡稱PSW):這個寄存器包含了條碼位(由比較指令設置)、CPU優先級、模式(用戶態或內核態),以及各種其他控制位。用戶通常讀入整個PSW,但是只對其中少量的字段寫入。在系統調用和I/O中,PSW非常重要。
4.內核態與用戶態
多數CPU都有兩種模式,即內核態與用戶態。
①當cpu處於內核狀態時,運行的是操作系統,能控制硬件(可以獲取所有cpu的指令集)
②當cpu處於用戶太狀態時,運行的是用戶軟件,不能控制硬件(可以獲取所有cpu的指令集中的一個子集,該子集不包括操作硬件的指令集)
這裏有些人可能會含糊什麽是內核態,什麽是用戶態?下面我來解釋一下:
內核態:當cpu在內核態運行時,cpu可以執行指令集中所有的指令,很明顯,所有的指令中包含了使用硬件的所有功能,(操作系統在內核態下運行,從而可以訪問整個硬件)所以,歸根結底通俗一點的話也就是上面①解釋的那樣
用戶態:用戶程序在用戶態下運行,僅僅只能執行cpu整個指令集的一個子集,該子集中不包含操作硬件功能的部分,因此,一般情況下,在用戶態中有關I/O和內存保護(操作系統占用的內存是受保護的,不能被別的程序占用),當然,在用戶態下,將PSW中的模式設置成內核態也是禁止的。
5.內核態與用戶態切換
用戶態下工作的軟件是不能之間操作硬件的,但是像我們的一些軟件,比如暴風音影啊一類的軟件,我們要想從磁盤中讀取一個電影文件,那就得從用戶態切換成內核態,為此,用戶程序必須使用系統調用(system call),系統調用陷入內核並調用操作系統,TRAP指令把用戶態切換成內核態,並啟用操作系統從而獲得服務。
四、存儲器系列,L1緩存,L2緩存,內存(RAM),EEPROM和閃存,CMOS與BIOS電池
1. 計算機中第二重要的就是存儲了,所有人都意淫著存儲:速度快(這樣cpu的等待存儲器的延遲就降低了)+容量大+價錢便宜。然後同時兼備三者是不可能的,所以有了如下的不同的處理方式
由上圖可以很清楚的看見寄存器存儲是速度非常快的,但是它的容量卻很少。下來就是高速緩存了。我就不一一介紹了,我相信大家應該可以看得懂這個圖。
2.寄存器即L1緩存:用與cpu相同材質制造,與cpu一樣快,因而cpu訪問它無時延,典型容量是:在32位cpu中為32*32,在64位cpu中為64*64,在兩種情況下容量均<1KB。
3.高速緩存即L2緩存:主要由硬件控制高速緩存的存取,內存中有高速緩存行按照0~64字節為行0,64~127為行1。。。最常用的高速緩存行放置在cpu內部或者非常接近cpu的高速緩存中。當某個程序需要讀一個存儲字時,高速緩存硬件檢查所需要的高速緩存行是否在高速緩存中。
4.內存:主存通常稱為隨機訪問存儲RAM,就是我們通常所說的內存,容量一直在不斷攀升,所有不能再高速緩存中找到的,都會到主存中找,主存是易失性存儲,斷電後數據全部消失
5.EEPROM(Electrically Erasable PROM,電可擦除可編程ROM)和閃存(flash memory)也是非易失性的。還有一類存儲器就是CMOS,它是易失性的,許多計算機利用CMOS存儲器來保持當前時間和日期。CMOS存儲器和遞增時間的電路由一小塊電池驅動,所以,即使計算機沒有加電,時間也仍然可以正確地更新,除此之外CMOS還可以保存配置的參數,比如,哪一個是啟動磁盤等,之所以采用CMOS是因為它耗電非常少,一塊工廠原裝電池往往能使用若幹年,但是當電池失效時,相關的配置和時間等都將丟失。
五、磁盤
1.磁盤由磁頭,磁道,扇區組成的。
2.磁道:每個磁頭可以讀取一段換新區域。把一個戈丁手臂位置上所以的磁道合起來,組成一個柱面
3.每個磁道劃成若幹扇區,扇區典型的值是512字節。
4.數據都存放於一段一段的扇區,即磁道這個圓圈的一小段圓圈,從磁盤讀取一段數據需要經歷尋道時間和延遲時間,那麽什麽是尋道時間和延遲時間呢?
平均尋道時間:機械手臂從一個柱面隨機移動到相鄰的柱面的時間成為尋到時間,找到了磁道就以為著招到了數據所在的那個圈圈,但是還不知道數據具體這個圓圈的具體位置
平均延遲時間:機械臂到達正確的磁道之後還必須等待旋轉到數據所在的扇區下,這段時間成為延遲時間
六、磁帶
1.有些人會想磁帶是用來幹什麽的呢?當然,它也是內存之一,是用來存儲東西的,它的存儲量是相當大的,而且價錢也便宜。當遇上火災等緊急情況時,可以用磁帶來存儲我們的重要文件。常常用來做備份(常見於大型數據庫系統中)。但是,它也有缺點,就是運行速度特別慢,效率低。
2.cpu和存儲器並不是操作系統唯一需要管理的資源,I/O設備也是非常重要的一環。I/O設備一般包括兩個部分:設備控制器和設備本身。
控制器的功能:通常情況下對設備的控制是非常復雜和具體的,控制器的任務就是為操作系統屏蔽這些復雜而具體的工作,提供給操作系統一個簡單而清晰的接口
設備本身:有相對簡單的接口且標準的,這樣大家都可以為其編寫驅動程序了。要想調用設備,必須根據該接口編寫復雜而具體的程序,於是有了控制器提供設備驅動接口給操作系統。必須把設備驅動程序安裝到操作系統中。
七、總線
北橋即PCI橋:連接高速設備
南橋即ISA橋:連接慢速設備
八、操作系統的啟動流程
1.計算機加電
2.BIOS開始運行,檢測硬件:cpu、內存、硬盤等
3.BIOS讀取CMOS存儲器中的參數,選擇啟動設備
4.從啟動設備上讀取第一個扇區的內容(MBR主引導記錄512字節,前446為引導信息,後64為分區信息,最後兩個為標誌位)
5.根據分區信息讀入bootloader啟動裝載模塊,啟動操作系統
6.然後操作系統詢問BIOS,以獲得配置信息。對於每種設備,系統會檢查其設備驅動程序是否存在,如果沒有,系統則會要求用戶按照設備驅動程序。一旦有了全部的設備驅動程序,操作系統就將它們調入內核。然後初始有關的表格(如進程表),穿件需要的進程,並在每個終端上啟動登錄程序或GUI
九、應用程序的啟動流程
1.雙擊快捷方式
2.告訴操作系統一個文件路徑
3.操作系統從硬盤讀取文件到內存中
4.cpu從內存中讀取數據執行
計算機基礎知識