保护模式总结(四)——分页机制

2024-06-19 03:38

本文主要是介绍保护模式总结(四)——分页机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       这是总结的最后一篇,来讲讲分页机制。为什么会有分页机制?如果没有分页机制,内存管理会出现“碎片化”的现象,另外,在虚拟存储中,将没有统一调度的内存大小。为了解决这些因为段长度不同而带来的各种内存管理问题,于是有了分页机制。

        页的最小单位是4K。引入分页机制之后,段部件获得的地址就不再是物理地址了,而是线性地址,也就是虚拟地址

                                                    

       于是线性地址和物理地址便存在一种一一映射的关系。那么映射关系如何记录呢?考虑建一张映射表。那么虚拟内存的每个页与其对应的物理内存页,都要记录在映射表里。一般来说,每个任务都可以拥有4GB的虚拟内存空间,而且每个任务都有自己的页映射表。那么我们可以计算一下,一个表4K字节,那么会有1M个表项,每个表项4字节,那么一张映射表大小是4M字节。是不是很大?是的,Intel的大叔们是不会允许这样的浪费存在的,于是现实情况是,多级的分页结构。

       两级的分页结构有页目录表页表。页目录表和每张页表的大小和页的大小一样,都是4KB。

       先看图:

                   

       页目录项中包含指定页表的物理基地址,页表项中包含着页的物理基地址。所以当我们给出一个虚拟地址的时候,页部件会把它分成三部分,首先通过CR3找到页目录,然后再通过第一部分:页面索引,找到相应页目录项,由此找到相应页表,再通过第二部分页表索引找到页表项,再由其找到物理页面,再由页内偏移地址找到具体的物理地址。那么一开始的CR3是什么呢?


       CR3给出了页目录表的基地址。CR0的31位PG(page),置1则打开分页机制。

       值得说明的是,地址转换是通过固件,也就是所谓的页部件自动计算的。所以我们不论在操作系统还是应用程序中,在开启了分页机制以后,所用到的都是虚拟地址,具体是什么物理地址,我们不用再去管,我们只用把页目录和页表设置好,页部件就会根据设置自动计算出物理地址。


————————————————分隔符————————————————————————————————————————


       讲完了分页机制顺带再补充点内容,关于中断和异常

中断没什么好说的,异常其实就是实模式中的内部中断。异常以严重性可分三种:

      1.故障Fault:通常可纠正

      2.陷阱Traps:截获了陷阱条件立即发生,通常用于调试

      3.终止Aborts:最严重的错误,程序和任务不能重新启动

      中断到了保护模式中,没了中断向量表,变成了类似GDT的IDT(中断描述符表 Interrupt Descriptor Table),同样还有中断描述符寄存器IDTR用于寻址IDT。

中断处理过程如图:


值得注意的是,中断过程若发生特权级的改变,要注意栈的处理。



——————————————————————再次分隔——————————————————————————————————————————

       看完这本《从实模式到保护模式》,感觉就是从处理器的角度去认识操作系统。有了这些硬件的基础,相信会对日后对操作系统的学习会有不少帮助!共勉!


这篇关于保护模式总结(四)——分页机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073902

相关文章

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Golang如何用gorm实现分页的功能

《Golang如何用gorm实现分页的功能》:本文主要介绍Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景go库下载初始化数据【1】建表【2】插入数据【3】查看数据4、代码示例【1】gorm结构体定义【2】分页结构体

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir