簡體   English   中英

x86 實模式段重疊如何幫助節省內存?

[英]How does x86 real-mode segments overlap help memory saving?

我正在教我的 12 歲 8086 匯編語言,昨天我們討論了內存、尋址和分段。 我向他展示了如何將段可視化為從 16 字節邊界開始的重疊 64Kb 塊序列,偏移量是段內的 8080 樣式指針。 然后他問了一個我無法回答的問題:為什么(為什么,目的是什么)它們重疊

試圖研究這個問題時,我發現了許多 20 位數學的副本,並且有些模糊地提到了該方案可能允許的一些內存節省 有人可以詳細說明節省內存的部分嗎? 或者任何其他方式來利用重疊的實際優勢?

重疊越少,您對段在物理內存中的起始位置的選擇就越少。 這會在無用的段之間產生間隙,從而浪費內存。 設計選擇永遠不會產生大於 15 字節的間隙。 這可能有點過頭了,但 8086 是在一個 1 兆字節對每個人都足夠的時代設計的。 購買 64 KB 會大大減少您的預算。 足夠珍貴,不想浪費在差距上。

內存節省完全是 IMO 看待它的錯誤方式。 該處理器在 16 位地址空間變得非常緊張的時候問世。 其他 16 位地址空間處理器在事后添加了組切換方法。 20 位地址空間是一個相當大的批准(24 位或 32 位在當時只是瘋狂的談話)。 他們沒有使用外部銀行切換(編程很痛苦),而是使用寄存器。 好吧,猜猜看,處理器內部是 16 位的,所以不妨使用 16 位寄存器。 現在,從一對 16 位寄存器中獲取 20 位是一個有趣的問題。 使用段作為基本的段落對齊,以最靈活的方式為您提供完整的范圍(加上一點點溢出,但這是一個完全不同的問題)(還記得我提到的銀行切換的痛苦嗎?主要是因為無法做到這一點以細粒度的方式)。

假設您在狹長的小巷中擁有代客泊車服務,因此車輛均采用平行停車方式。 您的一些客戶駕駛汽車並且只使用 1 個空間。 其他人駕駛加長豪華轎車並需要 2 個車位。 停放車輛的一種方法是為每輛車分配 2 個停車位,而不管其大小。 您的索賠單會顯示“車輛停在第 0 空間(最大車輛尺寸為 2 個車位)”或“從第 2 空間開始”或“從第 4 空間開始”等。

這可行,但會浪費空間,因為您為只需要 1 個空間的汽車預留了 2 個空間。因此,您將車輛打包在一起,汽車僅占用一個空間,豪華轎車占用兩個空間。 您的員工知道汽車只占用一個空間,因此如果票上寫着“從空間 1 開始(最大車輛尺寸為 2 個空間)”,他們知道“汽車在空間 1 中,空間 2 屬於其他人”。 汽車的空間 2 實際上與停在空間 2 和 3 中的豪華轎車重疊,但使用它是個壞主意,否則您會損壞豪華轎車。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM