近期在看bootloader,先是參照CalmArrow的博客,分析了vivi。piaoxiang兄寫的很詳細,作為初學者,再次感謝。
bootloader涉及到的一個難點是內存映射的問題,這個問題比較玄乎,參考《ARM Architecture Reference Manual》中的MMU章節,理解一下。
MMU:Memory Management Unit。存儲器管理單元。是一個可選的配件。
負責:虛擬地址和物理地址的轉換,提供硬件機制的內存訪問授權。
多用户多进程的OS,需要MMU,以达到每个用户进程都拥有自己的独立的地址空间的目标。使用MMU,OS划分出一段地址區域,在這塊地址區域中,每個進程看到的內容都不一定一樣。
打個比方:進程A在地址0x400000映射了可執行文件。進程B也在地址0x400000映射了可執行文件。那么進程A讀取地址0x400000時,讀到的是A的可執行文件映射到RAM的內容。進程B讀取地址0x400000時,讀到的是B的可執行文件映射到RAM的內容。
這就是MMU進行地址轉換所起的作用。同樣的內存段,實現多用戶、多進程的共享使用。
I。X86系列的MMU
INTEL的80386CPU及其上的CPU中都集成了MMU。可以提供32BIT,共4G的地址空間。
II。ARM系列的MMU
ARM中,MMU作為一個協處理器存在。ARM7及其之前的都是沒有MMU的。
MMU也就是編號為15的協處理器。可以提供32BIT,4G的地址空間。
阅读(1157) | 评论(0) | 转发(0) |