Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

练习题与扩展阅读

练习题

基础题

  1. 内核态和用户态有什么区别?为什么要区分这两种状态?
  2. 宏内核、微内核、混合内核各有什么优缺点?分别适合什么场景?
  3. 简述计算机从按下电源键到进入操作系统桌面的完整流程。
  4. BIOS和UEFI有什么区别?UEFI相比BIOS有哪些优势?
  5. 什么是系统调用?系统调用和普通函数调用有什么区别?
  6. 驱动程序的作用是什么?字符设备和块设备有什么区别?

实操题

  1. 查看你的操作系统的内核版本和启动信息:
    • Linux:使用uname -admesg命令
    • Windows:查看系统信息和事件查看器
  2. 编写一个简单的程序,分别直接调用系统调用和通过标准库调用,对比两者的性能差异。
  3. 查看你的电脑上加载了哪些驱动程序/内核模块:
    • Linux:lsmod命令
    • Windows:设备管理器
  4. 尝试用容器运行一个简单的Nginx服务,体验容器的启动速度和资源占用。

思考题

  1. 为什么系统调用会有开销?有哪些方法可以减少系统调用的开销?
  2. 操作系统启动过程中initramfs的作用是什么?如果没有initramfs会出现什么问题?
  3. 微内核架构性能不如宏内核,但为什么很多嵌入式和安全关键场景都使用微内核?
  4. 容器技术和虚拟机技术各有什么优缺点?未来容器会完全取代虚拟机吗?

扩展阅读

书籍推荐

  1. 《操作系统导论》

    • 全书都在讲操作系统的核心原理,本章内容可以对应到本书的第一部分引言、第二部分虚拟化相关章节,非常适合入门学习。
  2. 《现代操作系统》(第4版)

    • 操作系统领域的经典教材,详细讲解了操作系统的各个模块,包括进程、内存、文件系统、I/O、安全等,适合深入学习。
  3. 《Linux内核设计与实现》

    • 讲解Linux内核的设计和实现原理,包括进程管理、内存管理、系统调用、驱动模型等内容,适合想要深入了解Linux内核的开发者。
  4. 《UEFI原理与编程》

    • 详细讲解UEFI的原理和开发,适合想要了解现代计算机启动过程和UEFI技术的读者。

在线资源

  1. Linux 系统调用表

    • 可以查询不同架构Linux的系统调用号和参数,了解系统调用的细节。
  2. OSDev Wiki

    • 操作系统开发的维基百科,包含操作系统开发的所有相关知识,非常适合学习底层原理。
  3. 容器背后的技术:Namespace和Cgroups

    • 酷壳的文章,通俗易懂地讲解了Linux容器技术的底层实现原理。
  4. Linux 驱动开发教程

    • Linux内核官方的驱动开发文档,是学习Linux驱动开发的权威资料。

工具推荐

  1. strace:Linux下的系统调用跟踪工具,可以跟踪程序执行过程中调用的所有系统调用和参数,排查程序问题非常有用。
  2. dmesg:查看内核日志,包括启动信息、驱动日志、内核错误信息等,排查驱动和系统问题必备。
  3. lsmod/modinfo:查看内核模块信息,加载卸载内核模块。
  4. vmstat/mpstat:查看系统性能指标,包括系统调用次数、上下文切换次数等。
  5. Docker/Podman:容器运行时工具,用来体验和使用容器技术。

参考答案

练习题的参考答案可以在附录/练习题参考答案.md中找到。建议先独立思考完成,再查看答案。