動(dòng)態(tài)分區(qū)分配算法有哪幾種?
14、一個(gè)程序從開(kāi)始運(yùn)行到結(jié)束的完整過(guò)程,你能說(shuō)出來(lái)多少?
四個(gè)過(guò)程:
(1)預(yù)編譯
主要處理源代碼文件中的以“#”開(kāi)頭的預(yù)編譯指令。處理規(guī)則見(jiàn)下
1、刪除所有的#define,展開(kāi)所有的宏定義。
2、處理所有的條件預(yù)編譯指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。
3、處理“#include”預(yù)編譯指令,將文件內(nèi)容替換到它的位置,這個(gè)過(guò)程是遞歸進(jìn)行的,文件中包含其他文件。
4、刪除所有的注釋,“//”和“”。
5、保留所有的#pragma 編譯器指令,編譯器需要用到他們,如:#pragma once 是為了防止有文件被重復(fù)引用。
6、添加行號(hào)和文件標(biāo)識(shí),便于編譯時(shí)編譯器產(chǎn)生調(diào)試用的行號(hào)信息,和編譯時(shí)產(chǎn)生編譯錯(cuò)誤或警告是能夠顯示行號(hào)。
(2)編譯
把預(yù)編譯之后生成的xxx.i或xxx.ii文件,進(jìn)行一系列詞法分析、語(yǔ)法分析、語(yǔ)義分析及優(yōu)化后,生成相應(yīng)的匯編代碼文件。
1、詞法分析:利用類似于“有限狀態(tài)機(jī)”的算法,將源代碼程序輸入到掃描機(jī)中,將其中的字符序列分割成一系列的記號(hào)。
2、語(yǔ)法分析:語(yǔ)法分析器對(duì)由掃描器產(chǎn)生的記號(hào),進(jìn)行語(yǔ)法分析,產(chǎn)生語(yǔ)法樹(shù)。由語(yǔ)法分析器輸出的語(yǔ)法樹(shù)是一種以表達(dá)式為節(jié)點(diǎn)的樹(shù)。
3、語(yǔ)義分析:語(yǔ)法分析器只是完成了對(duì)表達(dá)式語(yǔ)法層面的分析,語(yǔ)義分析器則對(duì)表達(dá)式是否有意義進(jìn)行判斷,其分析的語(yǔ)義是靜態(tài)語(yǔ)義——在編譯期能分期的語(yǔ)義,相對(duì)應(yīng)的動(dòng)態(tài)語(yǔ)義是在運(yùn)行期才能確定的語(yǔ)義。
4、優(yōu)化:源代碼級(jí)別的一個(gè)優(yōu)化過(guò)程。
5、目標(biāo)代碼生成:由代碼生成器將中間代碼轉(zhuǎn)換成目標(biāo)機(jī)器代碼,生成一系列的代碼序列——匯編語(yǔ)言表示。
6、目標(biāo)代碼優(yōu)化:目標(biāo)代碼優(yōu)化器對(duì)上述的目標(biāo)機(jī)器代碼進(jìn)行優(yōu)化:尋找合適的尋址方式、使用位移來(lái)替代乘法運(yùn)算、刪除多余的指令等。
(3)匯編
將匯編代碼轉(zhuǎn)變成機(jī)器可以執(zhí)行的指令(機(jī)器碼文件)。匯編器的匯編過(guò)程相對(duì)于編譯器來(lái)說(shuō)更簡(jiǎn)單,沒(méi)有復(fù)雜的語(yǔ)法,也沒(méi)有語(yǔ)義,更不需要做指令優(yōu)化,只是根據(jù)匯編指令和機(jī)器指令的對(duì)照表一一翻譯過(guò)來(lái),匯編過(guò)程有匯編器as完成。經(jīng)匯編之后,產(chǎn)生目標(biāo)文件(與可執(zhí)行文件格式幾乎一樣)xxx.o(Linux下)、xxx.obj(Windows下)。
(4)鏈接
將不同的源文件產(chǎn)生的目標(biāo)文件進(jìn)行鏈接,從而形成一個(gè)可以執(zhí)行的程序。鏈接分為靜態(tài)鏈接和動(dòng)態(tài)鏈接:
1、靜態(tài)鏈接:
函數(shù)和數(shù)據(jù)被編譯進(jìn)一個(gè)二進(jìn)制文件。在使用靜態(tài)庫(kù)的情況下,在編譯鏈接可執(zhí)行文件時(shí),鏈接器從庫(kù)中復(fù)制這些函數(shù)和數(shù)據(jù)并把它們和應(yīng)用程序的其它模塊組合起來(lái)創(chuàng)建最終的可執(zhí)行文件。
空間浪費(fèi):因?yàn)槊總(gè)可執(zhí)行程序中對(duì)所有需要的目標(biāo)文件都要有一份副本,所以如果多個(gè)程序?qū)ν粋(gè)目標(biāo)文件都有依賴,會(huì)出現(xiàn)同一個(gè)目標(biāo)文件都在內(nèi)存存在多個(gè)副本;更新困難:每當(dāng)庫(kù)函數(shù)的代碼修改了,這個(gè)時(shí)候就需要重新進(jìn)行編譯鏈接形成可執(zhí)行程序。
運(yùn)行速度快:但是靜態(tài)鏈接的優(yōu)點(diǎn)就是,在可執(zhí)行程序中已經(jīng)具備了所有執(zhí)行程序所需要的任何東西,在執(zhí)行的時(shí)候運(yùn)行速度快。
2、動(dòng)態(tài)鏈接:
動(dòng)態(tài)鏈接的基本思想是把程序按照模塊拆分成各個(gè)相對(duì)獨(dú)立部分,在程序運(yùn)行時(shí)才將它們鏈接在一起形成一個(gè)完整的程序,而不是像靜態(tài)鏈接一樣把所有程序模塊都鏈接成一個(gè)單獨(dú)的可執(zhí)行文件。
共享庫(kù):就是即使需要每個(gè)程序都依賴同一個(gè)庫(kù),但是該庫(kù)不會(huì)像靜態(tài)鏈接那樣在內(nèi)存中存在多份副本,而是這多個(gè)程序在執(zhí)行時(shí)共享同一份副本;更新方便:更新時(shí)只需要替換原來(lái)的目標(biāo)文件,而無(wú)需將所有的程序再重新鏈接一遍。當(dāng)程序下一次運(yùn)行時(shí),新版本的目標(biāo)文件會(huì)被自動(dòng)加載到內(nèi)存并且鏈接起來(lái),程序就完成了升級(jí)的目標(biāo)。性能損耗:因?yàn)榘焰溄油七t到了程序運(yùn)行時(shí),所以每次執(zhí)行程序都需要進(jìn)行鏈接,所以性能會(huì)有一定損失。
15、通過(guò)例子講解邏輯地址轉(zhuǎn)換為物理地址的基本過(guò)程
可以借助進(jìn)程的頁(yè)表將邏輯地址轉(zhuǎn)換為物理地址。
通常會(huì)在系統(tǒng)中設(shè)置一個(gè)頁(yè)表寄存器(PTR),存放頁(yè)表在內(nèi)存中的起始地址F和頁(yè)表長(zhǎng)度M。進(jìn)程未執(zhí)行時(shí),頁(yè)表的始址和頁(yè)表長(zhǎng)度放在進(jìn)程控制塊(PCB) 中,當(dāng)進(jìn)程被調(diào)度時(shí),操作系統(tǒng)內(nèi)核會(huì)把它們放到頁(yè)表寄存器中。
注意:頁(yè)面大小是2的整數(shù)冪
設(shè)頁(yè)面大小為L(zhǎng),邏輯地址A到物理地址E的變換過(guò)程如下:
例:若頁(yè)面大小L為1K字節(jié),頁(yè)號(hào)2對(duì)應(yīng)的內(nèi)存塊號(hào)b=8,將邏輯地址A=2500轉(zhuǎn)換為物理地址E。
等價(jià)描述:某系統(tǒng)按字節(jié)尋址,邏輯地址結(jié)構(gòu)中,頁(yè)內(nèi)偏移量占10位(說(shuō)明一個(gè)頁(yè)面的大小為2^10B = 1KB),頁(yè)號(hào)2對(duì)應(yīng)的內(nèi)存塊號(hào) b=8,將邏輯地址A=2500轉(zhuǎn)換為物理地址E。
①計(jì)算頁(yè)號(hào)、頁(yè)內(nèi)偏移量
頁(yè)號(hào)P=A/L = 2500/1024 = 2; 頁(yè)內(nèi)偏移量W= A%L = 2500%1024 = 452
②根據(jù)題中條件可知,頁(yè)號(hào)2沒(méi)有越界,其存放的內(nèi)存塊號(hào)b=8
③物理地址E=b*L+W=8 * 1024+ 425 = 8644
在分頁(yè)存儲(chǔ)管理(頁(yè)式管理)的系統(tǒng)中,只要確定了每個(gè)頁(yè)面的大小,邏輯地址結(jié)構(gòu)就確定了。因此,頁(yè)式管理中地址是-維的。即,只要給出一個(gè)邏輯地址,系統(tǒng)就可以自動(dòng)地算出頁(yè)號(hào)、頁(yè)內(nèi)偏移量?jī)蓚(gè)部分,并不需要顯式地告訴系統(tǒng)這個(gè)邏輯地址中,頁(yè)內(nèi)偏移量占多少位。
16、進(jìn)程同步的四種方法?
1. 臨界區(qū)
對(duì)臨界資源進(jìn)行訪問(wèn)的那段代碼稱為臨界區(qū)。
為了互斥訪問(wèn)臨界資源,每個(gè)進(jìn)程在進(jìn)入臨界區(qū)之前,需要先進(jìn)行檢查。
// entry section
// critical section;
// exit section
2. 同步與互斥
同步:多個(gè)進(jìn)程因?yàn)楹献鳟a(chǎn)生的直接制約關(guān)系,使得進(jìn)程有一定的先后執(zhí)行關(guān)系。
互斥:多個(gè)進(jìn)程在同一時(shí)刻只有一個(gè)進(jìn)程能進(jìn)入臨界區(qū)。
3. 信號(hào)量
信號(hào)量(Semaphore)是一個(gè)整型變量,可以對(duì)其執(zhí)行 down 和 up 操作,也就是常見(jiàn)的 P 和 V 操作。
down: 如果信號(hào)量大于 0 ,執(zhí)行 -1 操作;如果信號(hào)量等于 0,進(jìn)程睡眠,等待信號(hào)量大于 0;
up:對(duì)信號(hào)量執(zhí)行 +1 操作,喚醒睡眠的進(jìn)程讓其完成 down 操作。
down和up操作需要被設(shè)計(jì)成原語(yǔ),不可分割,通常的做法是在執(zhí)行這些操作的時(shí)候屏蔽中斷。
如果信號(hào)量的取值只能為0或者1,那么就成為了互斥量(Mutex),0 表示臨界區(qū)已經(jīng)加鎖,1 表示臨界區(qū)解鎖。
typedef int semaphore;
semaphore mutex = 1;
void P1() {
down(&mutex);
// 臨界區(qū)
up(&mutex);
}
void P2() {
down(&mutex);
// 臨界區(qū)
up(&mutex);
}
使用信號(hào)量實(shí)現(xiàn)生產(chǎn)者-消費(fèi)者問(wèn)題
問(wèn)題描述:使用一個(gè)緩沖區(qū)來(lái)保存物品,只有緩沖區(qū)沒(méi)有滿,生產(chǎn)者才可以放入物品;只有緩沖區(qū)不為空,消費(fèi)者才可以拿走物品。
因?yàn)榫彌_區(qū)屬于臨界資源,因此需要使用一個(gè)互斥量 mutex 來(lái)控制對(duì)緩沖區(qū)的互斥訪問(wèn)。
為了同步生產(chǎn)者和消費(fèi)者的行為,需要記錄緩沖區(qū)中物品的數(shù)量。數(shù)量可以使用信號(hào)量來(lái)進(jìn)行統(tǒng)計(jì),這里需要使用兩個(gè)信號(hào)量:empty 記錄空緩沖區(qū)的數(shù)量,full 記錄滿緩沖區(qū)的數(shù)量。
其中,empty 信號(hào)量是在生產(chǎn)者進(jìn)程中使用,當(dāng) empty 不為 0 時(shí),生產(chǎn)者才可以放入物品;full 信號(hào)量是在消費(fèi)者進(jìn)程中使用,當(dāng) full 信號(hào)量不為 0 時(shí),消費(fèi)者才可以取走物品。
注意,不能先對(duì)緩沖區(qū)進(jìn)行加鎖,再測(cè)試信號(hào)量。也就是說(shuō),不能先執(zhí)行 down(mutex) 再執(zhí)行 down(empty)。如果這么做了,那么可能會(huì)出現(xiàn)這種情況:生產(chǎn)者對(duì)緩沖區(qū)加鎖后,執(zhí)行 down(empty) 操作,發(fā)現(xiàn) empty = 0,此時(shí)生產(chǎn)者睡眠。
消費(fèi)者不能進(jìn)入臨界區(qū),因?yàn)樯a(chǎn)者對(duì)緩沖區(qū)加鎖了,消費(fèi)者就無(wú)法執(zhí)行 up(empty) 操作,empty 永遠(yuǎn)都為 0,導(dǎo)致生產(chǎn)者永遠(yuǎn)等待下,不會(huì)釋放鎖,消費(fèi)者因此也會(huì)永遠(yuǎn)等待下去。
#define N 100
typedef int semaphore;
semaphore mutex = 1;
semaphore empty = N;
semaphore full = 0;
void producer() {
while(TRUE) {
int item = produce_item();
down(&empty);
down(&mutex);
insert_item(item);
up(&mutex);
up(&full);
}
}
void consumer() {
while(TRUE) {
down(&full);
down(&mutex);
int item = remove_item();
consume_item(item);
up(&mutex);
up(&empty);
}
}
4. 管程
使用信號(hào)量機(jī)制實(shí)現(xiàn)的生產(chǎn)者消費(fèi)者問(wèn)題需要客戶端代碼做很多控制,而管程把控制的代碼獨(dú)立出來(lái),不僅不容易出錯(cuò),也使得客戶端代碼調(diào)用更容易。
c 語(yǔ)言不支持管程,下面的示例代碼使用了類 Pascal 語(yǔ)言來(lái)描述管程。示例代碼的管程提供了 insert() 和 remove() 方法,客戶端代碼通過(guò)調(diào)用這兩個(gè)方法來(lái)解決生產(chǎn)者-消費(fèi)者問(wèn)題。
monitor ProducerConsumer
integer i;
condition c;
procedure insert();
begin
// ...
end;
procedure remove();
begin
// ...
end;
end monitor;
管程有一個(gè)重要特性:在一個(gè)時(shí)刻只能有一個(gè)進(jìn)程使用管程。進(jìn)程在無(wú)法繼續(xù)執(zhí)行的時(shí)候不能一直占用管程,否則其它進(jìn)程永遠(yuǎn)不能使用管程。
管程引入了條件變量以及相關(guān)的操作:wait() 和 signal() 來(lái)實(shí)現(xiàn)同步操作。對(duì)條件變量執(zhí)行 wait() 操作會(huì)導(dǎo)致調(diào)用進(jìn)程阻塞,把管程讓出來(lái)給另一個(gè)進(jìn)程持有。signal() 操作用于喚醒被阻塞的進(jìn)程。
使用管程實(shí)現(xiàn)生產(chǎn)者-消費(fèi)者問(wèn)題
// 管程
monitor ProducerConsumer
condition full, empty;
integer count := 0;
condition c;
procedure insert(item: integer);
begin
if count = N then wait(full);
insert_item(item);
count := count + 1;
if count = 1 then signal(empty);
end;
function remove: integer;
begin
if count = 0 then wait(empty);
remove = remove_item;
count := count - 1;
if count = N -1 then signal(full);
end;
end monitor;
// 生產(chǎn)者客戶端
procedure producer
begin
while true do
begin
item = produce_item;
ProducerConsumer.insert(item);
end
end;
// 消費(fèi)者客戶端
procedure consumer
begin
while true do
begin
item = ProducerConsumer.remove;
consume_item(item);
end
end;
17、操作系統(tǒng)在對(duì)內(nèi)存進(jìn)行管理的時(shí)候需要做些什么?
操作系統(tǒng)負(fù)責(zé)內(nèi)存空間的分配與回收。
操作系統(tǒng)需要提供某種技術(shù)從邏輯上對(duì)內(nèi)存空間進(jìn)行擴(kuò)充。
操作系統(tǒng)需要提供地址轉(zhuǎn)換功能,負(fù)責(zé)程序的邏輯地址與物理地址的轉(zhuǎn)換。
操作系統(tǒng)需要提供內(nèi)存保護(hù)功能。保證各進(jìn)程在各自存儲(chǔ)空間內(nèi)運(yùn)行,互不干擾
18、進(jìn)程通信方法(Linux和windows下),線程通信方法(Linux和windows下)
進(jìn)程通信方法
線程通信方法
19、程間通信有哪幾種方式?把你知道的都說(shuō)出來(lái)
Linux幾乎支持全部UNIX進(jìn)程間通信方法,包括管道(有名管道和無(wú)名管道)、消息隊(duì)列、共享內(nèi)存、信號(hào)量和套接字。其中前四個(gè)屬于同一臺(tái)機(jī)器下進(jìn)程間的通信,套接字則是用于網(wǎng)絡(luò)通信。
管道
無(wú)名管道
無(wú)名管道特點(diǎn):
無(wú)名管道是一種特殊的文件,這種文件只存在于內(nèi)存中。
無(wú)名管道只能用于父子進(jìn)程或兄弟進(jìn)程之間,必須用于具有親緣關(guān)系的進(jìn)程間的通信。
無(wú)名管道只能由一端向另一端發(fā)送數(shù)據(jù),是半雙工方式,如果雙方需要同時(shí)收發(fā)數(shù)據(jù)需要兩個(gè)管道。
相關(guān)接口:
int pipe(int fd[2]);
fd[2]:管道兩端用fd[0]和fd[1]來(lái)描述,讀的一端用fd[0]表示,寫(xiě)的一端用fd[1]表示。通信雙方的進(jìn)程中寫(xiě)數(shù)據(jù)的一方需要把fd[0]先close掉,讀的一方需要先把fd[1]給close掉。
有名管道:
有名管道特點(diǎn):
有名管道是FIFO文件,存在于文件系統(tǒng)中,可以通過(guò)文件路徑名來(lái)指出。
有名管道可以在不具有親緣關(guān)系的進(jìn)程間進(jìn)行通信。
相關(guān)接口:
int mkfifo(const char *pathname, mode_t mode);
pathname:即將創(chuàng)建的FIFO文件路徑,如果文件存在需要先刪除。
mode:和open()中的參數(shù)相同。
消息隊(duì)列
相比于 FIFO,消息隊(duì)列具有以下優(yōu)點(diǎn):
消息隊(duì)列可以獨(dú)立于讀寫(xiě)進(jìn)程存在,從而避免了 FIFO 中同步管道的打開(kāi)和關(guān)閉時(shí)可能產(chǎn)生的困難;
避免了 FIFO 的同步阻塞問(wèn)題,不需要進(jìn)程自己提供同步方法;
讀進(jìn)程可以根據(jù)消息類型有選擇地接收消息,而不像 FIFO 那樣只能默認(rèn)地接收。
共享內(nèi)存
進(jìn)程可以將同一段共享內(nèi)存連接到它們自己的地址空間,所有進(jìn)程都可以訪問(wèn)共享內(nèi)存中的地址,如果某個(gè)進(jìn)程向共享內(nèi)存內(nèi)寫(xiě)入數(shù)據(jù),所做的改動(dòng)將立即影響到可以訪問(wèn)該共享內(nèi)存的其他所有進(jìn)程。
相關(guān)接口
創(chuàng)建共享內(nèi)存:int shmget(key_t key, int size, int flag);
成功時(shí)返回一個(gè)和key相關(guān)的共享內(nèi)存標(biāo)識(shí)符,失敗范湖范圍-1。
key:為共享內(nèi)存段命名,多個(gè)共享同一片內(nèi)存的進(jìn)程使用同一個(gè)key。
size:共享內(nèi)存容量。
flag:權(quán)限標(biāo)志位,和open的mode參數(shù)一樣。
連接到共享內(nèi)存地址空間:void *shmat(int shmid, void *addr, int flag);
返回值即共享內(nèi)存實(shí)際地址。
shmid:shmget()返回的標(biāo)識(shí)。
addr:決定以什么方式連接地址。
flag:訪問(wèn)模式。
從共享內(nèi)存分離:int shmdt(const void *shmaddr);
調(diào)用成功返回0,失敗返回-1。
shmaddr:是shmat()返回的地址指針。
其他補(bǔ)充
共享內(nèi)存的方式像極了多線程中線程對(duì)全局變量的訪問(wèn),大家都對(duì)等地有權(quán)去修改這塊內(nèi)存的值,這就導(dǎo)致在多進(jìn)程并發(fā)下,最終結(jié)果是不可預(yù)期的。所以對(duì)這塊臨界區(qū)的訪問(wèn)需要通過(guò)信號(hào)量來(lái)進(jìn)行進(jìn)程同步。
但共享內(nèi)存的優(yōu)勢(shì)也很明顯,首先可以通過(guò)共享內(nèi)存進(jìn)行通信的進(jìn)程不需要像無(wú)名管道一樣需要通信的進(jìn)程間有親緣關(guān)系。其次內(nèi)存共享的速度也比較快,不存在讀取文件、消息傳遞等過(guò)程,只需要到相應(yīng)映射到的內(nèi)存地址直接讀寫(xiě)數(shù)據(jù)即可。
信號(hào)量
在提到共享內(nèi)存方式時(shí)也提到,進(jìn)程共享內(nèi)存和多線程共享全局變量非常相似。所以在使用內(nèi)存共享的方式是也需要通過(guò)信號(hào)量來(lái)完成進(jìn)程間同步。多線程同步的信號(hào)量是POSIX信號(hào)量,而在進(jìn)程里使用SYSTEM V信號(hào)量。
相關(guān)接口
創(chuàng)建信號(hào)量:int semget(key_t key, int nsems, int semflag);
創(chuàng)建成功返回信號(hào)量標(biāo)識(shí)符,失敗返回-1。
key:進(jìn)程pid。
nsems:創(chuàng)建信號(hào)量的個(gè)數(shù)。
semflag:指定信號(hào)量讀寫(xiě)權(quán)限。
改變信號(hào)量值:int semop(int semid, struct sembuf *sops, unsigned nsops);
我們所需要做的主要工作就是串講sembuf變量并設(shè)置其值,然后調(diào)用semop,把設(shè)置好的sembuf變量傳遞進(jìn)去。
struct sembuf結(jié)構(gòu)體定義如下:
struct sembuf{
short sem_num;
short sem_op;
short sem_flg;
};
成功返回信號(hào)量標(biāo)識(shí)符,失敗返回-1。
semid:信號(hào)量集標(biāo)識(shí)符,由semget()函數(shù)返回。
sops:指向struct sembuf結(jié)構(gòu)的指針,先設(shè)置好sembuf值再通過(guò)指針傳遞。
nsops:進(jìn)行操作信號(hào)量的個(gè)數(shù),即sops結(jié)構(gòu)變量的個(gè)數(shù),需大于或等于1。最常見(jiàn)設(shè)置此值等于1,只完成對(duì)一個(gè)信號(hào)量的操作。
直接控制信號(hào)量信息:int semctl(int semid, int semnum, int cmd, union semun arg);
semid:信號(hào)量集標(biāo)識(shí)符。
semnum:信號(hào)量集數(shù)組上的下標(biāo),表示某一個(gè)信號(hào)量。
arg:union semun類型。
輔助命令
ipcs命令用于報(bào)告共享內(nèi)存、信號(hào)量和消息隊(duì)列信息。
ipcs -a:列出共享內(nèi)存、信號(hào)量和消息隊(duì)列信息。
ipcs -l:列出系統(tǒng)限額。
ipcs -u:列出當(dāng)前使用情況。
套接字
與其它通信機(jī)制不同的是,它可用于不同機(jī)器間的進(jìn)程通信。
20、虛擬內(nèi)存的目的是什么?
虛擬內(nèi)存的目的是為了讓物理內(nèi)存擴(kuò)充成更大的邏輯內(nèi)存,從而讓程序獲得更多的可用內(nèi)存。
為了更好的管理內(nèi)存,操作系統(tǒng)將內(nèi)存抽象成地址空間。每個(gè)程序擁有自己的地址空間,這個(gè)地址空間被分割成多個(gè)塊,每一塊稱為一頁(yè)。
這些頁(yè)被映射到物理內(nèi)存,但不需要映射到連續(xù)的物理內(nèi)存,也不需要所有頁(yè)都必須在物理內(nèi)存中。當(dāng)程序引用到不在物理內(nèi)存中的頁(yè)時(shí),由硬件執(zhí)行必要的映射,將缺失的部分裝入物理內(nèi)存并重新執(zhí)行失敗的指令。
從上面的描述中可以看出,虛擬內(nèi)存允許程序不用將地址空間中的每一頁(yè)都映射到物理內(nèi)存,也就是說(shuō)一個(gè)程序不需要全部調(diào)入內(nèi)存就可以運(yùn)行,這使得有限的內(nèi)存運(yùn)行大程序成為可能。
例如有一臺(tái)計(jì)算機(jī)可以產(chǎn)生 16 位地址,那么一個(gè)程序的地址空間范圍是 0~64K。該計(jì)算機(jī)只有 32KB 的物理內(nèi)存,虛擬內(nèi)存技術(shù)允許該計(jì)算機(jī)運(yùn)行一個(gè) 64K 大小的程序。
21、說(shuō)一下你理解中的內(nèi)存?他有什么作用呢?
結(jié)語(yǔ)
完了,白了個(gè)白!
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
即日-11.13立即報(bào)名>>> 【在線會(huì)議】多物理場(chǎng)仿真助跑新能源汽車(chē)
-
11月20日火熱報(bào)名中>> 2024 智能家居出海論壇
-
11月28日立即報(bào)名>>> 2024工程師系列—工業(yè)電子技術(shù)在線會(huì)議
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國(guó)智造CIO在線峰會(huì)
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
推薦專題
- 1 【一周車(chē)話】沒(méi)有方向盤(pán)和踏板的車(chē),你敢坐嗎?
- 2 特斯拉發(fā)布無(wú)人駕駛車(chē),還未迎來(lái)“Chatgpt時(shí)刻”
- 3 特斯拉股價(jià)大跌15%:Robotaxi離落地還差一個(gè)蘿卜快跑
- 4 馬斯克給的“驚喜”夠嗎?
- 5 打完“價(jià)格戰(zhàn)”,大模型還要比什么?
- 6 馬斯克致敬“國(guó)產(chǎn)蘿卜”?
- 7 神經(jīng)網(wǎng)絡(luò),誰(shuí)是盈利最強(qiáng)企業(yè)?
- 8 比蘋(píng)果偉大100倍!真正改寫(xiě)人類歷史的智能產(chǎn)品降臨
- 9 諾獎(jiǎng)進(jìn)入“AI時(shí)代”,人類何去何從?
- 10 Open AI融資后成萬(wàn)億獨(dú)角獸,AI人才之爭(zhēng)開(kāi)啟
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷(xiāo)售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷(xiāo)售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門(mén)市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市