MMU工作原理

MMU的工作原理就是把虚拟地址转换成物理地址。

虚拟地址:由编译器和连接器在定位程序时分配。

物理地址:用来访问实际的主存硬件模块。

使用虚拟存储器的系统都使用一种称为分页(paging)。虚拟地址空间划分成称为页(page)的单位,而相应的物理地址空间也被进行划分,单位是页框(frame).页和页框的大小必须相同。

MMU工作原理

自己写的裸机程序:

void mem_init(unsigned long *ttb); void mmu_init(); void mmu_enable(); void mmap(unsigned long *ttb,unsigned long pa,unsigned long va); int (*printf)(const char *format, ...) = (void *)0x43e11a2c;

_start() {  unsigned long *va = (void *)0x76500000;  unsigned long *pa = (void *)0xfff00000;

*va = 123;

mmu_init();

mmu_enable();

mmap((void *)(0x70000000),(unsigned long)(pa),(unsigned long)(va)); =%d\n",*va);   //123 }

void mem_init(unsigned long *ttb)

unsigned long i;

for(i=0x0000000;i<=0x14000000;i+=(1<<20))  {   ttb[i>>20]=(i & 0xfff00000) | 0x2;  }

for(i=0x40000000;i<=0x80000000;i+=(1<<20))  {   ttb[i>>20]=(i & 0xfff00000) | 0x2;  } }

void mmu_init() {  unsigned long *ttp = (void *)(0x70000000);

__asm__ __volatile__ (    "MCR P15,0,%0,C2,C0,0;"    "mvn r0,#0x0;"    "MCR P15,0,r0,C3,C0,0;"    :    :"r"(ttp)    :"r0"    ); }

void mmu_enable() {  __asm__ __volatile__ (    "MRC P15,0,r0,C1,C0,0;"    "orr r0,r0,#1;"    "MCR P15,0,r0,C1,C0,0;"    :    :    :"r0"    ); }

void mmap(unsigned long *ttb,unsigned long pa,unsigned long va) {  ttb[pa>>20] = (va & 0xfff00000) | 0x2; }

上一篇:如何在linux下开启FTP服务


下一篇:关于获取web应用的文件路径的注意事项