什么是实模式
简单地说:保护模式与实模式的根本区别在于CPU寻址方式上的不同: 尽管两者对应的内存地址均为"段地址:偏移量"形式,但在保护模式下,"段地址"代表的值已不再是实模式中段的起始基准地址了;对于CS、DS、ES、SS寄存器,在实模式下,这些寄存器的值左移4位, 再加上偏移量,即得到物理地址,而在保护模式下,这些寄存器的值为"段选择符",它实际上是一个查全局描述符表(G DT)或局部描述符表(LDT)的索引,据此在GDT或LDT找到对应的段描述符,从而获得段的基址及类型等信息,再根据偏移量,才能得到线性地址。
如果操作系统没有采用分页机制,那么得到的线性地址即为物理地址,否则,线性地址需要进一步经过分页机制才能得到物理地址。详细地说: 8086体系的CPU一开始是20根地址线, 寻址寄存器是16位, 16位的寄存器可以访问64K的地址空间, 如果程序要想访问大于64K的内存, 就要把内存分段, 每段64K, 用段地址+偏移量的方法来访问. 后来386CPU出来之后, 采用了32条地址线, 地址寄存器也扩为32位, 这样就可以不用分段了, 直接用一个地址寄存器来线性访问4G的内存了. 这就叫平面模式. 为了和16位的软件保持兼容, 386的线性内存访问功能只在一种叫"保护模式"的状态上使用, 在这种状态下, 一切程序都可以用线性地址(不分段)访问自己所拥有的4G的内存空间, 但是不能访问其他程序的空间. 如果有程序要访问不该访问的内存(一般只有病毒才会这么作), 就会出系统错误, CPU就用中断通知OS, 这样的进程会被OS发现, 并杀死, 不会影响其他程序. 在windows里常见的系统错误"某某内存不能读写"就是这种问题, 这都不是windows的问题, 而是一些破程序的问题. 在这种情况下, 实际是CPU和OS一起保护了程序的内存, 所以叫做保护模式. 实际上内存是不可能有4个G的, 而且是每个程序都要有4G的空间. 为了为每个程序都提供4G内存, 386及以后的CPU采用"页"的方式来管理内存, 把内存分为一个个的页, 页的物理地址与每个程序虚拟的4G线性地址用一个表格保存. 程序用线性地址访问内存. 如果这个内存还没有用过, 就找一个内存页来假装涉及的线性内存段. 如果这个内存长期不用, 操作系统就把内存页存到硬盘上去, 就叫虚存交换文件. 如果这个内存所在的页已经分配过, 但是没有在实存里, 那么CPU就出现一个缺页中断, 由操作系统把硬盘交换文件里的页内数据读出来, 在实存中找一块写进去, 修改页地址和线性地址的对应表格, 然后请程序继续运行. 386可以假装自己是一个16位的CPU, 用16位的分段方式工作, 和保护模式相对的, 这种模式就叫做实模式. 开机时按F8应该可以出来吧! 如果还不行我就不清楚了。
免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!
新励学网教育平台
海量全面 · 详细解读 · 快捷可靠
累积科普文章数:18,862,126篇