摘要: 本文主要對(duì)內(nèi)存管理基礎(chǔ)知識(shí)及分段與分頁介紹。
關(guān)鍵字:Armv8、體系結(jié)構(gòu)、ARM架構(gòu)、內(nèi)存管理、分段、分頁
1. 內(nèi)存管理基礎(chǔ)
最早的程序是放在卡紙上的,計(jì)算機(jī)每讀取一張卡片就運(yùn)行一條指令,這種從外部存儲(chǔ)介質(zhì)上直接運(yùn)行指令的效率很低。后來出現(xiàn)了內(nèi)存存儲(chǔ)器,也就是說程序要運(yùn)行,首先要加載,然后執(zhí)行,這就是是所謂的“存儲(chǔ)程序”。
單道編程的內(nèi)存管理,整個(gè)系統(tǒng)只有一個(gè)用戶進(jìn)程和一個(gè)操作系統(tǒng)。用戶程序獨(dú)占整個(gè)用戶空間,實(shí)現(xiàn)簡單,無外部碎片,存儲(chǔ)器利用率極低。
多道編程的內(nèi)存管理,系統(tǒng)可以同時(shí)運(yùn)行多個(gè)進(jìn)程。內(nèi)存管理出現(xiàn)了固定分區(qū)和動(dòng)態(tài)分區(qū)兩種技術(shù)。
固定分區(qū)是在系統(tǒng)編譯階段,內(nèi)存被劃分成許多靜態(tài)分區(qū),進(jìn)程可以裝入大于或等于自身大小的分區(qū)。
動(dòng)態(tài)分區(qū)是在一整塊內(nèi)存中劃出一塊內(nèi)存共操作系統(tǒng)本身使用,剩下的內(nèi)存在進(jìn)程裝入時(shí),根據(jù)進(jìn)程的大小動(dòng)態(tài)的建立分區(qū),并使分區(qū)的大小正合適進(jìn)程的需要。動(dòng)態(tài)分區(qū)沒有內(nèi)部碎片,但是有外部碎片。
內(nèi)部碎片,分配給某進(jìn)程的內(nèi)存區(qū)域中,如果有部分沒有用上。
外部碎片,指內(nèi)存中某些空閑分區(qū)由于太小而難以利用。
內(nèi)存管理的功能:
內(nèi)存控群的分配與回收,地址轉(zhuǎn)換(邏輯地址轉(zhuǎn)換成物理地址),內(nèi)存空間擴(kuò)充(利用虛擬存儲(chǔ)或交換覆蓋技術(shù)),內(nèi)存保護(hù)(避免相互干擾和破壞)。
進(jìn)程如何使用內(nèi)存?進(jìn)程大概在3個(gè)地方需要用到內(nèi)存。
進(jìn)程本身。比如,代碼段及數(shù)據(jù)段用來存儲(chǔ)程序本身需要的數(shù)據(jù)。
棧空間。程序運(yùn)行時(shí)用來保存函數(shù)調(diào)用關(guān)系、局部變量、函數(shù)參數(shù)以及函數(shù)返回值等內(nèi)容。
堆空間。程序運(yùn)行時(shí)需要?jiǎng)討B(tài)分配程序需要使用的內(nèi)存,比如存儲(chǔ)程序需要使用的數(shù)據(jù)存儲(chǔ)空間。
2. 分段與分頁機(jī)制
基于進(jìn)程地址空間這個(gè)概念,人們最早想到的一種機(jī)制叫分段機(jī)制,其基本思想是把程序所需的內(nèi)存空間的虛擬地址映射到某個(gè)物理地址空間。
分段機(jī)制可以解決地址空間保護(hù)問題。分段機(jī)制對(duì)虛擬內(nèi)存到物理內(nèi)存映射以進(jìn)程為單位。當(dāng)物理內(nèi)存不足時(shí),換出到磁盤的依然是整個(gè)進(jìn)程,因此會(huì)有大量的磁盤訪問,進(jìn)而影響系統(tǒng)性能。
分頁機(jī)制是讓程序中一部分不使用的內(nèi)存可以存放到交換磁盤中,而程序正在使用的內(nèi)存繼續(xù)保留在物理內(nèi)存中。
分頁機(jī)制系統(tǒng)中,處理器直接尋址虛擬地址,這個(gè)地址不會(huì)直接發(fā)給內(nèi)存控制器,而是先發(fā)給內(nèi)存管理單元(Memory Management Unit,MMU)。MMU負(fù)責(zé)虛擬地址到物理地址的轉(zhuǎn)換和翻譯工作。
一級(jí)頁表,虛擬地址VA[31:0]分為兩部分,VA[31:12]共20位,用于查詢頁表項(xiàng);VA[11:0]共12位,是頁面偏移量。
處理器采用一級(jí)頁表,虛擬地址空間的位寬32位,尋址范圍0-4GB,物理地址空間也是32位,因此最多支持4GB物理內(nèi)存。如果每個(gè)頁表項(xiàng)占用4個(gè)字節(jié),需要220×4B=4MB空間。
二級(jí)頁表中,VA[31:20]被用作一級(jí)頁表項(xiàng)索引,共有12位,最多可以索引4096個(gè)頁表項(xiàng);VA[19:12]被用作二級(jí)頁表項(xiàng)索引,共有8位,最多可以索引265個(gè)頁表項(xiàng)。
當(dāng)一級(jí)頁表項(xiàng)中如果為null,表示對(duì)應(yīng)的1024個(gè)虛擬頁沒有使用,所以就不需要二級(jí)頁表了,節(jié)省了空間。當(dāng)然,如果虛擬地址頁完全映射的話,二級(jí)頁表的占用=一級(jí)頁表項(xiàng)(1024 * 4B) + 二級(jí)頁表項(xiàng)(1024 *1024* 4B) = 4M + 4K,比一級(jí)映射多了4K,不過這種情況基本上沒有可能,因?yàn)檫M(jìn)程的地址空間很少有完全映射的情況。正是因?yàn)槭s了大量未映射的頁表項(xiàng)使得頁表的空間大幅減少。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
關(guān)于億道電子
億道電子技術(shù)有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內(nèi)資深的研發(fā)工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業(yè)客戶提供研發(fā)、設(shè)計(jì)、管理過程中使用的各種軟件開發(fā)工具,致力于幫助客戶提高研發(fā)管理效率、縮短產(chǎn)品設(shè)計(jì)周期,提升產(chǎn)品可靠性。
20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰(zhàn)略合作伙伴關(guān)系,并作為他們?cè)谥袊鴧^(qū)的主要分銷合作伙伴服務(wù)了數(shù)千家中國本土客戶,為客戶提供從芯片級(jí)開發(fā)工具、EDA 設(shè)計(jì)工具、軟件編譯以及測試工具、結(jié)構(gòu)設(shè)計(jì)工具、仿真工具、電氣設(shè)計(jì)工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經(jīng)驗(yàn)積累,真正的幫助客戶實(shí)現(xiàn)了讓研發(fā)更簡單、更可靠、更高效的目標(biāo)。
歡迎關(guān)注“億道電子”公眾號(hào)
了解更多研發(fā)工具軟件知識(shí)