80x86存储器组织结构

《80X86汇编语言程序设计》课后习题答案(华中科技大学王元珍版本) 《80X86汇编语言程序设计》课后习题答案(个人版本) 说明 我个人在学习《80X86汇编语言程序设计》(王元珍等主编,华中科技大学出版社出版)的过程中,发现并未找到课后习题的标准答案,因此就自己做了一份,源代码可以在我的github找到,欢迎一起交流,答案仅供参考。 第一章 预备知识 1.本章简介摘录 汇编语言是一种面向机器的、能够充分体用机器硬件特性的低级语言,他随机器 阅读详情

概括:

本文介绍80x86存储器组成的基本原理,会隐藏一些硬件细节。

一、基本组成

1.1、计算机系统由CPU,memory,I/O组成,如下图,时钟驱动CPU处理(读、写、运算)memory里的程序或者数据,以及控制I/O。

1.2、当然现的计算机系统不会如此简单,因为memory有很多种,I/O设备的种类更是繁多,由于CPU,memory,I/O的时钟频率不匹配,以及memory的成本等因素,现代计算机系统的基本组成如下(以Pentium为例):

二、存储器的层次结构

比较图2和图1,主要的区别在于系统对于存储器的组织,首先对于各种存储器进行说明。

1、寄存器

1个32bit的寄存器需要32个锁存器或者触发器构成,访问速度和cpu的时钟频率相匹配。

2、SRAM (static ram)

一个存储位需要六个晶体管,可以稳定在两种状态,所以不需要对SRAM进行刷新,所以叫静态ram,由于是晶体管的结构而且不需要刷新,所以其访问速度极快,几乎可以和cpu的时钟频率相匹配。

3、DRAM(dynamic ram)

1个存储位由一个电容和一个访问晶体管组成,因为电容的不稳定性,需要定期对其进行刷新(可以理解为冲电),由于是电容的结构而且需要刷新,所以其访问速度稍慢,一次访问需要几十至几百到cpu周期。

4、硬盘

由磁介质组成,容量巨大,但是访问速度比较慢。

5、磁带等更慢的存储设备

容量更巨大,访问速度巨慢。

 

典型的SRAM,DRAM,磁盘的造价以及访问时间如下(仅供参考)

                  SRAM          DRAM         磁盘

造价           100$/MB     1$/MB        0.01$/MB

访问时间     3ns             60ns          8000ns

 

以上可以看出访问速度越快的存储器或者造价很高或者占用空间较大,所以我们需要通过特定的存储器组织方式来实现时间(访问速度)和空间(存储器大小)的平衡,这个特定的组织方式就是层次结构,见下图。

三、程序的局部性与缓存机制

现在说明计算机系统如何利用图3的的层次结构实现时间和空间的平衡的。

3.1、程序的局部性体现为时间局部性和空间局部性。

       时间局部性:当某一内存地址被访问后,很有可能在不久的将来还会被访问。

       空间局部性:当某一内存地址被访问后,其附近的内存地址很有可能在不久的将来被访问。

3.2、缓存机制

       缓存机制就是利用程序的局部性特征实现存储器访问的时空平衡,通俗的说就是既要大存储空间,又要快速访问。

那么如何对大容量的存储器进行快速访问呢?答案只可能是把底层的大容量存储器的最近很有可能被频繁访问的内存(程序的局部性)缓存到它的上一级的具有较高访问速度的存储器当中去。

四、不同的缓存机制详述

     不同层次存储器之间的缓存机制是不同的,有的是由硬件完成,有的是由软件完成,有的是有软硬件共同完成,所以说硬件的发展和软件的发展是相辅相成的,即将出现的虚拟内存的概念就有力的说明了这一点。下面以实例说明Pentium的缓存机制。

4.1、主存与L2高速缓存(以下简称L2)缓存机制

       ▲为了便于描述假设地址空间为4G(32根地址线),主存大小为16MB。

       ▲Pentium的L2大小为512KB

主存的大小是L2大小的32倍,也就是说在某一时刻,主存最多有1/32被缓存到L2中,因为L2和主存在存储器结构中是访问速度较快的,为了提升效率,系统采用硬件缓存的机制,就是由硬件来决定主存的某个特定的内存单元缓存到L2的什么位置。

4.1.1、L2的组织见下图

由上图可知,L2除了512KB的缓存空间外,还另外附加了32KB的有效位和标志位,这个位的作用是辅助实现缓存机制。

4.1.2、缓存规则

当寻址16MB的地址空间(L2本身支持的最大地址空间为4G)被分解成了524288个(512K,2的15次方)block,每个block32字节,我们利用如下规则把这512k个block和L2的16K个block进行映射,见下图。

如上图所示,当寻址一个32bit的地址时,组索引决定此地址所在的block会被缓存到L2的哪一组,标记位决定此地址所在的block会被映射到哪一行(取余规则),最低的5位决定地址在L2某一行的block内的偏移。

4.1.3、缓存步骤

当访问主存的一个地址时,首先会按照地址的组索引找到L2中相应的组(组匹配),然后在组中根据标记位查找到相应的行(行匹配),然后根据偏移找到对应的地址。如果上述步骤出现未找到匹配的情况,就是未命中,则从主存中读取相应地址所在的block到L2中,并按照此规则缓存到L2当中。

4.1.4、关于组索引的补充

把组索引放到地址的中间也是由于程序的局部性,组索引放到中间可以把较大的连续的地址空间映射到L2的不同block内,这样不至于导致缓存的未命中很高。

 

4.2、L2与L1之间的缓存

由于L1具有更高的访问速度,为了更好的匹配cpu读取,把L1缓存分为L1-i chache(指令高速缓存)和L1-d chache(数据高速缓存),L1-i chache和L1-d chache的结构相同,都是16KB,128组,每组4行,每行32字节。

缓存规则也主存与L2的缓存规则相同。

结构如下图所示:

4.3、硬盘与内存之间的缓存(虚拟内存来了)

现在的操作系统提供多进程,多线程支持,对于32位的cpu来说,每一个进程都4GB的虚拟空间,各进程之间的虚拟空间互不影响,CPU为此机制提供了硬件支持,CPU和操作系统密切合作实现了硬盘到内存的缓存机制。

4.3.1、虚拟地址的概念

程序再被编译链接之后,变量或者函数的地址都是虚拟地址,操作系统会为此虚拟地址分配合适的物理地址的映射。

4.3.2、虚拟地址的主要作用

●使各进程的地址空间隔离,互不影响。

●为操作系统和用户程序分配不同的虚拟地址空间,并设置相应的访问权限也就是所谓的保护模式。

●实现内存映射等其他功能。

4.3.3、缓存规则

和上述的高速缓存规则类似,也需要把虚拟地址空间分成block,把内存也分成block,然后按照一定的规则进行块映射,程序的虚拟地址空间是存储在硬盘上的,所以虚拟地址和主存的缓存也就是硬盘和主存的缓存。

操作系统采用段表和页表来实现虚拟内存对物理内存的映射。

段表结构如下图:

页表结构如下图:

虚拟寻址规则如下图:

4.3.4、缓存步骤

因为页表和页面的物理机制都是4KB对齐的,所以低12bit就可以设置一些段或者页面的属性。

段表当中的每一项指向一个页表,页表中的每一项指向一个4KB的物理内存区域。

当寻址一个虚拟地址时,MMU根据虚拟地址的高10位段表中的页表起始地址,然后根据接下来的10位确定页表中的那一项,读出页面物理地址的高20位,和虚拟地址的低12位结合获得虚拟地址对应的物理地址,之所以使用二级页表提高了查找效率,80386以上的提供了硬件级的支持。

4.3.5、TLB

通过以上可知,查找虚拟对应的物理地址需要查表,而查表是比较费时的操作,如果把每次查表的结果缓存到一个高速缓存中,TLB出现了,TLB也分为指令TLB和数据TLB,让MMU首先会查找TLB,能大大提高系统效率。

 

指令TLB(32个字,8组,4行)结构图如下:

数据TLB类似,64个字,16组,4行,图略。

 

4.4、L1与寄存器之间的缓存机制由编译器决定。

 

总结:至此,计算机系统存储器层次访问的任督二脉已经打通,程序的局部性和存储的缓存机制是核心内容。



第三章-80x86微处理器 主要内容: 1、80x86微处理器简介 2、8086/8088微处理器 3、8086/8088存储器和I/O组织 学习要求: 一,80x86微处理器简介 80x86微处理器是美国Intel 公司生产的系列微处理器。该公司成立于1968年,1969年就设计了4位的4004 芯片,1973年开发出8位的8080芯片,1978年正式推出16位的8086... 阅读详情

相关推荐

80x86的体系结构原理

80x86的体系结构原理,对80x86的完全解释,对于了解一些底层的东西非常有帮助

8086微处理器的寄存器组织

8086CPU内部有14个16位的寄存器, 按功能可以分为8个通用寄存器, 4个段寄存器和两个控制寄存器. 通用寄存器 通用寄存器可以分为两类: 数据寄存器(AX, BX, CX, DX)和地址寄存器/变址寄存器(SI, DI, SP, BP) 8086CPU有4个16位数据寄存器: 累加器AX: 最常用的寄存器,许多操作可以在AX中完成, 而且有一些操作只能在AX中完成, 例如乘法和除法操作 ...

qq_43811102的博客 3322

极空间NAS零基础部署Wiki.js:Docker+PostgreSQL全流程避坑指南

本文提供了一份在极空间NAS上从零部署Wiki.js私有知识库的详细指南。通过Docker容器化技术,结合PostgreSQL数据库,手把手讲解环境准备、核心组件配置、性能优化及安全加固等全流程,并特别针对极空间平台特性提供了避坑要点,帮助用户打造安全、高效、自主可控的知识管理系统。

3a9bq4r8t2y的博客 483

IA-32保护模式下的内存寻址方式(一):分段

1、简介: 在基于Intel 80x86微处理器的平台上,内存寻址是内存管理最重要的一部分内容。而关于内存地址在实际的软件及硬件实现上,也出现了不同的表示方式:逻辑地址(logical address)、线性地址/虚拟地址(linear address/virtual address)以及物理地址(physical address)。其中: ①逻辑地址为“16位段地址:偏移地址”的表示方...

Apollon_krj的博客 4073

SAP与泛微OA集成(半导体行业)

本项目通过SAP PO中间件集成SAP与泛微OA在半导体行业的应用,由于行业特殊性,广泛深入应用了RSA加密等特性

集信通 1162

Unsloth Desktop 本地大模型微调量化实战指南

大语言模型的本地化定制正在成为开发者与内容创作者的重要需求,而微调与量化则是其中最关键的两项技术。LoRA 与 QLoRA 通过仅训练少量低秩矩阵,大幅降低显存占用和训练成本,让消费级 GPU 也能完成模型适配;GGUF 格式则打通了训练与推理的边界,使微调后的模型可直接接入 Ollama、llama.cpp 等主流推理引擎。本文以 Unsloth Desktop 为切入对象,从其底层加速原理出发,梳理了环境准备、模型加载、对话测试、量化导出、微调验证及 API 批量调用的完整链路,并针对显存优化、端口冲突

weixin_29055137的博客 397

Linux进程内存布局

Linux进程中的内存布局和地址空间

Dingo 2042

避坑指南:SAP成本中心分割结构配置常见错误及解决(含KA06/KL01前置步骤)

本文深入解析了SAP成本中心会计中分割结构配置的关键步骤与常见错误。重点强调了配置前必须通过KA06创建次级成本要素(类别42)和通过KL01创建活动类型这两个核心前置步骤,并详细剖析了在OKES中定义分割规则及版本时的高频报错原因与解决方案,帮助顾问和运维人员有效规避配置陷阱,确保成本分摊的准确性。

pear55的博客 864

----[x86实模式] 内存地址空间分布 CPU合成内存地址的方式 程序中段的加载 启动区格式要求----

2015.03.25-26 读《汇编语言》—王爽、《x86汇编语言:由实模式到保护模式》— 李忠、《30天自制操作系统》—川合秀实 整理笔记。 1 实模式 在实模式下,处理器的内存寻址方式和8086处理器相同。 2 计算机开机过程 任何一台使用Intel 系列CPU的PC机只要一开机,CPU就工作在实模式下。CPU从地址FFFF0H处开始执行指令,这是一条跳转指

记一忘三二 8517

数字IC时序约束实战:深入解析clock_uncertainty的设置策略与后端影响

本文深入探讨数字IC设计中clock_uncertainty的设置策略及其对后端实现的影响。通过分析时钟不确定度的组成(包括clock_skew、clock_jitter和margin),并结合实际项目经验,详细介绍了在不同设计阶段(综合、布局布线、签核)的动态调整方法。文章还提供了工程化处理参数来源、跨时钟域特殊处理以及优化时序收敛的实用技巧,帮助工程师提升数字IC设计的可靠性和性能。

weixin_29284657的博客 227

华为手环实时心率数据导出到UWP项目中

hello大家好呀O(∩_∩)O最近在做毕设 其中有个小功能要用到实时心率数据。查找网上的资料发现只有小米手环的实时心率数据导出但是没有华为手环的,我试了华为手环但是并不能行得通哈哈哈。现在分享一下华为手环实时心率数据导出的代码。

apple_63713858的博客 1581

Intel 80x86处理器简介

1.7 Intel 80x86处理器简介 到此,您已经看到了两个将要实际编译和运行的HLA程序。然而至今为止,出现在程序中的所有语句要么是数据声明,要么是对HLA标准库例程的调用,还不是真正的汇编语言。在我们学习真正的汇编语言之前,必须理解Intel 80x86处理器系列的基本结构,否则机器指令将没有任何意义。 Intel 系列CPU一般都被归为冯·诺依曼式机器。冯·诺依曼计算机系统包括三个主

liulinsjtu2的专栏 7249

STM32使用内部RC振荡器作为系统时钟开发项目--内晶振启动模板工程

STM32使用内部RC振荡器时,OSC32_IN,OSC32_OUT接法: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。 2)对于少于100脚的产品,有2种接法:    2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。    2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出

overflyme的博客 1万+

微机原理(三)—80x86微处理器

80x86微处理器 1.微处理器各项指标意义 主频:是指芯片所使用的主时钟频率,它直接影响计算机的运行速度 数据总线:是计算机中各个组成部件间进行数据传送时的公共通道;总之,数据总线位数越多,数据交换的速度就越快 地址总线:在对存储器或I/O端口进行访问时,传送由CPU提供的要访问的存储单元或I/O端口地址信息的总线. 其宽度决定了处理器能直接访问的主存容量大小 2.三级存储器组织结构 为了满...

wintershii的博客 961

【Seurat绘图进阶】从参数调优到美学定制:解锁DimPlot与FeaturePlot的隐藏技巧

本文深入探讨了Seurat包中DimPlot与FeaturePlot的进阶使用技巧,旨在解决单细胞数据可视化中的常见痛点。通过参数调优(如order、shuffle、raster)、颜色美学定制(使用RColorBrewer、viridis配色)以及性能优化(栅格化处理),并结合scCustomize包与patchwork排版,帮助用户将基础图表提升为信息清晰、可直接用于论文发表的出版级可视化结果。

lake5的博客 627

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

汇编语言 | 期末复习 · 80x86计算机组织结构

2 80x86计算机组织结构 2.1 80x86计算机基本结构 中央处理器CPU 运算器 执行指令所要求的算术运算、逻辑运算和数据传送等操作。 控制器 控制执行步骤;从内存中取出指令,分析指令的操作码,完成操作数的存取, 发出相应的控制命令。 寄存器 相当于运算器中的一个存储单元,但速度比存储器快得多
。 存储器 存放指令和数据,由若干存储单元构成,最小单位是字节。 将所有的存储单元按顺序编号,这些编号称为存储单元的地址 (也称为

m0_46922167的博客 371

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

64 linux 内核 分段,linux内核源码分析基础——x86的分段和分页机制

首先对某些概念进行解释。数据总线:是计算机中各个组成部件间进行数据传输时的公共通道;“内数据总线宽度”是指CPU芯片内部数据传送的宽度;“外数据总线宽度”是指CPU与外部交换数据时的数据宽度。显然,数据总线位数越多,数据交换的速度就越快。地址总线:是載对存储器或I/O端口进行访问时,传送由CPU提供的要访问的存储单元或I/O端口的地址信息的总线,其宽度决定了处理器能直接访问的主存容量的大小。现在的...

weixin_42318712的博客 436

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

汇编语言基础知识

1、什么是汇编语言,它在计算机语言中的地位?汇编语言是程序设计语言的基础语言,是唯一可以直接与计算机硬件打交道的语言 2、汇编语言源程序、汇编程序、汇编的关系? 3、汇编语言的特点 1) 汇编语言与机器指令一一对应,可充分理解计算机的操作过程 汇编语言指令是机器指令的符号表示 2) 汇编语言是靠近机器的语言 编程时要求熟悉机器硬件系统,可充分利用机器硬件中的全部功能,发

Feven_H的博客 6557

汇编语言与接口技术作业

第四章 80x86汇编语言程序设计 1.伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用? 答:区别:伪指令语句是能执行的语句,硬指令语句是CPU可以执行的语句。 伪指令语句主要作用是为汇编程序提供解释说明,它仅仅是在汇编过程中告诉汇编程序如何进行汇编。 7.假设MYWORD是一个字变量,MYBYTE1和MYBYTE2是两个字节变量,指出下列语句中的错误及其原因。 1.MOV BYTE PTR[BX], 1000 答:数据类型不匹配,目的地址单元是字节单元,1000大于255。无法存放。

抒情诗 8547

汇编学习笔记 第二章

80x86的基本结构 硬件系统由中央处理器(CPU),存储器(Memory),输入输出设备(Input/Output)组成,由系统总线连接。 运算器、控制器、寄存器

Cao970824的博客 787

第一章 80X86微型计算机组织 学习笔记

第一章 80X86微型计算机组织 计算机的主要内部硬件包括微处理器、内存和寄存器;外部硬件是指外部设备,如键盘、鼠标、显示器、磁盘、光盘等。 什么是汇编语言? 汇编语言是一种对计算机硬件进行直接编程的语言,所以,要学好汇编语言,必须对微处理器、存储系统、输入/输出系统有叫深刻的理解。 IBM-PC系列计算...

weixin_30237281的博客 223

Linux操作系统汇编语言基础知识(图文代码)

汇编语言是程序设计语言的基础语言,是唯一可以直接与计算机硬件打交道的语言。

嵌入式Linux内核的博客 1605

汇编语言【HFUT software】

1.定义 面向机器 软件 software instruction set(汇编语言) 硬件 hardware 软件和硬件的界面:ISA(Instruction Set Architecture )指令集体系结构 机器语言: 由机器指令构成,机器指令是二进制编码的指令,以指示计算机要进行的操作及操作对象 (指令 = 操作码 + 操作数) B024 B344 F6E3 050A00 表示36*68 + 10 汇编语言:机器语言的符号化,与机器密切相关(不同机器不一样) MOV AL,36; MO

qq_40493829的博客 720

微型计算机传输信息采用什么计数法,自考《微型计算机及其接口技术》的学习方法...

《微型计算机及其接口技术》是计算机应用专业(专科)非常重要的一门专业课,也是难度较大的一门课。考生不但要熟悉计算机硬件的功能特点,还要熟练的编制、调试软件,对考生的综合能力要求比较高。本课程的先修课程为:1.模拟电路与数字电路2.计算机组成原理3.汇编语言程序设计《微型计算机及其接口技术》复习大纲是我根据教科书内容反复整理与总结的,剔除了教材上的冗余,精简了基本理论。若考生在读懂、读通教科书的基础...

weixin_36085524的博客 752

80X86汇编—存储器的变址寻址

前言 本博文将讲解 80X86汇编中的 变址寻址,缘由是笔者对照 《80X86汇编语言程序设计_王元珍.pdf》学习时 遇到的困惑。比例因子 含义是啥 为啥要乘以它? 基本概念 相关概念和图片摘自《80X86汇编语言程序设计_王元珍.pdf》书中。 变址寻址:变址寻址方式的操作数放在主存储器中,其偏移地址EA是指令中指定寄存器的内容乘以比例因子后与给出的位移量之和。 笔者刚开始也不明白为啥要乘以比例因子F,反正就跟着书上例子代码敲敲 试试看!当然笔者出问题了。这里先抛结论,比例因子 意义是?笔者也是网络中

重庆李四 2127

80x86——寻址方式

一、指令的概念 (一)、指令的概念 1.计算机指令的分类:机械指令、伪指令和宏指令。 2.机械指令:机械指令是指计算机完成某种操作是命令。 3.指令的组成:计算机中指令有操作码字段和操作数字段组成。 ...

m0_50708613的博客 2671
上一篇: 8086编程模型
下一篇: 80386实模式编程模型
codesnail
博客等级 码龄18年 113粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值