前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软硬件融合技术内幕 基础篇(3) —— CPU外面有什么? (中)

软硬件融合技术内幕 基础篇(3) —— CPU外面有什么? (中)

作者头像
用户8289326
发布2022-09-08 17:16:05
1.4K0
发布2022-09-08 17:16:05
举报
文章被收录于专栏:帅云霓的技术小屋

前期我们介绍了经典的8位处理器——理光6502。与此同时,Intel也设计了8008,8051等应用广泛的8位处理器。1976年,Intel推出了新一代处理器8086。

8086是所谓的16位寄存器,也就是每次读写内存或读写IO外设的操作可以为16bit。

让我们回顾一下上期6502的引脚图:

6502有40根引脚,其中16根为地址线,8根为数据线。而8086的数据位宽为16位,地址为20位。显然,40根引脚是不够的。

因此,8086采取了地址/数据线复用的方式,也就是AD0-AD15的16条地址线和数据线进行复用:

当8086需要读写内存或外部IO设备的时候,先在AD0-AD15的这16条线上放出地址的低0-15位,同时A16-A19放出地址的16-19位,组成20位的地址后,再通过AD0-AD15放出或读取数据。

那么,问题来了:

内存芯片的地址线和数据线是分离的,如下图所示:

图中,A0-A14代表15条地址线,而IO0-IO7代表8条数据线。而8086处理器的16条地址线和数据线是复用的。那么,内存芯片是如何理解8086处理器在AD0-AD15上先发送地址,再收发数据的时序呢?

工程师们早就想到了这个问题。

如果有一颗芯片,可以将CPU在AD0-AD15上放出的16位的地址暂时记住(锁存),并连接到RAM的地址线。然后,AD0-AD15也直连到RAM的数据线,在AD0-AD15上放出或读取数据的时候,CPU可以从RAM的数据线上读写数据。

当然,CPU会通过电路通知锁存器:我要把AD0-AD15从输出地址切换为读写数据了,你现在锁存住地址!

有了锁存器后,CPU和内存的连接关系如下图:

图中的AD0-AD15,就是后来出现的CPU FSB(Front Side Bus)的前身,而锁存器后来也逐渐进化成为了北桥(North Bridge)…

8086还有几个好搭档:

第一个是8259。

在计算机系统中,一个很重要的概念叫中断(Interrupt)。中断是异步的,会让计算机停止现在正在执行的程序,转到预置的中断处理程序地址进行中断处理。一般地,在中断处理程序中,会保存中断现场(包括程序指针IP和其他重要寄存器),方便返回被中断的程序。

中断的触发依赖于中断引脚上收到的电信号。在8086中,实际上只有一个电信号能够触发中断。那么,当计算机中有键盘、鼠标、游戏摇杆、软盘驱动器、硬盘驱动器和串行口等多个IO设备的时候,如何让每个设备都可以触发处理器的中断呢?

这就依赖于8259(可编程中断控制器)了。在8259的帮助下,8086可以扩展出多个中断源:

如图,8253支持8个中断源,任意一个中断源发生中断 (从高电平跳变到低电平)的时候,8253会通过IRQ引脚向8086 CPU发起中断。CPU从D0/D7读取8253的状态寄存器,就可以得知实际上是哪个引脚产生的中断 (有可能是多个中断,想一想,这时候CPU应当如何处理?)

第二个搭档是8237。

8237是可编程DMA控制器。

什么是DMA呢?

如果我们需要从软盘驱动器(这个家伙,“保存”图标的来历)

读取一个扇区 (512字节)的数据的时候,CPU向软盘驱动器的寄存器写入了读取指令后,随着软盘驱动器的吱吱声,会循环发生3个动作:

  1. 软盘驱动器的磁头会逐字节地读取软盘的内容;
  2. 每读取一个字节,都会向CPU发起一个中断;
  3. CPU在中断处理程序里面,从软盘驱动器控制器中读取这个字节。

以上3个动作会重复512次。

这种工作方式对CPU的消耗是可想而知的。

因此,工程师们需要一种新的工作模式——DMA。

DMA指的是外设直接读取或写入RAM的内容,如软盘驱动器读取一个扇区以后,将这个扇区内容写入指定的RAM地址,然后通过中断通知CPU。

8237就是承担这一职责的协处理器,能够帮助外设向CPU申请DMA。CPU收到DMA申请的时候,会暂时封锁内存总线(暂停从内存总线上发送地址和数据),把总线让渡给外设暂时使用,如下图:

在进行DMA传输的时候:

CPU暂停地址/数据在总线上的传输,外设直接向SRAM的地址线发送地址,并通过数据线读写数据。8237的作用,就是协调多个外设的DMA请求,对其进行排序调度以后通知到CPU。

第三个搭档是8253。

8253的作用是产生固定频率的时钟脉冲,以及在预定的时间到了的时候发起中断(也就是闹钟功能)。

我们在《虚拟化与云计算技术硬核内幕 (19) —— 时间管理大师(上)》里面提到过,多任务操作系统是所谓的“时间管理大师”,需要一个时钟中断,把CPU的时间划分为时间片,分配给多个任务。即使是DOS这样的单任务操作系统也需要一个定期发生(默认是55毫秒一次)的时钟中断,来让游戏一类实时应用开发者能够有一个时间基准。

8253经过编程,就可以按一定的周期向CPU发起中断(如Linux下是1ms),帮助CPU成为了“时间管理大师”。

此外,还有串口控制器8250(连接最早的键盘和鼠标),并口控制器8255(连接最早的打印机)等。

在这些外部协处理器芯片的帮助下,才能构建一个微型计算机系统。最早的8086计算机(PC-XT)就是由它们组成的,直到新一代286处理器的诞生,这些协处理器才被整合成为南桥芯片(IO Hub)。

16位计算机能够访问更多的内存(如8086是1MB,80286是16MB),而计算的位宽也从8bit扩展到了16bit,因此,使用16位机能够有更好的工作和娱乐体验:

下期,我们再看看计算机从“古代”到我们熟悉的样子的进化。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帅云霓的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档