計算機考研復試面試常問問題 組成原理篇(上)
使用前需知(拒絕白嫖,從你我做起,你只需點個贊就行):
需要pdf直接打印版,可在公眾號"程序員寶藏"回復復試上岸獲取(會持續更新)
在復習過程中,我用心查閱並整理了在考研復試面試中可能問到的大部分問題,並分點整理了答案,可以直接理解背誦並加上自己的語言潤色!極力推薦打印下來看,效率更高!
聲明:一些邊邊角角的沒有收集,畢竟是考研面試,不是筆試,這樣也能減輕大家的負擔!
此系列一共有8篇:編程語言篇|數據結構篇|操作系統篇|組成原理篇|計算機網絡篇|數據庫篇|軟件工程篇|計算機專業英語篇(還未全部完成,敬請期待,你們的支持和關注是我最大的動力!)
個人整理,不可用於商業用途,轉載請注明出處。
需要408電子書2021版,可在公眾號"程序員寶藏"回復408電子書獲取
需要408初試視頻2021版,可在公眾號"程序員寶藏"回復408視頻獲取
需要復試機試視頻,可在公眾號"程序員寶藏"回復機試必過獲取
加油,大家都可以上岸!!!讓我們一起努力!!!
第一章、計算機系統概述
快速喚起記憶知識框架:
1.馮諾依曼機和存儲程序的概念?
馮·諾依曼在研究EDVAC 機時提出了“存儲程序”的概念,“存儲程序”的思想奠定了現代計算機的基本結構,以此概念為基礎的各類計算機通稱為馮·諾依曼機,其特點如下:
計算機硬件系統由運算器、存儲器、控制器、輸入設備和輸出設備5 大部件組成。
指令和數據以同等地位存儲在存儲器中,並可按地址尋訪。
指令和數據均用二進制代碼表示。
指令由操作碼和地址碼組成,操作碼用來表示操作的性質,地址碼用來表示操作數在存儲器中的位置。
指令在存儲器內按順序存放。通常,指令是順序執行的,在特定條件下可根據運算結果或根據設定的條件改變執行順序。
早期的馮諾依曼機以運算器為中心,輸入/輸出設備通過運算器與存儲器傳送數據。現代計算機以存儲器為中心。
“存儲程序”的概念是指將指令以代碼的形式事先輸入計算機的主存儲器,然后按其在存儲器中的首地址執行程序的第一條指令,以后就按該程序的規定順序執行其他指令,直至程序執行結束。
馮諾依曼結構的模型機:
![]()
2.計算機的工作過程?
計算機的工作過程分為以下三個步驟:
- 把程序和數據裝入主存儲器。
- 將源程序轉換成可執行文件。
- 從可執行文件的首地址開始逐條執行指令。
3.在計算機系統結構中,什么是編譯?什么是解釋?
翻譯的方式有兩種,一個是編譯,一個是解釋。
編譯型語言寫的程序在執行之前,需要一個專門的編譯過程,把程序編譯成為機器語言的文件,比如exe文件,如果源程序不變以后要運行的話就不用重新翻譯。
解釋則不同,解釋性語言的程序不需要編譯,在運行程序的時候才翻譯,翻譯一句執行一句,不生成目標程序,這樣解釋性語言每執行一次就要翻譯一次,效率比較低。
.java文件->編譯->.class文件,編譯成.class字節碼,.class需要jvm解釋,然后解釋執行。Java很特殊,Java程序需要編譯但是沒有直接編譯成機器語言,即二進制語言,而是編譯成字節碼(.class)再用解釋方式執行。java程序編譯以后的class屬於中間代碼,並不是可執行程序exe,不是二進制文件,所以在執行的時候需要一個中介來解釋中間代碼,這就是所謂的java虛擬機(JVM)。
C語言編譯過程分成四個步驟:
1, 由.c文件到.i文件,這個過程叫預處理,將#include包含的頭文件直接拷貝到hello.c當中;將#define定義的宏進行替換,同時將代碼中沒用的注釋部分刪除等
2, 由.i文件到.s文件,這個過程叫編譯
3, 由.s文件到.o文件,這個過程叫匯編
4, 由.o文件到可執行文件,這個過程叫鏈接,將翻譯成的二進制與需要用到庫綁定在一塊
![]()
4.描述一下指令執行過程?
程序中第一條指令的地址置於PC 中,根據PC 取出第一條指令,經過譯碼、執行步驟等,控制計算機各功能部件協同運行,完成這條指令的功能,並計算下一條指令的地址。用新得到的指令地址繼續讀出第二條指令並執行,直到程序結束為止。下面以取數指令(即將指令地址碼指示的存儲單元中的操作數取出后送至運算器的ACC 中)為例進行說明,其信息流程如下:
- 取指令: PC 一>MAR—>M—>MDR—>IR
根據PC 取指令到IR, 將PC 的內容送MAR, MAR 中的內容直接送地址線,同時控制器將讀信號送讀/寫信號線,主存根據地址線上的地址和讀信號,從指定存儲單元讀出指令,送到數據線上, MDR 從數據線接收指令信息,並傳送到IR 中。
分析指令: OP(IR)—>CU 指令譯碼並送出控制信號。控制器根據IR 中指令的操作碼,生成相應的控制信號,送到不同的執行部件。在本例中, IR 中是取數指令,因此讀控制信號被送到總線的控制線上。
執行指令: Ad(IR)—>MAR—>M—>MDR—>ACC 取數操作。將IR 中指令的地址碼送MAR, MAR 中的內容送地址線,同時控制器將讀信號送讀/寫信號線從主存指定存儲單元讀出操作數,並通過數據線送至MDR, 再傳送到ACC 中。
此外,每取完一條指令,還須為取下一條指令做准備,形成下一條指令的地址,即(PC)+1 —> PC 。
5.計算機的主要性能指標?
-
機器字長 機器字長是指計算機進行一次整數運算(即定點整數運算)所能處理的二進制數據的位數,通常與CPU 的寄存器位數、加法器有關。因此,機器字長一般等於內部寄存器的大小,字長越長,數的表示范圍越大,計算精度越高。計算機字長通常選定為字節(8 位)的整數倍。
-
數據通路帶寬 數據通路帶寬是指數據總線一次所能並行傳送信息的位數。這里所說的數據通路寬度是指外部數據總線的寬度,它與CPU 內部的數據總線寬度(內部寄存器的大小)有可能不同。各個子系統通過數據總線連接形成的數據傳送路徑稱為數據通路。
-
主存容量 主存容量是指主存儲器所能存儲信息的最大容量,通常以字節來衡量,也可用字數x字長(如512Kx16 位)來表示存儲容量。其中, MAR 的位數反映存儲單元的個數, MAR 的位數反映可尋址范圍的最大值(而不一定是實際存儲器的存儲容量)。
-
運算速度 (1) 吞吐量和響應時間。 • 吞吐量:指系統在單位時間內處理請求的數量。它取決於信息能多快地輸入內存, CPU能多快地取指令,數據能多快地從內存取出或存入,以及所得結果能多快地從內存送給一台外部設備。幾乎每步都關系到主存,因此系統吞吐量主要取決於主存的存取周期。 • 響應時間:指從用戶向計算機發送一個請求,到系統對該請求做出響應並獲得所需結果的等待時間。通常包括CPU 時間(運行一個程序所花費的時間)與等待時間(用於磁盤訪問、存儲器訪問、I/0 操作、操作系統開銷等的時間)。 (2) 主頻和CPU 時鍾周期。 • CPU 時鍾周期:通常為節拍脈沖或T周期,即主頻的倒數,它是CPU 中最小的時間單位,每個動作至少需要1 個時鍾周期。 •主頻:機器內部時鍾的頻率。
(3)CPI(Clock cycle Per Instruction),即執行一條指令所需的時鍾周期數。
第二章、數據的表示和運算(偏筆試一點的一章)
快速喚起記憶知識框架:
6.IEEE754標准浮點數
7.C語言中的浮點數類型及類型轉換
C 語言中的float 和double 類型分別對應於IEEE 754 單精度浮點數和雙精度浮點數。long double類型對應於擴展雙精度浮點數,但long double 的長度和格式隨編譯器和處理器類型的不同而有所不同。在C 程序中等式的賦值和判斷中會出現強制類型轉換,以char->int->long->double 和float->double最為常見,從前到后范圍和精度都從小到大,轉換過程沒有損失。
從int 轉換為float 時,雖然不會發生溢出,但int 可以保留32 位, float 保留24 位,可能有數據舍入,若從int 轉換為double 則不會出現。
從int 或float 轉換為double 時,因為double 的有效位數更多,因此能保留精確值。
從double 轉換為float 時,因為float 表示范圍更小,因此可能發生溢出。此外,由於有效位數變少,因此可能被舍入。
從float 或double 轉換為int 時,因為int 沒有小數部分,所以數據可能會向0 方向被截斷(僅保留整數部分),影響精度。另外,由於int 的表示范圍更小,因此可能發生溢出。
8.在計算機中,為什么要采用二進制來表示數據?
從可行性來說,采用二進制,只有0 和1 兩個狀態,能夠表示0 、1 兩種狀態的電子器件很多,如開關的接通和斷開、晶體管的導通和截止、磁元件的正負剩磁、電位電平的高與低等,都可表示0 、1 兩個數碼。使用二進制,電子器件具有實現的可行性。
從運算的簡易性來說,二進制數的運算法則少,運算簡單,使計算機運算器的硬件結構大大簡化(十進制的乘法九九口訣表有55 條公式,而二進制乘法只有4 條規則)。
從邏輯上來說,由於二進制0 和1 正好和邏輯代數的假(false) 和真(true) 相對應,有邏輯代數的理論基礎,用二進制表示二值邏輯很自然。
9.各編碼方式的數值范圍
第三章、存儲系統
快速喚起記憶知識框架:
10.多級存儲系統?
為了解決存儲系統大容量、高速度和低成本3 個相互制約的矛盾,在計算機系統中,通常采用多級存儲器結構,在圖中由上至下,位價越來越低,速度越來越慢,容量越來越大, CPU 訪問的頻度也越來越低。
實際上,存儲系統層次結構主要體現在"Cache-主存”層次和“主存-輔存”層次。前者主要解決CPU 和主存速度不匹配的問題,后者主要解決存儲系統的容量問題。在存儲體系中, Cache 、主存能與CPU 直接交換信息,輔存則要通過主存與CPU 交換信息;主存與CPU 、Cache 、輔存都能交換信息。
存儲器層次結構的主要思想是上一層的存儲器作為低一層存儲器的高速緩存。從CPU 的角度看, "Cache—主存”層次速度接近於Cache, 容量和位價卻接近千主存。從“主存—輔存”層次分析,其速度按近於主存,容址和位價動接近於輔存。這就解決了速度、容量、成本這三者之間的矛盾。
在“主存—輔存”這一層次的不斷發展中,逐漸形成了虛擬存儲系統,在這個系統中程序員編程的地址范圍與虛擬存儲器的地址空間相對應。對具有虛擬存儲器的計算機系統而言,編程時可用的地址空間遠大於主存間。
11.半導體隨機存儲器?
主存儲器由DRAM 實現,靠處理器的那一層(Cache) 則由SRAM 實現,它們都屬於易失性存儲器,只要電源被切斷,原來保存的信息便會丟失。DRAM 的每比特成本低千SRAM, 速度也慢於SRAM, 價格差異主要是因為制造DRAM 需要更多的硅。而ROM 屬千非易失性存儲器。
1.SRAM 的工作原理
通常把存放一個二進制位的物理器件稱為存儲元,它是存儲器的最基本的構件。地址碼相同時多個存儲元構成一個存儲單元。若干存儲單元的集合構成存儲體。
靜態隨機存儲器(SRAM) 的存儲元是用雙穩態觸發器(六晶體管MOS) 來記憶信息的,因此即使信息被讀出后,它仍保持其原狀態而不需要再生(非破壞性牘出)。SRAM 的存取速度快,但集成度低,功耗較大,所以一般用來組成高速緩沖存儲器。
2 .DRAM 的工作原理 與SRAM 的存儲原理不同,動態隨機存儲器(DRAM) 是利用存儲元電路中柵極電容上的電荷來存儲信息的, DRAM 的基本存儲元通常只使用一個晶體管,所以它比SRAM 的密度要高很多。DRAM 采用地址復用技術,地址線是原來的1/2, 且地址信號分行、列兩次傳送。相對於SRAM 來說, DRAM 具有容易集成、位價低、容量大和功耗低等優點,但DRAM 的存取速度比SRAM 的慢,一般用來組成大容量主存系統。DRAM 電容上的電荷一般只能維持1~2ms, 因此即使電源不斷電,信息也會自動消失。為此,每隔一定時間必須刷新,通常取2ms, 這個時間稱為刷新周期。常用的刷新方式有3 種:集中刷新、分散刷新和異步刷新。
3.只讀存儲器(ROM) 的特點 ROM 和RAM 都是支持隨機存取的存儲器,其中SRAM 和DRAM 均為易失性半導體存儲器。而ROM 中一旦有了信息,就不能輕易改變,即使掉電也不會丟失,它在計算機系統中是只供讀出的存儲器。ROM 器件有兩個顯著的優點:
- 結構簡單,所以位密度比可讀寫存儲器的高。
- 具有非易失性,所以可靠性高。
12.有哪些技術能夠提高CPU訪存速度?
為了提高CPU 訪問存儲器的速度,可以采用雙端口存儲器、多模塊存儲器等技術,它們同屬並行技術,前者為空間並行,后者為時間並行。
1.雙端口RAM 雙端口RAM 是指同一個存儲器有左、右兩個獨立的端口,分別具有兩組相互獨立的地址線、數據線和讀寫控制線,允許兩個獨立的控制器同時異步地訪問存儲單元,如圖所示。當兩個端口的地址不相同時,在兩個端口上進行讀寫操作一定不會發生沖突。
2.多模塊存儲器 為提高訪存速度,常采用多模塊存儲器,常用的有單體多字存儲器和多體低位交叉存儲器。
注意: CPU 的速度比存儲器的快,若同時從存儲器中取出n 條指令,就可充分利用CPU 資源,提高運行速度。多體交叉存儲器就是基於這種思想提出的。
(1)單體多字存儲器
單體多字系統的特點是存儲器中只有一個存儲體,每個存儲單元存儲m 個字,總線寬度也為m 個字。一次並行讀出m 個字,地址必須順序排列並處於同一存儲單元。單體多字系統在一個存取周期內從同一地址取出m條指令,然后將指令逐條送至CPU執行,即每隔1/m 存取周期, CPU 向主存取一條指令。顯然,這增大了存儲器的帶寬,提高了單體存儲器的工作速度。
缺點:指令和數據在主存內必須是連續存放的,一旦遇到轉移指令,或操作數不能連續存放,這種方法的效果就不明顯。
(2)多休並行存儲器 多體並行存儲器由多體模塊組成。每個模塊都有相同的容量和存取速度,各模塊都有獨立的讀寫控制電路、地址寄存器和數據寄存器。它們既能並行工作,又能交叉工作。多體並行存儲器分為高位交叉編址(順序方式)和低位交叉編址(交叉方式)兩種。
13.Cache
Cache存儲器:電腦中為高速緩沖存儲器,是位於CPU和主存儲器DRAM(Dynamic Random Access Memory)之間,規模較小,但速度很高的存儲器,通常由SRAM(Static Random Access Memory靜態存儲器)組成。
Cache的功能是提高CPU數據輸入輸出的速率。Cache容量小但速度快,內存速度較低但容量大,通過優化調度算法,系統的性能會大大改善,仿佛其存儲系統容量與內存相當而訪問速度近似Cache。
Cache通常采用相聯存儲器。
使用Cache改善系統性能的依據是程序的局部性原理
替換算法:
當Cache產生了一次訪問未命中之后,相應的數據應同時讀入CPU和Cache。但是當Cache已存滿數據后,新數據必須替換(淘汰)Cache中的某些舊數據。最常用的替換算法有隨機算法、先進先出算法(FIFO)和近期最少使用算法(LRU)。
寫操作:
因為需要保證緩存在Cache中的數據與內存中的內容一致,Cache的寫操作比較復雜,常用的有寫直達法、寫回法和標記法。
與主存的映射方式:
直接映射:主存數據塊只能裝入Cache中的唯一位置
全相聯映射:可以把主存數據塊裝入Cache 中的任何位置
組相聯映射:將Cache分為若干組,一個數據塊可以裝入一組內的任何一個位置
14.虛擬存儲器
虛擬存儲器的基本概念
虛擬存儲器是指具有請求調入和置換功能,能從邏輯上對內存容量加以擴存的一種存儲器系統
頁式虛擬存儲器
頁式管理:是把虛擬存儲空間和實際空間等分成固定大小的頁,各虛擬頁可裝入主存中的不同實際頁面位置.頁式存儲中,處理機邏輯地址由虛頁號和頁內地址兩部分組成,實際地址也分為頁號和頁內地址兩部分,由地址映射機構將虛頁號轉換成主存的實際頁號.
頁式管理用一個頁表,包括頁號,每頁在主存中起始位置,裝入位等.頁表是虛擬頁號與物理頁號的映射表.頁式管理由操作系統進行,對應用程序員的透明的.
段式虛擬存儲器
段式管理: 把主存按段分配的存儲管理方式.它是一種模塊化的存儲管理方式,每個用戶程序模塊可分到一個段,該程序模塊只能訪問分配給該模塊的段所對應的主存空間.段長可以任意設定,並可放大和縮小.
系統中通過一個段表指明各段在主存中的位置.段表中包括段名(段號),段起點,裝入位和段長等.段表本身也是一個段.段一般是按程序模塊分的.
段頁式虛擬存儲器
段頁式管理:是上述兩種方法的結合,它將存儲空間按邏輯模塊分成段,每段又分成若干個頁,訪存通過一個段表和若干個頁表進行.段的長度必須是頁長的整數倍,段的起點必須是某一頁的起點.
TLB(快表)
在虛擬存儲器中進行地址變換時,需要虛頁號變換成主存中實頁號的內部地址變換這一過程
緩存時首先要到主存查頁表,然后才能根據主存物理地址訪問主存的存取指令或數據。因此采用虛擬存儲器機制后,訪存的次數增加了。為了減少訪存的次數,往往將頁表中最活躍的幾個頁表項復制到高速緩存中。這種在高速緩存中的頁表項稱為快表(translation look aside buffer)
查表時,根據虛頁表同時查找快表和慢表,當在快表中查到該虛頁號時,就能很快找到對應的實頁號,將其送入主存實地址寄存器,同時使慢表的查找作廢,這時主存的訪問速度沒降低多少.如果在快表中查不到,則經過一個訪主存的時間延遲后,將從慢表中查到的實頁送入實地址寄存器,同時將此虛頁號和對應的實頁號送入快表。