十年前,我写了一本书,名字叫《x86汇编语言:从实模式到保护模式》(已于2023年再版)。记得当时我在书里说还要写一本64位的下册,但图书出版之后发现学汇编语言的人并没有当初想象中的那么多,以至于心灰意冷,这个下册也就没了下文。非但如此,按原来的计划,在图书出版之后我会提供一份习题答案。但由于我这个人比较懒散,过了没几天,出书的新鲜劲儿一过,对此事的热情大减,习题答案也就没有了下文,所以大家会注意到《x86汇编语言:从实模式到保护模式》至今没有一套官方的习题答案。
过去十年,我观察到了个人计算机市场上的两个变化。
一是64位计算成为个人计算机市场的主流。仿佛一夜之间,市面上的32位计算机系统都消失了,64位处理器、64位操作系统开始在市场上占据统治地位,应用程序也都变成了64位,至少会提供32位和64位两种版本。
二是多处理器和并行计算开始在桌面(个人)计算机系统上兴起,几乎所有计算机语言和编译器都添加了对多线程和并行计算的支持,甚至连C这种古老的语言都在2011年添加了多线程和并发的支持,并推出了ISO/IEC 9899:2011标准。
那么,在最接近硬件的层面上,以汇编语言的视角来看,64位的处理器都具有什么样的特点、如何创建多个线程、如何把线程指派到不同的处理器上同时并行执行等这一切又重新激发了我好为人师的兴致,以至于决定重启《x86汇编语言:从实模式到保护模式》传说中的下册。
决定写这本书的时候我正从事视频创作,所以决定先将它制作成视频,然后整理成书。视频制作花了一年多,接下来就是整理成书了。但这个时候我的新鲜劲儿又过了,又开始变得懒散,去年一年才整理出两章。也就是今年,在出版社编辑缪晓红的催促和鼓励下,我又快马加鞭,仅用两个多月就完成了全部书稿。
一本书,它的名字很重要,得让人一看到书的名字就知道它都讲了些什么内容。如果可能的话,我希望本书的名字叫《x86汇编语言:编写一个简单的、简易的操作系统雏形,用来演示64位环境下的多处理器管理、动态内存分配、多处理器多任务的调度和切换、多处理器多线程的调度和切换、数据竞争和锁,但它不包括文件管理、设备管理等内容》。但诚如你所见,本书的名字并不太长,太长就不成体统了。
本书一开始介绍64位x86处理器的硬件架构,接着介绍与操作系统相关的内容,包括单处理器的多任务切换、多处理器的多任务切换和多线程切换、数据竞争、原子操作、自旋锁和互斥锁等。
传统上,大家都是在流行的操作系统,比如Windows和Linux上编写并发程序的,而且只能使用高级语言。这使得多处理器环境下的多任务和多线程调度、原子操作、锁、线程同步等内容对很多人来说是笼统的、抽象的,像隔了层纱一样,看不见本质。相反,如果用汇编语言实现一个简单的操作系统内核,并演示多处理器环境下的多任务、多线程、锁和线程同步,这是可能的吗?我相信没有人会觉得这是简单的事情。但事实上,如果你想来一个简单的,其实也很容易,这本书就能告诉你如何实现它。
这本书并不是零基础可读的,你必须具有保护模式的知识基础,且我强烈建议你先读懂它的上册,即《x86汇编语言:从实模式到保护模式》一书。
为方便阅读,我把代码都印在书里了。这样做自然会增加书的厚度及成本,但相对于给你带来的便利和时间上的节省来说,还是值得的。
请关注我的个人网站www.lizhongc.com以了解我的最新动态或者获取相关的资源,也可以给我发送电子邮件,我的邮箱是leechung@126.com。
二〇二四年五月