返回首页  设为首页  加入收藏  今天是:
网站首页电脑主板电脑cpu电脑内存电脑硬盘电脑显卡电脑电源显示器电脑配件电脑维修
相关文章
 深入剖析虚拟内存
 最新笔记本电脑处理器(CPU)…
 笔记本CPU天梯图2019年8月 最…
 寻找站在中间的那只鸟162款笔…
 笔记本电脑cpu排名
 笔记本电脑cpu排行榜最新天梯…
 蓝戟Intel Arc A380显卡评测…
 四两拨千斤DDR5内存转DDR4适…
 电脑主板故障诊断卡小编教你…
 “独具匠心”——梅捷网易通…
 扩展阅读:主板其他细节补充
 RTX 4060上市时间是什么时候…
 Steam 11月硬件调查公布:10…
 问鼎显卡性能之王!NV旗舰GTX…
 无论多牛X的显卡少了它也是块…
 RTX 40系显卡价格多少钱 带的…
 电脑开机噪音特大怎么回事是…
 电脑电源风扇异响——这情况…
 电脑风扇声音大全面解决方法
 如何解决电脑电源风扇声音大…
 酷冷至尊(CoolerMaster)额定…
 Steam Deck可以玩其他平台游…
 格式化电脑和重装系统有什么…
 goosegooseduck鹅鸭杀但连接…
 【科普】释放磁盘空间 C盘哪…
 Win10怎么给磁盘加密 Win10给…
 悍谷(HANGU) 华硕i5104001…
 定南好工作丨福利待遇好!不…
 联想拯救者几款型号出现啸叫…
 悍谷(HANGU) 华硕i5104001…
 京东电脑数码与联想图像联合…
 笔记本屏幕批发商
 TCL华星供应联想ThinkPad高端…
 高色域低蓝光高清屏办公本价…
 平价OLED笔记本上架亚马逊 价…
 【电脑屏幕】_电脑屏幕品牌图…
 随心移动“大平板” 雕塑家B…
 甘肃兰州可触摸电脑超薄显示…
 22寸高档超薄显示屏一体升降…
 INNOCN N1F Pro便携显示器超…
 AOC推出全球最薄绿色显示器
 手机运存真的越大越好吗?你…
 视频_财报网
 随便那么一说
 买手机4GB、6GB、8运存究竟有…
 手机怎么买?CPU和运行内存谁…
 笔记本电脑灰尘怎么清理更好…
 电脑cpu温度多少为正常
 电脑cpu正常温度多少
 运行计算机时CPU的正常温度是…
专题栏目
网络
您现在的位置: 电脑评测网 >> 电脑内存 >> 正文
高级搜索
深入剖析虚拟内存
作者:佚名 文章来源:本站原创 点击数: 更新时间:2022/12/10 3:23:54 | 【字体:

  群芳录签到虚拟内存的出现,主要是解决程序运行隔离、内存空间大小问题。CPU是分时运行的,但是内存不可以采用这种方式,如果内存采用分时运行,效率会大大降低(磁盘效率低)。而如果同时运行两个程序的话,如果程序A与程序B如果都在相同的地址上写入数据的话,那么程序的数据会混乱,两个程序会立即崩溃。

  虚拟内存的意义 - 对下层: 作为对磁盘上的地址空间的高速缓存 - 对上层: - 为每个进程提供一致的地址空间 - 保护了不同进程地址空间的相互隔离2. 虚拟内存地址和物理内存地址

  操作系统将不同进程的虚拟地址和不同内存的物理地址映射起来,如果程序要访问虚拟地址的时候,由操作系统转换成不同的物理地址,这样不同的进程运行的时候,写入的是不同的物理地址,这样就不会冲突了。

  操作系统将虚拟地址映射成物理地址的机制是由CPU芯片当中的内存管理单元(MMU)提供的映射关系来转换为物理地址,然后再通过物理地址访问:

  MMU是Memory Management Unit的缩写,中文名是内存管理单元。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制等。3. 内存分段

  程序是由若干个逻辑分段组成的,如可由代码分段、数据分段、栈段、堆段组成。不同的段是有不同的属性的,所以就用分段(Segmentation)的形式把这些段分离出来。

  段选择子是一个16位的段描述符,该描述符指向定义该段的段描述符。 RPL:请求特权级别 TI:TI = 0查GDT表、TI = 1查LDT表 Index:处理器将索引值乘以8在加上GDT或者LDT的基地址 段选择子里面最重要的是段号,用作段表的索引。段表里面保存的是这个段的基地址、段的界限和特权等级等。

  虚拟地址中的段内偏移量应该位于 0 和段界限之间。如果段内偏移量是合法的,就将段基地址加上段内偏移量得到物理内存地址 例如,我们将上面的虚拟空间分成以下 4 个段,用 0~3 来编号。每个段在段表中有一个项,在物理空间中,段的排列如下图的右边所示。 分段的办法很好,解决了程序本身不需要关心具体的物理内存地址的问题,但它也有一些不足之处:

  内部碎片是指已分配但未被使用的地址空间。例如在64位空间内,你只适用7字节但由于内存对齐不得不为你分配8字节空间,这就产生了1字节内部碎片。

  外部碎片是指未分配且未使用的地址空间。例如,你申请4字节的Int类型,再申请8字节的long类型,为了内存对齐,其中4字节无法装入8字节类型,这就产生了4字节的外部碎片,如下图所示。

  内部碎片是已被分配的空间,是操作系统不可利用的空间;外部碎片是未被分配的,是可分配的,但该空间过小(碎片的含义)无法装入资源,导致不可利用,但外部碎片是可解决的,可以将多个外部碎片紧凑成一个大的空闲空间,但这需要大量成本。

  假设现在有1G的物理内存,现在开启三个进程:游戏占512MB、聊天软件占256MB、浏览器占128MB,此时我们关闭了浏览器,则空闲内存还有=256MB,如果此时这个256MB不是连续的,就会导致没有足够的空间再打开一个200MB的程序:

  外部内存碎片,也就是产生了多个不连续的小物理内存,导致新的程序无法被装载;

  内部内存碎片,程序所有的内存都被装载到了物理内存,但是这个程序有部分的内存可能并不是很常使用,这也会导致内存的浪费;

  可以把聊天软件占用的那 256MB 内存写到硬盘上,然后再从硬盘上读回来到内存里。不过再读回的时候,我们不能装载回原来的位置,而是紧紧跟着那已经被占用了的 512MB 内存后面。这样就能空缺出连续的 256MB 空间,于是新的 200MB 程序就可以装载进来。

  这个内存交换空间,在 Linux 系统里,也就是我们常看到的 Swap 空间,这块空间是从硬盘划分出来的,用于内存与硬盘的空间交换。

  对于多进程的系统来说,用分段的方式,内存碎片是很容易产生的,产生了内存碎片,那不得不重新Swap内存区域,这个过程会产生性能瓶颈。

  因为硬盘的访问速度要比内存慢太多了,每一次内存交换,我们都需要把一大段内存数据写到硬盘上。

  所以,如果内存交换的时候,交换的是一个占内存空间很大的程序,这样整个机器都会显得卡顿。

  swap用英文表示是交换的意思,简单说Swap区就是服务器上的交换区,这块区域其实是硬盘,并不是内存,首先它的用法肯定是用来做交换的,系统是用内存和Swap区做交换,有两个目的,第一个就是减少系统内存碎片问题。第二个是增加内存的使用率,总的来说,它就是为了保证内存的最大化利用5.内存分页5.1 概念

  分段的好处就是能产生连续的内存空间,但是会出现内存碎片和内存交换的空间太大的问题。

  要解决这些问题,那么就要想出能少出现一些内存碎片的办法。另外,当需要进行内存交换的时候,让需要交换写入或者从磁盘装载的数据更少一点,这样就可以解决问题了。这个办法,也就是内存分页(Paging)。

  分页是把整个虚拟和物理内存空间切成一段段固定尺寸的大小。这样一个连续并且尺寸固定的内存空间,我们叫页(Page)。在 Linux 下,每一页的大小为4KB。

  页表实际上存储在 CPU 的内存管理单元(MMU) 中,于是 CPU 就可以直接通过 MMU,找出要实际要访问的物理内存地址。

  而当进程访问的虚拟地址在页表中查不到时,系统会产生一个缺页异常,进入系统内核空间分配物理内存、更新进程页表,最后再返回用户空间,恢复进程的运行。

  由于内存空间都是预先划分好的,也就不会像分段会产生间隙非常小的内存,这正是分段会产生内存碎片的原因。而采用了分页,那么释放的内存都是以页为单位释放的,也就不会产生无法给进程使用的小内存。

  如果内存空间不够,操作系统会把其他正在运行的进程中的「最近没被使用」的内存页面给释放掉,也就是暂时写在硬盘上,称为换出(Swap Out)。一旦需要的时候,再加载进来,称为换入(Swap In)。所以,一次性写入磁盘的也只有少数的一个页或者几个页,不会花太多时间,内存交换的效率就相对比较高。

  分页的方式使得我们在加载程序的时候,不再需要一次性都把程序加载到物理内存中。我们完全可以在进行虚拟内存和物理内存的页之间的映射之后,并不真的把页加载到物理内存里,而是只有在程序运行中,需要用到对应虚拟内存页里面的指令和数据时,再加载到物理内存里面去。

  在分页机制下,虚拟地址分为两部分,页号和页内偏移。页号作为页表的索引,页表包含物理页每页所在物理内存的基地址,这个基地址与页内偏移的组合就形成了物理内存地址:

  上述的虚拟页与物理页的映射是一种简单的分页,但是这种简单的分页是存在缺陷的

  因为操作系统是可以同时运行非常多的进程的,那这不就意味着页表会非常的庞大。

  在 32 位的环境下,虚拟地址空间共有 4GB,假设一个页的大小是 4KB(2^12),那么就需要大约 100 万 (2^20) 个页,每个「页表项」需要 4 个字节大小来存储,那么整个 4GB 空间的映射就需要有4MB的内存来存储页表。

  这 4MB 大小的页表,看起来也不是很大。但是要知道每个进程都是有自己的虚拟地址空间的,也就说都有自己的页表。

  那么,100个进程的线MB的内存来存储页表,这是非常大的内存了,更别说 64 位的环境了。

  4KB的环境下,一个进程的页表需要装下 100 多万个「页表项」,并且每个页表项是占用 4 字节大小的,于是相当于每个页表需占用 4MB 大小的空间。

  1024个页表(二级页表),每个表(二级页表)中包含1024个「页表项」,形成二级分页:

  如果某个一级页表的页表项没有被用到,也就不需要创建这个页表项对应的二级页表了,即可以在需要时才创建二级页表。做个简单的计算,假设只有 20% 的一级页表项被用到了,那么页表占用的内存空间就只有 4KB(一级页表) + 20% * 4MB(二级页表)=0.804MB

  页表一定要覆盖全部虚拟地址空间,不分级的页表就需要有 100 多万个页表项来映射,而二级分页则只需要 1024 个页表项(此时一级页表覆盖到了全部虚拟地址空间,二级页表在需要时创建)。

  我们就可以利用这一特性,把最常访问的几个页表项存储到访问速度更快的硬件,于是计算机科学家们,就在 CPU 芯片中,加入了一个专门存放程序最常访问的页表项的 Cache,这个 Cache 就是 TLB(Translation Lookaside Buffer) ,通常称为页表缓存、转址旁路缓存、快表等。

  接着再把每个段划分为多个页,也就是对分段划分出来的连续空间,再划分固定大小的页;

电脑内存录入:admin    责任编辑:admin 
  • 上一个电脑内存:

  • 下一个电脑内存: 没有了
  •  
     栏目文章
    普通电脑内存 深入剖析虚拟内存 (12-10)
    普通电脑内存 手机运存真的越大越好吗?你可知手机6G、8G、… (12-09)
    普通电脑内存 视频_财报网 (12-09)
    普通电脑内存 随便那么一说 (12-09)
    普通电脑内存 买手机4GB、6GB、8运存究竟有什么区别?运存真… (12-09)
    普通电脑内存 手机怎么买?CPU和运行内存谁更重要?对比后你… (12-09)
    普通电脑内存 标签:主存储 (12-09)
    普通电脑内存 APP随便开!这就是16+512G手机的流畅体验吗?… (12-09)
    普通电脑内存 苹果iPhone14内存是多少 苹果可以拍摄什么样的… (12-09)
    普通电脑内存 视频如何压缩变小?压缩视频方法介绍 (12-09)
    普通电脑内存 手机内存大有什么好处 (12-09)
    普通电脑内存 一台顶两台!有16+512GB大内存兜底Reno9 Pro可… (12-09)
    普通电脑内存 国产“迷你电脑”评测:锐龙处理器+32GB内存… (12-09)
    普通电脑内存 开团丨在家上网课!送孩子一款合适的学习机大… (12-09)
    普通电脑内存 售价778元!酷比14S Ultra亮相神似小米12S Ul… (12-09)
    普通电脑内存 “3A”平台显神威!联想拯救者R9000X 2022评测… (12-09)
    普通电脑内存 锐龙R7 6800H功耗是多少 锐龙R7 6800H支持内存… (12-08)
    普通电脑内存 电脑系统内存变小了怎么办 (12-08)
    普通电脑内存 i7-13700KF针脚接口类型是什么 最大内存带宽是… (12-08)
    普通电脑内存 电脑为什么会黑屏(一) (12-08)