# Linux Dri Dev 期末考试简答题

Linux Dri Dev 期末考试

简答题

  1. 名字相同的不同函数的区别。
    kmalloc函数与vmalloc函数的区别

    来自CSDN
    kmalloc()
    用于申请较小的、连续的物理内存

    1. 以字节为单位进行分配,在<linux/slab.h>中
    2. void *kmalloc(size_t size, int flags) 分配的内存物理地址上连续,虚拟>地址上自然连续
    3. gfp_mask标志:什么时候使用哪种标志?如下:
      ———————————————————————————————-
      情形 相应标志
      ———————————————————————————————-
      进程上下文,可以睡眠 GFP_KERNEL
      进程上下文,不可以睡眠 GFP_ATOMIC
      中断处理程序 GFP_ATOMIC
      软中断 GFP_ATOMIC
      Tasklet GFP_ATOMIC
      用于DMA的内存,可以睡眠 GFP_DMA | GFP_KERNEL
      用于DMA的内存,不可以睡眠 GFP_DMA | GFP_ATOMIC
      ———————————————————————————————-
    4. void kfree(const void *ptr)
      释放由kmalloc()分配出来的内存块

    vmalloc()
    用于申请较大的内存空间,虚拟内存是连续的

    1. 以字节为单位进行分配,在<linux/vmalloc.h>中
    2. void *vmalloc(unsigned long size) 分配的内存虚拟地址上连续,物理地址>不连续
    3. 一般情况下,只有硬件设备才需要物理地址连续的内存,因为硬件设备往往存在于>MMU之外,根本不了解虚拟地址;但为了性能上的考虑,内核中一般使用 kmalloc()>,而只有在需要获得大块内存时才使用vmalloc(),例如当模块被动态加载到内核当>中时,就把模块装载到由vmalloc()分配 的内存上。
    4. void vfree(void *addr),这个函数可以睡眠,因此不能从中断上下文调用。

    malloc(), vmalloc()和kmalloc()区别

    • kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存
    • kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的>连续,malloc不保证任何东西(这点是自己猜测的,不一定正确)
    • kmalloc能分配的大小有限,vmalloc和malloc能分配的大小相对较大
    • 内存只有在要被DMA访问的时候才需要物理上连续
    • vmalloc比kmalloc要慢
  2. 在Linux驱动当中引入模块机制,模块机制是什么,有什么好处。

    以下来自百度
    模块化机制(module)是Linux系统的一大创新,是linux驱动开发和运行的基础(当然,module并不仅仅是支撑驱动)。其优点在于:

    1.在系统运行动态加载模块,扩充内核的功能。不需要时可以卸载。
    2.修改内核功能,不必重新全部编译整改内核,只需要编译相应模块即可。
    3.模块目标代码一旦被加载重定位到内核,其作用域和静态链接的代码完全等价。

    以下来自书本
    模块是可以在运行时加入内核的代码,这是 Linux一个很好的特性.
    这个特性使内核可以很容易地扩大或者缩小,一方面扩大内核可以增加内核的功能,另一方面缩小内核可以减小内核的大小.

  3. Linux设备包含那三个方面?字符,块设备,网络设备,字符和块的区别,字符设备与块设备的举例。

    以下来自ppt
    Linux系统将设备分为3种类型:字符设备、块设备和网络接口设备。其中字符设备和块设备难以区分,这里将对其进行重要讲解。
    1.字符设备
    2.块设备
    3.字符设备和块设备的区分

    以下来自书本6.1
    6.1.1字符设备和块设备
    Linux系统将设备分为3种类型:字符设备、块设备和网络接口设备.
    其中字符设备和块设备难以区分,下面将对其进行重要讲解
    1.字符设备
    字符设备是指那些只能一个字节一个字节读写数据的设备,不能随机读取设备内存中的某一数据.其读取数据需要按照先后顺序,从这点来看,字符设备是面向数据流的设备.常见的字符有鼠标、键盘、串口、控制台和LED等设备
    2.块设备块
    设备是指那些可以从设备的任意位置读取一定长度数据的设备.其读取数据不必按照先后顺序,可以定位到设备的某一具体位置,读取数据.常见的块设备有硬盘、磁盘、 U盘、SD卡等.

  4. 一个字符的驱动编译到内核中主要步骤。

    以下来自网页
    第一步:准备module源代码,根据实际情况,在内核目录的相应位置新建相应文件夹,并将源代码拷贝进去
    第二步:在该相应目录下与上一级目录中,编写Kconfig文件,构成完整的Kconfig树
    第三步:在该相应目录下与上一级目录中,编写配套Makefile文件,使Kconfig文件生效
    第四步:在内核根目录下编译安装(make make install)

  5. Linux内核中并发有哪些机制,有哪些原因,避免并发的方式和机制。

    来自ppt
    并发是指在操作系统中,一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。并发容易导致竞争的问题。竞争就是两个或者两个以上的进程同时访问一个资源,从而引起资源的错误。

    来自书本
    避免并发的方式和机制
    1.原子变量操作
    2.自旋锁机制
    3.信号量机制
    4.完成量机制

  6. 交叉编译环境安装。

    来自百度百科
    交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。

    来自csdn
    交叉编译环境搭建

  7. 创建完模块以后,如何创建一个设备,关键参数解释。

    来自网页(不确定正确与否)
    1) void cdev_init(struct cdev *cdev, struct file_operations *fops)
    该注册函数可以将cdev结构嵌入到自己的设备特定的结构中。cdev是一个指向结构体cdev的指针,而fops是指向一个类似于file_operations结构(可以是file_operations结构,但不限于该结构)的指针.

  8. 中断与DMA的区别。常见中断服务有哪些?如果中断之后有哪些事情要做。中断处理函数做了哪些事情。

    中断与DMA的区别

    来自网页
    DMA:是一种无须CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制,使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率.

    中断:是指CPU在执行程序的过程中,出现了某些突发事件时CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU又返回源程序被中断的位置并继续执行。

    所以中断和DMA的区别就是DMA不需CPU参与而中断是需要CPU参与的。

    来自网页
    1、中断方式是在数据缓冲寄存区满后,发中断请求,CPU进行中断处理,DMA方式则是以数据块为单位传输的,在所要求传送的数据块全部传送结束时要求CPU进行中断处理,这样大大减少CPU进行中断处理的次数
    DMA方式不需CPU干预传送操作,不占用CPU任何资源,中断方式是程序切换,每次操作需要保护和恢复现场,中断次数多,CPU需要花较多的时间处理中断,中断次数多也会导致数据丢失。
    2、中断方式的数据传送方向是由设备到CPU再到内存,或者相反。
    DMA方式的数据传送则是将所传输的数据由设备直接送入内存,或是由内存直接送到设备。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值