對於程序員,那些既陌生又熟悉的計算機硬件

程序員一步入中年,不知不覺便會被鋪天蓋地的「危機感」上身,曾經的那個少年已經不在,時間就是這樣公平。就算你能發明c語言,隨着時間的推移,你註定仍是要成爲慢慢變蔫的茄子,緩緩變黑的葡萄。程序員

看着樂視退市的消息,週末我趕忙拉着兒子的小手,複習起了大學那曾經考試」滿分「的計算機基礎,你別說,只讀了一小部分我就發現一個事實,記憶力果真指數級降低,兒子一遍就能夠熟記,我卻衰退的就像沒上過大學。面試

原來程序員寫的程序實際上就是一個由0和1組成的位序列,或者說是比特序列,8個比特(bit)被分爲一組,稱爲字節。系統中全部的信息,包括網絡傳送的數據,內存中的數據以及磁盤文件,程序等,都是由一串比特(bit)表示的。若是你要問爲何非要8個字節呢?難道不會百度嗎?我又不是計算機發明者_。可能有一點很是重要,你能夠拿去和麪試官吹水:一個一樣的字節可能表明一個整數,浮點數,甚至字符串,區分他們的惟一方法是這些數據的上下文信息。windows

順便提一下,在計算機中數字的表示方式實際上是對實際值的有限近似值,只不過一些高級語言對這些值處理的很好而已,不得不吐槽,JavaScript在處理這個問題上作的不是太好,不信你能夠瀏覽器的F12 運行一下數組

0.1+0.2
0.30000000000000004
0.01 + 0.05
0.060000000000000005

言歸正傳,做爲一個有着」代碼改變世界「夢想的程序員,對本身手藝要精益求精,就必須瞭解你的真愛的物力構成。不管多diao的軟件都運行在硬件基礎之上,雖然近幾年硬件的發展速度比你衰老的速度還要快,可是核心內容幾乎沒變,這纔是你真愛的裸妝。瀏覽器

CPU

先擼一下這個不成熟的百度百科網絡

中央處理器(CPU,central processing unit)做爲計算機系統的運算和控制核心,是信息處理、程序運行的最終執行單元架構

說的直白一點,這個傢伙幾乎是軟件運行的核心,是解釋和執行指令的引擎。目前主流的cpu的核心是一個32位或者64位(將來還可能更大)長度的存儲設備或者寄存器,被稱爲程序計數器(PC,一個蛋疼的簡稱)。在任什麼時候刻,程序計數器都指向內存中某條指令的地址。性能

CPU表面上是按照一個特定的模型去執行指令,這個模型由指令集的架構來決定的(每一個架構類型都不同,因此纔會有AMD,Intel)。自系統通電開始,直到系統斷電,CPU一直都在不斷的執行指令。若是沒有實際的軟件執行指令呢?拿windows來講,軟件層虛擬出來了一個「System Idle Process」進程,被稱爲系統空閒進程,這個進程會告訴cpu掛起(中止工做),因此這個進程的cpu使用率和其餘進程是相反的意思,它的使用率越高說明CPU的壓力越小。設計

CPU從程序計數器指向的內存地址讀取指令內容,並解釋該指令執行指令的操做,而後更新程序計數器,使他指向下一條指令,而這條指令頗有可能和上條指令並不是相鄰。簡單來講,cpu可能會頻繁的執行如下操做code

  1. 數據加載:從主存複製一段數據到寄存器,以覆蓋寄存器中原來的內容。
  2. 數據存儲:把寄存器中的一段數據複製到主存的一個位置,以覆蓋主存原來位置上的內容。
  3. 指令操做:把兩個寄存器的內容複製到邏輯計算單元,邏輯計算單元會對這兩段數據作指令運算,並將結果存儲在一個寄存器中。
  4. 指令跳轉:從指令自己抽取一段內容並複製到程序計數器中,以覆蓋程序計數器中原來的值。
主存

老規矩,沒有百度不到的知識,一個沒有百度百科的名詞,說明不是頗有名

主存儲器(Main memory),簡稱主存。是計算機硬件的一個重要部件,其做用是存放指令和數據,並能由中央處理器(CPU)直接隨機存取。現代計算機是爲了提升性能,又能兼顧合理的造價,每每採用多級存儲體系。即由存儲容量小,存取速度高的高速緩衝存儲器,存儲容量和存取速度適中的主存儲器是必不可少的。主存儲器是按地址存放信息的,存取速度通常與地址無關。

主存是一個臨時的存儲設備,在程序被執行過程當中用來臨時存放程序內容和處理結果。從物理來說,主存是由一組動態隨機存取存儲器芯片組成(你能夠想象成一大排二極管),從邏輯上來說,主存是一個線性的字節數組,每一個字節都有一個惟一的地址,這些地址是從0開始的,如今主流的主存在我的計算機上已是16G的大小,讓我這個還在用4G主存的老人無言以對呀。

輸入輸出設備

當年計算機第一堂課,那個地中海的老師就講過這個概念,雖然具體內容如今已經和個人秀髮一併褪去,可是天天的工做中仍是能偶爾看到IO這個詞。

IO(輸入輸出)是系統與外部世界的鏈接通道,像咱們天天擼王者農藥的鼠標鍵盤,釋放壓力看小電影的高清顯示器,存儲蒼老師的磁盤等等,這些都隸屬於輸入輸出設備。

每一個IO設備都有一個控制器或者適配器,它是和系統交互的途徑,通常都和IO總線鏈接。說直白一點,每一個IO設備都有它的驅動程序,要否則系統不可能平白無故就能使用鍵盤鼠標這些設備的,即便如今的外設都是免驅的。

系統總線

總線是鏈接整個系統的橋樑,物理上是一組電子管道。他負責攜帶信息字節並在各個組件之間進行傳遞,就像咱們軟件系統設計SOA中的總線。總線根據系統定義的位數來傳輸定長的數據,每一個系統都不同,不過如今主流的長度要麼是四個字節(32位),要麼是8個字節(64位)。從這裏就能夠聯想到,64位的系統在數據傳輸速度上要比32位的系統快一倍,也許未來很快會邁入128,256時代呢

若是非要加一張圖的話,此圖最有表明性
image

相關文章
相關標籤/搜索