购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第2版前言

时间过得真快,从本书第1版面市至今,十多年嗖嗖过去了。当初写这本书完全是意气用事,年少轻狂,就是觉得我可以把汇编语言讲得更好,就单纯是为了改变汇编语言的教学现状和教学方法。在我看来,汇编语言不单是一门程序设计语言,学习汇编语言指令、掌握汇编语言程序设计的方法和技巧固然重要,但更重要的是,它是面向硬件的语言,天生是为了控制硬件的。因此,一本好的汇编语言教材一定不是单纯地介绍汇编语言本身,它必须是以如何控制处理器和其他外部硬件为主线的,在这个过程中引入汇编指令和硬件原理方面的内容,最终使读者对计算机工作原理的认识达到熟悉其脉络的程度。

以上就是创作本书的初衷。现在看来,这个目标基本上算是达成了。同时,我还有一个意外的收获,那就是,很多读者认为这本书有助于学习操作系统,认为它对理解操作系统非常有帮助,这也算是无心插柳吧。

为什么一本讲汇编语言的书反而成了操作系统课程的前导教材呢?其实仔细想想也不难理解。对于一台计算机来说,处理器是硬件的核心,而操作系统是软件的灵魂。因此,编写操作系统的人和设计处理器的人拥有共同的客户。为了拉住他们共同的客户,取得客户欢心,编写操作系统的人会给设计处理器的人提意见,告诉他们如何改进处理器的设计以方便操作系统和应用软件的开发。处理器的很多指令是为操作系统设计的,它的一些工作模式也是为了给操作系统提供支持,这一点在64位处理器上尤其明显。

基于以上原因,当一名作者以处理器的工作模式为主线,同时融入指令的功能、应用和设计思想而写出一本书时,甚至连他自己都可能惊奇地发现,他写的其实是一本和操作系统密切相关的书。

图书的内容是结构化的,是按照主题来组织和编排的,但如此一来就会失去学习和理解上的连贯性。为此,从2019年开始,我推出了与本书配套的视频课程。视频要求学习过程具有很强的连续性,且要求学习曲线更加平滑,而写书则没有这种压力。

图书出版的时间比较早,经过这么多年的沉淀,我自然会有一些新想法。尽管在视频课程里已经体现了这些想法,但图书的第2版也就此提上日程。经过一年多的努力,更新之后的第2版终于拿在你的手中,可喜可贺!

与第1版相比,第2版的变化不可谓不大,这首先体现在章节的组织上。第二版增加了新的章节,调整了章节的次序,有新的气象。当然,这只是表面上的变化,细节上的变化和调整就更多了,主要包括:

1.为了进一步降低汇编语言的学习门槛,新增了处理器工作原理的内容(第2章);

2.修正了第1版中的错误和不严谨的表述;

3.删除了第1版里的过时内容,比如任务门和因中断而发起的硬件任务切换;

4.对硬件任务切换方面的内容做了削减,因为在现实中没有用,而且在64位处理器的IA-32e模式下已经不再支持;

5.新增了在软件中自行执行任务切换的内容;

6.优化了第1版里面的采用平坦内存模型的程序,证明平坦内存模型可以极大地简化编程工作;

7.象流行的32位操作系统那样,通过中断实现系统调用;64位系统使用快速系统调用,将在我的下一本书中介绍。

8.根据新的内容和章节组织,对配书代码做了相应的调整和修改。有读者反映配书工具无法在64位操作系统上运行,为此编写了64位的工具软件。

本书第1版侧重于处理器架构、指令集、实地址模式、保护模式、中断、特权级、分段、分页、外围设备和操作系统原理等基础内容,并不包括多处理器、多任务、多线程、高级可编程中断控制器、原子操作、锁和线程同步方面的内容,尽管这些内容非常重要,时下非常流行。这与本书的定位有关,毕竟本书是面向X86体系结构和汇编语言的初学者。因此,第2版也不包括这些内容。

但是,这些内容又确实非常重要,而且在时下又非常流行,即使是用高级语言编写多处理器环境下的并发程序时,也可能需要了解这些知识。另外,在本书第1版面市时,虽然64位处理器已经问世多年,但并不普及,而且市面上流行的依然是32位操作系统,书中不包括这些内容情有可原。但是,仿佛是一夜间,整个市场迅速过渡到64位,64位处理器和64位操作系统大行其道。64位处理器引入了新的64位模式,可看成对保护模式的升级和简化,同时增加了新的特性,也是必须介绍的,这对于从底层理解64位系统和64位操作系统,是非常有必要的。

在本书第1版中,我曾经说还要写一个下册,不过一度没有进展。好的消息是这本书已经开始创作(目前还只是视频课程,图书稍晚一些),名字暂定为《基于X64架构的汇编语言和操作系统基础》,其内容填补了以上空白。尤其是用汇编语言来演示多处理器多线程,这还是非常罕见的。具体来说,这本新书包括以下内容:

1.与IA-32架构进行对比,介绍64位处理器的基本架构,包括寄存器的变化、指令集和工作模式的变化、系统表的变化、内存组织和内存访问模式的变化;

2.IA-32e模式的特点及如何进入IA-32e模式,重点介绍其64位子模式;

3.IA-32e模式的4级和5级分页;

4.IA-32e模式下的中断和异常处理;

5.64位模式下的单处理器多任务和任务切换;

6.64位模式下的多处理器管理和初始化,包括高级可编程中断控制器APIC;

7.64位模式下的多处理器多任务和任务切换;

8.64位模式下的多处理器多线程和线程切换;

9.高速缓存以及与多线程有关的原子操作、锁、线程同步,等等。

传统上,大家都是在流行的操作系统,比如Windows和Linux上编写并发程序的,而且只能使用高级语言。这使得多处理器环境下的多任务和多线程调度、原子操作、锁、线程同步等内容对很多人来说是笼统的、抽象的,像隔了层纱一样,看不见本质。相反地,如果用汇编语言实现一个简单的操作系统内核,并演示多处理器环境下的多任务、多线程、锁和线程同步,这是可能的吗?我相信没有人会觉得这是个简单的事情。但事实上,如果你想来一个简单的,其实也很容易,这本新书就能告诉你如何实现它。

在过去几年里的另一个变化是我有了自己的网站:http://www.lizhongc.com/,你可以到里面下载配书源码和工具,以及相关的资料。除此之外,我愿意在这个网站上发布自己的想法,也希望能在上面看到你的想法。

img
2022年12月6日星期二 nAYcGmO7Mj4eAuJgurTVP+9wylx3qvQBrzzs7x9fp9U4G97R7WsE7CdgYNL8XaLZ

点击中间区域
呼出菜单
上一章
目录
下一章
×