看到《x86/x64体系探索及编程》这本书的介绍里提到“基本上就可以写出自己简易的OS核心”,突然想起自己大学时候学的是硬件,曾经也尝试着去用c来写一个简单的OS系统。当然,说是系统也算不上,只是当时很流行研究多任务抢占,就学着做一个简单的多任务抢占的OS。现在想来却也不记得当时具体是怎么做的和做成什么样的了。
重点看了看试读章节第二章的部分,恰好也看到了“PIC”这样一个话题。我在学习的时候也查过,但是关于这部分的资料不太多。网上搜到的PIC相关内容大多是指“Peripheral Interface Controller”,但是在OS编程基础中的PIC指的是Position Independent Code,中文叫“位置无关编码”,试读章节里也用一个getstdhadle()的例子来简单介绍了一下什么是位置无关编码,因为这也算是X86基础知识吧,并没有太深入的介绍,那我也在这里用最简单易懂的方式介绍下我对“位置无关编码”的理解。
所谓的位置无关编码。是一种库文件的编码组织方式,其特点是方便系统装载。我们了解这个可以从头说开,像试读章节的例子中一样,最早的时候我们都是用“绝对地址”来链接定位一段代码,这样就会出现一个问题,这个地址是这些代码的起始地址,代码必须放在这个绝对的位置上才能正常运行,否则当代码去访问、执行某个变量名、函数名对应地址上的代码时就会找不到,程序也就跑挂了。这样用绝对地址去定位的编码方式我们叫“位置相关编码”。
有“相关”就有“无关”,有“绝对”就肯定有“相对”。位置无关编码里的定位跳转指令不是一段绝对跳转指令,而是一段相对跳转指令,访问的是一个相对跳转地址,因此,包括这个语句和main在内的代码段无论是否放在它的运行域这段代码都能正常运行。这就是所谓的位置无关代码。现在我们的编码方式也已经更多的使用位置无关编码。