从CPU

您所在的位置:网站首页 计算机中cpu指的是什么 从CPU

从CPU

2024-06-12 01:38| 来源: 网络整理| 查看: 265

这里写目录标题 CPU-内存模型CPU内存 计算机执行程序的过程取指周期:从内存取指令执行周期(以此程序的加法运算为例)将内存内容写出执行加法运算将内容写入内存

CPU-内存模型

在这里插入图片描述

CPU

CPU的基本组成部分为运算器、cache、控制器三大部分。

控制器: 由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成,它是发布命令的“决策机构”,即完成协调和指挥整个计算机系统的操作。

控制器的主要功能有: (1)从指令cache中取出一条指令,并指出下一条指令在指令cache中的位置 (2)对指令进行译码或测试,并产生相应的操作控制信号,比如:一次数据cache的读/写操作,一个算术逻辑运算操作,或一个IO操作。这些信号是为了启动相应的动作。 (3)指挥并控制CPU、数据cache和输入/输出设备之间数据流动的方向

运算器: 由算术逻辑单元ALU、通用寄存器、数据缓冲寄存器DR和状态条件寄存器PSW组成,它是数据加工处理部件。相对于控制器而言,运算器接受控制器的命令而进行动作,即运算器所进行的全部功能都是由控制器发出的控制信号来指挥的,所以它是执行部件。

运算器有主要两个功能: (1)执行所有的算术运算(加减乘除等),通常产生一个运算结果 (2)执行所有的逻辑运算,并进行逻辑测试,如零值测试或两个值的大小比较等。通常产生一个判决。

内存

我们知道计算机中所有程序的运⾏都在内存中进行。它用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据。 只要计算机开始运⾏,操作系统就会把需要运算的数据从内存调到CPU中进⾏运算。当运算完成,CPU将结果传送出来。

更详细一点,可以将内存分为数存和指存: (CPU中运算的数据放在数存中;硬盘中存放的应用程序放在指存中,需要运行某个程序,则将其放入内存,然后完成相应的指令)。 在这里插入图片描述 同时,内存还分为用户地址空间和内核地址空间。 区分内核空间和用户空间原因: 早期操作系统是不区分内核空间和用户空间的,但是应用程序能访问任意内存空间,如果程序不稳定常常把系统搞崩溃,比如清除操作系统的内存数据。可以看出应用程序随便访问内存是非常危险的,于是按照CPU 指令的重要程度对指令进行了分级,指令分为四个级别:Ring0~Ring3 (和电影分级有点像),linux 只使用了 Ring0 和 Ring3 两个运行级别,进程运行在 Ring3 级别时运行在用户态,指令只访问用户空间,而运行在 Ring0 级别时被称为运行在内核态,可以访问任意内存空间。

用户态和内核态: 当进程/线程运行在内核空间时就处于内核态,而进程/线程运行在用户空间时则处于用户态。 用户态的程序不能随意操作内核地址空间,这样对操作系统具有一定的安全保护作用。

在内核态下,进程运行在内核地址空间中,此时 CPU 可以执行任何指令。运行的代码也不受任何的限制,可以自由地访问任何有效地址,也可以直接进行端口的访问。

在用户态下,进程运行在用户地址空间中,被执行的代码要受到 CPU 的很多检查,比如:进程只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址。

用户空间和内核空间的区别 - 安琪拉的博客的文章 - 知乎 https://zhuanlan.zhihu.com/p/343597285.

计算机执行程序的过程

程序是由语句(高级语言:java等)或指令(机器语言或汇编语言)组成的序列,按从上到下的顺序执行。用高级语言或汇编语言编写的程序一般要编译(或汇编)并连接成可执行代码(程序)才可以执行,例如手机上的APP就是可执行程序。可执行程序在执行前要先调入内存。

假定程序已经装入内存(指存),接下来我们逐步分析:

取指周期:从内存取指令

以MOV指令为例: 在这里插入图片描述 (1)程序计数器PC中装入第一条指令地址101(八进制)。 (2)PC的内容被放到指令地址总线ABUS(I)上,对指存进行译码,并启动读命令。 (3)从101号地址读出MOV指令通过指令总线IBUS装入指令寄存器IR。 (4)程序计数器内容加1,变成102,为取下一条指令做好准备。 (5)指令寄存器中的操作码(OP)被译码。 (6)CPU识别出是MOV指令。至此取指周期结束。          执行周期放到后文介绍。

ps:在程序开始执行前,程序计数器PC中的内容必须是它的起始地址。

执行周期(以此程序的加法运算为例)

以下执行周期的取指周期与上文的MOV指令取指过程相同。 取指周期将指令译码之后,操作控制器OC将产生相应的操作命令。

将内存内容写出

执行LAD指令: 在这里插入图片描述 (1)操作控制器OC发出控制命令打开IR输出三态门 ,将指令中的直接地址码6放到数据总线DBUS上 (2)OC发出操作指令,将地址码6装入数存地址寄存器AR上 (3)OC发出读命令,将数存6号单元中的数100读出到DBUS上 (4)OC发出命令,将DBUS上的数据100装入缓冲寄存器DR (5)OC发出命令,将DR中的数100装入通用寄存器R1,原来R1中的数被冲掉

执行加法运算

执行ADD指令: 在这里插入图片描述 (1)操作控制器OC发出控制命令到通用寄存器,选择R1做源寄存器,R2做目标寄存器 (2)OC发出控制命令到ALU,指定ALU做R1(100)和R2(20)的加法操作 (3)OC发出控制命令,打开ALU输出三态门,运算结果120放到DBUS上 (4)OC发出控制命令,将DBUS上数据打入缓冲寄存器DR,ALU产生的进位信号保存状态字寄存器在PSW中 (5)OC发出控制命令,将DR(120)装入R2,R2中原来的内容20被冲掉

将内容写入内存

执行STO指令:

在这里插入图片描述 (1)操作控制器OC发出操作命令到通用寄存器,选择(R3)=30做数据存储器的地址单元 (2)OC发出操作命令,打开通用寄存器输出三态门(不经ALU以节省时间),将地址30放到DBUS上 (3)OC发出操作命令,将地址30打入AR,并进行数存地址译码 (4)OC发出操作命令到通用寄存器,选择(R2)=120,作为数存的写入数据 (5)OC发出操作命令,打开通用寄存器输出三态门,将数据120放到DBUS上 (6)OC发出操作命令,将数据120写入数存30号单元,它原先的数据40被冲掉

ps:DBUS是单总线结构,先送地址(30),后送数据(120),必须分时传送。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3