学习交流加微信
- 我的qq: 1126137994
- 我的微信: liu1126137994
- 学习交流资源分享qq群: 962535112
深刻浅出处理器这几篇文章可能你以为对软件开发用处不大,这个看我的理解吧,如果想贯通上下,知其然还要知其因此然的话,或许仍是有点用处的。学习处理器的篇章很是少,花一点时间学一下也无所谓的!函数
在我以前仍是作硬件的时候,我一直不理解微处理器和微控制器的区别。 以前写过一篇文章,讲X86处理器的,能够点击查看:X86处理器学习
处理器分为两种:微处理器和微控制器。操作系统
微处理器与微控制器有如下区别:.net
微处理器设计
-- CPU3d
微控制器指针
--CPU + 片内内存 + 片内外设cdn
注意:blog
其中,CPU与外设(包括微控制器的片内外设与片外外设)都有寄存器,可是它们的用处倒是很是的不同。以前写过的X86处理器那篇文章中,已经讲了一些X86处理器的寄存器的用处,大体就是存储数据的,可是微控制器上的外设中的寄存器,不是用来存储数据的,而是用来控制外设的行为和工做方式的。
CPU寄存器
-- 专用指令执行,数据运算, 变量处理,参数传递
外设寄存器
-- 用于控制外设的行为和工做方式、
--寄存器值的配置须要查看相应的硬件手册
今天咱们只了解两个寄存器:PC程序计数器寄存器,SP栈指针寄存器。
PC程序计数器(指令指针寄存器IP)
-- PC实际上就是代码中的每一条指令的地址,这个地址恰好就是内存中代码段中的偏移地址
--每执行一条指令,PC中的值,就会发生变化
-- PC始终保存着一条指令,这条指令就是CPU即将要执行的那条指令(下一条要执行的指令)
SP栈指针(Stack Pointer)
--SP寄存器,始终保存着栈空间的栈顶地址,实现LIFO特性
-- SP栈指针用于保护函数调用的现场,好比中断断点,通用寄存器,函数的返回值等。具体如何保护,在之后的文章中会讲解
具体使用方法,会在后面的文章中讲解,今天暂时知道这两个寄存器的概念与用法。
众所周知,一台电脑有不少外设,USB,声卡,显卡等,这些都是外设。那么处理器是如何与外设进行数据通讯的呢?
处理器与外设之间的通讯经过IO操做完成。
那么既然有IO操做,确定是要有CPU去寻址的过程,在CPU所能寻址的范围内,找到外设的地址,对该地址进行读写就能够与外设进行通讯。那么外设如何经过IO将本身的地址空间映射给CPU的寻址空间呢?
经过内存映射IO空间
-- 外设经过精密的硬件连接映射到CPU的寻址空间。
-- 而后CPU经过地址访问与外设进行数据读写访问
独立的IO空间
--外设独立于CPU的地址空间,没法经过CPU的寻址来与外设进行通讯
-- 此时,须要使用专用的指令与外设进行通讯
上面是CPU与外设的基本通讯方式,咱们没必要纠结于具体的硬件实现,毕竟咱们是作软件开发。
那么,CPU如今能够与外设进行通讯了,那么CPU如何操做外设呢?
从软件工程师的角度来看,只要对不一样的IO端口读写,就能够操做外设;读写IO端口时候的具体值和意义须要查询具体的硬件手册。
上一节咱们知道了CPU是如何与外设打交道的。那么在硬件上,大概设怎样的设计呢?
首先CPU与外设之间要有地址总线与数据总线,而后须要有一个片选信号用来确保是否“启动”该外设。
经过具体的硬件设计,可使地址总线上的值在某个范围时,片选信号为“真”,即:使能链接的外设,从而读取相应地址中的数据!!!
具体的硬件如何设计不去细究,这里知道大概原理便可,
在一开始,咱们的电脑是没有操做系统的,那么处理器是如何启动的呢?
下图为CPU简易的启动过程
大体了解一下BIOS:
固化于硬件中的一个程序,用于初始化硬件,而后将指令指针寄存器PC(IP)指向主引导扇区程序,主引导扇区程序再来引导操做系统内核的自举程序,而后启动操做系统。(后期会专门学习操做系统,如今暂时不用了解)
本系列文章学习记录软件开发底层的基础知识。