首页 > 编程知识 正文

16位计数器寻址范围,单片机复位后程序计数器pc的值

时间:2023-05-03 11:40:16 阅读:126856 作者:704

目录1 .什么是PC寄存器?

2.pc寄存器的作用和详细情况?

3 .相关面试问题?

4 .补充相关知识

1 .在JVM的程序计数寄存器(Program Counter Register )中,Register的名称来源于CPU的寄存器,寄存器中存储与指令相关的字段信息。 CPU必须将数据加载到寄存器中才能工作。 JVM内的PC寄存器是将物理PC的寄存器抽象化的模拟。

2.PC寄存器用于存储下一条指令的地址,即即将执行的指令代码。 执行引擎读取以下命令:

2.1它是一个小内存空间,几乎可以忽略。 它也是运行速度最快、没有原始设备制造商问题的存储区域。

2.2JVM规范中,每个线程都有自己的程序计数器,是线程的专用,生命周期与线程的生命周期相匹配

2.3任何时候一个线程只运行一种方法。 是所谓的现在的方法。 程序计数器存储当前线程正在执行的java方法的JVM指令地址。 或者,如果实际执行native方法,则没有指定值,因为程序计数器不负责本地方法堆栈。

2.4这是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖于该计数器来完成

2.5字节码解释器通过更改此计数器的值来选择下一个要执行的字节码命令

2.6 javavirtualmachinespecification是唯一未规定任何内存输出(oom )的区域,没有垃圾回收

以上是概念性的语言,让我具体说明一下pc的执行流程。 如下图所示。

pc寄存器中存储了以下指令地址,即即将执行的指令代码,由执行引擎执行,执行引擎操作JVM虚拟机堆栈等,转换为机器指令并使CPU执行。 在此,CPU在每个时间片上执行不同线程之间的任务。

在此,建议您自己编写代码,通过对javap -v进行逆编译来查看如上图所示的代码。

3 .面试不仅仅是问两种面试问题

3.1为什么PC寄存器中存储字节码指令地址? 另外,为什么pc寄存器中记录了当前线程的字节码指令地址?

3.2为什么PC寄存器特定于线程?

这两个问题可以一起解释,因为线程同时运行,但实际上CPU根据时间片的分配串行执行不同线程的任务。 我们理论上认为,只有CPU的速度处于毫秒级,多线程才并行处理任务。 这也需要记录cpu在不同线程上执行的位置(PC寄存器)。 当CPU切换到上次执行的线程时,需要知道执行任务的指令地址。 (这表示文档中的pc寄存器记录当前线程下一次执行的指令地址。 想象一下如果是共享的,cup往返时会出现混乱的现象。 从pc寄存器获取的是上一个线程下一个要执行的指令地址,而不是当前线程要执行的指令地址。 所以电脑寄存器的线程是私有的。

4 .关于知识点

CUP时间片:时间片,即CPU为每个程序分配的时间。 每个线程被分配一个称为时间片的时间段,该过程是可以执行的时间,每个程序在外观上是同时进行的。 如果该进程在时间片结束时仍在运行,则CPU将被抢走并分配给另一个进程。 如果进程在时间片结束前被阻止或终止,则CPU将立即进行切换。 不会浪费CPU资源。 在宏上,可以同时打开多个APP应用程序。 每个APP应用程序并行执行。 但是,在微观上,由于只有一个CPU,所以一次只能处理程序的部分请求。 公平处理的方法之一是引入时间片,并按程序顺序运行。

下图是蚂蚁展示的内存分配图,大家可以根据图的内容学习。

阿里手册中的JVM内存分配图

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。