中山市拓电电子科技有限公司

Zhongshan Tuodian Electronic Technology co. LTD

欢迎进入中山市拓电电子科技有限公司——企业官网

全国咨询热线:0760-86386870

网站首页 >> 资讯之家 >>行业动态 >> CPU 是如何执行一条指令的?
详细内容

CPU 是如何执行一条指令的?

这张表描述了 Linux 系统中几个段描述符信息。

数据段和代码段,仔细看一下相关书籍就知道这些描述符代表什么意思,但是:

为什么这几个段的 Base 地址都是 0x00000000

为什么 Limit 都是 0xfffff

为什么它们的 Type 类型和优先级 DPL 又各不相同?

如果没有对 x86 平台的一些基础知识的理解,要啃完这本书真的是挺费力气的!

更要命的是,随着 Linux 内核代码的体积不断膨胀,最新的 5.13 版本压缩档已经是一百多兆了:

这么一个庞然大物,如何下手才能真正的学好 Linux 呢?!

即便是从 Linux 0.11 版本开始,其中的很多代码看起来也是非常费劲的!

周末在整理一些吃灰的书籍时,发现几本以前看过的好书: 王爽的《汇编语言》,李忠的《从实模式到保护模式》,马朝晖翻译的《汇编语言程序设计》等等。

都是非常-非常-老的书籍,再次翻了一下,真心觉得内容写得真好!

对一些概念、原理、设计思路的描述,清晰而透彻。

Linux 系统中的很多关于分段、内存、寄存器相关的设计,都可以在这些书籍中找到基础支撑。

于是乎,我就有了一个想法:是否可以把这些书籍中,与 Linux 系统相关的内容进行一次重读和整理,但绝不是简单的知识搬运。

考虑了一下,大概有下面几个想法:

 

先确定最终目标的目标:学习 Linux 操作系统;

 

 

这几本书写的都是汇编语言,以及比较基础的底层知识。我们会淡化汇编语言部分,把重点放在与 Linux 操作系统有关联的原理部分;

 

 

   不会严格按照书中的内容、顺序来输出文章,而是把几本书中内容相关的部分放在一起学习、讨论;

   有些内容,可以与 Linux 2.6 版本中的相关部分进行对比分析,这样的话在以后学习 Linux 内核部分时,可以找到底层的支撑;

   最后,希望我自己能坚持这个系列,也算是给自己的一个梳理吧。

 

一句话:以基础知识为主!


古老的 Intel8086 处理器

   8086  Intel 公司的第一款 16 位处理器,诞生于 1978 年,应该比各位小伙伴的年龄都大一些。

    Intel 公司的所有处理器中,它占有很重要的地位,是整个 Intel 32 位架构处理器(IA-32)的开山鼻祖。

   那么,问题来了,什么叫 16 位的处理器?

   有些人会把处理器的位数与地址总线的位数搞混在一起!

我们知道,CPU 在访问内存的时候,是通过地址总线来传送物理地址的。

8086 CPU  20 位的地址线,可以传送 20 位地址。

   每一根地址线都表示一个 bit,那么 20  bit 可以表示的最大值就是 2 20 次方。

   也就是说:最大可以定位到 1M 地址的内存,这称作 CPU 的寻址能力。

   但是,8086 处理器却是 16 位的,因为:

 

   运算器一次最多可以处理 16 位的数据;

   寄存器的最大宽度为 16 ;

   寄存器和运算器之间的通路为 16 ;

 

   也就是说:在 8086 处理器的内部,能够一次性处理、传输、暂时存储的最大长度是 16 位,因此,我们说它是 16 位结构的 CPU


主存储器是什么?

   计算机的本质就是对数据的存储和处理,那么参与计算的数据是从哪里来的呢?那就是一个称作 存储器(Storage Memory)的物理器件。

从广义上来说,只要能存储数据的器件都可以称作存储器,比如:硬盘、U盘等。

   但是,在计算机内部,有一种专门与 CPU 相连接,用来存储正在执行的程序和数据的存储器,一般称作内存储器或者主存储器,简称:内存或主存。

内存按照字节来组织,单次访问的最小单位是 1 个字节,这是最基本的存储单元。

每一个存储单元,也就是一个字节,都对应着一个地址,如下图所示:

   CPU 就通过地址总线来确定:对内存中的哪一个存储单元中的数据进行访问。

    1 个字节的地址是 0000H,第 2 个字节的地址是 0001H,后面以此类推。

   图中的这个内存,最大存储单元的地址是 FFFFH,换算成十进制就是 65535,因此这个内存的容量是 65536 字节,也就是 64 KB

这里有一个原子操作的问题可以考虑一下。

    Linux 内核代码中,很多地方使用了原子操作,比如:互斥锁的实现代码。

   为什么原子操作需要对变量的类型限制为 int 型呢?这就涉及到对内存的读写操作了。

   尽管内存的最小组成单位是字节,但是,经过精心的设计和安排,不同位数的 CPU,能够按照字节、字、双字进行访问。

   换句话说,仅通过单次访问,16 位处理器就能处理 16 位的二进制数,32 位处理器就能处理32 位的二进制数。

寄存器是什么?

    CPU 内部,一些都是代表 0 的电信号,这些二进制数字的一组电信号出现在处理器内部线路上,它们是一排高低电平的组合,代表着二进制数中的每一位。

在处理器内部,必须用一个称为寄存器的电路把这些数据锁存起来。

   因此,寄存器本质上也属于存储器的一种。只不过它们位于处理器的内部,CPU 访问寄存器比访问内存的速度更快。

   处理器总是很忙的,在它操作的过程中,所有数据在寄存器里面只能是临时存在一小会,然后再被送往别处,这就是为什么它被叫做“寄存器”。

   刚才说了,这些寄存器都是 16 位的。由于需要与以前更古老的处理器兼容,其中的 4 个寄存器:AXBXCXDX 还可以当成 2 8 位的寄存器来使用。


中山市拓电电子科技有限公司

Zhongshan Tuodian Electronic Technology co. LTD

电话:

手机:13424599123(刘先生)

QQ:123929918

地址:广东省中山市火炬开发区陵岗工业园 

0760-86386870

手机扫一扫  快速浏览



友情链接:华企在线  UV设备

技术支持: 华企在线 | 管理登录
seo seo