穿越計算機迷霧

首先,這是一本書,大概20-30塊錢,還算便宜,口碑也不錯
其實我也不喜歡就是看書,看書完全是因爲有些知識確實看不懂了,難以理解,我看這本書的時候,就是因爲看不懂
java的一個框架的運行原理,其實不需要看這麼深入的,但是不知不覺的就看了。

促使立即看這本書的原因是:我在今日頭條上看見一個問題,JAVA面試官,問int佔多少個字節。
然後下面好多程序員都在討論了
    有說這個問題都不知道不配做程序員
    有說java裏是4個字節
    還有說2個字節的。
    千奇百怪~~~ 
    
其實這個問題是沒有任何意義的,因爲不管哪個公司的JAVA程序員其實都用不到這個知識,就好比問農民伯伯汽車的方向
盤有什麼用一樣,雖然是擴展知識,但卻是不搭嘎

---

我就是因爲看不懂java的一個框架的運行原理,就去看了java生成的原理,深入理解jvm虛擬機,結果還是有看不懂的,
想着jvm是C寫的,我去學了C語言,發現了內存管理,最終發現計算機的數據是由0和1的二進制組成,雖然總是聽說
計算機都是由0-1組成,但是還是不知道爲什麼,最終發現了電的開關就是二進制0和1的表現方式,然後看到了電是
如何產生的,發現了自由電子,然後推導出了熱能生電,只是這麼想着,結果百度了一下,熱還真能直接生電,說過了
,我今天想說的不是能量由波傳播,也不是利用太空的波,因爲我也只是邏輯上的猜想,我今天只想說一些,計算機的事。

計算機發展,離不開200多年前發現電的富蘭克林。

計算機的運行完全是由電支撐,所以一切都要從電開始,電的開關就可以表示二進制的1-0兩個數(先不說如何用電來這
麼快速的表示1-0,並計算),我們再來說說電報(電生磁,磁生電的原理,讓另一頭機械跳動,相同的跳動形式表示同一個意思)
、無線電通信[ 電磁波,電的傳播其實是自由電子的運動,如果讓一端電壓特別高(電子多),一端電壓很低(電子少),
然後兩端接近,能量要平衡,則能量由波的形式傳輸出去,則形成了電磁波 ]

----

從上面看,目前所有的一切都離不開電。

如果僅僅用電是否流動表示二進制1-0,那麼計算機什麼都做不了,最多可以運用電器元件和數學知識模擬加法運算,
再或者僅僅傳播1-0的二進制數據。

我們再想想,電的是否連通表示1-0的數據模擬,我們想讓計算機做加法,是不是要自己控制開關呢 ?那麼自己控制開關,
我覺得是不可能實現的,所以出現了二極管但是沒太大用,最終出現了我們電腦需要的三極管
(三極管的運行+數學知識 讓三級管彷彿有了計算能力),以及發展到現在的晶體管(計算機的主要組成部分CPU)。


說到這裏差不多了, 計算機的組成 = CPU + 聲卡 + 顯卡 + I/O + 存儲

他們其實都是獨立的!!!!!
他們共同配合,所以纔有了現在功能如此全面的計算機。

CPU:目前先進的CPU是由數十億個晶體管組成,晶體管主要是用於計算,其實三極管也是用於計算的,就是因爲
電器元件的限制,所以計算機只能做加法,這是總所周知的。8位的CPU,做個不恰當的水管流水的比喻(實在不好解釋),
8位代表有8個進水口,16位代表有16個進水口,32位代表有32個進水口,計算速度更快。
而目前市面大多,32位系統、64位系統,這個其實是指軟件上的,比如用C語言寫好程序,用64位編譯,最終就會導致,
這個程序某個地方做加法,需要64個水管同時運行,但如果CPU其實只有32根水管,這樣下來,程序是不能運行的。所以現在的程序員
爲了兼容,其實都是用32位系統進行代碼編譯的。這也是32位CPU不能裝64位系統的原因,但目前市面上幾乎全部都是64位的CPU了。

所以,不管多少位CPU其實都是用來計算的,int所佔內存大小也是人爲規定的。
16位的操作系統int佔2個字節,int不管是在64、32位操作系統都是4個字節,但是這個指的是C語言寫的程序,C語言是其它語言的母語。
但是,嚴謹的來說,int所佔內存大小分爲兩種情況: 
一、只看操作系統(操作系統也是C語言寫的,不要問我C語言是怎麼寫出來的),目前的電腦 int 都只佔4個字節。
二、與編譯器有關 (C 語言標準中沒有明確規定整型數據的長度,但是上層高級語言,如JAVA的int類型,創始人依然可以自定義)
假如:我重新編寫一個F語言,也是用C語言編寫的,我還是可以定義F語言的int類型爲8個字節。大不了對應成C語言的long類型
(當然沒那個語言設計師這麼無聊,但是這種情況又不得不承認存在)

所以該這麼回答:以java、C語言爲例,整型數據在內存中佔的字節數與所選擇的操作系統有關,int在32位和64位操作系統中,
都是佔4個字節。


聲卡:I/O聲卡的作用就是將聲波轉爲的電信號轉換爲二進制/或者將二進制轉換爲電信號。振盪器讓聲卡頻率越高,
就代表一瞬間能處理到更多的電信號,聲音就更加保真。

顯卡:I/O顯卡,專門用來處理圖像,一張超大的圖片,需要快速的更加細膩的展示出來,就需要顯卡,將圖片二進制快速的臨時
保存起來,再將二進制與圖片的色彩位數一一對應。

I/O: 其實就是數據的讀寫,I/O越好,讀寫數據越快。

存儲: 就是數據的保存,保存數據的速度也有快慢與大小。


另外,還有鍵盤、顯示器、溫度計等。。。。

這些都是通過驅動器將數據轉換爲專門的二進制,或者將二進制轉換爲的我們看的懂得數據。

 

作爲程序員最重要的是瞭解計算機的內存,知道內存條、內存、堆內存、棧內存、寄存器、常量區等他們的關係及運行原理。

我們主要的目的,是搞懂這個問題,可惜的是,這個本書關於內存,只是講了硬件上是如何實現存儲,並沒有講我想知道的知識。

  1. 寄存器是CPU內部最基本的存儲單元
  2. CPU對外是通過總線(地址、控制、數據)來和外部設備交互的,總線的寬度是8位,同時CPU的寄存器也是8位,那麼這個CPU就叫8位CPU
  3. 如果總線是32位,寄存器也是32位的,那麼這個CPU就是32位CPU
  4. 有一種CPU內部的寄存器是32位的,但總線是16位,準32爲CPU
  5. 所有的64位CPU兼容32位的指令,32位要兼容16位的指令,所以在64位的CPU上是可以識別32位的指令
  6. 在64位的CPU構架上運行了64位的軟件操作系統,那麼這個系統是64位
  7. 在64位的CPU構架上,運行了32位的軟件操作系統,那麼這個系統就是32位
  8. 64位的軟件不能運行在32位的CPU之上

寄存器、緩存、內存三者關係:

1. 按與CPU遠近來分,離得最近的是寄存器,然後緩存(CPU緩存),最後內存。

2. CPU計算時,先預先把要用的數據從硬盤讀到內存,然後再把即將要用的數據讀到寄存器。於是 CPU<--->寄存器<--->內存,這就是它們之間的信息交換。

3. 那爲什麼有緩存呢?因爲如果經常操作內存中的同一址地的數據,就會影響速度。於是就在寄存器與內存之間設置一個緩存。

4. 因爲從緩存提取的速度遠高於內存。當然緩存的價格肯定遠遠高於內存,不然的話,機器裏就沒有內存的存在。

5.由此可以看出,從遠近來看:CPU〈---〉寄存器〈---> 緩存 <---> 內存。

後面探索~~~


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章