指令寄存器

操作系统-存储器管理部分

别等时光非礼了梦想. 提交于 2019-12-05 18:15:59
存储器历来都是计算机系统中重要的组成部分。仍然是一种宝贵而又稀缺的资源。 如何对它加以有效的管理,不仅直接影响到存储器的利用效率,而且会影响系统的性能。 存储器的管理的主要对象是内存。在计算机执行时,几乎每一条指令都会涉及到对存储器的访问。 存储器的三个理想条件( 这三个条件从现在技术来讲是不可能同时达到的 ) 1.对存储器的访问速度要跟得上处理机的运行速度。 2.要求存储器要有很大的容量。 3.而且存储器的造价应该很低。 在现代计算机系统当中无一例外的采用了 多层结构的存储器系统 。 存储器的多层结构 对于通用计算机而言,存储层次至少应具有三级: CPU寄存器,主存,辅存 。 在存储层次当中,层次越高,存储介质的访问速度越快,价格越高,其存储容量越小。 寄存器,高速缓存,主存储器,磁盘缓存均属于操作系统中存储管理的管辖范畴。断电后它们所保存的信息将会消失。 固定磁盘,可移动存储介质的管理属于设备管理的范畴,它们存储的信息将被长期保存。 可执行存储器 在计算机系统的存储层次当中,寄存器和主存储器又被称为可执行存储器。 进程可以在很少的时钟时期内使用一条load或store指令对可执行存储器进行访问。而对辅存的访问则需要通过I/O设备来实现,所消耗的时间远大于访问可执行存储器所消耗的时间,一般相差3个数量级或者更多。 操作系统的存储管理负责对可执行存储器的分配

浅谈汇编

不羁的心 提交于 2019-12-05 16:46:38
创建编写汇编文件: 首先创建一个空文件 命名方式以.s结尾 第一行需要声明一个代码段 .text 第二行声明一个global + 方法名 .global test 指令: 汇编代码注释在行前加上 ; ret:返回 mov指令:目的寄存器,源操作数 举例:mov x0, #0x8 将8赋值给x0 add指令:将两个寄存器相加 sub指令:将两个寄存器相减 cmp指令:比较指令 操作数1 操作数2:cmp x0, x1 用x0减去x1,并将结果放到cpsr(程序状态寄存器)寄存器里 b 指令:跳转指令,相当于jump b 目标地址 bl指令:带返回的跳转指令,与b指令的区别是使用bl指令,ret指令才会生效 内存操作: 1、load,从内存中装载数据 ldr指令:从内存中读取数据 ldr x0, [x1] ldur指令: ,一般如果数据为负数,会用ldur ldp指令:从内存中读取数据,放到一对寄存器中 ldp w0, w1, [x2, #0x10] 2、store,往内存中存储数据 str指令:往内存中写入数据 str w0, [x1],将w0的数据写入到x1中 stur指令:参考ldur指令 stp指令:参考ldp指令 wzr指令:零寄存器 xzr指令:零寄存器 程序计数器: pc(Program Counter) 记录CPU当前指令是哪一条指令

深入理解java虚拟机(11):基于栈的字节码解释执行引擎

空扰寡人 提交于 2019-12-05 16:32:16
1、解释执行 编译过程如下 2、基于栈的指令集和基于寄存器的指令集 java编译器输出的指令流,基本是一种基于栈的指令集架构,指令流中的大部分指令都是零地址,依赖于操作数工作。与之相对的是基于寄存器的指令集,也就是目前pc支持的指令集。两者的不同,举例如下: 1+1基于栈的指令集iconst_1,iconst_1,iadd,istore_0,基于寄存器的指令集 mov eax 1,add eax 1。基于栈的指令集主要优点就是可移植性强,寄存器由硬件直接提供,程序直接依赖于这些硬件。基于栈的指令集可以自行决定是否将频繁访问数据放到寄存器中获得更好的性能,代码紧凑,编译器实现更加简单。因为栈实现在内存中和指令数量,所以基于栈的指令集要慢些。 3、基于栈的解释执行过程 public int calc(){ int a=100; int b=200; int c=300; return (a+b)*c; } public int calc(): Code: Stack=2,Locals=4,Args_size=1 0:bipush 100 2:istore_1 3:sipush 200 6:istore_2 7:sipush 300 10:istore_3 11:iload_1 12:iload_2 13:iadd 14:iload_3 15:imul 16:ireturn

CPU上下文切换详解

二次信任 提交于 2019-12-05 13:54:12
我们都知道CPU上下文切换,会增加系统负载。那什么是CPU上下文,为什么要切换? 什么是CPU上下文 我们都知道,Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行。当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。 而在每个任务运行前,CPU 都需要知道任务从哪里加载、又从哪里开始运行,也就是说,需要系统事先帮它设置好 CPU 寄存器和程序计数器(Program Counter,PC)。 CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。而程序计数器,则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。它们都是 CPU 在运行任何任务前,必须的依赖环境,因此也被叫做 CPU 上下文。 而这些保存下来的上下文,会存储在系统内核中,并在任务重新调度执行时再次加载进来。这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行。 根据任务的不同,CPU的上下文切换可以分为不同的场景,也就是进程上下文切换、线程上下文切换、中断上下文切换。 进程上下文切换 Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分别对应着下图中, CPU 特权等级的 Ring 0 和 Ring 3。 内核空间(Ring 0)具有最高权限,可以直接访问所有资源;

CPU子系统

谁都会走 提交于 2019-12-05 07:16:05
CPU的基本结构: CPU的主要部件: ​ 运算部件、缓存部件、寄存器、控制器、时序部件 CPU的工作原理: ​ 主要功能:处理指令、执行操作、控制时间、数据运算 ​ 执行指令的流程:读取指令、指令译码、指令执行、后续工作 部件的控制方式: ​ 同步控制方式:每步操作都向统一的外部时序信号对齐,每步操作之间无交互; ​ 异步控制方式:每步操作都不需向统一的外部时序信号对齐,每步操作之间通过交互应答来实现协同; 外部连接与I/O控制任务 指令系统: 设计CPU的一般过程: ​ 指令系统 --- 数据通路 --- 控制器 --- CPU定型 指令可能会涉及到的操作数类型: ​ 地址码数据:寄存器编号或者存储器地址,无符号整数. ​ 数值型数据:定点数、浮点数等,一般用补码表示; ​ 字符型数据:通常表示为ASCII码/汉字内码格式; ​ 逻辑型数据:常规二进制代码,不具有数值含义。 指令中的寻址方式: ​ 立即寻址: ​ 直接寻址: ​ 寄存器直接寻址: ​ 间接寻址(寄存器间接寻址、堆栈间接寻址): ​ 变址、基址寻址及其变化: ​ 基址寻址: ​ 基址 + 变址: ​ PC相对寻址: ​ 页面寻址(伪直接寻址): 设计传送指令时需要考虑: ​ 规定传送范围、指明传送单位、设置寻址方式 算数、逻辑运算指令: ​ 算数运算指令:设计时需要考虑操作数类型、符号、进制等

计算机组成原理复习(2)

放肆的年华 提交于 2019-12-05 02:54:22
中央处理器由运算器和控制器两大部分组成。 运算器接收从控制器送来的命令并执行相应的动作,对数据进行加工和处理。 运算器主要由算术逻辑单元(ALU)、暂存寄存器、累加寄存器、程序状态字寄存器(PSW)、通用寄存器组、计数器(CT)、移位器组成。 程序状态字寄存器用于保存系统的运行状态。条件转移指令执行时,需对标志寄存器的内容进行测试,判断是否满足转移条件。 程序状态字寄存器用于存放程序状态字,而程序状态字的各位表征程序和机器运行状态,如:含有进位标志C、结果为零标志Z等。 通用寄存器用于存放操作数和各种地址信息等,其位数与机器字长相等,这样便于操作控制。 控制器的基本功能就是执行指令,每条指令的执行是由控制器发出的一组微操作实现的。 控制器的功能是取指令、分析指令和执行指令,并产生有关操作控制信号。 控制器由硬布线控制器和微程序控制器两种类型。 控制器由程序计数器(PC)、指令寄存器(IR)、指令译码器、存储器地址寄存器(MAR)、存储器数据寄存器(MDR)、时序系统和微操作信号发生器等组成。 控制器的工作原理是根据指令操作码、指令的执行步骤(微命令序列)和条件信号来形成当前计算机个部件要用到的控制信号。计算机整机各硬件系统在这些控制信号的控制下协同运行,产生预期的执行结果。 程序计数器用于存放下一条指令在主存中的地址,具有自增功能。 程序计数器的内容为下一条指令在主存中的地址

标志寄存器

自作多情 提交于 2019-12-04 23:24:06
目录 标志寄存器(8086CPU) 作用 大小 使用方式 ZF标志,在第6位,结果为0则为1,否则为0 PF标志,在第2位,结果中1的个数为偶数则为1,否则为0 SF 标志,在第7位,结果为负则为1,否则为0;有符号运算有效 CF标志,在第0位,存储进位或借位的值 OF标志,在第11位,结果溢出则为1,否则为0;没理解透彻 DF标志 串传送指令movsb 串传送指令movsw cld和std设置DF标志位 adc 指令,带位加法指令,用于计算特别大的数据 sbb 指令, 带借位减法指令,用于运算特别大的数据 cmp指令,这个玩意有点复杂(P234, 11.8) pushf和popf 标志寄存器在debug中的表示 标志寄存器(8086CPU) 作用 用来存储相关指令的某些执行结果 用来为CPU执行相关指令提供行为依据 用来控制CPU的相关工作方式 大小 标志寄存器有16位 使用方式 标志寄存器是按位起作用,也就是说每一个位都有专门的含义,记录特定的i西南西 flag的1、3、5、12、13、14、15位在8086CPU中没有使用,不具有任何含义。而0、2、4、6、7、8、9、10、11位都具有特殊的含义 ZF标志,在第6位,结果为0则为1,否则为0 zf (Zero Flag) 是零标志位,在第6位;它记录相关指令执行后,其结果是否为0,如果为0,那么 zf = 1 ;否则 zf

I/O管理杂记

纵然是瞬间 提交于 2019-12-04 20:59:14
  这是一篇杂记,记录了操作系统层面与I/O管理的零散知识点,用于温习使用。由于I/O管理是一个很大的范畴,后续会不断按照自己的生产需求来补充用的到的知识点。计算机系统是人造系统,没有绝对的对错(相对于自然系统的绝对性),只有特定场景下的优劣。我们在理解一块知识时应当从它提出的背景以及要解决的问题出发,去理解机制而不是纠结于如何具体的实现。即使目的相同,不同的公司或开发者在不同场景下的实现也不尽相同,了解几个例子加深自己的理解、帮助自己构建起知识体系即可(个人观点)。 设备控制器   设备控制器是计算机中的一个实体,其主要职责是 控制一个或多个I/O设 备,以实现I/O设备和计算机之间的数据交换。它是 CPU与I/O设备之间的接口 ,它接收从CPU发来的命令,并去控制I/O设备工作, 以使处理机从繁杂的设备控制事务中解脱出来 。设备控制器是一个 可编址 的设备,当它仅控制一个设备时,它只有一个唯一的设备地址;若控制可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备。设备控制器的复杂性因不同设备而异,相差甚大,于是可把设备控制器分成两类:一类是用于控制 字符设备 的控制器,另一类是用于控制 块设备 的控制器。在微型机和小型机中的控制器,常做成印刷电路卡形式,因而也常称为接口卡,可将它插入计算机。有些控制器还可以处理两个、四个或八个同类设备。   控制器由

cortex-A7架构概要

风流意气都作罢 提交于 2019-12-04 18:05:24
1.运行模式 1.1:m3架构就只有特权和非特权两种模式,而A7有1种用户模式+8种特权模式 1.2:用户模式不能访问系统的所有资源,需借助异常来切换到其他模式才能访问被授以权限的资源 1.3:当发生中断或异常,处理器进入相应的处理模式,为了保护用户模式下的寄存器不被破坏,相应的模式提供了对应的寄存器组以供使用 2.寄存器组 2.1:浅色即是与user共用的寄存器,蓝色是各个模式所特有的 2.2:未备份寄存器R0-R7,9种模式所共用,切换模式,数据就会被破坏 2.3.:备份寄存器:R8-R14;R13也即sp,存放专用的栈地址;R14即连接寄存器,存放当前子程序的返回地址 2.4:程序计数器:R15,存放指向正在执行的指令的地址+8bytes(32位arm三级流水线,取指>译码>执行) 2.5:程序状态寄存器:CPSR,该寄存器包含了条件标志位、中断禁止位、当前处理器模式标志等一些状态位以及一些控制位。所有的处理器模式都共用一个 CPSR 必然会导致冲突,为此,除了 User 和 Sys 这两个模式以外,其他 7 个模式每个都配备了一个专用的物理状态寄存器,叫做 SPSR(备份程序状态寄存器),当特定的异常中断发生时,SPSR 寄存器用来保存当前程序状态寄存器(CPSR)的值,当异常退出以后可以用 SPSR 中保存的值来恢复 CPSR 3.GNU汇编语法 3.1:语句组成:

Rocket - debug - Example: Read Memory

半城伤御伤魂 提交于 2019-12-04 16:21:38
https://mp.weixin.qq.com/s/ChXNTbx94WDC72GvmE9bGA 介绍riscv-debug的使用实例:使用三种方法读取内存。 1. Using System Bus Access 1) System Bus Access 除了抽象命令,Program Buffer之外,调试模块可以包含一个系统总线访问模块,以在不依赖核心的情况下,访问系统总线(使用物理地址): 访问大小可以是8/16/32/64/128位: 需要自己保证访问的缓存一致性: 2) sbcs/sbaddress/sbdata a. sbcs 用于控制系统总线访问,以及获取访问状态: b. sbaddress0..3 存储要访问的系统总线物理地址。 写sbaddress寄存器可能触发对该地址的读操作: c. sbdata0..3 保存读取和要写入的数据。 读sbdata0寄存器可能触发系统总线的读操作: 写sbdata0寄存器可能触发系统总线的写操作: 3) 实例:Read a word from memory A. 写sbcs寄存器: a. sbaccess=2:访问大小为32bit; b. sbreadonaddr=1:every write to sbaddress0 automatically triggers a system bus read at the new