前面的引导程序,操作系统内核都是在实模式下运行的。实模式是32位cpu的一种工作模式,它还有保护模式,虚拟8086模式。而我们所常用的操作系统,如windows,linux都是在保护模式下运行的。那为什么,还要有实模式?这是为了兼容以前的16位cpu,让在16位cpu上运行的程序,也能在32位cpu上运行。
保护模式和实模式有什么区别呢?第一,保护模式的寻址范围更大,实模式下有1M的寻址范围(物理地址为20位),保护模式下有4G的寻址范围(物理地址为32位)。第二,保护模式具有内存保护功能(即一段程序不能随意的访问另一段程序),这也是保护模式名字的由来。第三,保护模式下支持分页机制。第四,保护模式下支持虚拟存储,虚拟存储空间可达64TB。
对于我们编程来讲,要注意保护模式和实模式的地址转换方式的区别。在实模式下,逻辑地址由段基址和偏移量组成的。用段基址乘以4得到段的基地址,然后再加上偏移量,便得到了物理地址。在保护模式下,逻辑地址由段选择子和偏移量组成的,通过段选择子可查到段的基地址,再将基地址加上偏移量,就得到线性地址(如果没有分页机制,线性地址就是物理地址),再将线性地址通过分页机制得到物理地址。
保护模式和实模式有什么区别呢?第一,保护模式的寻址范围更大,实模式下有1M的寻址范围(物理地址为20位),保护模式下有4G的寻址范围(物理地址为32位)。第二,保护模式具有内存保护功能(即一段程序不能随意的访问另一段程序),这也是保护模式名字的由来。第三,保护模式下支持分页机制。第四,保护模式下支持虚拟存储,虚拟存储空间可达64TB。
对于我们编程来讲,要注意保护模式和实模式的地址转换方式的区别。在实模式下,逻辑地址由段基址和偏移量组成的。用段基址乘以4得到段的基地址,然后再加上偏移量,便得到了物理地址。在保护模式下,逻辑地址由段选择子和偏移量组成的,通过段选择子可查到段的基地址,再将基地址加上偏移量,就得到线性地址(如果没有分页机制,线性地址就是物理地址),再将线性地址通过分页机制得到物理地址。