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

你可能感兴趣的文章
Netpas:不一样的SD-WAN+ 保障网络通讯品质
查看>>
NetScaler的常用配置
查看>>
netsh advfirewall
查看>>
NETSH WINSOCK RESET这条命令的含义和作用?
查看>>
Netstat端口占用情况
查看>>
Netty WebSocket客户端
查看>>
netty 主要组件+黏包半包+rpc框架+源码透析
查看>>
Netty 异步任务调度与异步线程池
查看>>
Netty中集成Protobuf实现Java对象数据传递
查看>>
netty之 定长数据流处理数据粘包问题
查看>>
Netty事件注册机制深入解析
查看>>
Netty原理分析及实战(四)-客户端与服务端双向通信
查看>>
Netty和Tomcat的区别已经性能对比
查看>>
Netty学习总结(5)——Netty之TCP粘包/拆包问题的解决之道
查看>>
Netty客户端断线重连实现及问题思考
查看>>
Netty工作笔记0006---NIO的Buffer说明
查看>>
Netty工作笔记0007---NIO的三大核心组件关系
查看>>
Netty工作笔记0011---Channel应用案例2
查看>>
Netty工作笔记0013---Channel应用案例4Copy图片
查看>>
Netty工作笔记0014---Buffer类型化和只读
查看>>