练习题与扩展阅读
练习题
基础题
- 内核态和用户态有什么区别?为什么要区分这两种状态?
- 宏内核、微内核、混合内核各有什么优缺点?分别适合什么场景?
- 简述计算机从按下电源键到进入操作系统桌面的完整流程。
- BIOS和UEFI有什么区别?UEFI相比BIOS有哪些优势?
- 什么是系统调用?系统调用和普通函数调用有什么区别?
- 驱动程序的作用是什么?字符设备和块设备有什么区别?
实操题
- 查看你的操作系统的内核版本和启动信息:
- Linux:使用
uname -a和dmesg命令 - Windows:查看系统信息和事件查看器
- Linux:使用
- 编写一个简单的程序,分别直接调用系统调用和通过标准库调用,对比两者的性能差异。
- 查看你的电脑上加载了哪些驱动程序/内核模块:
- Linux:
lsmod命令 - Windows:设备管理器
- Linux:
- 尝试用容器运行一个简单的Nginx服务,体验容器的启动速度和资源占用。
思考题
- 为什么系统调用会有开销?有哪些方法可以减少系统调用的开销?
- 操作系统启动过程中initramfs的作用是什么?如果没有initramfs会出现什么问题?
- 微内核架构性能不如宏内核,但为什么很多嵌入式和安全关键场景都使用微内核?
- 容器技术和虚拟机技术各有什么优缺点?未来容器会完全取代虚拟机吗?
扩展阅读
书籍推荐
-
《操作系统导论》
- 全书都在讲操作系统的核心原理,本章内容可以对应到本书的第一部分引言、第二部分虚拟化相关章节,非常适合入门学习。
-
《现代操作系统》(第4版)
- 操作系统领域的经典教材,详细讲解了操作系统的各个模块,包括进程、内存、文件系统、I/O、安全等,适合深入学习。
-
《Linux内核设计与实现》
- 讲解Linux内核的设计和实现原理,包括进程管理、内存管理、系统调用、驱动模型等内容,适合想要深入了解Linux内核的开发者。
-
《UEFI原理与编程》
- 详细讲解UEFI的原理和开发,适合想要了解现代计算机启动过程和UEFI技术的读者。
在线资源
-
- 可以查询不同架构Linux的系统调用号和参数,了解系统调用的细节。
-
- 操作系统开发的维基百科,包含操作系统开发的所有相关知识,非常适合学习底层原理。
-
- 酷壳的文章,通俗易懂地讲解了Linux容器技术的底层实现原理。
-
- Linux内核官方的驱动开发文档,是学习Linux驱动开发的权威资料。
工具推荐
- strace:Linux下的系统调用跟踪工具,可以跟踪程序执行过程中调用的所有系统调用和参数,排查程序问题非常有用。
- dmesg:查看内核日志,包括启动信息、驱动日志、内核错误信息等,排查驱动和系统问题必备。
- lsmod/modinfo:查看内核模块信息,加载卸载内核模块。
- vmstat/mpstat:查看系统性能指标,包括系统调用次数、上下文切换次数等。
- Docker/Podman:容器运行时工具,用来体验和使用容器技术。
参考答案
练习题的参考答案可以在附录/练习题参考答案.md中找到。建议先独立思考完成,再查看答案。