《奔跑吧-Linux内核》--- 不服,来跑个分吧
发布日期:2021-06-29 14:51:14
浏览次数:3
分类:技术文章
本文共 2587 字,大约阅读时间需要 8 分钟。
如没有特殊说明,本奔跑卷基于Linux 4.0内核和ARM32/ARM64体系架构。
- 请简述在你所熟悉的处理器中(比如双核\2ortex-A9)一条存储读写指令的执行全过程。 ===> Answer:
- 在一个32KB的4路组相联的cache中,其中cache line为32Byte,请画出这个cache组相联的结构图。 ===> Answer:
- 内核的一级页表和二级页表存放在什么地方?用户进程的一级页表和二级页表分别存放在什么地方? ===> Answer:
- 关于伙伴系统的几个小问题: ❑ 系统初始化时,物理内存页面是如何添加到伙伴系统中的? ❑ 系统运行时间长了物理内存会出现碎片化,伙伴系统如何避免物理内存的碎片化? ===> Answer:
- 关于物理页面内存分配器的几个小问题: ❑ 请简述Linux内核在理想情况下页面分配器(page allocator)是如何分配出连续物理页面的? ❑ 如何从分配掩码中确定可以从哪些zone中分配内存? ❑ 页面分配器是按照什么方向来扫描zone的? ===> Answer:
- 关于slab分配器几个小问题: ❑ slab分配器是如何分配和释放小内存块的? ❑ slab分配器中有一个着色的概念(cache color),着色有什么作用? ❑ slab分配器中的slab对象有没有根据per-cpu做一些优化,为什么? ===> Answer:
- 用户进程使用malloc()来分配10个page大小的内存,请问内核是否马上分配物理内存? 请描述malloc()在内核空间的实现过程。 ===> Answer:
- 关于struct page数据结构的几个小问题: ❑ struct page数据结构中的_count和_mapcount有什么区别? ❑ 匿名页面和文件缓冲页面有什么区别? ❑ trylock_page()和lock_page()有什么区别? ===> Answer:
- 关于页面回收的几个小问题: ❑ LRU链表如何知道page的活动频繁程度? ❑ kswapd是按照什么方向来扫描zone的? ❑ 内核有哪些页面会被kswapd写回到交换分区? ❑ 当page加入到lru链表中,被其他线程释放了这个page,那么lru链表如何知道这个page已经被释放了? ===> Answer:
- 关于内存管理的几个重要的数据结构的关系,如mm、vma、page、vaddr、paddr: ❑ 如何由mm数据结构和虚拟地址vaddr找到对应的VMA? ❑ 如何由page和VMA找到虚拟地址vaddr? ❑ 如何由page找到所有映射的VMA? ❑ 如何由VMA和虚拟地址vaddr,找出相应的page数据结构? ===> Answer:
- 关于缺页中断和虚拟内存的几个小问题: ❑ 如果用户进程使用只读属性(PROT_READ)来mmap映射一个文件到用户空间,然后使用memcpy来写这段内存空间,会是什么样的情况? ❑ 如果多个VMA的虚拟页面同时映射了同一个匿名页面,那么此时page->index应该等于多少? ===> Answer:
- 关于进程的几个小问题: ❑ 在内核中如何获取当前进程的task_struct数据结构? ❑ 下面小代码片段里,最后会打印出什么?
int main(void){ int i; for( i=0; i<2; i++ ){ fork(); printf(" - \n"); } wait(NULL); wait(NULL); return 0;}
❑ 优先级、nice和权重之间有什么关系?
===> Answer:- 关于CFS调度器的几个小问题: ❑ 请简述CFS调度器是如何工作的? ❑ vruntime是如何计算的? ❑ min_vruntime有什么作用? ❑ 对新创建的进程和刚唤醒的进程有何关照? ===> Answer:
- 关于SMP负载均衡的几个小问题: ❑ 普通进程的平均负载load_avg_contrib是如何计算的?runnable_avg_sum和runnable_avg_period是什么含义? ❑ 一个4核处理器里每个物理CPU核有独立L1 cache并且只有一个线程,分成两个簇cluster0和cluster1,每个簇包含两个物理CPU核,簇中的CPU核共享L2 cache。请画出该处理器在Linux内核里调度域和调度组的拓扑关系图。 ===> Answer:
- 关于spinlock的几个小问题: ❑ 为什么spinlock的临界区不能睡眠(不考虑RT-Linux的情况)? ❑ 如果在spin_lock()和spin_unlock()的临界区中发生了中断,并且中断处理程序恰巧也修改了该临界资源,那么会发生什么后果?如何避免? ❑ Ticket-based的spinlock机制是如何实现的?有什么优缺点? ===> Answer:
- 读写信号量使用的自旋等待机制(optimistic spinning)是如何实现的? ===> Answer:
- 关于RCU的几个小问题: ❑ 请解释Quiescent State和Grace Period? ❑ 在mm/oom_kill.c的select_bad_process()函数中为什么要使用rcu_read_lock()? 什么时候注册RCU回调函数呢? ===> Answer:
- 关于中断的几个小问题: ❑ 硬件中断号和Linux内核的IRQ中断号是如何映射的? ❑ 一个硬件中断发生之后,Linux内核是如何响应并处理该中断的? ❑ 为什么说中断上下文不能执行睡眠操作? ===> Answer:
- 关于软中断的几个小问题: ❑ 软中断回调函数的执行过程中是否允许响应本地中断? ❑ 同一类型的软中断是否允许多个CPU并行执行? ❑ 是否允许同一个Tasklet在多个CPU上并行执行?
===> Answer:
- 关于workqueue的几个小问题: ❑ workqueue是运行在中断上下文,还是进程上下文?其回调函数允许睡眠吗? ❑ 如果有多个work挂入到一个工作线程中执行,当某个work的回调函数执行了阻塞操作,那么剩下的work该怎么办? ===> Answer:
转载地址:https://ciellee.blog.csdn.net/article/details/104948546 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月24日 09时08分05秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
基于Java的飞机大战游戏的设计与实现论文
2019-04-29
基于java实现的超级马里奥游戏
2019-04-29
keepalived 实现高可用,负载均衡
2019-04-29
linux发送邮件通知
2019-04-29
linux不删除文件:替换rm命令
2019-04-29
Centos6 搭建lnmp环境
2019-04-29
Hbase优化:使用压缩snappy,lz4
2019-04-29
maven 安装第三方jar包到本地仓库
2019-04-29
hbase数据结构模型
2019-04-29
Shell编程:return 返回脚本调用的状态码
2019-04-29
Hbase Shell 调用java代码:通过比较器,强过滤查询
2019-04-29
Linux防删除,恢复删除
2019-04-29
linux: shell脚本日常功夫
2019-04-29
linux脚本: 批量管理主机
2019-04-29
scala集合类型,函数
2019-04-29
spark: rdd的应用(scala api)
2019-04-29
spark: rdd的应用(java api)
2019-04-29
yarn: 资源调度机制
2019-04-29
spark的shell脚本分析
2019-04-29
推荐算法: 基于用户的协同过滤算法
2019-04-29