Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1523638
  • 博文数量: 465
  • 博客积分: 8915
  • 博客等级: 中将
  • 技术积分: 6365
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-30 15:05
文章分类

全部博文(465)

文章存档

2017年(33)

2016年(2)

2015年(4)

2014年(29)

2013年(71)

2012年(148)

2011年(178)

分类: 系统运维

2012-12-06 09:53:02

    看到《x86/x64体系探索及编程》这本书的介绍里提到“基本上就可以写出自己简易的OS核心”,突然想起自己大学时候学的是硬件,曾经也尝试着去用c来写一个简单的OS系统。当然,说是系统也算不上,只是当时很流行研究多任务抢占,就学着做一个简单的多任务抢占的OS。现在想来却也不记得当时具体是怎么做的和做成什么样的了。

    重点看了看试读章节第二章的部分,恰好也看到了“PIC”这样一个话题。我在学习的时候也查过,但是关于这部分的资料不太多。网上搜到的PIC相关内容大多是指“PeripheralInterfaceController”,但是在OS编程基础中的PIC指的是PositionIndependentCode,中文叫“位置无关编码”,试读章节里也用一个getstdhadle()的例子来简单介绍了一下什么是位置无关编码,因为这也算是X86基础知识吧,并没有太深入的介绍,那我也在这里用最简单易懂的方式介绍下我对“位置无关编码”的理解。

    所谓的位置无关编码。是一种库文件的编码组织方式,其特点是方便系统装载。我们了解这个可以从头说开,像试读章节的例子中一样,最早的时候我们都是用“绝对地址”来链接定位一段代码,这样就会出现一个问题,这个地址是这些代码的起始地址,代码必须放在这个绝对的位置上才能正常运行,否则当代码去访问、执行某个变量名、函数名对应地址上的代码时就会找不到,程序也就跑挂了。这样用绝对地址去定位的编码方式我们叫“位置相关编码”。

    有“相关”就有“无关”,有“绝对”就肯定有“相对”。位置无关编码里的定位跳转指令不是一段绝对跳转指令,而是一段相对跳转指令,访问的是一个相对跳转地址,因此,包括这个语句和main在内的代码段无论是否放在它的运行域这段代码都能正常运行。这就是所谓的位置无关代码。现在我们的编码方式也已经更多的使用位置无关编码。

阅读(972) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~