`
java-mans
  • 浏览: 11418822 次
文章分类
社区版块
存档分类
最新评论

嵌入式操作系统内核原理和开发(cpu的那些事)

 
阅读更多

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


cpu是数字处理系统中的一个重要环节。在我看来,单片机、微处理器、dsp都可以称作是cpu,只是它们的侧重点有所不同罢了。具体来说,传统意义上的单片机更偏重于嵌入式的计算,比如说我们经常使用的51、avr、arm芯片中不仅仅含有了运算和控制功能,它还涵盖了定时器、串口、并口、usb、i2c总线等外部资源。dsp呢,cpu一般只是作为dsp的一个核存在,它通常还会包含另外一个核,专门用于数字信号的处理工作。而微处理器,也就是我们经常说的pc上的处理器,它的工作比较单一,专注于计算和控制功能的处理,因此一般来说在这方面的性能上面,单片机和dsp都是不能和它相比的,有了南桥芯片和北桥芯片的帮助,pc的微处理器就可以专注于自己的本职工作了,效率上面也会有一个很大的提高。


对于朋友们来说,生活中遇到的最多的cpu其实是x86的cpu。当然,如果有哪位朋友喜欢apple之类的玩具,也会知道一些arm的相关事情。剩下的就是一些专用领域的cpu了,比如说在通信行业用到的比较多的powerpc芯片,在高性能服务器用的到的sun sparc芯片,在科学计算领域使用到的mips芯片。所以,无论遇到什么芯片,对于应用层开发的朋友都是一样的,只是在一些小地方需要还有一些注意的地方。比如说,

(1)数据的对齐方式

(2)数据的字节序问题

(3)函数参数的压栈问题

(4)cpu的乱序执行问题

(5)cpu中cache和内存一致性的问题


当然,如果我们所要思考只是简单的应用层设计,考虑到这些内容本身已经实属不易了。然而,我们考虑的是如何设计嵌入式操作系统的问题,所以接下来还要看看一般cpu下面都包含了那些内容。这样,只要熟练掌握了一款cpu的设计和实现,对其他cpu的知识也会触类旁通了。


任何一款cpu,不管是完成的功能是什么样的,通常都会有这样一些基本设计:

(1)寄存器

堆栈寄存器

pc寄存器

状态寄存器

运算寄存器

寄存器是cpu内部的基本资源。不管cpu的代码执行到什么时候,这些资源都是共享的,所以在cpu发生中断、函数调用、线程切换的时候,都需要对这些寄存器进行保护,常用的基本措施就是把把它们保存到临时堆栈当中去。堆栈寄存器记录了当前堆栈使用到了什么地方,pc寄存器则记录当前代码跑到了什么地方,下一条指令在什么地方等。状态寄存器则保存了当前cpu的执行情况,包括计算有没有溢出、中断是关还是开、有没有o除数异常等等。至于运算寄存器就因cpu而异了,有的cpu寄存器比较少,比如说x86的寄存器;有的cpu寄存器就比较多,比如说powerpc。运算寄存器的用途很多,比如说数据访问、计算、移位、返回计算结果等等。


(2)指令集

寻址指令

数学运算指令

逻辑运算指令

软中断指令

跳转指令

远程调用指令

io访问指令

栈操作指令

指令集在某种程度上直接决定了某一种cpu的类型。就像intel和amd生产的cpu虽然有差别,但是它们的cpu使用的都是x86的指令集,而marwell、samsung和高通生产的cpu当然也不同,但是它们的指令集都是arm指令集。所以,如果软件在marwell上跑,一般来说也可以在Samsung上跑起来。指令集很复杂,内容很多。但是通常来说,上面这些内容都是cpu所必须要完成的几种指令。当然重中之重的还是中断和栈处理指令。


(3)中断、异常处理机制

不管是什么cpu,中断部分的内容都是少不了的。试想一想,如果一颗cpu只知道不停地运行,那么它的执行效率实际上是很低的。拥有了中断的cpu不仅使得cpu可以和更多的外设io打交道,还能极大地提高自身运行的效率。不同的cpu处理中断的方法其实都差不多,在整个cpu的地址空间里面,通常在低地址区域会有一张中断向量表,表中每一项记录了每一个中断对应的处理函数。所以,只要中断发生时,cpu就会首先将下一条pc地址压入堆栈,然后跳转到中断向量表中对应的中断地址处执行的相应的处理函数。这个过程是cpu自动完成的,不需要我们关心。这样对我们来说,它和cpu中的函数调用其实没有什么区别。等待中断处理结束后,我们使用ret指令返回到之前压入的那个ip地址处,继续下面的代码。整个过程就好像中断根本没有发生过一样。


所以,对于cpu的了解其实主要就是对寄存器、指令集和中断的了解。有了对中断和堆栈的深入理解,其实也就没有什么困难的了。在这里我们大家可以考虑一个问题,如何在Windows或者linux下仿真中断完成我们的操作系统开发呢?大家可以自己先思考一下,我们会在随后的博客中继续介绍。整篇文章,我们没有介绍编码的相关内容,其实只要把这里的基本概念弄清楚了,剩下来其实就是一些流程性的工作了。在软件开发中,设计其实是最难的,剩下的才是开发和调试。



分享到:
评论

相关推荐

    一个微型嵌入式RTOS,参考李述铜《从0到1自己动手写嵌入式操作系统》

    第一周 双任务切换操作系统的实现 C1.04 工程创建。标志变量反转的逻辑仪观测标志变量反转的逻辑仪观测 C1.07 内核编程实践。CPU寄存器数据的保护(压栈)与恢复(出栈),调试技术的应用。简单汇编代码的编写 C...

    嵌入式实时操作系统small RTOS51原理及应用

    它是完全免费的、源代码公开的多任务实时操作系统。它可在无任何外部数据存储器的单片80C51系统上运行,并且是可移植的。全书分两部分。第一部分为基础篇,介绍Small RTOS51和一些基本概念,并详细分析Small RTOS51...

    嵌入式实时操作系统μCOS-3.pdf

    μC/OS-III是源码公开的商用嵌入式实时操作系统内核,由著名的μC/OS-II发展而来。μC/OS-III针对以ARM Cortex为代表的新一代CPtJ,面向带有可用于优先级查表的硬件指令(如,前导零计算指令)的CPU的嵌入式应用。...

    基于嵌入式实时操作系统的程序设计技术 周航慈.pdf

    μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的, 绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。...

    嵌入式实时操作系统.part5

    《嵌入式操作系统》是一本非常好的嵌入式开发书籍。深入讲解了实时操作系统RTOS(Real Time Operating System)的运行原理,不仅告诉读者这个实时内核是怎么写的,还解释了为什么要这样写。其绝大部分代码是用C语言...

    嵌入式实时操作系统.part4

    《嵌入式操作系统》是一本非常好的嵌入式开发书籍。深入讲解了实时操作系统RTOS(Real Time Operating System)的运行原理,不仅告诉读者这个实时内核是怎么写的,还解释了为什么要这样写。其绝大部分代码是用C语言...

    嵌入式实时操作系统.part1

    《嵌入式操作系统》是一本非常好的嵌入式开发书籍。深入讲解了实时操作系统RTOS(Real Time Operating System)的运行原理,不仅告诉读者这个实时内核是怎么写的,还解释了为什么要这样写。其绝大部分代码是用C语言...

    嵌入式实时操作系统.part2

    《嵌入式操作系统》是一本非常好的嵌入式开发书籍。深入讲解了实时操作系统RTOS(Real Time Operating System)的运行原理,不仅告诉读者这个实时内核是怎么写的,还解释了为什么要这样写。其绝大部分代码是用C语言...

    嵌入式实时操作系统.part3

    《嵌入式操作系统》是一本非常好的嵌入式开发书籍。深入讲解了实时操作系统RTOS(Real Time Operating System)的运行原理,不仅告诉读者这个实时内核是怎么写的,还解释了为什么要这样写。其绝大部分代码是用C语言...

    嵌入式实时操作系统.part6

    《嵌入式操作系统》是一本非常好的嵌入式开发书籍。深入讲解了实时操作系统RTOS(Real Time Operating System)的运行原理,不仅告诉读者这个实时内核是怎么写的,还解释了为什么要这样写。其绝大部分代码是用C语言...

    klite:简洁易用的嵌入式操作系统内核。github停止更新,请移步开源中国->

    KLite简洁易用的嵌入式操作系统内核 一。简介 KLite是由个人开发者业余时间编写的嵌入式操作系统内核,创建于2015年5月6日,并以MIT协议开放源代码。 它是一款入门级的小型抢占式操作系统内核,以简洁易用为设计...

    嵌入式实时操作系统μC\OS-Ⅱ(第2版) pdf part3(共3 parts)

    μC/OSII是著名的、源码公开的实时内核,是专为嵌入式应用设计的,可用于各类8位、16位和32位单片机或DSP。从μC/OS算起,该内核已有10余年应用史,在诸多领域得到了广泛应用.本书是MicroC/OSII The Real Time ...

    嵌入式实时操作系统ucos-II 第二版 源代码

    μC/OSII是著名的、源码公开的实时内核,是专为嵌入式应用设计的,可用于各类8位、16位和32位单片机或DSP。从μC/OS算起,该内核已有10余年应用史,在诸多领域得到了广泛应用。  本书是MicroC/OSII The Real Time ...

    基于STM平台中五大嵌入式操作系统

    下面分别介绍这五种嵌入式操作系统的特点及不足,通过对比,读者可以根据自己的应用需求选择合适的平台。 TOP1:μClinux μClinux是一种优秀的嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微...

    嵌入式实时操作系统μCOS-II 第二版 邵贝贝译 PDF版.part2

    文件3-2,文件被分割.μC/OSII是著名的、源码公开的实时内核,是专为嵌入式应用设计的,可用于各类8位、16位和32... 本书可用做高等院校嵌入式实时系统课程教材或工程师培训教材,也可供嵌入式应用开发人员研究与使用。

    嵌入式linux内核学习资料

    它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。 它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。 Linux继承了Unix以网络为核心的设计...

    嵌入式实时操作系统μC\OS-Ⅱ(第2版) pdf part1(共3 parts)

    μC/OSII是著名的、源码公开的实时内核,是专为嵌入式应用设计的,可用于各类8位、16位和32位单片机或DSP。从μC/OS算起,该内核已有10余年应用史,在诸多领域得到了广泛应用.本书是MicroC/OSII The Real Time ...

    邵贝贝 译 嵌入式实时操作系统μCOS-II(第二版)及随书光盘 第二部分

    因为书太大了,所以只好分成两部分。  μC/OSII是著名的、源码公开的实时内核,是专为嵌入式应用设计的,... 本书可用做高等院校嵌入式实时系统课程教材或工程师培训教材,也可供嵌入式应用开发人员研究与使用。

    嵌入式实时操作系统.part3.rar

    uC/OS-II是著名的、源码公开的实时内核,是专为嵌人式应用设计的,可用于各类8位,16位和32位单片机或D5P。... 本书可用做高等院校嵌入式实时系统课程教材或工程师培训教材,也可供嵌人式应用开发人员研究与使用。

    ARM嵌入式系统开发手册

    ARM嵌入式系统开发手册 第 1 章 ARM 微处理器概述 5 1.1 ARM-Advanced RISC Machines 5 1.2 ARM 微处理器的应用领域及特点 5 1.2.1 ARM 微处理器的应用领域 5 1.2.2 ARM 微处理器的特点 6 1.3 ARM 微处理器系列 6 ...

Global site tag (gtag.js) - Google Analytics