b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

进程要知道哪些内存地址上的数据共享同一物理内存

电脑杂谈  发布时间:2021-04-18 08:03:11  来源:网络整理

虚拟内存

第一层次的理解

1.每个进程都有自己独立的4G内存空间,每个进程的内存空间具有相似的结构

2.创建新进程时,它将建立自己的内存空间。此过程的数据,代码等从磁盘复制到其自己的过程空间。哪些数据位于过程控制表Task_struct记录中,task_struct记录中的链接列表,记录中的内存空间分配,哪些地址有数据,哪些地址没有数据,哪些地址可以读取以及哪些可以可以通过此链接列表进行记录

3.每个进程分配的内存空间被映射到相应的磁盘空间

4g内存怎么设置虚拟内存

4g内存怎么设置虚拟内存

问题:

计算机显然没有那么多内存(n个进程需要n * 4G)内存

要创建进程,必须将磁盘上的程序文件复制到该进程对应的内存中。如果一个程序有多个进程,则会浪费内存!

第二层理解

1.每个进程的4G内存空间只是一个虚拟内存空间。每次访问内存空间中的地址时,都需要将该地址转换为实际的物理内存地址

2.所有进程共享相同的物理内存,并且每个进程仅将当前需要的虚拟内存空间映射并存储到物理内存中。

3.进程需要知道哪些内存地址数据在物理内存中,哪些不在内存中,以及在物理内存中的何处。它需要按页表记录

4.页表的每个条目都分为两部分。第一部分记录该页面是否在物理内存中,第二部分记录该物理内存页面的地址(如果存在)

5.当进程访问某个虚拟地址时,它会转到页表。如果发现相应的数据不在物理内存中,则表明页面错误是异常的。

6.页面错误异常的处理过程是将该过程所需的数据从磁盘复制到物理内存。如果内存已满并且没有剩余空间,那么当然要覆盖一个页面,如果该页面已被覆盖,则该页面已被修改,需要写回到磁盘上。

4g内存怎么设置虚拟内存

4g内存怎么设置虚拟内存

摘要:

优势:

1.由于每个进程的存储空间是一致且固定的,因此链接器可以在链接可执行文件时设置存储地址,而与数据的实际存储地址无关。这是拥有独立内存空间的好处

2.当不同的进程使用相同的代码(例如库文件中的代码)时,此代码的一个副本只能存储在物理内存中,并且不同的进程仅需要映射自己的虚拟内存。为了节省内存

3.当程序需要分配连续的内存空间时,它只需要在虚拟内存空间中分配连续的空间,而不是实际物理内存中的连续空间,就可以使用片段。

此如下图所示:

内存4g怎么设置虚拟内存_4g内存怎么设置虚拟内存_4g的内存虚拟内存怎么设置最好

4g内存怎么设置虚拟内存

4g内存怎么设置虚拟内存

从图中可以看出,内核使用三种机制将高端内存映射到内核空间:永久内核映射,固定映射和vmalloc机制。

2.物理内存管理机制

基于内核空间中物理内存的映射原理,物理内存的管理也有所不同。内核中物理内存的管理机制主要包括伙伴算法,平板缓存和vmalloc机制。其中,伙伴算法和平板缓存均在物理内存映射区域中分配物理内存,而vmalloc机制在高端内存映射区域中分配物理内存。

合作伙伴算法

伙伴算法负责以页面框架为基本单位的大型连续物理内存的分配和释放。这种机制可以避免外部碎片。

每个CPU页面帧缓存

内核经常请求并释放单个页面框架。缓存包含预分配的页面框架,以满足本地CPU发出的单个页面框架请求。

平板缓存

平板缓存负责分配一小部分物理内存,它还用作缓存,主要用于内核中频繁分配和释放的对象。

vmalloc机制

vmalloc机制允许内核通过连续的线性地址访问不连续的物理页帧,从而可以最大程度地利用高端物理内存。

3.物理内存的分配

当内核发送请求内存应用程序时,将根据内核函数调用接口启用不同的内存分配器。

3. 1个分区页面框架分配器

分区页面框架分配器(分区页面框架分配器)处理连续页面框架的内存分配请求。分区页面框架管理器分为两部分:前端管理区域分配器和伙伴系统,如下图所示:

4g内存怎么设置虚拟内存

4g内存怎么设置虚拟内存

内存4g怎么设置虚拟内存_4g内存怎么设置虚拟内存_4g的内存虚拟内存怎么设置最好

管理区域分配器负责搜索可以满足请求的页面框架块大小的管理区域。在每个管理区域中,特定页面框架的分配均由合作伙伴系统负责。为了获得更好的系统性能,单个页面框架的应用是通过每个CPU页面框架缓存直接完成的。

分配器通过多个函数和宏请求页面框架。它们之间的封装关系如下图所示。

4g内存怎么设置虚拟内存

4g内存怎么设置虚拟内存

这些函数和宏封装了核心分配函数__alloc_pages_nodemask(),以形成满足不同分配要求的分配函数。其中,alloc_pages()系列函数返回物理内存的第一页帧描述符,而__get_free_pages()系列函数返回内存的线性地址。

3. 2平板分配器

slab分配器最初是为解决物理内存的内部碎片而提出的。它把内核中常用的数据结构视为对象。平板分配器为每种类型的对象创建一个缓存。内核在此缓存中分配和释放对象。对象的平板分配器的如下:

4g内存怎么设置虚拟内存

4g内存怎么设置虚拟内存

可以看出,每个对象的缓存由几个平板组成,每个平板由几个页面框架组成。尽管平板分配器可以分配小于单个页面帧的内存块,但所需的所有内存都是由伙伴算法分配的。

平板缓存分为专用缓存和通用缓存。专用缓存用于为特定对象(例如内存描述符)创建缓存。常规缓存适用于一般情况,适合于分配任意大小的物理内存,其接口为kmalloc()。

3. 3非连续存储区内存的分配

内核通过vmalloc()申请非连续的物理内存。如果应用程序成功,则此函数返回连续内存区域的起始地址,否则,返回NULL。 vmalloc()和kmalloc()请求的内存不同。 kmalloc()请求的内存的线性地址和物理地址是连续的,而vmalloc()请求的内存的线性地址是连续的,而物理地址是离散的。这两个地址是通过内核页表映射的。

vmalloc()的工作方法很容易理解:

1)。寻找一个新的连续线性地址空间;

2)。依次分配一组不连续的页面框架;

3)。建立线性地址空间与非连续页面框架之间的映射关系,即修改内核页面表;

vmalloc()的内存分配原理类似于用户模式的内存分配。离散的物理内存通过连续的虚拟内存访问,虚拟地址和物理地址通过页表连接。通过这种方式可以有效地使用物理内存。但是,应该注意的是,在申请物理内存时会立即分配vmalloc(),因为内核认为此内存分配请求是合法且紧急的。相反,当在用户模式下有一个内存请求时,内核总是尽可能地延迟它。毕竟,用户模式和内核模式不具有相同的特权级别。

需要C / C ++ Linux服务器开发学习资料以及qun563998835(数据包括C / C ++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker ,TCP / IP,协程,DPDK,ffmpeg等),免费共享


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-369089-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 夫查盘腿
        夫查盘腿

        提高产品质量

      • 王建青
        王建青

        只是要更加快一点步伐

      • 杨艳华
        杨艳华

        甚至还有可能成为前进的桎梏

      热点图片
      拼命载入中...