华为内部面试题库---(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分配。

posted on 2013-05-20 10:50  胡永光  阅读(167)  评论(0编辑  收藏  举报

导航