目錄
一、什么是內(nèi)存
二、有何作用?
三、常用數(shù)量單位
四、指令的工作原理
五、裝入方式
1、絕對(duì)裝入
2、可重定位裝入(靜態(tài)重定位)
3、動(dòng)態(tài)運(yùn)行時(shí)裝入(動(dòng)態(tài)重定位)
六、從寫(xiě)程序到程序運(yùn)行
七、鏈接的三種方式
1、靜態(tài)鏈接
2、裝入時(shí)動(dòng)態(tài)鏈接
3、運(yùn)行時(shí)動(dòng)態(tài)鏈接
八、總結(jié)
一、什么是內(nèi)存
- 內(nèi)存可存放數(shù)據(jù),程序執(zhí)行前需要先放到內(nèi)存中才能被CPU處理。
- 內(nèi)存中也有一個(gè)一個(gè)的“小房間”,每個(gè)小房間就是一個(gè)“存儲(chǔ)單元”。
- 如果計(jì)算機(jī)“按字節(jié)編址”則每個(gè)存儲(chǔ)單元大小為1字節(jié),即1B,即8個(gè)二進(jìn)制位。
- 如果字長(zhǎng)為16位的計(jì)算機(jī)“按字編址”,則每個(gè)存儲(chǔ)單元大小為1個(gè)字;每個(gè)字的大小為16個(gè)二進(jìn)制位。
二、有何作用?
緩和CPU與硬盤(pán)之間的速度矛盾。
三、常用數(shù)量單位
四、指令的工作原理
指令是計(jì)算機(jī)執(zhí)行某個(gè)特定任務(wù)的基本操作,也是計(jì)算機(jī)進(jìn)行數(shù)據(jù)處理和控制的基本單位。指令的工作原理可以簡(jiǎn)單地概括為以下四步:
-
讀取指令:計(jì)算機(jī)從內(nèi)存中讀取指令,并將指令存儲(chǔ)到處理器中。
-
解析指令:計(jì)算機(jī)解析指令,確定需要執(zhí)行的操作,并確定需要的數(shù)據(jù)和操作符。
-
執(zhí)行指令:計(jì)算機(jī)執(zhí)行指令所需的操作,并將結(jié)果存儲(chǔ)到指定的位置。
-
更新程序計(jì)數(shù)器:計(jì)算機(jī)更新程序計(jì)數(shù)器中的指令地址,以便讀取下一條指令。
簡(jiǎn)單來(lái)說(shuō),指令的工作原理就是根據(jù)特定的操作碼和操作數(shù),讓計(jì)算機(jī)進(jìn)行相應(yīng)的運(yùn)算和控制操作。在執(zhí)行指令的過(guò)程中,計(jì)算機(jī)需要根據(jù)指令中給定的地址,從內(nèi)存中讀取數(shù)據(jù),將其存儲(chǔ)到寄存器中,并根據(jù)指令中給定的操作碼進(jìn)行相應(yīng)的計(jì)算和輸出。指令的工作原理包括多個(gè)步驟,但每個(gè)步驟都是計(jì)算機(jī)系統(tǒng)中必不可少的一部分。
五、裝入方式
1、絕對(duì)裝入
在編譯時(shí),如果知道程序?qū)⒎诺絻?nèi)存中的哪個(gè)位置,編譯程序?qū)?span style="color:#ff9900;">產(chǎn)生絕對(duì)地址的目標(biāo)代碼。
裝入程序按照裝入模塊中的地址,將程序和數(shù)據(jù)裝入內(nèi)存。
2、可重定位裝入(靜態(tài)重定位)
靜態(tài)重定位是指在程序編譯或鏈接的過(guò)程中,將程序中的邏輯地址轉(zhuǎn)換為物理地址,使程序能夠在內(nèi)存中正確地運(yùn)行的過(guò)程。在靜態(tài)重定位過(guò)程中,編譯器或鏈接器將程序的邏輯地址轉(zhuǎn)換成物理地址,并將轉(zhuǎn)換后的地址寫(xiě)入程序中需要訪(fǎng)問(wèn)的內(nèi)存地址中。
靜態(tài)重定位通常在程序裝載時(shí)進(jìn)行,重定位的過(guò)程主要包括以下幾個(gè)步驟:
-
編譯器或鏈接器為程序中的每個(gè)變量、函數(shù)和常量分配邏輯地址。
-
在程序被裝載到內(nèi)存之前,重定位程序會(huì)將程序中的邏輯地址轉(zhuǎn)換成物理地址。
-
重定位程序會(huì)在程序中插入符號(hào)表,用于記錄程序中的符號(hào)地址和信息。
-
如果程序在運(yùn)行過(guò)程中需要地址的修改,靜態(tài)重定位就會(huì)被觸發(fā),重定位程序會(huì)將需要修改的地址重新計(jì)算并寫(xiě)入正確的物理地址。
靜態(tài)重定位是計(jì)算機(jī)系統(tǒng)中重要的概念,它使得程序能夠在內(nèi)存中正確地運(yùn)行,提高了計(jì)算機(jī)的可移植性和靈活性。
注意:靜態(tài)重定位的特點(diǎn)是在一個(gè)作業(yè)裝入內(nèi)存時(shí),必須分配其要求的全部?jī)?nèi)存空間,如果沒(méi)有足夠的內(nèi)存,就不能裝入該作業(yè)。作業(yè)一旦進(jìn)入內(nèi)存后,在運(yùn)行期間就不能再移動(dòng),也不能再申請(qǐng)內(nèi)存空間。
3、動(dòng)態(tài)運(yùn)行時(shí)裝入(動(dòng)態(tài)重定位)
動(dòng)態(tài)重定位是指在程序運(yùn)行時(shí),將程序中的邏輯地址轉(zhuǎn)換為物理地址的過(guò)程。
和靜態(tài)重定位不同,動(dòng)態(tài)重定位是在程序運(yùn)行時(shí)根據(jù)實(shí)際情況進(jìn)行地址轉(zhuǎn)換的。
在動(dòng)態(tài)重定位過(guò)程中,操作系統(tǒng)或庫(kù)函數(shù)會(huì)在程序被裝載進(jìn)內(nèi)存之后,根據(jù)程序運(yùn)行時(shí)的情況動(dòng)態(tài)地對(duì)程序中的地址進(jìn)行轉(zhuǎn)換。動(dòng)態(tài)重定位通常發(fā)生在以下情況下:
-
程序中使用了動(dòng)態(tài)鏈接庫(kù)或共享庫(kù),需要在運(yùn)行時(shí)進(jìn)行地址轉(zhuǎn)換。
-
程序在運(yùn)行過(guò)程中需要?jiǎng)討B(tài)分配內(nèi)存,需要?jiǎng)討B(tài)地調(diào)整程序中的地址。
動(dòng)態(tài)重定位通常通過(guò)虛擬內(nèi)存機(jī)制來(lái)實(shí)現(xiàn),操作系統(tǒng)會(huì)將程序中的邏輯地址映射到物理地址上,當(dāng)程序需要訪(fǎng)問(wèn)某個(gè)地址時(shí),操作系統(tǒng)會(huì)根據(jù)映射關(guān)系將邏輯地址轉(zhuǎn)換為物理地址。動(dòng)態(tài)重定位使得程序能夠更加靈活地運(yùn)行,能夠適應(yīng)不同的運(yùn)行環(huán)境和硬件平臺(tái)。
注意:采用動(dòng)態(tài)重定位時(shí)允許程序在內(nèi)存中發(fā)生移動(dòng)。
六、從寫(xiě)程序到程序運(yùn)行
- 編譯:由編譯程序?qū)⒂脩?hù)源代碼編譯成若干個(gè)目標(biāo)模塊。(編譯就是把高級(jí)語(yǔ)言翻譯為機(jī)器語(yǔ)言)
- 鏈接:由鏈接程序?qū)⒕幾g后形成的一組目標(biāo)模塊,以及所需庫(kù)函數(shù)鏈接在一起,形成一個(gè)完整的裝入模塊。
- 裝入(裝載):由裝入程序?qū)⒀b入模塊裝入內(nèi)存運(yùn)行。
?
七、鏈接的三種方式
1、靜態(tài)鏈接
靜態(tài)鏈接:在程序運(yùn)行之前,先將各目標(biāo)模塊及它們所需的庫(kù)函數(shù)連接成一個(gè)完整的可執(zhí)行文件(裝入模塊),之后不再拆開(kāi)。
2、裝入時(shí)動(dòng)態(tài)鏈接
將各目標(biāo)模塊裝入內(nèi)存時(shí),邊裝入邊鏈接的鏈接方式。
3、運(yùn)行時(shí)動(dòng)態(tài)鏈接
在程序執(zhí)行中需要該目標(biāo)模塊時(shí),才對(duì)它進(jìn)行鏈接。其優(yōu)點(diǎn)是便于修改和更新,便于實(shí)現(xiàn)對(duì)目標(biāo)模塊的共享。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-725872.html
八、總結(jié)
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-725872.html
到了這里,關(guān)于第三章 內(nèi)存管理 一、內(nèi)存的基礎(chǔ)知識(shí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!