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

你可能感兴趣的文章
Nacos发布0.5.0版本,轻松玩转动态 DNS 服务
查看>>
Nacos启动异常
查看>>
Nacos命名空间配置_每个人用各自自己的命名空间---SpringCloud Alibaba_若依微服务框架改造---工作笔记001
查看>>
Nacos和Zookeeper对比
查看>>
Nacos在双击startup.cmd启动时提示:Unable to start embedded Tomcat
查看>>
Nacos基础版 从入门到精通
查看>>
Nacos如何实现Raft算法与Raft协议原理详解
查看>>
Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(上)
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(下)
查看>>
Nacos心跳机制实现快速上下线
查看>>
nacos报错com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
查看>>
nacos服务提供和发现及客户端负载均衡配置
查看>>
Nacos服务注册与发现demo
查看>>
Nacos服务注册与发现的2种实现方法!
查看>>
nacos服务注册和发现原理简单实现案例
查看>>
Nacos服务注册总流程(源码分析)
查看>>
nacos服务注册流程
查看>>
Nacos服务部署安装
查看>>
nacos本地可以,上服务器报错
查看>>