企业网站源码 vue/网络推广外包搜索手机蛙软件

企业网站源码 vue,网络推广外包搜索手机蛙软件,南昌seo网络,wordpress 路径中文乱码上一篇文章学习了:保护模式九:段页式内存管理机制概述 本篇文章接着学习以下内容: 页目录概念页表概念页目录、页表与页之间的关系虚拟地址(线性地址)到物理地址的具体变换过程。 1、页目录、页表和页的对应关系 第…

上一篇文章学习了:保护模式九:段页式内存管理机制概述

本篇文章接着学习以下内容:

  • 页目录概念
  • 页表概念
  • 页目录、页表与页之间的关系
  • 虚拟地址(线性地址)到物理地址的具体变换过程。

1、页目录、页表和页的对应关系

第一个支持分页式内存管理的是Intel80386处理器。

我们知道,在上一篇文章学习的页映射表,是一个具有1048576个页表项的一维表格。又因为每个表项占4字节,所以,映射表的大小是4MB。是的,它很大!!!

为了解决这个占用内存过大的页映射表,分页机制采用了层次化的分页结构。具体实际上就是不采用单一的页映射表,而是将一个巨大的页映射表分成两个层次。如下图:

在这里插入图片描述

如上图,我们可以让一个页目录指向1024个页表。然后让这1024个页表中的页表项再指向所对应的物理内存空间的具体页。

  • 每个页表可以指向1024个页,因为每个页表项是4字节的,所以每个页表的大小是4KB,刚好是一个页面的大小。
  • 页目录可以指向1024个页表,同样也是4KB,刚好是一个页面的大小。
  • 因为页目录和页表都刚好是一个页面的大小,所以页目录和页表都可以被当成普通的页存放于物理内存的页中。
  • 注意,页在页表内的分布是随机的。老任务不停的关闭,新任务不停的开始,页面的回收和再分配没有什么规律可言。

以上的层次化结构是每个任务都有的。或者说,每个任务都有自己的页目录,页表。

如下图,在处理器内部有一个控制寄存器CR3,存放着当前任务页目录的物理地址。故又叫做页目录基址寄存器(PDBR)。
在这里插入图片描述

每个任务都有自己的任务状态段TSS。它是任务的标志性结构,存放了和任务相关的各种数据,其中就包括CR3寄存器域,存放了任务自己的页目录物理地址。

当任务切换时,处理器切换到新任务执行,而CR3寄存器的内容也要被更新,以指向新任务的页目录地址。相应的页目录又指向一个个页表,这就使得每个任务都只在自己的地址空间内运行。

从上图中可以看出,页目录和页表也是普通的物理页,混迹于全部的物理页中。它们和普通的页的唯一不同就是功能不同。当任务撤销后,它们和任务所占用的普通物理页一样会被回收,并分配给其他任务。

下面我们看一下在多任务环境下,页目录表和页表映射示意图:

在这里插入图片描述

需要注意的就是全局地址空间,所有的任务的页目录对应的全局地址空间的那些页目录项,都是一样的,因为所有任务共享全局地址空间。

2、虚拟地址(线性地址)到物理地址的具体变换过程

现在有了分页,最简单和最基本的机制就是:CR3寄存器给出了页目录的物理基地址;页目录给出了所有页表的物理地址;而每个页表给出了它所包含的页的物理地址。

上面该清楚的都清楚了,唯一不明白的是,应该如何使用这种层次化结构来把线性地址转换成物理地址。

如下图:

在这里插入图片描述

  • 假设现在段部件给出的线性地址是0x00801050
  • 处理器将段部件送过来的线性地址分成三段,高10位:中间10位:低12位。高10位用于索引页目录;中间10位用于索引页表;低12位则是页内偏移地址
  • 最终我们得到真实的物理地址0x0000C050。这就是处理器要访问的真实的物理地址

上述图示很清晰,我们这里不再赘述详细的转换过程。

我们唯一需要注意的是:这种变换不是无缘无故的。而是事先安排好的。这其实还是一个反过程:

  • 首先当任务加载时,操作系统先创建虚拟的内存段,并根据段地址的高20位决定它要用到哪些页目录项和页表项。
  • 然后寻找空闲的页,将原本应该写入段(因为是虚拟段,所以这里说原本)的数据,写到一个或者多个物理页中,并将页的物理地址填写到相应的页表中。
  • 只有这样提前将页表填好,在程序真正执行的时候,才能以相反的顺序,从页表中再取出之前填好的页的物理地址,去相应的物理内存中取指令执行或者找到相应的数据。
  • 这就是一个反过程。在上一篇文章中也有类似的过程。

3、总结

本文学习了:

  • 页目录、页表和页之间的关系
  • 虚拟地址(线性地址)到物理地址的转换过程

详细的内容还是要参考原书籍,这里只是做一个简单的总结。

学习探讨加个人:
qq:1126137994
微信:liu1126137994

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用某个文件夹下的所有文件去替换另一个文件夹下及其子文件夹下存在的同名文件(Python实现)...

值此新年即将到来之际,在这献上今年最后一篇文章. 产生这个需求是在项目的一次图标替换上,当时给了我一堆新图标要替换原来的老图标,可是原来的老图标分布在某个文件夹下的各个子文件夹下面,而新图标全是在同一个目录下的. 手动替换的话,只能是搜索文件名后替换,但是文件很多太…

一款研发管理软件的对象标签介绍

如果你了解WIKI,WIKI中的所有信息链接以标签的方式网状关联。TOPO系统中实现了完整的TAG功能,区别于目前市面上的其他类似管理系统,TOPO系统中实现的标签功能更加彻底和全面,例如完全用户自定义TAG,系统中所有管理对象…

【OS学习笔记】三十四 保护模式十:中断和异常区别

上几篇文章学习了分页机制的一些原理: 【OS学习笔记】三十 保护模式九:段页式内存管理机制概述【OS学习笔记】三十一 保护模式九:页目录、页表和页三者的关系详解 今天继续学习保护模式下的关于中断与异常的概念。本文主要学习中断与异常的…

记录一次文件迁移

事情的经过是这样子的!数据库A表添加一条记录,**系统中B目录下就会多出5n个文件。随着系统运行3年多,B目录中的文件数已高达2M多,而这些文件恰恰又是用户高度频繁访问的。于是问题就来了,一方面是用户访问文件速度变慢…

【OS学习笔记】三十五 保护模式十:中断描述符表、中断门和陷阱门

上一篇文章学习了中断与异常的概念:【OS学习笔记】三十四 保护模式十:中断和异常区别 本片文章接着学习以下内容: 中断描述符表中断门陷阱门 1 中断描述符表 我们前面讲了无数次,在实模式下,是由位于低地址的1M内存…

【OS学习笔记】三十六 保护模式十:通过中断发起任务切换----中断任务

上一篇文章学习了:OS学习笔记】三十五 保护模式十:中断描述符表、中断门和陷阱门 本篇文章接着上一篇文章学习中断任务。 我们在前面文章中一直在说通过中断发起任务切换,本文就是将之前没有说明白的内容:通过中断发起任务切换讲…

小议传统分层与新式分层,抑或与DDD分层

引言本文提到的分层只是软件架构上的分层。文中的传统分层指的是传统的三层结构:UI(界面表现层),BLL(业务逻辑层),DAL(数据访问层)。文中提出的观点也都是个人的一点认识,与任何组织…

WCF 第八章 安全 客户端认证

一个服务的客户端认证是通过向服务提供一系列信赖的声明。声明可以是任何形式,只要客户端和服务端理解这个格式并信赖它的来源就可以。 如果客户端和服务端共享一个秘密信息,比如一个用户名和密码,只要客户端通过一个合法认证发送数据&#x…

前端学习(205):animation动画库

动画库 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible" conte…

【剑指offer - C++/Java】7、斐波那契数列

在线题目链接&#xff1a;斐波那契数列 文章目录1、题目描述2、题目分析3、代码3.1 递归方法3.11 Java代码3.12 C代码3.2 动态规划3.21 Java代码3.22 C代码3.3 循环方法3.31 Java代码3.32 C代码4、总结1、题目描述 大家都知道斐波那契数列&#xff0c;现在要求输入一个整数n&a…

【剑指offer - C++/Java】8、跳台阶

在线题目链接&#xff1a;跳台阶 文章目录1、题目描述2、题目分析3、代码3.1 递归方法3.11 Java代码3.12 C代码3.2 动态规划3.21 Java代码3.22 C代码3.3 循环方法3.31 Java代码3.32 C代码4、总结1、题目描述 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级。求该青蛙跳…

【剑指offer - C++/Java】10、矩形覆盖

在线题目链接&#xff1a;矩形覆盖 文章目录1 题目描述2 题目分析3 代码3.1 递归方法3.11 Java代码3.12 C代码3.2 动态规划算法3.2 动态规划3.21 Java代码3.22 C代码3.3 循环方法3.31 Java代码3.32 C代码4、总结1 题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形…

【剑指offer - C++/Java】12、数值的整数次方

在线题目链接&#xff1a;数值的整数次方 文章目录1 题目描述2 题目分析2.1 方法1 循环2.11 Java代码2.12 C代码2.2 方法2 递归2.21 Java代码2.22 C代码3 总结1 题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 2 题目分析 2.1 方…

【剑指offer - C++/Java】14、链表中倒数第k的节点

在线题目链接&#xff1a;链表中倒数第k的节点 文章目录1 题目描述2 题目分析2.1 Java代码2.2 C代码3 总结1 题目描述 输入一个链表&#xff0c;输出该链表中倒数第k个结点。 2 题目分析 这道题比较简单。常规做法是先求出链表的总的节点个数n&#xff0c;然后再从头开始找第n-…

beta:scrum5

今天的工作 周一的工作 困难 王佳磊 收集数据&#xff0c;build了online的数据库, 38934 38939&#xff0c;收集更多数据&#xff0c;在新的API环境下&#xff0c;逐步发现并fix掉以前姓名到ID映射的bug. API的改动&#xff0c;ID的合并 肖巍&#xff0c;兰翠玲 等待测…

【软件开发底层知识修炼】十三 链接器-如何写出不依赖C库函数的代码

本文将综合以下4篇文章&#xff0c;学习如何写出不依赖libc库的程序&#xff1a; 【软件开发底层知识修炼】九 链接器-可重定位文件与可执行文件【软件开发底层知识修炼】十 链接器-main函数不是第一个被执行的函数【软件开发底层知识修炼】十一 链接器-链接脚本【软件开发底层…

前端学习(218):属性选择器

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>属性选择器&…

【软件开发底层知识修炼】十四 快速学习GDB调试一 入门使用

前面几篇文章学习了链接器相关的内容。现在开始来学习GDB调试。我们的目的是通过这几篇文章将GDB调试完全学会。 文章目录1 为什么需要GDB2 GDB 的常规应用3 GDB调试程序实例4 总结1 为什么需要GDB 什么是GDB&#xff1f; GNU项目中的调试器&#xff08;gnu debuger&#xff0…

前端学习(219):css伪类选择器

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>CSS伪类<…

【软件开发底层知识修炼】十五 快速学习GDB调试二 使用GDB进行断点调试

上一篇文章我们学习了使用GDB的最基本方法&#xff1a;【软件开发底层知识修炼】十四 快速学习GDB调试一 入门使用 本篇文章将学习GDB的断点调试。断点调试是一种非常重要的调试方法。 文章目录1 断点类型2 GDB软件断点调试相关操作2.1 通过函数名设置断点2.2 通过文件名行号…