快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈
目录
- 一、经典题目
- 1、主要有哪几种内核锁?Linux 内核的同步机制是什么?
- 2、Linux 中的用户模式和内核模式是什么含义?
- 3、怎么申请大块内存?vmalloc 和 kmalloc 有什么区别?
- 4、进程间通信主要有哪几种方式?
- 5、伙伴系统申请内存的函数有哪些?
- 6、通过 slab 分配器申请内存的函数有哪些?
- 7、Linux 的内核空间和用户空间如何划分的?进程地址空间布局图?
- 8、vmalloc() 申请内存有什么特点?
- 9、用户程序使用 malloc() 申请的内存空间在什么范围?
- 10、在支持并使能 MMU 的系统中,Linux 内核和用户程序分别运行在物理地址模式还是虚拟地址模式?
- 11、ARM 处理器是通过几级页表进行存储空间映射的?
- 12、Linux 是通过什么组件来实现支持多种文件系统的?
- 13、Linux虚拟文件系统的关键数据结构有哪些?(至少写出4个)
- 14、对文件系统的操作函数保存在哪个数据结构中?
- 15、Linux 中的文件包括哪些?
- 16、创建进程的系统调用有哪些?
- 17、调用 schedule() 进行进程切换的方式有几种?
- 18、Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的?
- 19、进程调度的核心数据结构是哪个?
- 20、如何加载、卸载一个模块?
- 21、模块和应用程序分别运行在什么空间?
- 22、Linux 中的浮点运算由应用程序实现还是内核实现?
- 23、模块程序能否使用可链接的库函数?
- 24、TLB 中缓存的是什么内容
- 25、Linux 中有哪几种设备?
- 26、字符设备驱动程序的关键数据结构是哪个?
- 27、设备驱动程序包括哪些功能函数?
- 28、如何唯一标识一个设备?
- 29、Linux 通过什么方式实现系统调用?
- 30、Linux 软中断和工作队列的作用是什么?
- 二、带补充
- 三、灵魂的一问
- 三、安全相关
一、经典题目
1、主要有哪几种内核锁?Linux 内核的同步机制是什么?
原子变量
spinlock 自旋锁
信号量semaphore、二值信号量
互斥体mutex
禁止强制、禁止软中断、禁止硬中断
每处理器变量、每处理器计数器、内存屏障
RCU
2、Linux 中的用户模式和内核模式是什么含义?
执行在EL0的用户程序,每个用户程序都有自己的虚拟地址空间
执行在EL1的kernel程序,整个kernel程序使用一个虚拟地址空间
3、怎么申请大块内存?vmalloc 和 kmalloc 有什么区别?
- vmalloc 用于申请大块内存,虚拟地址连续,物理地址不一定连续,不能直接用于DMA,在进程地址空间有专门的一块。
- kmalloc 用于申请小内存,由 slab 管理实现,一般至少小于4KB(page)。不能申请大于128K的数据。物理地址和虚拟地址都连续,可用于DMA操作。
4、进程间通信主要有哪几种方式?
- 管道(Pipe)
- 命名管道(named pipe)
- 信号(Signal)
- 消息(Message)队列
- 共享内存
- 信号量(semaphore)
- 套接字(Socket)
5、伙伴系统申请内存的函数有哪些?
- alloc_page(gfp_mask, order)
- __get_free_pages(gfp_mask, order)
6、通过 slab 分配器申请内存的函数有哪些?
- 自己构造对象:kmem_cache_create/kmem_cache_alloc
- 普通匿名内存申请:kmalloc
7、Linux 的内核空间和用户空间如何划分的?进程地址空间布局图?
8、vmalloc() 申请内存有什么特点?
申请大块内存,虚拟地址连续,物理地址不一定连续,不能直接用于DMA。对于释放函数 vfree()。
9、用户程序使用 malloc() 申请的内存空间在什么范围?
stack 和 heap 中间。小于128M的通过brk申请,大于的通过 mmap 申请
10、在支持并使能 MMU 的系统中,Linux 内核和用户程序分别运行在物理地址模式还是虚拟地址模式?
在开启MMU之后,用户程序和内核程序,都是使用的虚拟地址
11、ARM 处理器是通过几级页表进行存储空间映射的?
L3 L2 L1 L0 L-1
要看你的系统的granue size和虚拟地址有效位的配置
12、Linux 是通过什么组件来实现支持多种文件系统的?
VFS(virtual file system)
13、Linux虚拟文件系统的关键数据结构有哪些?(至少写出4个)
struct super_block
、struct inode
、struct file
、struct dentry
14、对文件系统的操作函数保存在哪个数据结构中?
struct file_operations
15、Linux 中的文件包括哪些?
- 执行文
- 普通文
- 目录文
- 链接文件
- 设备文件
- 管道文件
16、创建进程的系统调用有哪些?
- clone()
- fork()
- vfork();
系统调用服务例程:
- sys_clone
- sys_fork
- sys_vfork;
17、调用 schedule() 进行进程切换的方式有几种?
- 系统调用 do_fork();
- 定时中断 do_timer();
- 唤醒进程 wake_up_process
- 改变进程的调度策略 setscheduler();
- 系统调用礼让 sys_sched_yield();
18、Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的?
Liunx调度程序是根据根据进程的动态优先级来调度进程的,但是动态优先级又是根据静态优先级根据算法计算出来的,两者是两个相关联的值。因为高优先级的进程总是比低优先级的进程先被调度,为防止多个高优先级的进程占用CPU资源,导致其他进程不能占有CPU,所以引用动态优先级概念
19、进程调度的核心数据结构是哪个?
TODO
20、如何加载、卸载一个模块?
insmod xxx.ko
rmmod xxx
21、模块和应用程序分别运行在什么空间?
模块: 内核空间
应用程序: 用户空间
22、Linux 中的浮点运算由应用程序实现还是内核实现?
内核也可以实现,VFPV4架构的,V0-V31寄存器
23、模块程序能否使用可链接的库函数?
模块程序运行在内核空间,不能链接库函数。
24、TLB 中缓存的是什么内容
ASID,物理地址,虚拟地址,NS比特位,MESI位等
25、Linux 中有哪几种设备?
- 字符设备
- 块设备
- 网络设备
26、字符设备驱动程序的关键数据结构是哪个?
字符设备描述符struct cdev
、cdev_alloc()
用于动态的分配cdev描述符,cdev_add()
用于注册一个cdev描述符,cdev包含一个struct kobject
类型的数据结构它是核心的数据结构
27、设备驱动程序包括哪些功能函数?
open()
、,read()
、write()
、llseek()
、realse()
28、如何唯一标识一个设备?
Linux使用一个设备编号来唯一的标示一个设备,设备编号分为:主设备号和次设备号,一般主设备号标示设备对应的驱动程序,次设备号对应设备文件指向的设备,在内核中使用dev_t来表示设备编号,一般它是32位长度,其中12位用于表示主设备号,20位用于表示次设备号,利用MKDEV(int major,int minor);用于生成一个dev_t类型的对象。
29、Linux 通过什么方式实现系统调用?
syscall,底层调用到svc同步异常指令
30、Linux 软中断和工作队列的作用是什么?
实现中断下半部分