计算机组成原理

美籍匈牙利科学家冯·诺依曼最先提出“程序存储”的思想,并成功将其运用在计算机的设计之中,根据这一原理制造的计算机被称为冯·诺依曼结构计算机。
程序存储”:指令以代码的形式事先输入到计算机的主存储器中,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。即按地址访问并顺序执行指令
计算机按照此原理应具有5大功能:数据传送功能、数据存储功能、数据处理功能、操作控制功能、操作判断功能
冯诺曼体系结构特点:
计算机硬件系统由五大部件组成(存储器、运算器、控制器、输出设备、输入设备)
指令和数据以同等地位存于存储器,可按地址寻访
指令和数据用二进制表示
指令由操作码和地址码组成
存储程序
以运算器为中心
哈佛结构的计算机分为三大部件:(1)CPU;(2)程序存储器;(3)数据存储器。它的特点是将程序指令和数据分开存储,由于数据存储器与程序存储器采用不同的总线,因而较大的提高了存储器的带宽,使之数字信号处理性能更加优越
在这里插入图片描述

存储器,存储器分为 主存储器(内存储器,CPU能直接访问)和 辅助存储器(外存储器,协助主存储器记忆更多的信息,辅助存储器的信息需要导入到主存储器中,才可以被CPU访问)。
主存储器是由地址寄存器(MAR),数据寄存器(MDR),存储体,时序控制逻辑,地址寄存器存放访存地址,经过地址译码后找到所选的存储单元。数据寄存器,是存储器与其他部件的中介,用于暂存要从存储器读或写的信息。时序控制逻辑用于产生存储器操作所需的各种时序信号。在现代CPU,MAR和MDR是在CPU中的。
运算器,是计算机的运算单元,用于算术运算和逻辑运算运算器的核心单元是算术逻辑单元(ALU)
控制器,控制器是计算机的指挥中心,有其指挥各部件自动协调第进行工作,现代计算机将运算器和控制器集成到一个芯片上,合成为中央处理器,简称CPU。有程序计数器(PC)、指令寄存器(IR)和控制单元(CU)。
CPU和主存之间通过一组总线相连,总线中有地址、控制和数据3组信号线。MAR中的地址信息会直接送到地址线上,用于指向读/写操作的主存存储单元;控制线中有读/写信号线,指出数据是从CPU写入主存还是从主存读出到CPU,根据是读操作还是写操作来控制将MDR中的数据是直接送到数据线上还是将数据线上的数据接收到MDR中。
系统开机运行的首先是地址位第一个的pc,程序计数器加一,指向mar,mdr再指向mar读取指令或者程序,再发送到ir指令寄存器再由对应的cu进行控制。
cpu结构alu算术逻辑单元(arithmetic logic unity)输入两个操作数如0和1,然后输入操作码最后得到运算结果,然后与或非操作,就是一个逻辑运算合集器。只要有alu,pc,ir,cu和寄存器与中断系统组成。
计算机储存结构,cache到主存(ddr),主存到辅存(硬盘sd卡),前面的cache起加速储存作用,后面使用虚拟存储器技术实现主存和辅存进行调度主要是扩存。
cache的作用是cpu和内存之间响应速度不同,cpu快内存慢不可能等内存用cache换速度,当前台运行程序,cache内存着程序需要的数据和代码,cache l1是每个cpu私有的,l2是一组cpu共有,l3是所有cpu通用。
与cache类似的将最近使用的数据放到高速存储器中,虚拟存储器是一个逻辑存储器不是实物,借用外存(如sd卡硬盘等反应慢的存储器)存放不需要用到的数据,用内外存数据倒换时间换更大的逻辑储存空间。
复杂指令集cisc(complex instruction set computer),精简指令集risc(reduced instruction set computer),前者是一条指令实现一个复杂功能主要是主机内存大用的x86架构,后者主要是手机平板等,内存小的arm架构。
如stm32一个指令写寄存器就是一个运动动作,如gpio拉高,而电脑一个指令如关机打开文件等也是一个指令集但是有好几步

三个级别的语言
1)机器语言。又称二进制代码语言,需要编程人员记忆每条指令的二进制编码。机器语言是计算机唯一可以直接识别和执行的语言。101000
2)汇编语言。汇编语言用英文单词或其缩写代替二进制的指令代码,更容易为人们记忆和理解。使用汇编语言编辑的程序,必须经过一个称为汇编程序的系统软件的翻译,将其转换为计算机的机器语言后,才能在计算机的硬件系统上执行。sqt等即汇编程序。
3)高级语言。高级语言(如C、C++、Java等)是为方便程序设计人员写出解决问题的处理方案和解题过程的程序。通常高级语言需要经过编译程序编译成汇编语言程序,然后经过汇编操作得到机器语言程序,或直接由高级语言程序翻译成机器语言程序。
由高级语言转换到汇编语言的过程叫做编译,由汇编语言转换到机器语言的过程叫做汇编,边翻译边执行的叫做解析。
在这里插入图片描述

IR存放当下欲执行的指令;PC存放下一条指令的地址;

MAR存放欲访问的存储单元地址;MDR存放从存储单元取来的数据!

地址译码器是主存的构成部分,不属于CPU;地址寄存器虽然一般属于主存,但是现代计算机中绝大多数CPU内集成了地址寄存器!

关于CPU存取速度的比较:寄存器(CPU内部)> Cache(高速的SRAM) > 内存 (SDRAM)
在这里插入图片描述
计算机的位数(机器字长),表示计算机进行一次整数运算(即定点整数运算)所能处理的二进制数据的位数。计算机字长通常选定为字节(8位)的整数倍,通常是2,4,8倍。不同的计算机,字节可能不同。
机器字长、指令字长、存储字长的区别和联系是什么?

机器字长:计算机能直接处理的二进制数据的位数,机器字长一般等于内部寄存器的大小,它决定了计算机的运算精度。
指令字长:一个指令字中包含的二进制代码的位数。
存储字长:一个存储单元存储的二进制代码的长度。等于MDR的位数, 它们都必须是字节的整数倍。
数据字长:数据总线一次能传送信息的位数,它可以不等于MDR的位数。
指令字长一般取存储字长的整数倍,若指令字长等于存储字长的2倍,则需要2次访存来取出一条指令,因此取指周期为机器周期的2倍;若指令字长等于存储字长,则取指周期等于机器周期。请注意64位操作系统是指特别为64位架构的计算机而设计的操作系统,它能够利用64位处理器的优势。但64位机器既可以使用64位操作系统,又可以使用32位操作系统。而32位处理器是无法使用64位操作系统的,32位arm一般应用在手机上面,64位一般主机在这里插入图片描述
在这里插入图片描述
unsigned型数据就是无符号整数,不考虑符号位。直接用全部二进制位对数值进行编码得到的就是无符号数,一般都用补码表示。

int型数据就是定点整数,一般用补码表示。int型数据的位数与运行平台和编译器有关,一般是32位或16位。例如,真值是-12的int型整数,在机器内存储的机器数(假定用32位寄存器寄存)是1111-1111-1111-1111-1111-1111-1111-0100.

long型数据和short型数据也都是定点整数,只是位数不同,分别是长整型和短整型数,通常用补码表示。

float型数据是用来表示实数的浮点数。现代计算机用IEEE754标准表示浮点数,其中32位单精度浮点数就是float型,64位双精度浮点数就是 double型。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

虚拟存储器:在这里插入图片描述
虚页一般比实页大,但是基本是等比例的
在这里插入图片描述
在这里插入图片描述
一条指令一般包括操作码字段和地址码字段。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

指令寻址方法:在这里插入图片描述
在这里插入图片描述

现代计算机都采用字节编址方式,即一个内存单元只能存放一字节的信息。一个操作数(如char、int、foat、 double)可能是8位、16位、32位或64位等,因此可能占用1个、2个、4个或8个内存单元。也就是说,一个操作数可能有多个内存地址对应。
有两种不同的地址指定方式:大端方式和小端方式。
大端方式:指令中给出的地址是操作数最高有效字节(MSB)所在的地址,地址在最高位
小端方式:指令中给出的地址是操作数最低有效字节(LSB)所在的地址,地址在最低位
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
虚拟内存补充:
指针基础,数据存储在内存中,由触发器保存,回忆数电的位线和字线,当一条八位的字线控制位为1时其存储数据才会输出,当为0时不输出。
所以位线由编码器控制(地址即输入编码器的数据,转化为01000或者0010只有一位是1对应1的那条字线存储数据才会输出),类似单片机通过地址查找寄存器,地址输入编码器,使能对应寄存器输出输入数据!!!,指针就是通过这种方式将地址赋值给指针,然后指针能快速操作对应数据,而不需要像其他数据一样,使用时还需要先读取,再复制到另一个内存区域,指针直接可以修改该地址的数据,相当于直接给了一把钥匙
在系统中所有的进程之间是共享CPU和主存内存资源的。当进程数量变多时,所需要的内存资源就会相应的增加。可能会导致部分程序没有主存空间可用。此外,由于资源是共享的,那么就有可能导致某个进程不小心写了另一个进程所使用的内存,进而导致程序运行不符合正常逻辑。
操作系统提供了一种对主存的抽象的概念,叫做虚拟内存(VM)。
虚拟内存是 硬件地址翻译、主存、磁盘文件和内核软件间的完美交互,他为每个进程提供了一个大的、一致的,私有的地址空间

在这里插入图片描述
虚拟内存的核心原理是:为每个程序设置一段"连续"的虚拟地址空间,把这个地址空间分割成多个具有连续地址范围的页 (Page),并把这些页和物理内存做映射,在程序运行期间动态映射到物理内存。ps如果不用虚拟地址,每次读取都需要cpu生成物理地址然后去主存读取(这里面包含怎么读取,需不需要其他操作啥的),如果使用虚拟存储,代码中的变量跟物理地址映射起来,直接通过虚拟地址对物理地址进行操作即可,不需要cpu生成物理地址(减少cpu工作量)
程序引用到一段在物理内存的地址空间时,由硬件立刻执行必要的映射;而当程序引用到一段不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。
在这里插入图片描述
在这里插入图片描述
虚拟内存作用:
1缓存: 将主存看做一个存储在磁盘空间上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据。
2内存管理: 为每个进程提供了一致的地址空间,简化内存管理。
3内存保护: 保护了每个进程的地址空间不被其他进程破坏。
ps:
虚拟内存技术还需要利用到一种 交换(swapping)技术,也就是通常所说的页面置换算法,在进程运行期间只分配映射当前使用到的内存,暂时不使用的数据则写回磁盘作为副本保存,需要用的时候再读入内存,动态地在磁盘和内存之间交换数据。(其实类似于cache!!!跟上面的缓存同样作用)
页表(Page Table),每次进行虚拟地址到物理地址的映射之时,都需要读取页表,从数学角度来说页表就是一个函数,入参是虚拟页号(Virtual Page Number,简称 VPN),输出是物理页框号(Physical Page Number,简称 PPN,也就是物理地址的基址)。
页表由多个页表项(Page Table Entry, 简称 PTE)组成,页表项的结构取决于机器架构,不过基本上都大同小异。一般来说页表项中都会存储物理页框号、修改位、访问位、保护位和 “在/不在” 位(有效位)等信息。
在这里插入图片描述

交互过程:

在这里插入图片描述
先cpu给一个虚拟地址,mmu通过虚拟地址得到真实存储在主存的页表项地址(某一物理地址功能集合的页表项),通过读取页表项地址得到其页表项(即该物理地址的有效信息,相当于在原来的物理地址基础上加了控制位进行功能操作),通过得到的页表项中物理地址读取主存。
在这里插入图片描述
现在让我们来回顾一下本文的核心内容:虚拟内存是存在于计算机 CPU 和物理内存之间一个中间层,主要作用是高效管理内存并减少内存出错。虚拟内存的几个核心概念有:

页表:从数学角度来说页表就是一个函数,入参是虚拟页号 VPN,输出是物理页框号 PPN,也就是物理地址的基址。页表由页表项组成,页表项中保存了所有用来进行地址翻译所需的信息,页表是虚拟内存得以正常运作的基础,每一个虚拟地址要翻译成物理地址都需要借助它来完成。
TLB:计算机硬件,主要用来解决引入虚拟内存之后寻址的性能问题,加速地址翻译。如果没有 TLB 来解决虚拟内存的性能问题,那么虚拟内存将只可能是一个学术上的理论而无法真正广泛地应用在计算机中。
多级页表和倒排页表:用来解决虚拟地址空间爆炸性膨胀而导致的大页表问题,多级页表通过将单页表进行分拆并按需分配虚拟内存页而倒排页表则是通过反转映射关系来实现节省内存的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值