文章目录
-
- 嵌入式软件工程师面试题目整理(五)
-
- linux中内核空间及用户空间的区别
- 用户空间与内核通信方式有哪些
- linux中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化,高端内存概念
- linux中中断的实现机制,tasklet与workqueue的区别及底层实现区别?为什么要区分上半部和下半部
- linux中断的响应执行流程
- 谈谈Linux的同步机制
- /dev/下面的设备文件是怎么创建出来的
- 原子操作该怎么理解
- insmod一个驱动模块,会执行模块中的哪个函数?rmmod呢?这两个函数在设计上要注意哪些?遇到过卸载驱动出现异常没?是什么问题引起的?
- 在驱动调试过程中遇到过oops没?你是怎么处理的
- ioctl和unlock_ioctl有什么区别
- 驱动中操作物理绝对地址为什么要先ioremap
- 设备驱动模型三个重要成员是?platfoem总线的匹配规则是?在具体应用上要不要先注册驱动再注册设备?有先后顺序没
- linux中RCU原理
- 谈谈Linux软中断
- linux中系统调用过程
- 谈谈Linux调度原理
- 谈谈对Linux网络子系统的认识
- 内核中申请内存有哪几个函数?有什么区别
- 谈谈内核函数mmap的实现机制
嵌入式软件工程师面试题目整理(五)
linux中内核空间及用户空间的区别
见Linux部分
用户空间与内核通信方式有哪些
见Linux部分
linux中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化,高端内存概念
答:以32位机器为例,cpu最大寻址范围为4G,Linux系统将4G虚拟地址空间划分为高1G,低3G,低3G虚拟空间属于用户空间,都是经过映射的线性地址,供用户进程空间使用,高1G并非都是像用户空间一样都是映射过的线性空间,Linux系统将高1G划分为三部分,DMA区,常规区,高端内存,其中0-896都是映射过的线性空间,剩下的896-1024即高端内存,这段高端内存都是未经过映射的虚拟地址,Linux系统利用这些有限的虚拟地址,临时动态的映射到大于896M的物理空间地址,实现了利用有限的虚拟地址访问到物理内存的所有地址。malloc用于用户空间进程申请内存空间,kmallc和vmalloc在内核空间使用,kmalloc申请到的内存空间,是线性连续的,可以用于dma。vmalloc申请的内存是逻辑连续