1. 程式人生 > >(一)計算機基本組成

(一)計算機基本組成

一、計算機5大組成
運算器:運算
控制器:控制運算器到哪取資料
儲存器(記憶體):儲存資料。編址儲存裝置:平面編址
輸入裝置
輸出裝置
簡單來說:運算器從儲存器取資料,進行運算,然後將結果放到儲存器中
CPU的核心元件:運算器、控制器、暫存器。
有暫存器的原因:比如在加法計算中,是按位運算的,所以若32位就需要32根線,若還有被加數,則線的數目越多,此時就想一根線可以做多種工作,所以就有了線路複用。用控制位來作為是加數還是被加數,此時就有一個問題,它必須得有記憶,否則加數傳到運算器後,再傳被加數,原有的就沒有了,所以就有了暫存器,來暫存資料。

  • 加電自檢(Power-OnSelf-Test):
    是計算機BIOS的一個功能,在引導後會執行,針對計算機硬體如CPU 、主機板、儲存器等進行檢查,結果會顯示在韌體可以控制的輸出介面,像顯示屏、LED、印表機等裝置上。
  • **輪詢Poll:**CPU定時發出詢問,依序詢問每一個周邊裝置是否需要其服務,有即服務,服務結束後再詢問下一個周邊,接著不斷周而復始。(比如:每隔1ms就詢問一次鍵盤,是否有按下)。這種方式不會錯過任何事件,但是若使用者開機後一直沒有按鍵盤,則會浪費資源。
  • 中斷(interrupt):是計算機執行過程中,出現某些意外情況需要主機干預時,機器能自動停止正在執行的程式並轉入處理新情況的程式,處理完畢後又返回原被暫停的程式繼續執行。(比如:當用戶敲擊鍵盤時的電訊號,會發到CPU,由此引發中斷)外圍裝置就是通過中斷與CPU進行互動的。
  • 如何知道中斷是誰引起的?
    需要控制晶片,叫可程式設計中斷控制器,有多個針腳。它一頭與CPU相連,一頭與裝置相連,從而知道是誰引起的中斷,進而處理。
  • 北橋:用來處理高速訊號,通常處理CPU 、RAM、AGP埠或PCI Express和南橋晶片之間的通訊。
  • 南橋:其資料處理量不算大(比如使用者敲擊鍵盤),通過一定的方式與北橋相連。
  • 一級快取、二級快取出現的原因: CPU處理速度快,向儲存器請求資料,但是儲存器輸出資料比較慢,根據短板原理,進行折中,CPU的速度匹配上儲存器速度,導致CPU的效率不能完全發揮。此時,可以利用快取,速度快,但是快取是非常昂貴的,所以儲存量很小。若想快取有用,就基於一種原理:程式區域性性原理。
  • 程式區域性性原理:時間區域性性:剛剛訪問的資料還可能訪問。空間區域性性:訪問資料附近的資料很可能訪問。則可以先放入快取中。
  • 程式移植性:在一種計算機上的軟體轉置到其他計算機上的能力。
    機器語言:與計算機硬體直接工作的語言,二進位制。組合語言—>編譯器
    高階語言:—>組合語言—>機器語言。
    不同公司的硬體很可能不同,若想讓高階語言在不同平臺上執行,就需要在高階語言與硬體間有個介面(API),只要符合這個介面,就可以與不同的硬體打交道。不同硬體:用匯編寫成的不同的能實現相同功能的程式。
    API:application program interface 應用程式設計介面
  • **硬體架構:**CPU晶片的不同系列。比如ARM(產品:安卓、ios)、x86、

  • ①早期,先編寫好程式,然後轉換為二進位制程式碼,進行計算,此時的問題是運算很快,輸入輸出很慢;
    ②後來,出現磁帶,將編的程式放到磁帶上,出現的問題是磁帶是順序儲存,此時其中一臺計算機寫程式放入磁帶、另一臺計算機進行計算,此時叫做離線批處理系統。(計算機一次完整的處理過程叫做作業job,早期是單作業,一個磁帶只能處理一個作業,後來,為了快速處理多個作業,減少磁帶拆卸次數,出現批處理將多個作業,用分隔符將不同的作業區分開。)此時,每次執行還是單作業,因為記憶體只有一個,記憶體被一個作業全部佔有,因為CPU處理速度很快,當處理完一個作業後,就得等待慢速的io將作業傳入CPU,CPU效能浪費;
    ③多工系統:作業完成需要CPU 、Memory。此時引入程序。將CPU分片,每個任務執行一段時間。記憶體引入分段,,每次執行一段。不同主機的記憶體是不同的,比如512M、4G記憶體,此時引入虛擬地址空間(並不等於虛擬記憶體)。此時,就有一個問題,誰控制程序執行分片時間,而不是讓他一直執行呢?就是作業系統,作業系統負責程序的排程。
    比如32位:最多使用4G實體記憶體,因為2^32 ,這是由於匯流排寬度決定的。
    所以作業系統,不完成具體的工作,是協調各種裝置執行的通用軟體。

  • 有了作業系統後,所有程式呼叫底層硬體,都要經過作業系統,系統呼叫system call。將底層呼叫做成更高階的,叫做庫。比如用c語言開發系統,需要用到求平方根的函式,此時直接用現成的函式(方法在庫中)直接呼叫即可,沒必要自己寫如何求平方根,使開發更簡單。
    庫的好處:能夠重複使用,避免了相同功能多次重寫的麻煩。庫不能直接執行,只能被呼叫(理解:就是上述的求平方根函式,自己不能執行,程式呼叫才能執行)。所以,還有個庫呼叫(Libraray call)
    存在兩種呼叫:system call 和library call

  • 所以現在的結構就是軟體–>庫—>作業系統(Kernel)—>硬體。比如word,為什麼雙擊就能開啟,程式執行還需要個shell(外殼),即人機互動介面。
    作業系統包含許多功能等,可以用Kernel比較好。Kernel(作業系統核心):負責管理硬體資源,將硬體資源虛擬成其他樣子,提供給上層執行的應用程式。

  • 所以現在能解決:在Linux上的能執行的程式,在Windows上可以執行嗎?
    若庫呼叫和系統呼叫相同,則能夠執行,否則不能執行。

  • 在操作啟動後,軟體程式不一定執行,只是具備了執行條件。在作業系統啟動後,就啟動的程式,叫做服務。比如作業系統為了完整的執行能力等方面,稱為後臺服務。還有就是根據使用者自定義,來自動啟動。比如,使用者在word中,按了鍵盤中Ctrl+C,根據之前知識,是先給CPU(它並不知道此敲擊是什麼意思)、然後交給kernel(CPU通知核心進行處理),kernel是作業系統的核心,作業系統負責程式的排程等,它知道是哪個程序。

  • 儲存器:BIOS、kernel space、其他程式共享部分。此時有個問題–碎片。

  • shell:圖形介面shell(GUI)、(CLI)

  • 核心功能:程序管理、記憶體管理、檔案管理、網路管理、硬體驅動、安全機制