1.关于I/O的体系结构说法错误的是(单选):(参考:深入理解LINUX内核,第三版,第十三章,I/O体系结构和设备驱动程序,I/O体系结构小节)
A.PC的I/O体系结构包含的硬件组织层次:I/O端口、接口和设备控制器
B.在I/O端口中,可以把两个连续的8位端口看成一个16位端口,但是这必须从偶数地址开始
C.在I/O端口中,可以把两个连续的16位端口看成一个32位端口,但是这必须是从4的整数倍地址开始
D.I/O接口分为:专用I/O接口和通用I/O接口;网络接口属于通用的I/O接口
答案:D
试题解析:专用I/O接口是专门用于一个特定的硬件设备。连接到专用I/O接口上的设备可以是内部设备,也可以是外部设备
通用I/O接口是用来连接多个不同的硬件设备。连接到通用I/O接口上的设备通常都是外部设备
专用的I/O接口包括:键盘接口、图形接口、磁盘接口、总线鼠标接口、网络接口等
通用的I/O接口包括:并口、串口、PCMCIA接口、SCSI接口、通用串行总线(USB)等
2.sysfs文件系统的目标是要展现设备驱动程序模型组件的层次关系,该文件系统的相应高层目录包括(多选):(参考:深入理解LINUX内核,第三版,第十三章,I/O体系结构和设备驱动程序,设备驱动程序模型小节)
A.block 、devices
B.bus 、drivers
C.class 、net
D.firmware 、power
答案:A、B、D
试题解析:block:块设备,它们独立于所连接的总线
devices:所有被内核识别的硬件设备,依照连接它们的总线对其进行组织
bus:系统中用于连接设备的总线
drivers:在内核中注册的设备驱动程序
class:系统中设备的类型(声卡、网卡、显卡等等)
power:处理一些硬件设备电源状态的文件
firmware:处理一些硬件设备的固件的文件
net是linux系统根目录下的目录,不包含在sysfs文件系统中
3.Linux 2.6中增加了设备号的编码大小是(单选):(参考:深入理解LINUX内核,第三版,第十三章,I/O体系结构和设备驱动程序,设备文件小节)
A.主设备号的编码为8位,次设备号的编码为8位
B.主设备号的编码为12位,次设备号的编码为12位
C.主设备号的编码为12位,次设备号的编码为20位
D.主设备号的编码为20位,次设备号的编码为12位
答案:C
试题解析:Linux的早期版本中,设备文件的主设备号和次设备号都是8位长;但是如今各种不同的硬件设备数量惊人,几乎分配了所有的设备号,导致设备号远远不够用。
设备号如果要进行扩展,需要改变内核源代码,使得系统难以维护;
为了解决这个问题,Linux 2.6 增加了设备号的编码大小:目前主设备号的编码为12位,次设备号编码为20位
4.对于设备驱动程序,描述正确是(多选):(参考:深入理解LINUX内核,第三版,第十三章,I/O体系结构和设备驱动程序,设备驱动程序小节)
A.初始化驱动程序意味着分配宝贵的系统资源,这些资源因此就对其他驱动程序不可用了
B.监控I/O操作结束的两种可用技术分别称为轮询模式和中断模式
C.设备驱动程序采用两种方式使用DMA:同步DMA和异步DMA。声卡就是采用异步DMA传送的
D.不同的总线具有相同的总线地址大小
答案:A、B
试题解析:同步DMA方式,数据的传送是由进程触发的;异步DMA方式,数据的传送是由硬件设备触发的。声卡是采用同步DMA传送的,网卡是采用异步DMA传送的。
不同的总线具有不同的总线地址大小。例如:ISA的总线地址是24位长;原来的PCI标准定义了32位的总线地址;新的PCI-X采用了64位的总线地址
5.对于标准I/O库提供的缓冲,描述错误是(单选):(参考:UNIX环境高级编程,第2版,5.4缓存小节)
A.标准I/O提供三种类型的缓冲:全缓冲、行缓冲、不带缓冲
B.当且仅当标准输入和标准输入并不涉及交互式设备时,它们才是全缓冲
C.行缓冲只有在写了一行之后才进行实际I/O操作,没有其它限制
D.如若是涉及终端设备的其他流,则它们是行缓冲;否则是全缓冲
答案:C
试题解析:对于行缓冲有两个限制。第一,因为标准I/O库用来收集每一行的缓冲区的长度是固定的,所有只要填满了缓冲区,那么即使还没有写一个换行符,也可以进行I/O操作。
第二,任何时候只要通过标准I/O库要求从(a)一个不带缓冲的流,或者(b)一个行缓冲的流(要求从内核得到数据)得到输入数据,那么就会造成冲洗所有行缓冲输出流