Linux 面试专题及答案【三】

文章详细介绍了Linux系统中的核心数据结构,如进程调度的structrunqueue,以及模块的加载与卸载机制。讨论了模块与应用程序的空间区别,指出模块运行在内核空间,应用在用户空间,并解释了Linux中浮点运算由应用程序通过库函数实现。此外,还涉及TLB的作用、设备类型、字符设备驱动的关键数据结构以及设备驱动程序的主要功能函数。最后,文章提到了设备的唯一标识——设备编号,包括主设备号和次设备号。
摘要由CSDN通过智能技术生成

12) 进程调度的核心数据结构是哪个?

struct runqueue

13) 如何加载、卸载一个模块?

insmod 加载,rmmod 卸载

14) 模块和应用程序分别运行在什么空间?

模块运行在内核空间,应用程序运行在用户空间

15) Linux 中的浮点运算由应用程序实现还是内核实现?

应用程序实现,Linux 中的浮点运算是利用数学库函数实现的,库函数能够被应用程序链接后

调用,不能被内核链接调用。这些运算是在应用程序中运行的,然后再把结果反馈给系统。

Linux 内核如果一定要进行浮点运算,需要在建立内核时选上 math-emu,使用软件模拟计算

浮点运算,据说这样做的代价有两个:用户在安装驱动时需要重建内核,可能会影响到其他的

应用程序,使得这些应用程序在做浮点运算的时候也使用 math-emu,大大的降低了效率。

16) 模块程序能否使用可链接的库函数?

模块程序运行在内核空间,不能链接库函数。

17) TLB 中缓存的是什么内容?

TLB,页表缓存,当线性地址被第一次转换成物理地址的时候,将线性地址和物理地址的对应

放到 TLB 中,用于下次访问这个线性地址时,加快转换速度。

18) Linux 中有哪几种设备?

字符设备和块设备。网卡是例外,他不直接与设备文件对应,mknod 系统调用用来创建设备

文件。

19) 字符设备驱动程序的关键数据结构是哪个?

字符设备描述符 struct cdev,cdev_alloc()用于动态的分配 cdev 描述符,cdev_add()用于注

册一个 cdev 描述符,cdev 包含一个 struct kobject 类型的数据结构它是核心的数据结构

20) 设备驱动程序包括哪些功能函数?

open(),read(),write(),llseek(),realse();

21) 如何唯一标识一个设备?

Linux 使用一个设备编号来唯一的标示一个设备,设备编号分为:主设备号和次设备号,一般主

设备号标示设备对应的驱动程序,次设备号对应设备文件指向的设备,在内核中使用 dev_t 来

表示设备编号,一般它是 32 位长度,其中 12 位用于表示主设备号,20 位用于表示次设备号,

利用 MKDEV(int major,int minor);用于生成一个 dev_t 类型的对象。

想要了解更多Java基础知识,可以点击评论区链接和小编一起学习java吧,此视频教程为初学者而著,零基础入门篇! 给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值