您好、欢迎来到现金彩票网!
当前位置:打鱼棋牌游戏平台 > 物理分页 >

JIURL玩玩Win2k内存篇 分页机制 (一)

发布时间:2019-07-31 06:59 来源:未知 编辑:admin

  Windows 2000 使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射。程序中使用的都是4GB地址空间中的虚拟地址。而访问物理内存,需要使用物理地址。

  物理地址 (physical address): 放在寻址总线上的地址。放在寻址总线上,如果是读,电路根据这个地址每位的值就将相应地址的物理内存中的数据放到数据总线中传输。如果是写,电路根据这个地址每位的值就将相应地址的物理内存中放入数据总线上的内容。物理内存是以字节(8位)为单位编址的。

  虚拟地址 (virtual address): 4G虚拟地址空间中的地址,程序中使用的都是虚拟地址。

  如果CPU寄存器中的分页标志位被设置,那么执行内存操作的机器指令时,CPU会自动根据页目录和页表中的信息,把虚拟地址转换成物理地址,完成该指令。比如 mov eax,004227b8h ,这是把地址004227b8h处的值赋给寄存器的汇编代码,004227b8这个地址就是虚拟址。CPU在执行这行代码时,发现寄存器中的分页标志位已经被设定,就自动完成虚拟地址到物理地址的转换,使用物理地址取出值,完成指令。对于Intel CPU 来说,分页标志位是寄存器CR0的第31位,为1表示使用分页,为0表示不使用分页。对于初始化之后的 Win2k 我们观察 CR0 ,发现第31位为1。表明Win2k是使用分页的。

  使用了分页机制之后,4G的地址空间被分成了固定大小的页,每一页或者被映射到物理内存,或者被映射到硬盘上的交换文件中,或者没有映射任何东西。对于一般程序来说,4G的地址空间,只有一小部分映射了物理内存,大片大片的部分是没有映射任何东西。物理内存也被分页,来映射地址空间。对于32bit的Win2k,页的大小是4K字节。CPU用来把虚拟地址转换成物理地址的信息存放在叫做页目录和页表的结构里。

  物理内存分页,一个物理页的大小为4K字节,第0个物理页从物理地址 0x00000000 处开始。由于页的大小为4KB,就是0x1000字节,所以第1页从物理地址 0x00001000 处开始。第2页从物理地址 0x00002000 处开始。可以看到由于页的大小是4KB,所以只需要32bit的地址中高20bit来寻址物理页。

  页表,一个页表的大小为4K字节,放在一个物理页中。由1024个4字节的页表项组成。页表项的大小为4个字节(32bit),所以一个页表中有1024个页表项。页表中的每一项的内容(每项4个字节,32bit)高20bit用来放一个物理页的物理地址,低12bit放着一些标志。

  页目录,一个页目录大小为4K字节,放在一个物理页中。由1024个4字节的页目录项组成。页目录项的大小为4个字节(32bit),所以一个页目录中有1024个页目录项。页目录中的每一项的内容(每项4个字节)高20bit用来放一个页表(页表放在一个物理页中)的物理地址,低12bit放着一些标志。

  一个虚拟地址,大小4个字节(32bit),包含着找到物理地址的信息,分为3个部分:第22位到第31位这10位(最高10位)是页目录中的索引,第12位到第21位这10位是页表中的索引,第0位到第11位这12位(低12位)是页内偏移。对于一个要转换成物理地址的虚拟地址,CPU首先根据CR3中的值,找到页目录所在的物理页。然后根据虚拟地址的第22位到第31位这10位(最高的10bit)的值作为索引,找到相应的页目录项(PDE,page directory entry),页目录项中有这个虚拟地址所对应页表的物理地址。有了页表的物理地址,根据虚拟地址的第12位到第21位这10位的值作为索引,找到该页表中相应的页表项(PTE,page table entry),页表项中就有这个虚拟地址所对应物理页的物理地址。最后用虚拟地址的最低12位,也就是页内偏移,加上这个物理页的物理地址,就得到了该虚拟地址所对应的物理地址。

  一个页目录有1024项,虚拟地址最高的10bit刚好可以索引1024项(2的10次方等于1024)。一个页表也有1024项,虚拟地址中间部分的10bit,刚好索引1024项。虚拟地址最低的12bit(2的12次方等于4096),作为页内偏移,刚好可以索引4KB,也就是一个物理页中的每个字节。

  一个虚拟地址转换成物理地址的计算过程就是,处理器通过CR3找到当前页目录所在物理页,取虚拟地址的高10bit,然后把这10bit右移2bit(因为每个页目录项4个字节长,右移2bit相当于乘4)得到在该页中的地址,取出该地址处PDE(4个字节),就找到了该虚拟地址对应页表所在物理页,取虚拟地址第12位到第21位这10位,然后把这10bit右移2bit(因为每个页表项4个字节长,右移2bit相当于乘4)得到在该页中的地址,取出该地址处的PTE(4个字节),就找到了该虚拟地址对应物理页的地址,最后加上12bit的页内偏移得到了物理地址。

  32bit的一个指针,可以寻址范围0x00000000-0xFFFFFFFF,4GB大小。也就是说一个32bit的指针可以寻址整个4GB地址空间的每一个字节。一个页表项负责4K的地址空间和物理内存的映射,一个页表1024项,也就是负责1024*4k=4M的地址空间的映射。一个页目录项,对应一个页表。一个页目录有1024项,也就对应着1024个页表,每个页表负责4M地址空间的映射。1024个页表负责1024*4M=4G的地址空间映射。一个进程有一个页目录。所以以页为单位,页目录和页表可以保证4G的地址空间中的每页和物理内存的映射。

  每个进程都有自己的4G地址空间,从 0x00000000-0xFFFFFFFF 。通过每个进程自己的一套页目录和页表来实现。由于每个进程有自己的页目录和页表,所以每个进程的地址空间映射的物理内存是不一样的。两个进程的同一个虚拟地址处(如果都有物理内存映射)的值一般是不同的,因为他们往往对应不同的物理页。

  内存虚拟存储主要是为了将一个进程分为不同页.存储到不同物理页中.然而不同进程的虚拟地址是可以相同的.因为MMU把进程的虚拟地址映射到各个不同的物理地址中.以下操作系统采用二级分页.一开始CS:IP寄存...博文来自:菜菜鸟的成长记录

  一、问题提出:我们经常会使用malloc()以及free()函数进行堆区内存申请与释放。那么你是否会这样做:int*p=malloc(0);/*malloc分配了0个字节吗,如果是那么p指向谁呢,是N...博文来自:Apollon_krj的博客

  首先说明一下,我们在调试程序时看到的地址其实是逻辑地址而不是线性地址或是物理地址。cpu需要通过一些手段才可以访问到物理地址。这个手段就是分段与分页。 那么为什么cpu不直接操控物理地址中?第一,为了...博文来自:Adonisc的博客

  背景知识 逻辑地址:指程序的地址空间,与内存的真实物理地址无关。物理地址(绝对地址):是数据在内存中的实际地址。分页思想将进程的逻辑地址空间和真实内存地址空间划分为大小相等、固定的若干块。在进程中叫做...博文来自:swjtuzbko的专栏

  前面说道操作系统的每个进程都拥有自己的虚拟地址空间,对于这个32位操作系统,虚拟内存空间大小为4G。现代操作系统都使用分页来管理内存,把4G分成每一页为2^12=4K大小的页,一共有1M个的页(虚拟页...博文来自:u012138730的专栏

  .写在开头的话今天学习了分页机制中的虚拟内存地址到物理内存地址的转换,做些笔记。首先也是非常需要注意的是这个PAE(物理地址扩展),这个东西是默认开启的,由于不开启PAE时候的计算要相对简单一些,所以...博文来自:FadeTrack

  一:线,进程:进程是操作系统的基础,是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动,是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位,一...

  背景前面分析了kernelboot阶段内存管理实现的分段机制,可以发现页表描述符是按照ARMMMU硬件页表转换逻辑来设计的。kernel在初始化过程中只映射了内核image部分的物理内存,在某个合适的...

  1.概述一个进程的虚拟地址空间是4GB,它的物理大小并不是线GB,那运行中的所有进程都加起来占用的空间是一个天文数字,事实上系统会对这4GB的地址空间进行转换,然后映射到物理内存...

  1.内存分布概述    每个进程都有自己的虚拟地址空间,对于32位进程来说,这个地址空间的大小为4GB,这是因为32位指针可以表示从0x00000000到0xFFFFFFFF之间的任意一值。对于64位...

  注意:请使用谷歌浏览器阅读(IE浏览器排版混乱)【摘要】 本文主要介绍linux源代码中,是如何实现分页机制的。内存分页管理是arm架构中MMU的重要组成部分,理解它大有裨益。本文重点不在讲解理论知...

  hibernate分页实现机制 话说上次面试,面试官问我看过hibernate分页源码,我惭愧的说,没看过。。。这几天真好闲就查了一下hibernate的分页机制。也算差不多明白了吧。。呵呵。。 pu...

  作者:JIURL日期:2015年11月01日还是分页机制进程的页目录和页表在虚拟地址空间中的位置   上一篇中,我们把分页相关结构,分别叫做PML4,PDPT,PD,PT。这是Intel对x86-64...

  提要最近抽空重新研读IA-32手册,顺便整理一下自己对Pagemode(chapter4)的一些理解,以便帮助自己或者其他有需要的朋友做一些总结。拿来主义——地址范围、虚拟地址映射为物理地址以及分页机...

  操作系统将物理内存虚拟化,从而管理内存,将每个进程的运行空间隔离,形成多任务的操作系统。物理内存虚拟化后,在操作系统的基础上有以下几个名词概念,需要深刻理解,网络上很多博客和帖子常常对此解释出现误差、...

  基于图形用户界面的RunAs 程序(GUI RunAs) WIN32 API

  为了在另一个用户上下文中启动程序,Win2k 提供了一个命令行程序工具——RunAs。在网上(如)也能找到同样功能的程序和代码。有人要求我为这个工具做一个图形用户界面的版本。本文就是为此而写的。为了不“重新...

  VMware Tools windows98专用。现在很多版本都没有98下的TOOLS特此上传

  开启分页机制必须说明的是,必须在保护模式下才能启动分页功能。本章的引导程序依然用第13章的。开启分页机制之前,必须创建页目录和页表。...

  XV6分页机制、内存管理报告内容0.mmu.h的阅读mmu.h源码中给出了XV6虚拟地址的构成,及所代表的含义mmu.h中还有页表的相关信息,每个页目录都与1024条记录,每一个页表中也有1024条记...

  在想看下共享内存如何实现的时候,刚好想了解一下内存使用情况。简介总结简介分页机制让我们在程序开发的时候不需要管理内存的,也不需要操心内存够不够用它是实现虚拟存储的关键,位于线性地址与物理地址之间。整个...

  在网上阅读了一篇关于内存分页管理的文章,这是原文链接本人画的解析图如下:注:1、地址总线...

  分页机制在段机制之后进行,已完成线性地址——物理地址段转换。段机制把虚拟地址转换为线性地址,分页机制进一步把该线性地址再转换为物理地址。  1线性地知道物理地址的转换第一步,用32位线...

  好久没更博了,甚是想念,工作的日子再也没有学校的那种悠闲,仕途一片迷茫,走一步看一步…列出自己开发中微信遇到的坑示例demo有坑爹的歧义支付的回调操作签名错误示例demo有坑爹的歧义刚接触微信支付文档...

  前言:由于计算机的内存是有限的,比0到2的32次方就是对应4G,这时候操作系统就引入了虚拟内存这一个概念,1,首先可以从程序的编译下手,对于java或者c++而言,程序在编译的时候需要内存,但是此时程...

  上一篇我们大概认识了安卓查看内存的一般方法,并对安卓内存有了一个简单的认识,这一篇我们将会对安卓内部关于内存的相关基础知识做一个总结概要:1.native内存和heap内存2.安卓为什么会oom3.l...

  Cloud_Huan的专栏Java多线程编程实战指南(核心篇)读书笔记(一)

  写到开头还记得在某一次公开课上听到老师说过,全世界平均每年每人读书最多的民族是犹太人,为64本;平均每年每人读书最多的国家是俄罗斯,为55本;一组统计数据显示08年的中国,有读书习惯的人仅占总人口的5...

http://lotusyogacenter.com/wulifenye/424.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有