軟件是如何做到控制芯片電路的閉合的?
在芯片、電路的世界里只能識別0和1
代碼、軟件、UI界面、圖片、視頻、文件、數據等等都是為了方便人看而存在的,但它們的本質還是0和1。
芯片、電路如何表示0和1?
芯片、電路是通過高電平和低電平來表示0和1的,比如5V電壓時就表示0,那么0V電壓時就表示為1。
0和1怎么就成了我們常看到的文字、圖片、還有聲音的呢?蘋果英文叫做Apple,但不管我們叫它蘋果還是Apple,它還是我們生活中的一種實物“蘋果”,在中文里表示蘋果,而在英文里用Apple來表示。這就是語言不同表示的形式不同,每種語言都有自己的規則,在0和1組成的世界里也有自己的一套規則,這套規則就是編碼表,比如ASCII字符表,比如出現了“01001011”這串數字,那么CPU就會在編碼表里找到這串數字所對應的“K”,然后在屏幕上把這個“K”顯示出來。
當我們放大一張黑白的圖片時就會發現圖片是由無數的小方塊組成,這些小方塊就是像素點,那么要用二進制來保存這些像素點,要么是“1”,要么就是“0”。所以圖片的像素點二進制位數越多,圖片所能表現的顏色也就越豐富,當一個像素點是8個二進制位的時候,這個圖片的每個像素點都有256種顏色可以顯示。視頻和圖片是同樣的道理,只不過每秒鐘的視頻是由好幾幀的圖片組成。
使用0和1表示聲音的第一步就是對聲音進行模擬采樣,然后再經過量化的過程將原始波形變成二進制數。量化就好比100個人參加考試,有多少人是優秀、有多少人是良好、有多少人是不及格,并不能體現每個人的具體分數,所以二進制的數字聲音和我們的原聲還是會有很大的差別,這種差別就叫失真。
軟件是如何控制硬件的?我們都知道CPU的內部主要是由運算器和控制器組成的,如果再詳細一點就會發現CPU的內部就相當于一個龐大的流水線,內存就相當于臨時的倉庫。
當程序打開的時候,和這個程序相關的數據就會從硬盤中讀取,傳輸到內存中。硬盤的磁頭讀取數據時,旁邊的讀取器可以識別磁性材料的不同極性,再還原成高電平和低電平,剛剛我們就提到了在芯片和電路中0和1是由高電平和低電平來表示。
這些被臨時存儲的程序數據就在內存里面等著被CPU提取,內存是易失性存儲設備,斷電時所有的數據都會清空,通電時就能存儲數據。比如當電子數量高于一個中間值時就表示0,低于中間值就表示1。
內存里面準備的數據主要就是程序的指令和數據,數據就相當于馬上要被加工的原材料,而指令就相當于客戶的訂單,訂單上面就是對產品的要求,告訴CPU要怎么去做。剛剛提到內存是臨時倉庫,那么CPU內部就有負責取貨的。第一個取貨的是程序設計計數器,主要是告訴CPU即將要用到的原材料和倉庫具體的位置;第二個取貨的是地址寄存器,主要是負責記錄正在提取的原材料在內存的具體位置,因為CPU的讀取速度要比內存快很多;第三個取貨的是數據寄存器,主要是負責整個CPU工廠數據的分發,從外面進來的數據和已經生產好的數據都是由數據寄存器負責。
CPU準備好后,CPU內的指令寄存器就會從內存中提取指令,取完指令后就會對指令進行譯碼,看看訂單有什么要求,計劃一下后面生產過程中需要用到的工種、設備等等。隨后操作控制器就會按照計劃好的訂單讓所有要參與這次生產的設備準備好進行開工。開工的過程中,數據寄存器就會去內存中將處理的數據提取出來,傳給算術邏輯單元。算術邏輯單元包含了累加寄存器、程序狀態寄存器,累加寄存器就相當于草稿紙,運算過程中的一些數據和結果會臨時保存在這個地方,而程序狀態寄存器就專門負責記錄運算有沒有進位、溢出之類的信息。訪存取數后的就是將結果取回最終通過內存再保存到硬盤中。當然這個過程中少不了時序發生器,時序可以精準地安排什么時候,什么人該干什么事。
CPU內的晶體管是如何區分工種的呢?我們都知道三極管具有開關的特性,只要控制端電壓滿足一定的條件,就可以控制電路的通斷。
鑒于半導體的特性于是就有了門電路,它可以使輸出信號與輸入信號之間產生一定的邏輯關系。通過門電路的邏輯關系實現對信號的轉換。比如下圖的與門電路,只要當A、B兩個開關都接通時燈泡才亮。
與門的真值表如下圖。除此之外還有或門電路,非門電路等,感興趣的小伙伴們可以查找相關的資料。
通過這些基本的門電路的組合就可以組成各種各樣的運算法則,讓芯片懂得什么是加減乘除。
經過芯片加工過后的數據最終會通過芯片的引腳輸出出來,這些數據最終是通過高、低電平來表示0和1,通過一些半導體開關元器件很容易實現硬件的打開和關閉。比如常用的繼電器,只要控制端滿足相應的條件,就能控制電路的開和關。同理芯片引腳輸出的高、低電平就可以控制電路的開和關。
以上個人淺見,歡迎批評指正。
認同我的看法,請點個贊再走,感謝!喜歡我的,請關注我,再次感謝!