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

摘自:https://www.cnblogs.com/hehehaha/archive/2013/05/20/6332767.html

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

答:选B
     Linux 对 NUMA 系统的物理内存分布信息是从系统 firmware 的 ACPI 表中获得的,最重要的是 SRAT(System Resource Affinity Table)和 SLIT(System Locality Information Table)表,其中 SRAT包含两个结构:
     Processor Local APIC/SAPIC Affinity Structure:记录某个 CPU的信息;
     Memory Affinity Structure:记录内存的信息;
SLIT 表则记录了各个结点之间的距离,在系统中由数组 node_distance[ ] 记录。.
e820图:物理内存构成图
bootmem_data:表示物理内存的范围以及分配状态。


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

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

3、内核拥有多种内存分配器,每个分配器有不同的用途和特点。假设系统的页大小为4K,内核分别使用bootmem分配器、SLAB分配器和伙伴算法为一个32.5K的普通数据申请内存时,将分别得到的物理空间大小为()
A、36K,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,则存在32K、64K的通用cache,则此数据占用64K空间
           通用cache未定义大对象cache,则通用cache不满足要求,则调用伙伴算法分配内存.

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

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

答:选C 见下图

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

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

原文地址:https://www.cnblogs.com/LiuYanYGZ/p/14296253.html