2012-03-03 79 views
1

我實現在x86上運行PINTOS虛擬存儲器的幀的最小數目,我想知道需要在x86處理器的處理的幀的最小數目。
我發現,它依賴於底層指令集架構支持間接的最高水平,在x86上有1級的間接支持。 因此,每個進程的2個幀應該是最低需要的。
如果指令大小超過1byte,那麼它可能會跨越頁面邊界,我們將需要3個最小幀。
我是否正確或有更多的決定每個進程的最低幀數。需要在x86處理器

感謝

+0

很難理解這個問題,「框架」通常意味着堆棧框架。似乎你正在談論虛擬內存*頁面*。如果代碼足夠小,並且您設置了頁面保護,以便它可以包含代碼,數據和堆棧,那麼將所有內容都塞進一個4096字節的頁面並不是不可能的。它與指令大小或間接無關。 – 2012-03-03 12:37:22

+0

@HansPassant:*頁面框架*在上下文中是一個相當常見的術語。 – 2012-03-03 20:00:47

回答

2

頁目錄 - 1
頁表 - 1
指令頁邊界 - 頁邊界2個
源數據 - 在頁邊界上2個
目標數據 - 2

因此,8頁是你可能需要什麼像REP MOVSW/D

+0

像eax這樣的通用寄存器長度爲32位。 當有喜歡 MOV%EAX的指令,[MEM_LOC1] MOV [MEM_LOC1],[MEM_LOC2] 在第二個指令,可以將源數據跨頁邊界?這究竟是爲什麼你給2幀的原因爲源和目標數據? – Deepthought 2012-03-03 10:04:51

+2

'MOVSW/D'從DS:(E)SI指向的位置讀取(D)WORD,並將該(D)WORD寫入ES指向的位置:(E)DI。這是兩個數據位置,每個位置都可以靠近頁面邊界。如果指令本身具有前綴(地址大小覆蓋,操作數大小覆蓋,段覆蓋,rep),則指令本身可跨越頁面邊界。這就是你如何得到6頁「REP MOVSW/D」。 – 2012-03-03 10:10:43