引言

在学习操作系统的时候很多时候都可以看到程序计数器的身影,但是对于程序计数器的概念一直是模模糊糊,今天算是弄懂了何为PC,遂记录一篇博客。

程序计数器是什么 PC(program counter)

在百度中找到的解释是这样的:
在CPU控制部件中的程序计数器(PC)的功能是用于存放指令的地址。程序执行时,PC的初值为程序第一条指令的地址,在顺序执行程序时,控制器首先按程序计数器所指出的指令地址从内存中取出一条指令,然后分析和执行该指令,同时将PC的值加1指向下一条要执行的指令。(侵删)

其实大体的意思就是这样,可是单独的去看这个概念却有些模糊,我们可以先结合三个例子来看什么是PC,PC又是干什么的

一,上下文切换

我们都知道系统为了实现并发,操作系统采取了一种高层形式的异常控制流(ECF) 上下文切换,其基本思想就是在程序遇到阻塞,耗时间的系统调用或中断(周期性定时器中断)时CPU会对当前工作线程进行替换,当这些耗时的操作完成时再进行把跳回前面的程序段,这个跳就很有意思了,用户栈,内核栈,状态寄存器等不用说,数据当然该被记录,但操作系统又如何知道代码运行到哪里呢 这就是程序计数器的作用 我们再来看看程序计数器的含义程序计数器(PC)的功能是用于存放指令的地址 这样一想 便清晰了不少

二,非本地跳转

非本地跳转是一种用户级的异常控制流 其作用与goto类似 但与goto有一点不同 就是非本地跳转可跨函数进行跳转,其实跳转与上下文切换在某种意义上很相像,他们都要把当前状态转化为另外一种状态,这就牵扯到应该执行到哪一条指令的问题,这也是我们程序计数器的作用

三,fork()函数

在 fork 之后父子进行从同一指令开始运行,这是因为子进程拷贝了父进程的程序计数器,而程序计数器的作用是什么,就是存放当前指令 所以就不难理解了。

在三个简单的例子后我们已经大概的理解了程序计数器的作用是什么 接下来我们就来看看程序计数器的处理流程

  • 在程序开始执行前,必须将它的起始地址,即程序的一条指令所在的内存单元地址送入PC,因此程序计数器(PC)的内容即是从内存提取的第一条指令的地址。当执行指令时,CPU将自动修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。

2020年5月29日:
其实程序计数器在8086下就是IP寄存器,IA-32下就是EIP寄存器。

它们的作用就是保存一个内存地址,指向当前需要取出的指令,当CPU从内存中取出一个指令以后,EIP/IP就自动增加,指向下一个指令的地址。这样看来上下文切换实际就是寄存器的切换。

参考:

  • 博文《程序计数器(Program Counter)是一个实际存在的寄存器吗?》
  • 博文《程序计数器》
  • 书籍《Computer Systems:A Programmer’s Perspective》

程序计数器是什么(PC)相关推荐

  1. 程序计数器是什么(PC)?

    在学习操作系统.JVM的时都可以看到程序计数器(PC)的身影,但是对于程序计数器的概念一直是模模糊糊,这篇就稍微讲一下什么是PC? 一.JVM层面 什么叫做"程序计数器"?它能做什 ...

  2. ARM 程序计数器 R15(PC)

    寄存器 R15 为程序计数器(PC),它指向 正在取指的地址.可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况. ARM9 正常操作时,从 R15 读取的值是处理器 正在取 ...

  3. ARM三个寄存器 : 堆栈指针SP(R13)、连接寄存器LR(R14)和程序计数器PC(R15)

    深入理解ARM的这三个寄存器,对编程以及操作系统的移植都是必要的. 1.堆栈指针R13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式.非异常模式( ...

  4. ARM指针寄存器——堆栈指针寄存器SP、程序计数器PC、连接寄存器LR

    参考:堆栈指针寄存器 SP详解以及栈的作用 作者:蓝色鲜橙多 网址:https://blog.csdn.net/qq_36588941/article/details/89873633?utm_sou ...

  5. (转)深入理解SP、LR和PC

    网址:http://blog.csdn.net/zhou1232006/article/details/6149548 深入理解ARM的这三个寄存器,对编程以及操作系统的移植都有很大的裨益. 1.堆栈 ...

  6. Java虚拟机(五)——程序计数器

    文章目录 PC寄存器(程序计数器)概述 PC Register介绍 作用 使用 两个常见问题 为什么使用PC寄存器存储字节码指令地址/为什么使用PC寄存器记录当前线程的执行地址 PC 寄存器为什么被设 ...

  7. 第 4 章 程序计数器

    第 4 章 程序计数器 1.PC 寄存器概述 文档网址 https://docs.oracle.com/javase/specs/jvms/se8/html/index.html PC 寄存器介绍 J ...

  8. 【JVM】运行时数据区介绍,程序计数器和虚拟机栈详解

    JVM越来越是Java面试中的重头戏,今天来总结一下JVM运行时数据区的相关内容. 文章目录 JVM运行时数据区 JVM运行时数据区内部结构 程序计数器(PC寄存器) 程序计数器的介绍 PC寄存器的实 ...

  9. 欧尼酱讲JVM(06)——指点江山—程序计数器

    程序计数器在哪 程序计数器执行过程: 程序计数器(Program Counter Register),也叫PC寄存器,是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器. 在Java ...

最新文章

  1. bzoj 4871: [Shoi2017]摧毁“树状图”
  2. “你行你上”:有本事跟OpenAI Five打一把DOTA?| 极客头条
  3. vivado的综合与实现策略怎样设置
  4. 机器学习算法选择——特征提取
  5. Ubuntu安装pygame的过程记录与分享(包括python的卸载,openssl的安装,python3.7的安装,pygame的安装)
  6. python csv文件复制时的编码问题_使用python读取CSV文件时的编码问题
  7. thinkPHP5.0数据查询表达式生成技巧
  8. 【Java】常见的异常和Throwable类
  9. 2021 年高教社杯全国大学生数学建模竞赛题目(C 题 生产企业原材料的订购与运输)
  10. OpenCV学习笔记__特征检测与匹配之 SURF算法(转)
  11. 四大逆向工程软件简介
  12. 质感美颜秒变大片,相芯科技人脸特效SDK全面升级
  13. 游戏翻译,本地化翻译如何做效果好
  14. 求圆外一点做圆切线的切点坐标(算法)
  15. 金蝶K3提取供应商信息生成在线Web页面供应商信息一览表
  16. 中国传媒大学计算机课程表,课 程 表 - 中国传媒大学
  17. settings.xml详解
  18. 把握2022消费升级大势,品牌重塑消费者数字体验
  19. debian云服务器项目,Debian做云服务器
  20. 解决 Oracle10g安装过程中无法确定主机的IP地址时产生该异常错误

热门文章

  1. 略谈UPS及其技术发历程(二)
  2. Ubuntu安装QQ、百度网盘
  3. 研究生如何读文献 写论文 发文章 毕业论文
  4. tif格式real类型图片与16位PNG图片的转化(编码/解码)
  5. 【专业数据】六.2020~2022年北京交通大学【新一代电子信息技术】专业复试线/分数线差/计划招生数/复试数/录取数/复试比例/录取率
  6. 克鲁伊夫:最贵铁卫缘何难融巴萨 瓜帅凭啥遭批(2010-01-12)
  7. excel 的条件格式(二)
  8. 肩膀疼痛,以及脖子疼处理方法
  9. 转:沃伦·本尼斯:领导者的七种境界
  10. Android 获取应用(APP)UID