malloc是否会建立页表

malloc是否会建立页表,第1张

malloc和mmap等内存分配函数只是建立进程的虚拟地址空间,并没有分配实际的物理内存。当进程访问没有建立映射关系的虚拟内存时会自动的触发一个缺页中断。

请求分页的系统当中,可以查询页表当前的状态位来查询当前页是否在内存当中,如果不在内存当中可以通过页表当中的外存地址将缺的一页读到内存当中。比如mmap映射文件。

用 ps -o majflt,minflt -C program 命令查看。

majflt代表major fault(需要读取磁盘),中文名叫大错误,minflt代表minor fault(不需要读取磁盘),中文名叫小错误。

这两个数值表示一个进程自启动以来所发生的缺页中断的次数。

当一个进程发生缺页中断的时候,进程会陷入 内核态 ,执行以下 *** 作:

如果第3步,需要读取磁盘,那么这次缺页中断就是majflt,否则就是minflt。

从 *** 作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。

这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问(读/写)已分配的虚拟地址空间的时候,发生缺页中断, *** 作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。

在标准C库中,提供了malloc/free函数分配释放内存,这两个函数底层是由brk,mmap,munmap这些系统调用实现的宏搭。

malloc小于128k的内存,使用brk分配内存,将_edata往高地址推

malloc大于128k的内存,使用mmap分配内存,在堆和栈之间找一块空闲内存分配(对应独立内存,而且初始化为0)

上一小节已经介绍了mmap的内存释放,这里主要看brk的内存释放

既然堆内内存brk不能直接释放,为什么不全部使用 mmap 来分配,munmap直接释放呢?

其实,进程向 OS 申请和释放地址空间的接口 sbrk/mmap/munmap 都是系统调用,频繁调用系统调用都比较消耗系统资源的。并且, mmap 申请的内存被 munmap 后,重新申请会产生更多的缺页中断。例如使用 mmap 分配 1M 空间,第一次调用产生了大量缺页中断 (1M/4K 次 ) ,当munmap 后再次分配 1M 空间,会再次产生大量缺页中断。缺页中断是内核行为历凳,会导致内核态CPU消耗较大。另外,如果使用 mmap 分配小内存,会导致地址空间的分片更蔽烂拿多,内核的管理负担更大。

同时堆是一个连续空间,并且堆内碎片由于没有归还 OS ,如果可重用碎片,再次访问该内存很可能不需产生任何系统调用和缺页中断,这将大大降低 CPU 的消耗。 因此, glibc 的 malloc 实现中,充分考虑了 brk 和 mmap 行为上的差异及优缺点,默认分配大块内存 (128k) 才使用 mmap 获得地址空间,也可通过 mallopt(M_MMAP_THRESHOLD,

) 来修改这个临界值。

这是我收集的你看全吗问题一:⑴ 存储管理的实质是什么?(对内存的管理,主要对内存中用户区进行管理)⑵ 多道程序中,为方便用户和充分利用内存以提高内存利用率,内存管理的任务是什么?(内存空间的分配和回收、内存空间的共享、存储保护、地址映射、内存扩充)。⑶ 如何实现存储保护?

答:在多道程序系统中,内存中既有 *** 作系统,又有许多用户程序。为使系统正常运行,避免内存中各程序相互干扰,必须对内存中的程序和数据进行保护。

1、防止地址越界

对进程所产生的地址必须加以检查,发生越界时产生中断,由 *** 作系统进行相应处理。

2、防止 *** 作越权

对属于自己区域的信息,可读可写;

对公共区域中允许共享的信息或获得授权可使用的信息,可读而不可修改;

对未获授权使用的信息,不可读、不可写。

存储保护一般以硬件保护机制为主,软件为辅,因为完全用软件实现系统开销太大,速度成倍降低。当发生越界或非法 *** 作时,硬件产生中断,进入 *** 作系统处理(4) 物理存储器分几类?(内存、外存、缓存)⑸ 虚存储器的含义是什么?(两层含义)

答:虚存储器有两层含义,一是指用户程序的逻辑地址构成的地址空间;二是指当内存容量不满足用户要求时,采用一种将内存空间与外存空间有机地结合在一起,利用内兄芹外存自动调度的方法构成一个大的存储器,从而给用户程序提供更大的访问空间。⑹ 什么叫物理地址?什么叫逻辑地址?什么叫地址映射?地址映射分哪几类?(静态、动态)

答:物理地址是内存中各存储单元的编号,即存储单元的真实地址,它是可识别、可寻址并实际存在的。

用户程序经过编译或汇编形成的目标代码,通常采用相对地址形式,其首地址为零,其余指令中的地址都是相对首地址而定。这个相对地址就称为逻辑地址或虚拟地址。逻辑地址不是内存中的物理地址,不能根据逻辑地址到内存中存取信息。

为了保证CPU执行程序指令时能正确访问存储单元,需要将用户程序中的逻辑地址转运行时可由机器直接寻址的物理地址,这一过程称为地址映射或地址重定位。

地址映射可分为两类:

1、静态地址映射2、动态地址映射问题二:⑴ 怎样对内存进行分区?(静态、动态;等长、不等长)

答:对内存空间的划分是可以静态的,也可以动态的;可以是等长的,也可以不等长。

静态划分是指系统运行之前就将内存空间划分成若干区域,通常,分配给进程的差戚内存可能比进程实际所需的区域长。

动态划分是在系羡庆毕统运行过程中才划分内存空间。这样,系统可按进程所需要的存储空间大小为其分配恰好满足要求的一个或多个区域。

等长分区是将存储空间划分为若干个长度相同的区域。

不等长分区则是将存储空间划分若干个长度不同的区域。⑵ 根据分区情况,从如何实现进程的内存分配?

答:1、静态等长分区的分配

2、动态异长分区的分配⑶ 什么叫碎片?(零散的小空闲区) 怎样解决碎片问题?(紧凑技术)

答:所谓碎片是指内存中出现的一些零散的小空闲区域。

解决碎片的方法是移动所有占用区域,使所有的空闲区合并成一片连续区域。这一过程称为紧凑,这一技术就是紧凑技术。。问题三:⑴ 存储管理方案有哪些?(分区管理、页式管理、段式管理、段页式管理、虚拟存储管理)⑵ 分区管理的基本思想是什么?主要缺点是什么?

基本思想:将内存划分成若干连续的区域,称为分区,每个分区装入一个运行作业。

主要缺点:不能充分利用内存,也不能实现对内存的扩充。⑶ 什么是固定分区?什么是可变分区?各有什么优缺点?

答:固定分区:系统将内存划分为若干固定的分区,当作业申请内存时,系统为其选择一个适当的分区,并装入内存运行。由于分区大小是事先固定的,因而可容纳作业的大小受到限制,而且当用户作业的地址空间小于分区的存储空间时,浪费了一些存储空间。

可变分区:是指在作业装入内存时建立分区,使分区的大小正好与作业要求的存储空间相等。引入可变分区方法,使内存分配有较大的灵活性,也提高了内存利用率。但是可变分区会引起碎片的产生。⑷ 分区管理可以采用的内存分配策略是什么?

首先适应算法、最佳适应算法、最坏适应算法。⑸ 为实现地址映射和存储保护,系统为用户程序提供了哪些寄存器?

基址寄存器、限长寄存器;上界寄存器、下界寄存器。问题四:⑴ 试述页式存储管理的基本原理

① 内存划分。

② 逻辑地址空间划分。

③ 页面大小。

④ 内存分配。⑵ 试述页式存储管理的实现方法

① 建立页表。② 建立空闲页面表。

③ 硬件支持。④ 地址映射过程。⑶ 为了提高存取速度,可以使用快表技术。试述这一技术是如何实现的?

答:快表技术是在地址映射机构中增加一个小容量的联想寄存器(相联存储器),它由高速寄存器组成,成为一张快表,快表用来存放当前访问最频繁的少数活动页的页号。

在快表中,除了逻辑页号、物理页号对应外,还增加了几位。特征位表示该行是否为空,用0表示空,用1表示有内容;访问位表示该页是否被访问过,用0表示未访问,1表示已访问,这是为了淘汰那些用得很少甚至不用的页面而设置的。

快表只存放当前进程最活跃的少数几页,随着进程的推进,快表内容动态更新。当用户程序需要存取数据时,根据该数据所在逻辑页号在快表中找出对应的物理页号,然后拼接页内地址,以形成物理地址;如果在快表中没有相应的逻辑页号,则地址映射仍然通过内存中的页表进行,得到物理页号后须将该物理页号填到快表的空闲单元中。有无空闲单元,则根据淘汰算法淘汰某一行,再填入新得到的页号。实际上查找快表和查找内存页表是并行进行的,一旦发现快表中有与所查页号一致的逻辑页号就停止查找内存页表。问题五:⑴ 试述段页式存储管理的基本思想

答:段页式存储管理的基本思想是:

1、用页式方法来分配和管理内存空间,即把内存划分成若干大小相等的页面;

2、用段式方法对用户程序按照其内在的逻辑关系划分成若干段;

3、再按照划分内存页面的大小,把每一段划分成若干大小相等的页面;

4、用户程序的逻辑地址由三部分组成,形式如下:

段号页号页内地址

5、内存是以页为基本单位分配给每个用户程序的,在逻辑上相邻的页面内存不一定相邻。⑵ 如何实现段页式存储管理

答:1、建立段表2、建立页表3、建立内存空闲页面表4、硬件支持5、地址映射过程问题六:⑴ 虚拟存储技术的基本思想

答:虚拟存储技术的基本思想是利用大容量的外存来扩充内存,产生一个比有限的实际内存空间大得多的、逻辑的虚拟内存空间,以便能够有效地支持多道程序系统的实现和大型作业运行的需要,从而增强系统的处理能力。⑵ 虚拟存储技术的理论基础(局部性原理)

答:程序局部性原理:虚拟存储管理的效率与程序局部性程序有很大关系。根据统计,进程运行时,在一段时间内,其程序的执行往往呈现出高度的局限性,包括时间局部性和空间局部性。

1、时间局部性:是指若一条指令被执行,则在不久,它可能再被执行。

2、空间局部性:是指一旦一个存储单元被访问,那它附近的单元也将很快被访问。⑶ 虚拟存储管理的基本原理

答:虚拟存储的基本原理是:当进程要求运行时,不是将它的全部信息装入内存,而将将其一部分先装入内存,另一部分暂时留在外存。进程在运行过程中,要使用的信息不在内存时,发生中断,由 *** 作系统将它们调入内存,以保证进程的正常运行。⑷ 虚拟存储管理的分类

答:虚拟存储管理分为:虚拟页式、虚拟段式和虚拟段页式。⑸ 以虚拟页式存储管理为例介绍虚拟存储管理的实现过程

答:虚拟页式存储管理的基本思想是,在进程开始执行之前,不是装全部页面,而是只装一个(甚至0个)页面,然后根据进程执行的需要,动态地装入其它页面。

1、页表 2、缺页中断处理3、页面淘汰⑹ 在虚存中,页面在内存与外存中频繁地调试,系统效率急剧下降,称为颠簸。试说明产生颠簸的原因。通过什么方式可以防止颠簸的发生?

答:颠簸是由缺页率高而引起的。

系统规定缺页率的上界和下界。当运行进程缺页率高于上界时,表明所分给它的物理页面数过少,应当增加;反之,当运行进行缺页率低于下界时,表明所分给它的物理页面数过多,可以减少。这样,根据缺页率反馈可动态调整物理页面的分配,以防止颠簸的发生。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8229645.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存