• 华为内部面试题库(3)


    1NUMA系统中,各个节点间的距离由下列哪个数据结构获取()
    ASRAT
    B
    SLIT
    C
    e820

    D
    bootmem_data

    答:选B
         Linux NUMA 系统的物理内存分布信息是从系统 firmware ACPI 表中获得的,
    最重要的是 SRATSystem Resource Affinity Table)和 SLITSystem Locality Information Table)表,其中 SRAT包含两个结构:
         Processor Local APIC/SAPIC Affinity Structure:记录某个 CPU的信息;
         Memory Affinity Structure:记录内存的信息;

    SLIT 表则记录了各个结点之间的距离,在系统中由数组 node_distance[ ] 记录。
    .
    e820图:物理内存构成图

    bootmem_data:表示物理内存的范围以及分配状态。


    2
    、假设一个NUMA系统中有4个节点ABCD,相互之间的距离都为15,且BC已无空闲内存。进程P运行在节点B上,对进程P指定MPOL_BIND分配策略使其在节点C上分配内存。进程分别在指定分配策略前后申请内存,则获取的内存分别处于哪个节点()
    ADD
    B
    A,无法申请内存

    C
    AA
    D
    D,无法申请内存

    答:选D
       在NUMA中,每个节点在自己的节点描述结构中通过zonelist将所有节点组成一个链表,对于B节点来说,
    zonelist的顺序为B->C->D->A
         MPOL_BIND: 从指定的一组节点分配,若未成功,则返回错误。
         MPOL_DEFAULT: 默认模式,即就近原则,从本节点分配,若未成功,则从最近节点分配,直到满足要求。使用每个zonezonelist查找最近的zone
       所以:在指定MPOL_BIND策略前,是默认策略,而C已经没有内存,则从D分配内存,指定MPOL_BIND策略后,由于C已经没有空闲内存,则返回错误。

     

    3、内核拥有多种内存分配器,每个分配器有不同的用途和特点。假设系统的页大小为4K,内核分别使用bootmem分配器、SLAB分配器和伙伴算法为一个32.5K的普通数据申请内存时,将分别得到的物理空间大小为()
    A36K,32.5K,64K
    B
    64K,64K,36K
    C
    36K,64K,64K
    D
    33K,36K,128K

    答:选C
         bootmem分配器:是按页大小的整数倍分配内存,而大于32.5K的最小值为
    36K = 4*9K;
       伙伴算法:2的整数次幂分配内存,而大于32.5K的最小值是
    64K = 2^4 *4K;
        SLAB分配器:普通数据采用SLAB分配会使用通用cache分配对象,有两种情况:

               通用cache定义了大对象cache,则存在32K64K的通用cache,则此数据占用64K空间
               通用cache未定义大对象cache,则通用cache不满足要求,则调用伙伴算法分配内存.

    1bootmem分配器为linux启动时初始化阶段使用的内存分配器,它以一个page为单位进行分配,用位图进行记录,比如一个bit表示一个page是否被分配出去(分配出去的话置1),一个byte能表示8page
    1page=4kb32.5kbpage对齐后为36kb
    2、系统初始化完了之后,销毁bootmem分配器(由于功能和效果太差),启用伙伴算法分配器(大块内存分配,通常为几个page)和slab分配器(小块内存分配,通常为几个字节),slab是建立在伙伴算法之下的,其最终还是调用伙伴算法,比如先从伙伴算法申请一个page,然后再对这个page进行细分后分配几个字节出去。目前linux中有slabslubslob三种,其基本原理类似,只是分配出去字节的大小略有不同。
    3slab分配器的对象大小范围一般为32b - 128kb,都为指数次幂增长,因此对于32.5k来说取64kb
    4、伙伴算法分配器的分配大小为:2^0 - 2^10page,即4196b - 4M大小,对于32.5kpage的指数次幂对齐后为64kb

     

    4、分页映射中,不用级别的页表的属性位可以控制对应物理页的访问权限。现内存页A对应的页表中的属性为:PGD表中的U/S位为1R/W位为0PT表中的U/S0R/W位为1。则这个物理页分别对于用户态和内核态的访问权限为()
    A、用户态:可读, 可写;   内核态:可读,可写
    B
    、用户态:可读, 不可写; 内核态:可读,不可写
    C
    、用户态:不可读,不可写; 内核态:可读,可写
    D
    、用户态:不可读,不可写; 内核态:不可读,不可写

    答:选C 见下图

    允许级别3表示用户态,允许级别0表示内核态
    当通过分页机制寻址到PGDU/S位为1 R/W位为0表示用户态可读不可写,内核态可读可写
    当寻址到PTU/S0R/W位为1      表示内核态可读可写,用户态不可访问
    内核态的访问不受页表属性位的限制

     

    5、内核模块加载时,将使用哪种内存分配方式,以及虚拟地址和物理地址的映射关系为()
    Avmalloc,非对等映射
    B
    kmalloc,对等映射
    C
    malloc,对等映射
    D
    malloc,非对等映射

    答:选A
    X86架构下,内核模块加载到ffffffffa0000000-fffffffffff00000(=1536 MB) module mapping space。该块内存区域属于非对等映射区

    是通过vmalloc分配的。
    IA64结构下,内核模块加载a000000000000000-c000000000000000,属于第5区,采用内核页表映射,即非对等映射,通过vmalloc分配。

  • 相关阅读:
    30 字符编码
    Xilinx Vivado的使用详细介绍(3):使用IP核
    Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真
    Vivado SDK ,调用math.h函数的时候出现 undefined reference to `xxx' ,解决方案
    Xilinx Vivado的使用详细介绍(4):Zedboard+vivado之流水灯(加SDK)
    xilinx Vivado的使用详细介绍(2):创建工程、添加文件、综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证
    no.4
    no.5
    关于贪心算法
    关于三角形把平面分成几块的问题
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332767.html
Copyright © 2020-2023  润新知