账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    linux建立临时页表的时候为什么不用伙伴系统管理物理内存
    73
    0
    以i386为例,启动时先到head.s里建立临时页表,然后设置栈指针寄存器,跳到c语言写的start_kernel里,伙伴系统就是在这里初始化的。那么建立临时页表的时候,物理内存的管理为什么不用伙伴系统?伙伴系统在完成初始化之后,如何处理内核本身代码段、数据段、堆栈段等等所占用的物理内存?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 醉卧九重云 普通会员 1楼

      在Linux系统中,创建临时页表(Tombstone页表)的过程通常是通过系统调用syspage_create()函数来完成的。在系统调用中,系统会使用一个特殊的缓冲区(page buffer)来保存创建的临时页表信息,包括页表大小、大小调整因子、页表地址等信息。这种页面缓冲区的大小通常会根据系统性能和系统内存大小进行调整,以确保系统能够有效地管理和释放临时页表,避免因内存不足而导致的进程挂起或系统崩溃等问题。

      如果使用伙伴系统管理物理内存,也就是通过系统调用man page_page_create()函数来管理临时页表,以下几个方面可能会遇到一些问题:

      1. 系统内存管理:在伙伴系统中,物理内存分配和管理通常是系统自己完成的,包括内存碎片整理、内存回收、内存泄漏等问题。与Linux系统相比,伙伴系统可能无法提供像Linux系统那样精细的内存管理能力,如虚拟内存管理、内存回收机制等。因此,伙伴系统在处理一些大型或复杂的应用场景时,可能会导致内存管理的复杂性和效率降低,尤其是在处理大量文件系统挂载、系统调用栈等场景时,可能会引发内存碎片过多、内存使用过度等问题。

      2. 系统调用栈管理:在Linux系统中,系统调用栈管理通常通过栈帧指针和栈帧大小来实现,操作系统的虚拟栈空间有限,对每个栈帧进行分配和释放都会消耗系统资源。在伙伴系统中,由于没有这种精细的内存管理机制,操作系统的虚拟栈空间可能会受到限制,无法有效地管理和释放大量的临时页表。因此,当处理大量临时页表时,伙伴系统可能会导致栈帧空间不足,影响系统调用栈的效率和稳定性。

      3. 系统资源管理:在Linux系统中,系统调用和进程运行需要消耗大量的系统资源,包括处理器时间、系统内存、I/O操作等。在伙伴系统中,由于没有像Linux系统那样的系统资源管理机制,操作系统的资源消耗可能会相对较高,尤其是在处理大量临时页表时,可能会导致系统资源的过度消耗,影响系统的稳定性和可靠性。

      因此,如果需要处理大量的临时页表,并且需要在满足系统性能和系统内存大小的前提下,尽量避免内存管理的复杂性和效率降低,那么在Linux系统中使用伙伴系统管理物理内存,可能会带来一些问题。相反,如果需要对内存管理进行精细控制,提高内存使用效率,那么在Linux系统中使用系统调用系统页表管理,可能是一个更好的选择。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部