文章目录
-
- 嵌入式软件工程师面试题目整理(二)
-
- linux中内核空间及用户空间的区别?用户空间与内核通信方式有哪些?
- 字符设备和块设备的区别,请分别列举一些实际的设备说出它们是属于哪一类设备
- linux中系统调用过程?如:应用程序中read()在linux中执行过程即从用户空间到内核空间?
- 查看驱动模块中打印信息应该使用什么命令?如何查看内核中已有的字符设备的信息?如何查看正在使用的有哪些中断号?
- copy_to_user()和copy_from_user()主要用于实现什么功能?一般用于file_operations结构的哪些函数里面?
- 请简述主设备号和次设备号的用途。如果执行mknod chartest c 4 64,创建chartest设备。请分析chartest使用的是那一类设备驱动程序。
- 设备驱动程序中如何注册一个字符设备?分别解释一下它的几个参数的含义。
- 字符型驱动设备怎么创建设备文件?
- insmod 一个驱动模块,会执行模块中的哪个函数?rmmod呢?这两个函数在设计上要注意哪些?遇到过卸载驱动出现异常没?是什么问题引起的?
- 设备驱动模型三个重要成员是?platform总线的匹配规则是?在具体应用上要不要先注册驱动再注册设备?有先后顺序没?
- 内核函数mmap的实现原理,机制?
- 申请内存的方式
- IIC原理,总线框架,设备编写方法
- Linux中的用户模式和内核模式是什么含意
- 怎样申请大块内核内存?
- 用户进程间通信主要哪几种方式
- 内核配置编译及Makefile?
- 谈谈对Volatile关键字的理解
- framebuffer机制
- spinlock与信号量的区别
- linux中的同步机制
- 自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋锁还是信号量?还是两者都能用?为什么?
- 驱动里面为什么要有并发、互斥的控制?如何实现?讲个例子?
- linux中断实现机制、tasklet和workqueue的区别和底层实现的区别,为什么要区分中断上半部和中断下半部
- 中断和轮询哪个效率高?怎样决定是采用中断方式还是采用轮询方式去实现驱动?
- 写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?
- IRQ和FIQ有什么区别,在CPU里面是是怎么做的?
- Linux软中断和工作队列的作用是什么
嵌入式软件工程师面试题目整理(二)
linux中内核空间及用户空间的区别?用户空间与内核通信方式有哪些?
区别:
1.内和空间和用户空间的划分
Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G.Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为"内核空间".而将较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为"用户空间)。因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。
2.存储内容不同
内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟空间中。
下面总结了7种方式,主要对以前不是很熟悉的方式做了编程实现,以便加深印象。
3.其他
内核空间和用户空间上不同太多了,说不完,比如用户态的链表和内核链表不一样;用户态用printf,内核态用printk;用户态每个应用程序空间是虚拟的,相对独立的,内核态中却不是独立的,所以编程要非常小心。等等。
用户空间与内核通信方式