没有合适的资源?快使用搜索试试~ 我知道了~
首页DIM-SUM内核开发问题与解答:从内存管理到MD5验证
DIM-SUM内核开发问题与解答:从内存管理到MD5验证
需积分: 0 1 下载量 136 浏览量
更新于2024-06-17
收藏 102KB DOCX 举报
本文件是一份关于DIM-SUM操作系统内核开发的详尽指南,涵盖了内存管理、文件系统、中断处理、多核同步等多个核心模块。作者强调了在Linux环境下进行代码阅读和调试的重要性,推荐使用像SourceInsight或VSCode这样的工具,以及Linux丰富的应用软件来支持开发过程。 在内存管理部分,作者并未在书中提供所有代码,而是鼓励读者在实践中深入学习。通过阅读和分析源代码,开发者可以理解内存分配和管理的原理,这对于构建高效的操作系统至关重要。 MD5值在软件包验证中扮演着重要角色,不仅用于确认软件包的完整性,防止下载错误或恶意篡改,还用来确保DIM-SUM操作系统的代码版权,防止未经授权的复制。作者重视版权保护和开发者权益。 对于没有Linux环境的读者,作者建议可以在虚拟机中安装Ubuntu作为实验平台,如Ubuntu 16.04,这样可以避免直接烧写USB的问题,并指出dd命令的使用教程可参考基础Linux教材或在线资源。 关于目录设置,作者指出hot-pot目录的选择是灵活的,只要正确配置和解压源码,其他目录同样可以进行开发。然而,由于编译命令的复杂性,作者没有深入解释,因为这超出了本书的主题范围,鼓励有兴趣的读者或专业人员进一步研究和贡献。 最后,提到的镜像大小超过1M是为了支持快速调试,可能包含大量的测试数据和全局变量。这表明作者注重的是实际操作体验和性能优化,而非单纯追求镜像的轻量化。 这份文档为DIM-SUM内核开发者提供了实用的指导,强调实践操作和代码理解的重要性,适合对操作系统内核开发有深入探究欲望的专业人士和学生。
资源详情
资源推荐
22
结论,硬件设计者不会做一些简单的公平性保证?
答:在已知架构中,硬件设计者没有这样的公平性保证。这种公平性问题确实存在。这也是
windows 内核、高版本的 Linux 内核实现了排队自旋锁的原因。
作者在工程实践中,确实碰到过这样的问题。特别是在支持 NUMA 的机型中,处于同一
SOCKET 的 CPU,更容易获得相邻 CPU 释放的自旋锁。导致相邻 SOCKET 中的 CPU 出现饥饿
现象。
小问题 3.29:smp_lock_is_locked 判断自旋锁是否处于锁定状态,这里有一个疑问:在判断
的过程中,自旋锁可能会被其他 CPU 不停的获取/释放,并且由于缓存一致性的原因,这里的判
断结果并不一定可靠。这样的 API 有何用处?
答:这样的 API 仅仅应当用于调试目的。
小问题 3.30:假设在 smp_lock 中,不关闭抢占,会有什么后果?
答:如果不关闭抢占,而当前获取自旋锁的线程飘移到其他 CPU 核,或者在当前 CPU 核中
被高优先级线程抢占,都可能导致锁被长时间持有,导致其他 CPU 核长时间处于等待状态。严重
的时候形成死锁。
小问题 3.31:实际上,arch_smp_unlock 的实现有好几处值得仔细推敲的地方,聪明的读者
看出其中的微妙之处了吗?
答:首先,需要在更改 owner 字段之后再修改抢占计数。因此二者之间需要有编译屏障。其
次,arch_smp_unlock 并没有使用 smp_mb,这可能会导致多核之间的数据一致性问题。这实际上
很违反直觉。
读者应当细心的琢磨锁的三原则。特别是要注意:获取锁、释放锁的 API 如何形成完整的内
存屏障。
小问题 3.32:怎么没有类似于 smp_lock_init 这样的初始化锁的接口?
答:因为无法对整型数据的某一位进行初始化。如果有读者想到好的方法初始化某一位的值,
请告诉作者。
小问题 3.33:test_bit 并没有任何编译屏障/内存屏障的东西,作者你是不是搞错了?
答:不管是自旋锁还是自锁位锁,在读取锁状态时,都不需要编译屏障、内存屏障。因为它
并没有影响锁的值,并且仅仅使用读屏障并没有合理的理由。
这听起来不可思议,然而值得读者仔细琢磨。
小问题 3.34:另一个重要的问题是:这个 API 到底拿来做什么?
答:这个 API 仅仅应当作为调试使用。
小问题 3.35:不熟悉 CPU 架构的读者,需要补充一下硬件线程相关背景知识?这里的线程
和 posix 线程是两个概念。
答:硬件线程和软件线程是不相关的概念。硬件线程更象是 x86 架构中的超线程。但是不同
的架构,有其独特的硬件线程实现,并不完全等同于超线程。
小问题 3.36:第 6/8 行的关闭/打开抢占比较繁琐,有这个必要吗?自旋锁的实现就没有这些
实现。
答:关闭、打开抢占是轻量级的调用,但是它可以提高系统实时性。在实时性系统中这是有
必要的。在非实时系统中,这两个调用就是空的实现,因而也是无害的。
自旋锁不应当产生较多的争抢,而自旋位锁的争抢更多,因此需要加上这两行调用。
小问题 3.37:为什么在失败的情况下,第 12 行是跳转到第 8 行而不是第 7 行?
23
答:如果跳转到第 7 行,可能导致 CPU 失去响应。因为失败的情况,可能是多个读者在修改
读计数,此时写者已经完成,不会再次唤醒 wfe 事件,跳转到第 7 行可能会一直停留在此。
小问题 3.38:为什么在持有自旋锁时不能睡眠?
答:如果在持有自旋锁的时候睡眠,那么其他 CPU 可能长时间处于等待状态。更为严重的是,
如果在睡眠期间高优先级任务长时间运行,甚至获取同一把自旋锁,系统将处于完全死锁的状态。
小问题 3.39:如果有等待者,等待队列会有什么特征?
答:如果当前是读者在持有锁,那么等待队列中第一个等待者应该是一个写者。
小问题 3.40:为什么要由释放信号量的线程直接将信号量授予当前线程?它直接唤醒等待线
程并由线程来竞争锁也是可以的。
答:这主要是为了公平性考虑,保证按照 FIFO 的顺序唤醒等待线程。否则,如果有多个线
程在等待信号量,同时唤醒这些线程,那么优先级高的线程更容易获得信号量,造成低优先级任
务总是处于饥饿状态。
另外,如果等待队列中的线程过多,可能形成唤醒风暴,这会导致系统产生性能抖动。
小问题 3.41:如果在第 26 行的判断条件执行完成,还没有调用 schedule 函数前,其他线程
将信号量授予给当前线程,这里会出现 BUG 吗?
答:这并不会存在问题。因为其他线程将信号量授予当前线程时,会唤醒当前线程并将线程
状态设置为 TASK_RUNNING 状态。这样第 28 行的 schedule 函数将不会真正将线程切换出去,
因此会继续运行到下一轮循环并退出循环。
小问题 3.42:为什么说,这个等待队列上的第一个等待者一定是一个更新者?
答:因为当前进程在释放读信号量,因此第一个等待者必然不会是读者。否则读者可以直接
获得信号量而不必等待。
当然,等待队列中也可能存在读者,但这些读者一定不会位于等待队列头部。
小问题 3.43:什么情况下,被唤醒的等待线程并不处于 TASK_UNINTERRUPTIBLE 状态?
答:如果被唤醒的线程正好由于超时时间到达而被定时器唤醒,那么它可能正好处于运行状
态。或者线程刚好将自己添加到等待队列中,还没有来得及调度出去的时候,也可能处于运行状
态。
小问题 3.44:第 37 行的 list_next_entry 可以被替换为 list_first_container 吗?
答:虽然可以,但是代码不那么清晰。
小问题 3.45:与读/写信号量相比,互斥锁的数据结构和代码都不是那么直观,为什么要这
样设计?
答:读/写信号量的语义比互斥锁复杂,因此可以优化空间有限。而是互斥锁则相对简单,可
以进行一些性能方面的优化,为了达到优化的目的,代码逻辑会显得复杂一点。
小问题 3.46:第 3 行已经判断了 count 字段,表明存在等待者了,为什么需要第 6 行的判断?
答:第 3 行的判断没有在自旋锁的保护中,因此在判断完成后,第 4 行获得锁之前,其值可
能发生了变化。
因此需要在第 6 行获得锁的情况下再次判断 count 字段的值。
小问题 3.47:前面章节的读/写信号量,在保护自身数据结构的时候,仅仅使用了自旋锁,
但是并没有关闭中断,为什么第 42 行需要关闭中断?
答:可以在中断上下文释放信号量,因此需要在获得信号量的地方关闭中断,以防止中断上
下文更改信号量的状态。
剩余42页未读,继续阅读
小坚学Linux
- 粉丝: 4567
- 资源: 57
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 京瓷TASKalfa系列维修手册:安全与操作指南
- 小波变换在视频压缩中的应用
- Microsoft OfficeXP详解:WordXP、ExcelXP和PowerPointXP
- 雀巢在线媒介投放策划:门户网站与广告效果分析
- 用友NC-V56供应链功能升级详解(84页)
- 计算机病毒与防御策略探索
- 企业网NAT技术实践:2022年部署互联网出口策略
- 软件测试面试必备:概念、原则与常见问题解析
- 2022年Windows IIS服务器内外网配置详解与Serv-U FTP服务器安装
- 中国联通:企业级ICT转型与创新实践
- C#图形图像编程深入解析:GDI+与多媒体应用
- Xilinx AXI Interconnect v2.1用户指南
- DIY编程电缆全攻略:接口类型与自制指南
- 电脑维护与硬盘数据恢复指南
- 计算机网络技术专业剖析:人才培养与改革
- 量化多因子指数增强策略:微观视角的实证分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功