1. 最新linux内核对普通进程使用的调度算法是(C) //http://www.ibm.com/developerworks/cn/linux/l-cn-scheduler/index.html
A O(N)
B O(1)
C CFS
D BFS
2. 下面对linux进程调度说法错误的是(A) //深入理解linux内核P258-P262
A 进程调度针对系统中的所有进程;
B linux把进程分成140个优先级,0-99为实时进程,100-139为普通进程;
C 当没有可运行的进程时,内核会选择idle进程;
D 进程调度需要尽量提高交互式进程的响应时间和批处理进程的吞吐量;
3. 下面关于进程抢占说法错误的是(D) //深入理解linux内核P260-P261
A linux支持内核抢占,即进程在内核态同样可能被抢占
B CFS、RR是可抢占的调度算法,FIFO不是
C 抢占能够提高响应时间
D 抢占能够提高吞吐量
4. 下面对于linux进程切换错误的是(B) ////深入理解linux内核P270-P277
A 在单cpu上,通过进程切换只能实现表面上的并行
B 进程切换能够发生在中断上下文
C 进程可以主动调用schedule函数进行切换
D schedule函数可以在中断、异常或者系统调用返回的时候调用;
5. 下面说法错误的是(D) ////深入inux内核架构P67-P96
A linux中绝大多数进程都是普通进程,实时进程很少
B linux通过调度类的方法来实现不同的进程采用不同的调度算法
C CFS采用红黑树的数据结构来组织相应的进程
D 只有在时钟中断中才会判断是否抢占当前进程
6. 关于运行队列rq错误的是(C)//深入理解linux内核P284-P285
A 系统中如果只有一个运行队列,则不需要负载均衡
B 多个运行队列可以减少竞争
C linux系统中只有一个运行队列
D linux系统中每个cpu都有一个运行队列
7. 在进程迁移的时候,需要考虑(D)//深入理解linux内核P286-P288
A 进程的亲缘性
B 节能
C cpu间负载的不均衡性
D 以上全部
8. 关于调度域和调度组说法错误的是(B)//深入理解linux内核P286-P288
A 由于目前很多系统中cpu有不同的拓扑结构,因此linux引入了调度域和调度组
B 调度组的每个cpu都会进行负载均衡
C 上层调度域包含下层调度域
D 越下面的调度域层,负载均衡越频繁
9. 下面哪个内核线程和进程迁移有关(C) //深入inux内核架构P99-P100
A kthreadd
B ksoftirqd
C migration
D kjournald
10. 下列说法错误的是(B)
A 用户可以通过taskset或者sched_setaffinity把某个进程绑定到一个或者多个cpu上
B 所个cpu都共享同一个时钟中断源来触发进程调度和迁移
C 进程迁移的时候需要同时获取本地rq和目标rq的锁来保证数据的一致性
D 进程从一个cpu迁移到另一个cpu需要同时考虑负载的不均衡性以及迁移的代价
11.操作系统微内核、宏内核有关说法错误的是:(C)
A.微内核操作系统采用C/S结构,是客户端与服务器进程之间的信息中转站,消息通过内核转发,
即采用了进程间通信机制(IPC),其特点是开销较小。
B.微内核较小,移植性好,并不直接依赖硬件。典型系统有windows NT,Mac OS系统。
C.宏内核是包含所有子系统的单个二进制文件,处于同一内存地址空间,内核之间可以直接调用函数,用户态只能通过系统调用访问内核。
解析:(特点:开销较小,移植性高,并不依赖硬件。宏内核包括所有子系统代码(内存管理、文件系统、设备驱动、网络、内存)都打包到一个子系统中,模块耦合度较高,动态内核方式添加到内核。支持热拔插等,特点:性能较好,修改与维护成本高。)
D.宏内核性能较好,允许内核模块的插入与删除,支持模块的热拔插、动态装载过程。
-- 深入理解linux内核架构——第一章 linux内核设计与实现——第十六章
12.有关内核模块说法错误的是:(B)
A.内核模块代码由相关的子例程、数据、函数入口和函数出口等组成。
B.内核模块只能存在内核源代码树中,不能单独存在。解析:(模块之间存在相互依赖关系,在/lib/module/kernel-*-*/modules.dep中定义了模块之间的依赖关系,一个内核模块的函数,可以被其他模块引用,但引用之间必须声明EXPORT_SYMBOL()、EXPORT_SYMBOL_GPL())
C.内核模块之间存在依赖,可以在相关内核模块目录中modules.dep文件制定
依赖关系,也可以通过modprobe自动解析模块的依赖关系。
D.内核模块的函数必须导出才能被其他内核模块函数调用,即通过EXPORT_SYMBOL()、
EXPORT_SYMBOL_GPL()来实现模块代码的链接和调用。
-- linux内核设计与实现——第十六章
13.有关内核模块操作说法错误的是:(D)
A.modulename_init()函数是模块的入口点,通过module_init(modulename_init)例程注册
到系统中,在模块装载时调用。
B.modulename_exit()函数是模块的出口点,通过module_exit(modulename_exit)例程注册
到系统,在模块拆卸时调用。
C.内核模块的拆卸、装载是通过内核守护进程kmod自动来实现。
D.不同操作系统支持不同的MODULE_LICENSE()模块的版权。对于申明了版权的外来模块,都可以
插入到系统内核中。解析:(moudule_exit()模块拆卸时调用,指明其是模块拆卸点。其模块的拆卸与装载都是内核守护进程自动实现。不同操作系统支持不同的MODULE_LICENSE()模块的版权,同事内核ko之间组件module_init_tools会指明是否支持内核外部模块,例如suse的在系统模块配置/etc/modprobe.d/unsupported-modules(suse为例),标志位为0,不允许非suse内核模块的用户开发的内核模块插入。)
-- linux内核设计与实现——第十六章
14.有关内核模块依赖说法错误的是:(B)
A.模块B依赖于模块A,除非模块A已经驻留在内核内存中,否则模块B无法装载。
B.模块B引用于模块A,如果模块A已经移除,模块B无法从内核移除。解析:(在代码中使用EXPORT_SYMBOL),这种服务被称作"symbols"。若第二个模块使用了这个symbol,则该模块很明显依赖于第一个模块。模块B依赖于模块A,除非模块A已经驻留在内核内存中,否则模块B无法装载。模块B引用于模块A,除非模块B已经移除,否则模块A无法从内核移除。内核通过数据结构module_use数据单链表来表示模块之间的依赖关系。内核之间的依赖关系,如果insmod出错,在depmod更新依赖关系后,可以通过modprobe自动解析依赖关系,或者通过dmesg自动解析依赖关系。)
C.内核通过数据结构module_use数据单链表来表示模块之间的依赖关系。
D.如果产生内核依赖问题导致的依赖关系,可以查看dmesg来modprobe来决定其
依赖关系。
-- 深入理解linux内核架构——第7章
15. 有关内核模块生成过程说法错误的是:(D)
A.某个内核模块所有源代码编译成.o目标文件。
B.模块产生目标文件后,内核分析其附加信息(模块依赖关系等),也编译为一个二进制文件。
C.将上述产生两种文件链接起来,保存为最后的ko文件。
D.内核模块只需要所有内核头文件的支持。-- 深入理解linux内核架构——第7章
解析:( 内核模块的编译,各个模块代码都可以编译成.o目标文件,同时对于内核分析其附加信息(模块依赖关系等),也编译为一个二进制文件,上述文件同时链接起来,最后保留ko文件,内核模块编译需要内核头文件, 编译源码生成头文件的支持,符号表等信息的支持。