博客
关于我
保护模式(一)
阅读量: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/

你可能感兴趣的文章
mysql-5.6.17-win32免安装版配置
查看>>
mysql-5.7.18安装
查看>>
MySQL-Buffer的应用
查看>>
mysql-cluster 安装篇(1)---简介
查看>>
mysql-connector-java.jar乱码,最新版mysql-connector-java-8.0.15.jar,如何愉快的进行JDBC操作...
查看>>
mysql-connector-java各种版本下载地址
查看>>
mysql-EXPLAIN
查看>>
MySQL-Explain的详解
查看>>
mysql-group_concat
查看>>
MySQL-redo日志
查看>>
MySQL-【1】配置
查看>>
MySQL-【4】基本操作
查看>>
Mysql-丢失更新
查看>>
Mysql-事务阻塞
查看>>
Mysql-存储引擎
查看>>
mysql-开启慢查询&所有操作记录日志
查看>>
MySQL-数据目录
查看>>
MySQL-数据页的结构
查看>>
MySQL-架构篇
查看>>
MySQL-索引的分类(聚簇索引、二级索引、联合索引)
查看>>