当一个程序运行的时候需要把程序所需要的物理内存空间一次性全部准备好(空间不足和内存安全问题)
1.如果程序一启动就把程序所有需要的内存空间全部分配掉那么内存空间可能会被撑爆
2.各个程序可以访问到其他程序的内存空间,导致安全问题
1.程序在运行前由内核把程序切割成一块一块,每个程序块为固定的4K大小。然后按照程序块为单位把程序加载到内存空间中而不是一次性全部加载进来
2.把整个物理内存也要切成一块一块,每一个块成为一个内存页.每个内存页也是固定4K大小.实现程序块和内存页大小对齐.
软(操作系统)硬件(MMU)结合寻找物理地址
程序的虚拟内存地址 》 内核映射 》 物理内存地址
只有内核才知道每个应用程序所在的物理内存地址,程序自己只知道自己的虚拟地址,保证了操作系统的安全性
程序的内部是分成一个段一个段的,每个段被分成一个页一个页
逻辑地址
逻辑地址 + 段的基地址 = 线性地址
线性地址
线性地址 + (OS+MMU) = 物理地址
物理地址
BIOS芯片
1.bootloader程序固定存放在磁盘的第一个扇区
2.加电后把磁盘的第一个扇区程序加载到内存的固定位置
3.BIOS芯片只知道到内存的固定位置读取bootloader的第一条指令