从零自制操作系统
  • 推荐0
  • 收藏0
  • 浏览31

从零自制操作系统

(日)内田公太 (作者) 

  • 书  号:9787121508752
  • 出版日期:2025-08-01
  • 页  数:
  • 开  本:
  • 出版状态:上市销售
  • 原书名: ゼロからのOS自作入門
  • 原书号:9784839975869
  • 维护人:张春雨
在本书中,你将尝试从零自制操作系统。你会体验到制作操作系统的整个过程,从打开计算机、调用操作系统本身到能够运行各种应用。你会了解到计算机的内部结构,以及操作系统的工作原理 ;在此 之前,它们对于你来说可能一直都是黑箱。
《从零自制操作系统》内容包括 :个人可以制作操作系统吗、计算机工作原理和 Hello World 、EDK II 和内存映射、 屏幕显示实践和引导加载器、像素绘图和 make 入门、文本显示和控制台类、鼠标输入和 PCI 、中断和 FIFO、内存管理、叠加过程、窗口、定时器和 ACPI、键盘输入、多任务处理、终端、命令、文件系 统、应用、分页、系统调用、窗口应用、图形和事件、多终端、使用应用加载文件、从应用写入文件、 应用的内存管理、日文显示和重定向、应用间通信、额外应用、前方的路,以及配置开发环境、获取 MikanOS 、EDK II 文件说明、C++ 中的模板、iPXE 、ASCII 码表。
《从零自制操作系统》的目标读者是写过简单程序的人。如果你编写过几百行代码,有相关编程经验,那么应该可以 毫无顾虑地通读本书。但如果你从未编写过程序,那么阅读本书将会很吃力。
√ 只需30天,从零开始编写一个五脏俱全的图形操作系统√ 39.1KB的迷你系统,可实现多任务、汉字显示、文件压缩,还能听歌看图玩游戏√ 出自日本编程天才之手,一本书揭开CPU、内存、磁盘及操作系统底层工作模式神秘面纱
内田公太,日本东京资深软件工程师。他毕业于东京工业大学,取得工程学士和硕士学位。就职于cybozu公司期间,专注于将Walb部署到生产环境。在学术领域,他多次出席软件工程基础会议,分享过大量研究成果,并在 2015 年出版了关于英特尔X86 架构的书籍及相关模拟器。此外,他还积极举办面向业余操作系统开发者的研讨会,投身于推动技术交流。
本书的主题是自制操作系统。从零开始,用30章做出一个简单的操作系统:MikanOS 。 在30章结束之后,你将看到下图所示的效果。图中的一切都是依照本书的内容实现的。当 然,这些功能都是独立运行的,没有使用其他操作系统。
操作系统(Operating System)是计算机中的基础软件,比如常见的Windows 、macOS和 Linux。操作系统在计算机的使用过程中发挥着重要作用——它通过提供网络浏览器和文字处 理器等常用功能来支持应用开发,通过分配计算资源来实现多个应用的同时使用,并且提供 了统一的操作方法。操作系统使计算机更加强大,更易于使用。
本书的目标是制作一个无须借助其他操作系统即可运行的操作系统,而不是在既有的操 作系统(如 Windows)上运行的应用。不借助其他操作系统的功能意味着,比如在操作鼠标 时,自己编写鼠标指针(箭头)在屏幕上移动的过程;使用键盘输入命令并按下回车键时, 自己编写启动命令的进程。此外,还必须创建一个函数来探知并管理计算机的内存。几乎所 有的处理过程都是自己完成的,这就是自制操作系统。是不是很激动人心?
乍一看,自制操作系统似乎是在浪费时间。虽然现在已经有了很多功能强大的操作系 统,自制操作系统是在模仿它们,但是自制操作系统能给你带来宝贵的经验。探索计算机系 统的工作原理会激发你的求知欲。从实用的角度来看,了解硬件和操作系统的工作原理将拓 宽软件工程师的工作范围:研究操作系统如何工作,并探索如何创建高效运行的应用。或 者,在调查系统故障原因时,可以利用调试操作系统的经验来深入研究。当需要阅读 Linux 内核的代码时,如果有制作操作系统的经验,那么读起来会容易得多。
现在我们用专业术语介绍一下 MikanOS的功能:MikanOS是一个通过UEFI BIOS启动的 操作系统,以 64位模式运行,具有抢占式多任务、窗口系统、分页内存管理和系统调用等 功能。如果你不知道这些专业术语的含义,也不要紧,本书的任务就是在实践中解释它们的 含义。
目标读者
如今,个人可以创建复杂的网络服务和支持VR的游戏。如果你购买了一台面向物联网的 小型计算机,就可以立即开始从事十年前无法想象的高级电子工作了。以如何构建编译器和 CPU为主题的书也已出版。
虽然制作各种东西变得更加容易,但制作操作系统却变得更加困难。这是随着计算机的 日益复杂而演变出的结果。本书的目的就是揭示隐藏在黑暗中的操作系统原理,确保自制的 乐趣依然存在。为什么不与作者一起手工制作操作系统呢?
本书是2006年出版的《30天自制操作系统》的衍生成果。这是一本非常好的书,2021年 仍在印刷。但自该书出版以来,个人计算机已经发生了很大的变化,有些信息(尤其是与硬 件相关的信息)已经过时。于是,我决定写一本新书1 。因此,本书的内容是在编写此书时市 面上销售的计算机上进行测试的(但不保证在所有型号的计算机上都能正常工作)。
本书的目标读者是写过简单程序的人。如果你有几百行代码的编写经验,那么应该可以 毫无顾虑地阅读本书。但如果你从未编写过程序,那将会很吃力。
本书中的MikanOS是用C++编写的。对于那些不熟悉C++的读者,书中会提供一些解 释。要了解更多,可以参考本书中的说明,也可以参考相关的入门书籍和网站信息。你可能 决心在开发操作系统之前完全学会C++,但作者认为,在开发的过程中根据需要学习 C++ , 会更容易保持积极性。脚踏实地,勇往直前吧!

目录

第 0章   个人可以制作操作系统吗  10.1    如何制作操作系统  20.2    到底什么是操作系统  30.3    自制操作系统的步骤  60.4   享受自制操作系统的乐趣  70.5    自制操作系统的全貌  8第1章   计算机工作原理和HelloWorld  151.1    Hello World  161.2    如何查找U盘的设备名称  201.3    如何使用WSL  201.4    使用模拟器  221.5    最终做了些什么  231.6    还是让我们动手吧  271.7    使用UEFI BIOS启动  281.8    制作操作系统的工具  291.9    C语言版的Hello World程序  30第 2章   EDK II和内存映射  332.1    EDK II简介  342.2    EDK II的Hello World程序(osbook_day02a)  352.3    主存储器  382.4    内存映射  392.5    获取内存映射(osbook_day02b)  412.6    将内存映射保存到文件中  432.7    检查内存映射  462.8    指针简介(1):地址和指针  472.9    指针和箭头运算符  48第 3章   屏幕显示实践和引导加载器  533.1    QEMU监视器  543.2    寄存器  563.3    第一个内核(osbook_day03a)  583.4    从引导加载器绘制像素(osbook_day03b)  663.5    从内核绘制像素(osbook_day03c)  683.6    错误处理(osbook_day03d)  703.7    指针简介(2):指针与汇编语言  73第 4章   像素绘图和make入门  774.1    make简介(osbook_day04a)  784.2    自由绘制像素(osbook_day04b)  814.3    利用C++语言特性重写程序(osbook_day04c)  864.4    vtable  914.5    改进加载器(osbook_day04d)  93第 5章   文本显示和控制台类  995.1    尝试写入字符(osbook_day05a)  1005.2    拆分编译(osbook_day05b)  1035.3    增加字体(osbook_day05c)  1065.4    字符串绘制和sprintf()(osbook_day05d)  1085.5    控制台类(osbook_day05e)  1105.6    printk()(osbook_day05f)  114第 6章   鼠标输入和PCI 1176.1    鼠标光标(osbook_day06a)  1186.2    USB Host驱动程序  1216.3    搜索PCI设备(osbook_day06b)  1236.4   带轮询的鼠标输入(osbook_day06c)  132第 7章   中断和FIFO 1417.1    中断(osbook_day07a)  1427.2    中断处理程序  1437.3    中断向量  1447.4    设置中断描述符  1477.5    MSI机制  1497.6    中断总结  1507.7    加速中断处理程序(osbook_day07b)  1517.8   FIFO和FILO  1527.9    实现队列  1537.10    使用队列加速中断  157第 8章   内存管理 1618.1    内存管理概述  1628.2    UEFI内存映射(osbook_day08a)  1628.3    移动数据结构(osbook_day08b)  1658.4    移动栈区域  1668.5    设置分段  1678.6    设置分页  1748.7    内存管理挑战(osbook_day08c)  177第 9章   叠加过程  1859.1    叠加过程概述(osbook_day09a)  1869.2    new运算符  1869.3    叠加过程的原理  1899.4    叠加过程的时间测量(osbook_day09b)  2059.5    加速叠加过程(osbook_day09c)  2099.6    测量滚动过程时间(osbook_day09d)  2199.7    更快的滚动过程(osbook_day09e)  221第 10 章   窗口  22710.1    再论鼠标(osbook_day10a)  22810.2    第一个窗口(osbook_day10b)  22910.3    快速计数器(osbook_day10c)  23210.4    消除闪烁(osbook_day10d)  23410.5    后置缓冲区(osbook_day10e)  24010.6    拖动窗口(osbook_day10f)  24110.7    仅拖动窗口(osbook_day10g)  246第 11 章   定时器和ACPI  24911.1    整理源码(osbook_day11a)  25011.2    定时器中断(osbook_day11b)  25111.3    精确定时(osbook_day11c)  25311.4    多个定时器和超时通知(osbook_day11d)  25711.5   ACPI PM定时器和RSDP(osbook_day11e)  261第 12 章   键盘输入  26912.1    查找FADT(osbook_day12a)  27012.2    使用ACPI PM定时器(osbook_day12b)  27312.3    USB键盘驱动程序(osbook_day12c)  27512.4    修改键(osbook_day12d)  27912.5    文本框(osbook_day12e)  28312.6    光标(osbook_day12f)  286第 13 章   多任务处理(1)  29113.1    多任务和上下文  29213.2    处理上下文切换(osbook_day13a)  29313.3    自动上下文切换(osbook_day13b)  30213.4    验证多任务处理(osbook_day13c)  30613.5    更多任务(osbook_day13d)  307第 14 章   多任务处理(2)  31314.1    休眠(osbook_day14a)  31414.2    事件发生时唤醒(osbook_day14b)  31914.3    性能测量  32414.4    确定任务的优先级(osbook_day14c)  32414.5    休眠任务(osbook_day14d)  332第 15 章   终端  33515.1    在主线程中绘制窗口(osbook_day15a)  33615.2    活动窗口(osbook_day15b)  34015.3    终端窗口(osbook_day15c)  34815.4    加速绘图(osbook_day15d)  353第 16 章   命令  35916.1    终端中的按键操作(osbook_day16a)  36016.2    echo命令(osbook_day16b)  36416.3    clear命令(osbook_day16c)  36816.4    lspci命令(osbook_day16d)  36916.5    命令历史记录(osbook_day16e)  37016.6    省电(osbook_day16f)  373第 17 章   文件系统  37517.1    文件和文件系统  37617.2    BIOS参数块  38017.3     目录条目  38117.4    读出卷(osbook_day17a)  38317.5    ls命令(osbook_day17b)  390第 18 章   应用  39518.1    文件分配表(osbook_day18a)  39618.2    第一个应用(osbook_day18b)  40218.3    C++中的计算器(osbook_day18c)  40818.4    标准库(osbook_day18d)  414第 19 章   分页  41719.1    可执行文件和内存地址  41819.2    地址转换  41919.3    加载并运行应用(osbook_day19a)  42219.4    虚拟地址和四级分页  42219.5    在后半部分运行应用  42519.6    加载应用  42619.7    设置分层分页结构  42819.8    整理分层分页结构  432第 20 章   系统调用  43720.1    应用如何使用操作系统函数(osbook_day20a) 43820.2    保护操作系统(1)(osbook_day20b)  44020.3    设置TSS(osbook_day20c)  44720.4    帮助查找错误(osbook_day20d)  45520.5    系统调用(osbook_day20e)  45920.6    注册系统调用的过程  46020.7    系统调用本体  462第 21 章   窗口应用  46721.1    设置IST(osbook_day21a)  46821.2    字符串显示系统调用(osbook_day21b)  47021.3    创建系统调用  47221.4    创建write()  47621.5    退出系统调用(osbook_day21c)  47821.6    返回栈指针  48221.7    代码整理(osbook_day21d)  48421.8    打开一个窗口(osbook_day21e)  48621.9    在窗口中写入文本(osbook_day21f)  487第 22 章   图形和事件(1)  49122.1    使用exit()(osbook_day22a)  49222.2    绘制两个点(osbook_day22b)  49422.3    获取计时器值(osbook_day22c)  49822.4    窗口绘制的优化(osbook_day22d)  50022.5    绘制直线(osbook_day22e)  50222.6    关闭窗口(osbook_day22f)  50622.7    等待按键输入(osbook_day22g)  508第 23 章   图形和事件(2)  51723.1    鼠标输入(osbook_day23a)  51823.2    绘图软件(osbook_day23b)  52323.3    计时器命令(osbook_day23c)  52723.4    动画(osbook_day23d)  53223.5    打方块游戏(osbook_day23e)  534第 24 章   多终端  53924.1    增加终端数量(osbook_day24a)  54024.2    光标自动闪烁(osbook_day24b)  54124.3    同时启动多个应用(osbook_day24c)  54424.4    修复窗口重叠的错误(osbook_day24d)  54924.5    不需要终端即可启动应用(osbook_day24e)  55024.6    冻结操作系统的应用(osbook_day24f)  55424.7    保护操作系统(2)(osbook_day24g)  556第 25 章   使用应用读取文件  55925.1    目录支持(osbook_day25a)  56025.2    读取文件(osbook_day25b)  56625.3    正则表达式搜索(osbook_day25c)  575第 26 章   使用应用写入文件  57726.1    标准输入(osbook_day26a)  57826.2    文件描述符的抽象化  57826.3    接收键盘输入  58026.4    EOF和EOT(osbook_day26b)  58326.5    写入文件(1)(osbook_day26c)  58426.6    写入文件(2)(osbook_day26d)  591第 27 章   应用的内存管理  59727.1    按需分页(osbook_day27a)  59827.2    内存映射文件(osbook_day27b)  60427.3    测量内存使用情况(osbook_day27c)  61227.4    写入时复制(osbook_day27d)  614第 28 章   日文显示和重定向  62528.1    日文和字符编码(osbook_day28a)  62628.2    日文字体(osbook_day28b)  63328.3    重定向(osbook_day28c)  638第 29 章   应用间通信  64529.1    退出码(osbook_day29a)  64629.2    管道(osbook_day29b)  64929.3    解析命令行并启动任务  65129.4    管道处理的主体PipeDescriptor  65229.5    启动和关闭终端  65529.6    终止任务  65729.7    排序命令(osbook_day29c)  66129.8    终端错误修复(osbook_day29d)  66329.9    共享内存  665第 30 章   额外应用  66730.1    应用路径程序(osbook_day30a)  66830.2    more命令(osbook_day30b)  66930.3    使cat与输入相对应(osbook_day30c)  67230.4    关闭按钮(osbook_day30d)  67430.5    文本查看器(osbook_day30e)  67930.6    图像查看器(osbook_day30f)  682第 31 章   前方的路  687附录A   配置开发环境  690附录B   获取MikanOS  695附录C   EDKII文件说明  698附录D   C++中的模板  701附录E   iPXE  702附录F   ASCII码表  705致谢  709

读者评论

相关图书

亿级流量系统架构设计与实战

李琛轩 (作者)

本书涵盖了亿级用户应用后台通用的技术和系统架构设计思路,在内容结构上分为三大篇:架构知识篇(第1~3章),作为全书的基础知识篇,首先介绍后台的关键组件构成以及机...

 

软件架构设计:大型网站技术架构与业务架构融合之道

余春龙 (作者)

本书系统化地阐述了技术架构与业务架构的方法论与实践。本书内容分为5大部分,第1部分从行业背景出发定义架构的概念与范畴;第2部分细致讨论架构所需的计算机功底,包括...

¥49.00

MySQL 8 Cookbook(中文版)

(美) 卡西克·阿皮加 特拉 (Karthik Appigatla) (作者) 周彦伟 孟治华 王学芳 (译者)

MySQL 8.0 的发布是MySQL 发展历史上的一个重要里程碑,也是开源数据库领域内的一个大事件。针对这个版本,MySQL 官方团队做了太多的工作,从查询优...

 

iOS和macOS性能优化:Cocoa、Cocoa Touch、Objective-C和Swift

[德] Marcel Weiher (作者) 李俊阳 马超 程伟 孙莹 译 (译者)

随着应用功能的日益增加,性能问题也逐渐浮出水面,进入我们的视野之中。本书作者Marcel Weiher在性能调优领域有着丰富的经验,在他的带领下,你将会了解如何...

¥99.00

Scala编程(第3版)

Martin Odersky;Lex Spoon;Bill Venners (作者) 高宇翔 (译者)

本书由直接参与Scala开发的一线人员编写,因而对原理的解读和应用的把握更加值得信赖。本书面向具有一定编程经验的开发者,目标是让读者能够全面了解和掌握Scala...

¥144.00

质量全面管控——从项目管理到容灾测试

葛长芝 (作者)

本书专门为有志于软件测试的工程师打开软件测试的大门,笔者结合案例讲解测试实践技术,主要内容有:项目管理、项目需求管理、代码质量控制、自动化部署、软件测试、安全测...

¥49.00