基于PC体系结构嵌入式操作系统实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于PC体系结构嵌入式操作系统实现

基于PC体系结构嵌入式操作系统实现   【摘要】文章介绍了一个基于PC体系结构的嵌入式操作系统,从CPU的16位实模式切换到32位保护模式,包括中断控制器、系统时钟等在内的系统硬件初始化过程,全局描述符表、中断描述符表等内核运行环境的建立,进程的定义以及调度算法,进程切换方面介绍了一个具备基本功能的嵌入式操作系统。   【关键词】PC;嵌入式操作系统;CPU保护模式      当前,嵌入式操作系统已经获得非常广泛的应用,涉及的领域包括通信、军事、航空航天、以及生活等方方面面。目前市场上比较有名且占有一定市场分额的操作系统有VxWork、uLinux、uC/OS-II、eCos等,他们有各自的优点,VxWork经过了长时间的发展和实际应用的考验,在关键应用领域仍是一支独秀。uLinux则可以利用广泛的Linux资源,便于开发等等。   由于操作系统的基本功能是硬件无关的,因此这部分可以使用C语言进行开发,而平台相关的部分只需要使用汇编语言,但是只要设计好代码框架,就可以做到方便移植。选择了PC作为最初的目标平台,是因为x86体系结构应用范围越来越广,而且可以在开发x86版本后再移植到其他平台。      一、操作系统简介      操作系统在功能上主要是负责管理计算机的资源,这些资源包括CPU、内存、外部存储器、还有一些其他的外设。   从结构上则分为单一内核和微内核结构,单一内核的代表就是UNIX、Linux,这类操作系统的内核是一个整体,功能都包含在内核里面,有点“大杂烩”的味道,其优点就是由于功能都包含在内核中,因此内核很紧凑,且效率较高。而且带来的缺点就是当一个功能模块需要修改时,就必须将内核全部编译一次。微内核结构的代表就是windows系列,其内核提供的功能很少,仅有一些基本的功能,其他的功能全部作为扩展模块连接进入核心,这样的好处就是各个功能模块在接口不变的时候,可以很方便的更新而不影响系统,给系统提供了最大的灵活性。带来的缺点是结构不够紧凑,造成一定的资源浪费,同时也对运行效率产生一定影响。本系统采用的是单一内核结构。   操作系统的开发通常是在UNIX、Linux下使用GNU Compiler Collection(GCC)进行开发编译。一般认为不能在Windows下开发,并且认为微软提供的开发工具不能进行此类开发。但是本操作系统是在Windows下开发使用Microsoft Visual C/C++ 6(VC6)进行开发。      二、CPU保护模式初始化      PC在通电后运行于16位实模式,其寻址能力为64K,而嵌入式系统的配置范围非常广泛,仅仅考虑16位的寻址范围显然不适合当前的发展要求。而i386及其以上的CPU的寻址能力都达到了4G,因此需要设计能支持4G内存的操作系统。   在系统引导时,首先建立一个临时的全局描述符表(GDT),这个全局描述符表中有5个描述符,第一个必须设为0,这是x86处理器规定的,称为哑描述符。其中两个是16位保护模式代码段和数据段的描述符,用于在切换CPU运行模式的时候,保证初始化代码仍然能够正常运行。另外两个是32位保护模式下的代码段和数据的描述符,用于CPU内核运行。   由于CPU在复位时是处于16位实模式,所以初始化代码是16位实模式下的代码,这部分的代码的作用是为切换到16位保护模式准备运行环境,主要的工作是设置GDT。具体地做法是根据当前的段寄存器计算GDT中相应段描述符的值。   再设置好GDT后,就可以将CPU切换到保护模式下运行。将CPU切换到保护模式的方法是,将cr0寄存器的0位设置为1,代码为:    ……   mov eax,cr0   or eax,1   mov cr0,eax    ……    再切换到保护模式运行后,由于CPU有指令预取机制,所以在指令队列中已经存在了下一跳指令,而且需要刷新代码段寄存器,为了防止运行出错,必须刷新指令队列已近代码段寄存器。由于需要在一条指令中同时刷新段寄存器和指令队列,所有需要手动构造一条段间转移指令。代码为:    ……   db0eah   dwoffset init   dwtemp_code_sel   init:   ……   完成后CPU即进入16位保护模式运行。      三、建立内核运行环境      进入内核后,首先必须建立运行环境,对于INTEL的CPU来说,就是建立两个系统表,一个是全局描述符表(GDT),一个是中断描述符表(IDT)。   (一)全局描述符表初始化   在CPU由16位实模式切换到32位保护模式的时候,建立了一个临时的GDT。但是进入内核后,需要一个真正的描述符表,不能在继续使用这个临时的

文档评论(0)

3471161553 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档