博客
关于我
保护模式(一)
阅读量:279 次
发布时间:2019-03-01

本文共 1209 字,大约阅读时间需要 4 分钟。

保护模式

任何复杂的设计都有其基础,理解复杂的内容从简单入手更为重要。保护模式可以追溯到最基本的机制,它通过分页和分段机制实现内存管理的安全性和保护性。

分页机制

在单任务时代,计算机内存分为两部分:一部分给操作系统,另一部分给应用程序。然而,多任务环境下,由于程序的地址在编译时就已经确定,若两个程序同时运行,可能会产生地址冲突。早期的解决方案并不能有效解决问题,因为它需要频繁地修改程序地址,带来较大的性能开销。此外,一次性修改其他程序的内存可能导致严重的系统故障。

为了解决这些问题,虚拟地址的概念被引入。例如,当程序A访问BASE_A+X时,通过映射表找到BASE_A对应的物理地址A1,然后加上偏移量X,最终访问A1+X。这种方式即使BASE_B等于BASE_A也不会产生冲突,整个过程由硬件MMU自动完成。

然而,一一映射的方法内存占用过大,因此采用分页表的方法。将内存分为4KB的页段,每个页段的起始地址存入映射表,缩小了内存占用至4MB。具体实现中,地址分为高20位页表索引和低12位偏移量,通过查找页表找到物理地址,最终确定实际访问位置。

分页机制的应用不仅限于内存管理,还包括文件映射。当文件太大无法完全加载时,触发缺页中断,动态分配内存并从磁盘读取。COW机制进一步优化了共享内存的管理,避免不必要的复制操作。

针对早期内存容量有限的问题,多级页表(如二级页表)被提出。页目录存储各页表地址,各页表存储内存页地址。通过多级分割,减少了页表大小,但增加了访问次数,进而优化了性能。CPU为了加速页表访问,配备了TLB缓存,减少了不命中率,提升了整体效率。

分段机制

分段机制通过将内存划分为不同的段(如代码段、数据段、BSS段等),实现了内存的保护和隔离。每个段都有自己的基址和长度,段表记录段的属性和访问权限。段表中的基址和长宽分别存储在段表中,段的起始地址由程序中指定的段选择符和基址计算得出。这种机制确保了不同段之间的隔离性,防止了非法访问和修改。

页表标志位

页表中的标志位提供了丰富的功能选项。P位表示物理存在状态,R/W位控制可读写权限,U/S位区分特权和普通权限,PWT位控制缓存策略,PCD位禁止缓存,A位跟踪访问情况,D位判断页面是否修改。PS位区分4KB和4MB页面,G位用于进程间共享。

PS位在页目录中置1时,表示使用4MB物理页面,避免了两级页表的必要性。D位有助于判断页面是否需要写入磁盘,A位记录页面首次访问时间。这些标志位为页表管理提供了灵活的配置选项。

应用实例

页表机制在多个方面发挥着重要作用。文件映射技术通过虚拟地址将大文件分成多个页面处理,确保内存利用最大化。COW机制在多进程共享时避免数据复制,提升内存效率。

保护模式通过分页和分段机制实现了进程的隔离性和内核的安全性。硬件权限控制确保了操作系统和内核代码的完整性,为现代操作系统的稳定运行奠定了基础。

转载地址:http://vbao.baihongyu.com/

你可能感兴趣的文章
Python 初学者需要知道的四条建议
查看>>
Python 判断字符串是否包含子字符串
查看>>
python 判断当前时间是否为零点
查看>>
python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
查看>>
python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
查看>>
python 利用pyttsx3文字转语音
查看>>
python 利用已有Ner模型进行数据清洗合并
查看>>
python 到大数据开发工程师_如何成为一个大数据开发工程师?
查看>>
python 加密解密(base64, AES)
查看>>
Python 包管理器和 Node.js
查看>>
Python 单词字母顺序不变且所有倒排
查看>>
python 反射机制
查看>>
python 启动提示IDLE's subprocess didn't make conne...
查看>>
python 命令接口_实现“[命令][操作][参数]”样式的命令行接口?
查看>>
Python 和 OpenCV.如何检测图像中的所有(填充)圆形/圆形对象?
查看>>
Python 和 RabbitMQ - 聆听来自多个渠道的消费事件的最佳方式?
查看>>
python编辑器打不开_关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路...
查看>>
python编译exe同时支持32位_第三周:同时管理64位和32位版本的Python,并用Pyinstaller打包成exe...
查看>>
Python 和Java 哪个更适合做自动化测试?
查看>>
Python编程:掌握高级语言程序设计。从零基础到精通,收藏这篇就够了!
查看>>