计算机的硬件工作原理(图片部分资源摘自王道考研资料)
一、現(xiàn)代計算機的組成
?
此處主存和輔存可以理解為,內存和外存,內存的特點是讀取速度快但是不利于保存大量數(shù)據(jù),外存的特點 是讀取速度慢,但是可以存儲大量數(shù)據(jù)
計算機在開機時不會讀取硬盤上的所有數(shù)據(jù),開機時先讀取的是c盤的數(shù)據(jù)(系統(tǒng)裝在c盤),這樣可以實現(xiàn)計算機的開機速度快
當需要有讀取的文件時,再在內存中開辟一塊空間讀取其他地址的數(shù)據(jù)
二、計算機硬件的工作方式
?
?
?
?
?
?
?
?
?
?
?
?
* Y=a×b+b,這是高級語言程序員看到的一個視角。但事實上CPU不可能一次性完成這樣的一個復雜運算,它只能先進行乘法,然后再進行加法,這樣的兩大步驟,程序在經(jīng)過編譯等連續(xù)一系列的騷操作之后,可以把這個高級語言翻譯成機器能讀得懂的機器語言,同時會把這段程序裝入儲存
1. 定義abcd4個變量
1. 這個變量存放在地址為5的這個存儲單元中,主存中以二進制的形式來存放
1. b存放在6
1. c存放在7
1. 最后計算的Y,是存放在8這個存儲單元中
- 每一條指令會分為操作碼和地址碼,這樣的兩個部分
- 初:(PC)=0,指向第一條指令的存儲地址
?? ?* 程序運行之前PC會指向0這個位置,把存放在這一位置的條指令取出來執(zhí)行,寄存器的名字后面打一個括號指的是這個寄存器里邊的內容
- 1:(PC)->MAR,導致(MAR)=0
?? ?* PC存放的內容需要通過地址總線把它傳送到mar這個地址寄存器當中,導致mar這個寄存器的值變?yōu)榱?
- 3:M(MAR)->MDR,導致(MDR)=000001 0000000101?
?? ?* 接下來要訪問的是0號地址所對應的這一串數(shù)據(jù),同時控制器會通過控制總線告訴主存儲器,這次要進行的是讀操作,接下來主存儲器會根據(jù)mar記錄的這個地址信息,去存儲體里邊找出0號地址所對應的二進制數(shù)據(jù),并且把這些二進制數(shù)據(jù)放到mdr也就是這個數(shù)據(jù)寄存器當中,這就導致了mdr這個寄存器當中,現(xiàn)在存放的就是想要讀取的第1條指令,一個M表示的是memory,也就是主存儲器
- 4:(MDR)->IR,導致(IR)=000001 0000000101?
?? ?* 現(xiàn)在CPU要的數(shù)據(jù)已經(jīng)放到mdr這計算器當中了,要取走的數(shù)據(jù)是一條指令,所以這條指令也會通過數(shù)據(jù)總線把它放到ir,也就是指令寄存器當中,這就導致控制器的ir這個計算器里邊已經(jīng)存放了此次要執(zhí)行的指令
- 5:OP(IR)->CU,指令的操作碼送到CU,CU分析后得知,這是“取數(shù)”指令
?? ?* 這條指令的前邊6個比特是操作碼,這6個比特會被送到CU控制單元里,cu會分析這個操作,就知道0000.它對應的是一條取數(shù)的指令,所以接下來要把這個地址嗎所指明的內存單元里的這個數(shù)據(jù)取出來,并且放到ACC這個計算器當中,這是取數(shù)指令要做的事情
- 6:Ad(IR)->MAR,指令的地址碼送到MAR,導致(MAR)=5?
?? ?* 要讀取儲存的這個地址的信息,于是就需要把這個地址碼放到儲存的MAR當中,這就導致此時MAR是等于5,
- 8:M(MAR)->MDR,導致(MDR)=0000000000000010=2?
?? ?* 主存儲器根據(jù)mar指明的這個地址,去存儲體當中找出5號單元的這些數(shù)據(jù),并且把這些數(shù)據(jù)放到MDR當中,
- 9:(MDR)->ACC,導致(ACC)=0000000000000010=2
?? ?* a的值是2好最后再控制單元的指揮下,mdr里的數(shù)據(jù)會被傳送到ACC也就累加寄存器當中,到此完成了一個取數(shù)的指令,最終導致a這個變量的值已經(jīng)被我們放到ACC這個計算器當中了
- 上一條指令取指后PC自動+1,(PC)=1;執(zhí)行后,(ACC)=2
?* 之前這條指令執(zhí)行之后導致的效果就是PC此時等于1,然后ACC=2也就是等于a的值
- 1:(PC)->MAR,導致(MAR)=1
- 3:M(MAR)->MDR,導致(MDR)=000100 0000000110
- 4:(MDR)->IR,導致(IR)= 000100 0000000110
- 5:OP(IR)->CU,指令的操作碼送到CU, CU分析后得知,這是“乘法”指令?
?? ?* 根據(jù)程序計數(shù)器PC所指向的位置取得第2條指令,取指令的過程和之前是類似的,通過這樣的4個步驟把第2條指令放到IR寄存器當中,那取完指令之后就需要分析指定那和之前一樣,會把操作碼這個部分送到CU控制單元,然后經(jīng)過CU分析之后他可以知道000100這個操作碼對應的是一個乘法操作,所以這是一條乘法指令,因此接下來CU會指揮其他部件來協(xié)調的完成這個乘法操作
- 6:Ad(IR)->MAR,指令的地址碼送到MAR,導致(MAR)=6?
?? ?* 程序Y=a×b+C,現(xiàn)在這一步,要完成的是a×b的操作,而a這個變量之前已經(jīng)被送到ACC這個計算器里面了,所以現(xiàn)在這一條乘法指令的地址碼指明的是另一個乘數(shù),b的存放位置,那b存放在6這個位置,所以這一條指定的地址碼會被送到MAR當中指明,要取出的是6號存儲單元里邊的數(shù)據(jù),
- 8:M(MAR)->MDR,導致(MDR)=0000000000000011=3?
?? ?* 接下來儲存會根據(jù)MAR所指明的這個地址取出相應的這個數(shù)據(jù),就把B這個變量的值放到了MDR當中,
- 9:(MDR)->MQ,導致(MQ)=0000000000000011=3
?? ?* 接下來b的值會從MDR再通過數(shù)據(jù)總線送到MQ也就是乘商寄存器當中,所以現(xiàn)在B的值已經(jīng)放到MQ里面了
- 10:(ACC)->X,導致(X)=2?
?? ?* 接下來還需要把a的值先放到通用寄存器x當中,當這個CPU執(zhí)行乘法操作的時候,它會把被乘數(shù)放到X這個通用寄存器里邊,
- 11:(MQ)*(X)àACC,由ALU實現(xiàn)乘法運算,導致(ACC)=6,如果乘積太大,則需要MQ輔助存儲
?? ?* 然后把乘數(shù)放到MQ這個乘商寄存器里邊,接下來CU會通過控制線告訴ALU算術邏輯單元,讓它進行乘法運算,ALU會把X和mq里邊存儲的這兩個數(shù)把它們進行一個相乘的操作,然后把最終乘得的結果放到ACC里邊,那這個操作導致ACC里面得到了a,乘以B的值,2*3得6
?? ?* 那大家會發(fā)現(xiàn)和前邊那一條指令相比,其實第1步到第5步這幾個步驟每一步要做的事情都是一模一樣的,只有當CU控制單元分析出這一條指令是乘法指令的時候,接下來的操作就會產生一些區(qū)別,另外和之前說的一樣,當取指令結束之后,PC的值也會自動加一
?? ?* 上一條指令取指后 (PC)=3,執(zhí)行后,(ACC)=7
- 1:(PC)->MAR,導致(MAR)=3
- 3:M(MAR)->MDR,導致(MDR)=000010 0000001000?
- 4:(MDR)àIR,導致(IR)= 000010 0000001000?
- 5:OP(IR)->CU,指令的操作碼送到CU,CU分析后得知,這是“存數(shù)”指令?
- 6:Ad(IR)->MAR,指令的地址碼送到MAR,導致(MAR)=8?
- 7:(ACC)->MDR,導致(MDR)=7
- 9:(MDR)->地址為8的存儲單元,導致y=7
? * 就是PC指向了2,也就指向下一條要執(zhí)行的指令,ACC里邊此時存放了上一個運算的結果,也就是a×b的值a×b等于6,接下來執(zhí)行2這個地址存放了這條指令,那前邊的幾個步驟都是一樣的,通過5個步驟可以完成取指令和分析指令的操作,那CU發(fā)現(xiàn)這一次要執(zhí)行的操作碼應該是000011這個操作嘛,對應的是一個加法操作,所以這是一條加法指令,那接下來CU會根據(jù)加法指令的這個執(zhí)行步驟來指揮著其他部件協(xié)調工作好,那這次要計算的是a×B+C而a×B的結果,我們是已經(jīng)存放在ACC當中,所以這個加法指定的地址碼指明的是C這個變量它的存放地址,那C是存放在7這個位置了,剛好把這個二進制數(shù)轉換成十進制就是7,因此接下來要取出7這個地址所存放的數(shù)據(jù),那么就需要把這個地址碼把它放到MAR地址寄存器當中,接下來組成根據(jù)MAR指明的地址取出相應的這個數(shù)據(jù),也就把C的值放到了MDR當中,讓接下來這一步會把MDR的值再傳送到通用計算機X當中,也就是說當我們進行加法運算的時候,ACC里邊會先存入被加數(shù),然后通用計算機X當中會存放加速,也就是C的值,接下來控制單元會向ALU發(fā)送一個信號,告訴他你此次要執(zhí)行的是加法操作,那么ALU算是邏輯單元,就會把ACC和X里面只放的值進行一個相加,并且把價格的結果再次存回ACC當中,因此這就導致了ACC=7,也就是把a×B+C的值存放到了ACC里邊,好,那到此為止,我們完成了第3條指令,
- 上一條指令取指后(PC)=2,執(zhí)行后,(ACC)=6
- 1:(PC)->MAR,導致(MAR)=2
- 3:M(MAR)->MDR,導致(MDR)= 000011 0000000111
- 4:(MDR)àIR,導致(IR)= 000011 0000000111 - ?
- 5:OP(IR)->CU,指令的操作碼送到CU, CU分析后得知,這是“加法”指令?
- 6:Ad(IR)->MAR,指令的地址碼送到MAR,導致(MAR)=7
- 8:M(MAR)->MDR,導致(MDR)=0000000000000001=1?
- 9:(MDR)->X,導致(X)=0000000000000001=1?
- 10:(ACC)+(X)->ACC,導致(ACC)=7,由ALU實現(xiàn)加法運算
?? ?* 就是這個加法指令,看到前邊的5個步驟,其實和之前的兩條之內沒有任何區(qū)別。另外再取完指令之后,同樣的也會自動的進行PC +1的操作,也就是PC會指向下一條我們應該執(zhí)行的指令,接下來這條指令的執(zhí)行前面的這些步驟都是一樣的,根據(jù)PC記錄的這個地址取出這條指令并且放到IR指定計算器當中,然后第5個步驟會把這個指令的操作碼把它送到CU當中進行分析,然后CU分析之后發(fā)現(xiàn)000010這是一條純數(shù)的題目,也就是要把ACC里邊的數(shù)據(jù)把它存到地址碼所指明的存儲單元當中,那這個地址碼轉換成10進制應該是8,而把這個存儲單元剛好對應的是y這個變量的存儲位置,那現(xiàn)在ACC里邊存的是7,也就是a×B+C的值好,接下來執(zhí)行這個純屬指令,首先會把這個指令的地址碼部分,把它送到MAR里邊用來指明此次我要存入的是哪一個存儲單元,另外還需要把ACC里邊的運算結果通過數(shù)據(jù)總線把它送到MBR當中,也就是說此時MBR里邊保存了a×B+C的值,并且才是MAR里邊指明了這個值是要存到內存地址為8的這個地方,然后接下來CU控制單元會通過控制總線告訴啊主存儲器,說我此次要進行的是一個存一個寫的操作,于是主存儲器會根據(jù)MDR所指明的地址,把MDR當中的。這個數(shù)據(jù)放到相應的位置當中,這就導致了8號存儲單元它的值變?yōu)榱?,也就是我們最終想要得到的這個結果,Y=a×B+C
- 上一條指令取指后(PC)=4
- 1:(PC)àMAR,導致(MAR)=3
- 3:M(MAR)àMDR,導致(MDR)=000110 0000000000?
- 4:(MDR)àIR,導致(IR)= 000110 0000000000?
- 5:OP(IR)àCU,指令的操作碼送到CU,CU分析后得知,這是“停機”指令(利用中斷機制通知操作系統(tǒng)終止該進程)
?? ?* 首先需要取出指令,把這個指令把它取到ir指令寄存器當中,然后接下來要把操作碼部分送到CU里面,然后CU分析發(fā)現(xiàn),000110這個操作,對應的是停機之靈,所以執(zhí)行到這一步就知道我們的這段程序運行結束了,那學過操作系統(tǒng)的同學知道要停止一個進程的運行,需要通過系統(tǒng)調用或者說通過中斷機制來通知操作系統(tǒng)來終止這個進程,于是接下來執(zhí)行的指令就不是這一系列指令,而是操作系統(tǒng)相關的那些指令,
?
?
總結
以上是生活随笔為你收集整理的计算机的硬件工作原理(图片部分资源摘自王道考研资料)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于空间方法的图神经网络模型_用于时空图
- 下一篇: html中在线取色器,在线取色器(Col