老王的JAVA基礎課:第1課 計算機基礎知識

前言

看到標題你可能會問了,說好的java課程,你跟我扯計算機基礎?彆着急,學編程不可一蹴而就。我們必須對計算機系統有一個起碼的認識必須知道程序是如何運行的,又在哪裏運行。這其中的數據流向又是怎樣的,只有清楚這些知識我們才能在開發的過程中對代碼和數據有一個起碼的掌控能力。

主板長啥樣?

你可能又會問了,爲什麼一開始要講主板?因爲我們程序的輸入輸出都依賴主板和常駐在主板上的器件,如CPU、內存條。我們先來看實際的主板。
在這裏插入圖片描述
這是一塊華擎H310主板,可以看出它有一個CPU插槽(橙色),兩個內存插槽(紅色),三個PCIE插槽,其中紫色可以插上顯卡,兩個白色框可以用來插上聲卡或網卡等設備。所有的內存設備都會直接或間接與CPU關聯,因爲計算機系統內只有CPU可用來做邏輯運算。當然,現代顯卡也已經支持浮點計算了。對主板有了概念,下面我們來看程序是如何被加載和運行的。

QQ是如何運行的?

在這裏插入圖片描述
以QQ爲例。簡單來說分爲以下幾個步驟。

  1. 首先我們下載QQ安裝包,QQ安裝包通過騰訊服務器傳輸到我們的網卡設備,網卡接收QQ安裝包後存入硬盤。
  2. 我們雙擊QQ安裝包進行安裝,這是一種類似解壓的過程,也包含了一些其他文件的釋放和寫入。安裝完畢後通常桌面上會出現QQ的快捷方式。
  3. 雙擊QQ快捷方式,QQ主程序啓動,將必要的數據通過主板上的總線(導線組成的傳輸線束)傳輸到內存中,桌面出現QQ登錄界面。至此QQ啓動完畢。
  4. 我們通過QQ和朋友聊天,我們在聊天框輸入的消息首先會被傳輸到內存中等待被CPU處理,接下來在某個時刻會被傳輸到CPU中處理成QQ服務器能“看懂”的消息體,然後CPU將此數據通過主板上的總線傳輸到網卡設備,最後網卡將消息數據傳輸到遠端服務器。由服務器下發到你朋友的QQ。

幾個重要概念:

  • 網卡:連接計算機和網絡的關鍵設備,我們訪問互聯網的任何數據都是通過網卡接收而來,我們發出去的消息也必然經過網卡傳輸,每張網卡在互聯網上都有一個獨一無二的MAC地址,類似我們的身份證,全世界唯一。其他人最終都是通過這個“身份證號”找到我們。
  • 硬盤:硬盤是計算機最主要的存儲設備,現在常見的硬盤類型有HDD、SSD、NvME(結構不一樣,讀寫速度不一樣),在硬盤中的數據關機後不會丟失。
  • 內存:計算機中所有程序的運行都是在內存中進行的,就就像QQ要運行,首先就要被加載到內存中才能與CPU打交道,內存中的數據關機後會丟失。
  • CPU:中央處理器(CPU,central processing unit)作爲計算機系統的運算和控制核心,是信息處理、程序運行的最終執行單元。我們只需記住,任何數據最終一定在CPU中處理,其他設備只能被存取而不能計算數據。
  • 總線:簡單說就是主板上連接CPU、內存、網卡和其它設備的數據通路。計算機的總線類型可以劃分爲數據總線、地址總線和控制總線,分別用來傳輸數據、數據地址和控制信號。

主板硬件邏輯

在這裏插入圖片描述
按照我們上面的思路,可以得到以上這張簡化過的主板邏輯圖,首先我們回想一下QQ的運行是什麼樣的。可以看到其中多了一樣東西——DMA。

DMA(Direct Memory Access,直接存儲器訪問) 是所有現代電腦的重要特色,它允許不同速度的硬件裝置來溝通,而不需要依賴於 CPU 的大量中斷負載。否則,CPU 需要從來源把每一片段的資料複製到暫存器,然後把它們再次寫回到新的地方。在這個時間中,CPU 對於其他的工作來說就無法使用。

百度百科

簡單來說DMA是主板上一個獨立的芯片,可以被用來控制數據從硬盤加載到內存,或者從內存回寫到硬盤的。試想如果沒有這個芯片。我們每次讀寫數據都要先把數據發送到CPU,讓CPU輸出到其他目標內。這個過程佔用了CPU資源會導致我們在複製和傳輸文件的過程中系統假死,正是因爲有了這個芯片,我們可以在傳輸文件的同時,還可以做其他工作而系統負載並不會升高。

再談QQ的運行過程

現在我們以更專業一點的角度來談談QQ的運行過程。

  1. 我們雙擊了QQ快捷方式打算啓動QQ主程序,操作系統會捕獲這個事件通知CPU加載QQ程序。
  2. CPU向DMA發出讀取QQ主程序信號,然後CPU繼續處理其他事情。這個時候DMA獲得控制權開始從硬盤讀取QQ主程序加載到內存中。
  3. DMA讀取完畢後將通知CPU:“數據加載完了,你可以開始幹活了”,這個時候CPU開始正式與內存做交互。
  4. CPU通過地址總線找到QQ主程序在內存中的地址,同時通過控制總線發出讀的命令到內存,內存收到類似“在0xA9D9152B位置讀取數據”的指令,定位到這個內存位置通過數據總線向CPU傳輸這段數據,CPU開始執行計算邏輯。
  5. CPU計算完數據後需要將數據發送給網卡設備,通過地址總線、控制總線和數據總線向網卡發送類似“我將向0x8275DA90位置寫入數據”的指令。至此數據發送到網卡設備。
  6. 最終網卡會將這些數據按照合適的格式發送到路由器等設備。

內存地址空間

概念:由各類內存設備(注意不包括硬盤等外設)組成的一段整體的、虛擬出來的地址空間,這麼說可能有點抽象,我們來看圖。CPU是如何看待這些設備的。老王:CPU你怎麼看​?​CPU:我看個屁,這不就一整個嘛。
CPU視角看存儲器
我們可以看出,CPU始終通過總線控制這些內存設備的輸入輸出。把這些設備當做一個整體的內存空間的好處在於CPU不需要在意某段內存空間是什麼,直接寫入或讀取就完事了,以上圖爲例:
0x00000000~0x99999999爲內存(這裏指的內存條)空間
0xA0000000~0xE9999999爲顯存空間
0xF0000000~0xFFFFFFFF爲網卡空間

今天的課就到這裏,我們應該對計算機系統有了一個初步的瞭解,這將會對我們後面的學習打好基礎。有任何疑問可以私信我,接下來我們將會學習如何安裝集成開發環境(IDE,Integrated Development Environment )

上一課

老王的JAVA基礎課:序言

下一課

老王的JAVA基礎課:第2課 JDK安裝和環境變量配置

其他文章

2020年高效搬磚必備的IDEA插件(附安裝包)
詳解從p12證書提取RSA公私鑰和序列號(小白向)

本教程同時發佈在我的公衆號:Java學步園,歡迎加入JAVA初級交流羣:757443185,滑到最上面左側掃描二維碼哦~

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