程序计数器是用于存放下一条指令所在单元的地址的地方。
当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为"取指令"。与此同时,PC中的地址或自动加1或由转移指针给出下一条指令的地址。此后经过分析指令,执行指令。完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令。
中文名称 | 程序计数器 | 外文名称 | Program Counter |
---|---|---|---|
外语简称 | PC | 类别 | 计算机处理器中的寄存器 |
为了保证程序(在操作系统中理解为进程)能够连续地执行下去,处理器必须具有某些手段来确定下一条指令的地址。而程序计数器正是起到这种作用,所以通常又称为指令计数器。在程序开始执行前,必须将它的起始地址,即程序的第一条指令所在的内存单元地址送入程序计数器,因此程序计数器的内容即是从内存提取的一条指令的地址。当执行指令时,处理器将自动修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。
但是,当遇到转移指令如JMP(跳转、外语全称:JUMP)指令时,后继指令的地址(即PC的内容)必须从指令寄存器中的地址字段取得。在这种情况下,下一条从内存取出的指令将由转移指令来规定,而不像通常一样按顺序来取得。因此程序计数器的结构应当是具有寄存信息和计数两种功能的结构。
程序计数器是计算机处理器中的寄存器,它包含当前正在执行的指令的地址(位置)。当每个指令被获取,程序计数器的存储地址加一。在每个指令被获取之后,程序计数器指向顺序中的下一个指令。当计算机重启或复位时,程序计数器通常恢复到零。
冯 ·诺伊曼计算机体系结构的主要内容之一就是"程序预存储,计算机自动执行"!处理器要执行的程序(指令序列)都是以二进制代码序列方式预存储在计算机的存储器中,处理器将这些代码逐条地取到处理器中再译码、执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条取指指令的地址。程序计数器(PC )正是起到这种作用,所以通常又称之为'指令计数器'。
在程序开始执行前,将程序指令序列的起始地址,即程序的第一条指令所在的内存单元地址送入PC,CPU按照 PC的指示从内存读取第一条指令(取指)。当执行指令时,CPU自动地修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数(指令字节数),使 PC总是指向下一条将要取指的指令地址。由于大多数指令都是按顺序来执行的,所以修改PC 的过程通常只是简单的对PC 加"指令字节数"。
当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的目 标地址。处理器总是按照PC 指向取指、译码、执行,以此实现了程序转移。
ARM 处理器中使用R15 作为PC,它总是指向取指单元,并且ARM 处理器中只有一个PC 寄存器,被各模式共用。R15 有32 位宽度(下述标记为R15[31:0],表示R15 的'第31位'到'第0位'),ARM 处理器可以直接寻址4GB的地址空间(2^32 = 4G )。
一个邮箱,我给你的图片里面不起来 2010年,东城区,模具体检,多项选择题 1.在图1中所示的四种方法,在符合安全使用电力 2的原则.图2中,增加了受力面积减小压力实例 3.该加热器是当前的演技的使用...
#include <reg52.H> //STC头文件#define uchar unsigned char#define ui...
都一样,主要还是看利率的选择多不,利率应该跟着最新政策走,有上浮和下折的各个梯段,这样计算出来的结果更有针对性,希望可以帮到你,祝你生活愉快,望采纳
水泥计数器 产品简介: 专用于水泥厂,不怕粉尘,解决连包、叠包。支持 MODBUS 协议 .产品编号: ZT-JS01A-A 专用于水泥厂,不怕粉尘,解决连包、叠包。支持 MODBUS 协议 .产品编号: ZT-JS01A-A 中泰华旭生产的水泥计数器,专用于水泥厂的一款智能型计数器,能够在水泥厂多粉尘的环境下正常工 作。已成功应用于海螺水泥、华润水泥、福建水泥、金顶水泥、冀东水泥等多家水泥厂家。 化工厂专用计数器 产品简介: 专用于化工厂的智能计数器,解决连包、叠包 . 支持 MODBUS 协议 . 产品编号: ZT-JS01A-B 中泰华旭生产的化工专用计数器,专用于化工厂的一款智能型计数器,能够在化工厂多粉尘的环境 下正常工作。已成功应用于河南中源大化、中海油海南东方大化、山西晋丰煤化工、江苏灵谷化工等多 家厂家。 化工专用计数器独有的特点: 独有的光电传感器防粉尘专利技术,真
目 录 摘 要 ........................................................................................... 错误!未定义书签。 目 录 ............................................................................................................................. I 一、 绪论 ................................................................................. 错误!未定义书签。 1.1 概述 .....................................................
[initialize] 安置初始值。如将计算机程序计数器置于初始位置或初始值
控制器的作用是控制和协调整个计算机的动作控制通常需要程序计数器(PC)、指令寄存器(IR)、指令译码器(ID)、定时与控制电路以及脉冲源、中断等共同完成。控制器由:指令寄存器Instruction Register、指令译码器Instruction Decoder、定时与控制电路Programmable Logic Array、程序计数器Program Counter、标志寄存器Flags Register、堆栈和堆栈指针Stack Pointer、寄存器组等构成。
CPU可以向控制器发送多种不同的命令,设备控制器应能接收并识别这些命令。为此,在控制器中应具有相应的控制寄存器,用来存放接收的命令和参数,并对所接收的命令进行译码。例如,磁盘控制器可以接收CPU发来的Read、Write、Format等15条不同的命令,而且有些命令还带有参数;相应地,在磁盘控制器中有多个寄存器和命令译码器等。
这是指实现CPU与控制器之间、控制器与设备之间的数据交换。对于前者,是通过数据总线,由CPU并行地把数据写入控制器,或从控制器中并行地读出数据;对于后者,是设备将数据输入到控制器,或从控制器传送给设备。为此,在控制器中须设置数据寄存器。
控制器应记下设备的状态供CPU了解。例如,仅当该设备处于发送就绪状态时,CPU才能启动控制器从设备中读出数据。为此,在控制器中应设置一状态寄存器,用其中的每一位来反映设备的某一种状态。当CPU将该寄存器的内容读入后,便可了解该设备的状态。
就像内存中的每一个单元都有一个地址一样,系统中的每一个设备也都有一个地址,而设备控制器又必须能够识别它所控制的每个设备的地址。此外,为使CPU能向(或从)寄存器中写入(或读出)数据,这些寄存器都应具有唯一的地址。例如,在IB-MPC机中规定,硬盘控制器中各寄存器的地址分别为320~32F之一。控制器应能正确识别这些地址,为此,在控制器中应配置地址译码器。
由于I/O设备的速率较低而CPU和内存的速率却很高,故在控制器中必须设置一缓冲器。在输出时,用此缓冲器暂存由主机高速传来的数据,然后才以I/O设备所具有的速率将缓冲器中的数据传送给I/O设备;在输入时,缓冲器则用于暂存从I/O设备送来的数据,待接收到一批数据后,再将缓冲器中的数据高速地传送给主机。
设备控制器还兼管对由I/O设备传送来的数据进行差错检测。若发现传送中出现了错误,通常是将差错检测码置位,并向CPU报告,于是CPU将本次传送来的数据作废,并重新进行一次传送。这样便可保证数据输入的正确性。
实施例
该实施例包括以下步骤:
第一步,建立一个共享读取的程序计数寄存器组SPC,该寄存器组中寄存器的个数与CPU核的数目相同,每个寄存器分别与对应的CPU核相连以实时地储存该CPU核的程序计数器值。
所述的共享读取是:每个CPU核实时读取寄存器组中每个寄存器存储的其它CPU核的程序计数器值。
第二步,当存在空闲的CPU核时,进行加速对象选择处理,得到自动并行加速线程的加速对象为线程P。
所述的加速对象选择处理,是:当正在运行且未被加速的用户线程中存在CPU占用率最高的线程时,则选择该线程作为自动并行加速线程的加速对象;否则,时间t后,再次选择正在运行且未被加速的用户线程中CPU占用率最高的线程作为自动并行加速线程的加速对象,直至得到自动并行加速线程的加速对象。
所述的时间t是系统的调度时间片大小,该实施例为20毫秒。
第三步,当线程P存在已分析指令集合Sp时,载入该集合Sp;否则,为线程P新建一个集合Sp,对线程P所在的CPU核进行读取处理,得到线程P所在的CPU核当前正在读取的指令Ic,并由Ic追踪线程P下一条将要执行指令的地址,将追踪分析的指令代码和跳转关系加入集合Sp中。
所述的读取处理,是:读取线程P所在的CPU核的程序计数寄存器的值,将得到的虚拟地址转换为物理地址,然后从该物理地址得到线程P所在的CPU核正在执行的指令Ic,当集合Sp中包括指令Ic时,删除集合Sp中Ic以前的指令记录,并根据集合Sp追踪线程P下一条将要执行的指令;否则,清空集合Sp。
第四步,采用第三步的方法,得到线程P将要执行的所有指令,当集合Sp中每次加入条件转移指令后且集合Sp中存在循环代码时,进行进度校验和替换处理。
所述的进度校验,是:重新读取指令Ic,当指令Ic不在集合Sp中时,清空集合Sp,然后从指令Ic开始追踪;当指令Ic在集合Sp中、线程P走向该循环且线程P已经开始执行该循环,则选取循环接收后第一条语句作为待分析指令,并清空集合Sp;当指令Ic在集合Sp中、线程P走向该循环且线程P未执行该循环,则对该循环进行替换处理;当指令Ic在集合Sp中但线程P未走向该循环时,则删除集合Sp中Ic以前的指令记录,并继续追踪。
所述的替换处理,包括以下步骤:
1)当循环的总工作量大于阈值G时,生成并行化执行该循环的代码,执行该循环的代码出口语句跳转到原循环出口对应的语句,且将新生成的代码单独放在一个或若干个内存页中;否则,放弃替换该循环,并删除集合Sp中Ic以前的指令记录,继续追踪;
2)生成代码后,进行进度校验,当通过进度校验时则中断线程P,且中断线程P后再次进行校验,再次通过进度校验后,执行3);否则,线程P继续运行;
3)将1)生成的代码所在的内存页分配给线程P,并修改原循环起始地址的二进制代码为跳转到新生成代码的起始位置,在集合Sp中删除原循环对应指令,加入新生成的代码指令;
4)替换完成后通知线程P继续执行,继续分析后续代码。
所述的阈值G是单个CPU核1秒钟执行的最大指令数。
所述的通过进度校验是指:指令Ic在集合Sp中、线程P走向该循环且线程P未执行该循环。
第五步,当线程P被调度出CPU核时,系统以中断方式将该事件连同当时的SPCp值发送给自动并行加速线程,当自动并行加速线程正在替换处理中时,则使用此时的SPCp值作为读取Ic的依据,继续执行替换处理直到退出该步骤;否则,自动并行加速线程根据当时的SPCp值读取Ic,清空或更新集合Sp,其结果等待线程P被调入时继续使用。
第六步,返回第二步,开始处理新的需要加速的线程。
该实施例方法实现简单,且完全由操作系统完成;能够在有空闲的CPU核时自动利用空闲资源对程序进行并行加速,免去等待预先处理程序的时间,从而大大提高了多核平台下串行程序运行时的并行处理速度。