【计算机系统】CPU是如何运行程序的

2023-05-16

一、CPU组成部分

  1. 寄存器:存储CPU执行的指令的数据,CPU每次执行指令都会重新更新寄存器。

  1. 程序计数器 PC:记录CPU即将执行的指令内存中的地址。

  1. 逻辑控制单元 ALU:CPU中负责逻辑计算的部分。

一个典型系统的硬件组成:

二、CPU执行程序的过程

①执行程序,操作系统利用直接存储器存取DMA技术,加载程序到内存中,这里可以不经过CPU。

②PC读取即将执行的线程指令对应的内存地址。

③根据PC记录的指令地址,读取程序指令数据存储到寄存器中(每一次读取数据都会完全更新寄存器内容,不保留之前的数据)。

④如需逻辑计算,由逻辑控制单元进行计算并返回结果保存到寄存器中。

当前线程指令的执行结果会放入栈中,继续往下执行步骤②到④。

假如遇到线程切换,CPU要从当前线程T1切换到执行另一个线程T2,这个是由操作系统的线程调度决定的。

切换前首先是保留现场(JVM是由虚拟机栈栈帧和线程的程序计数器记录保存执行状态,等待再次切换时继续执行)。

线程切换后操作系统控制CPU程序计数器读取T2线程程序计数器(还原现场,继续执行T2线程指令),重复执行步骤②到④。

⑤线程执行结束,CPU将寄存器结果返回给图形适配器,CPU继续执行下一线程的指令。

参考资料:《深入理解计算机系统》。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【计算机系统】CPU是如何运行程序的 的相关文章

  • 获取CPU或主板序列号?

    我正在尝试获取CPU serial or motherboard serial using C or Python出于许可目的 是否可以 我在用着Linux 在 Linux 下 您可以使用 lshw quiet xml 并解析其输出 您将在
  • Delphi 2010-IDE 不断停止在 CPU 调试窗口

    我在 D2010 IDE 中不断出现 CPU 调试窗口 我注意到这出现在一些断点上 而其他一些断点则不会导致这种效果 无法解释这种情况到底何时发生或哪些断点导致这种情况 但似乎当调试器无法到达代码上的断点时 它会停止在方法的开始地址上 并且
  • 为什么负载不能绕过同一核心上的另一个线程从写入缓冲区写入的值?

    如果CPU核心使用写缓冲区 则负载可以从写缓冲区绕过最近的存储到引用的位置 而无需等到它出现在缓存中 但是 正如它所写的记忆一致性和连贯性入门 https lagunita stanford edu c4x Engineering CS31
  • 在 C++ 中处理 CPU 异常

    是否有跨平台的方法来处理 CPU 异常 例如分段错误或除以零 可以说 我需要调用一些潜在不安全的函数 例如从插件文件 这可能会导致段错误 或在执行之前无法测试的一些其他问题 我知道 C 标准库有信号处理函数 但我不知道如何使用它们来处理问题
  • 用标签数据填充 x86_64 指针前十六位?

    由于当前的 x86 64 实现仅能够使用 48 位 虚拟 地址空间来降低 MMU 复杂性 因此前 16 位是否可用于实现安全标签数据 当前的实现是否限制这种使用 即使知道IP和其他段寄存器是完整的六十四位 并将指针的前十六位限制为仅包含虚拟
  • Python CPU 计数在一台 Windows 服务器上工作但在另一台服务器上不起作用?

    我编写的代码可以在 Windows XP 和 Windows Server 2008 64 位上运行 但是 我刚刚启动了 Amazon Windows 64 位实例 代码失败 非常简单 看起来像这样 import multiprocessi
  • 持续监控前 X 个进程的 CPU 使用率

    我希望能够每 5 秒将最高 CPU 消耗者输出到日志文件 这样我就可以在测试期间看到谁使用了最多的 cpu 我发现这个答案很常见 cpu Get Counter ComputerName localhost Process Processo
  • 为什么CPU负载的变化不会超过百分之几?

    我正在运行这个命令 grep cpu proc stat awk usage 2 4 100 2 4 5 END print usage 但它只输出 0 99xxxx 之类的东西 如果我进行 apt get 升级或任何过程 我想它会超过 1
  • 我如何访问 Intel CPU 计数器

    是否有任何小工具可以让我访问 Intel CPU 计数器收集的数据 例如 L1 L2 缓存未命中 分支预测失败 您知道现代 Core2 CPU 上有数百个此类数据 它必须在 Windows 上运行 同时能够在 Solaris FreeBSD
  • 核心和处理器之间的区别

    核心和处理器有什么区别 我已经在谷歌上寻找过它 但我只得到了多核和多处理器的定义 这不是我正在寻找的 核心通常是 CPU 的基本计算单元 它可以运行单个程序上下文 如果支持硬件线程 例如 Intel CPU 上的超线程 则可以运行多个程序上
  • 为什么每个逻辑 CPU 在多线程情况下都有自己的 CR3 寄存器?

    当我们有一个支持某种形式的多线程的 CPU 时 每个逻辑 CPU 都有它自己的一组寄存器 至少 包括 CR3 寄存器 由于我们在执行不同线程时正在处理同一进程的虚拟地址空间 并且永远不会发生上下文切换 切换同一进程的线程时TLB缓存也不会失
  • 如何获取 Java7 应用程序的 CPU、RAM 和网络使用情况

    我找到了这篇旧文章如何在 Java 中监控计算机的 cpu 内存和磁盘使用情况 https stackoverflow com questions 47177 how to monitor the computers cpu memory
  • MIPS 中的影子寄存器是什么以及它们如何使用?

    当我了解 MIPS 架构时 我遇到了影子寄存器 据说它们是通用寄存器的副本 我无法理解以下内容 何时使用影子寄存器 MIPS 影子寄存器用于减少处理中断时的寄存器加载 存储开销 分配了影子寄存器组的中断不需要保存任何现有上下文来提供空闲寄存
  • C# 程序占用太多CPU?

    我有一个程序 它在启动时不断地在 3 个独立的计时器之间切换 我的应用程序的主线程有一个 while 循环 它不断检查全局变量是否已设置为 true 如果设置为 true 它将停止一个计时器并启动另外两个计时器 一个连续 另一个自动停止 如
  • Django 开发服务器 CPU 密集型 - 如何分析?

    我注意到本地 windows7 机器上的 django 开发服务器 版本 1 1 1 正在使用大量 CPU 根据任务管理器的 python exe 条目 约为 30 即使处于空闲状态 即没有请求到来进 出 是否有一种既定的方法来分析可能造成
  • 将 CPU 频率指定为 Linux 启动时的内核 CMD_LINE 参数?

    我将笔记本电脑的i5 CPU更换为i7 CPU 这样它可以运行得更快 但由于i7的功率更大 温度也比以前更高 所以我的笔记本经常死机 所以 我使用cpupower来指定CPU的最大频率 它起作用了 现在 我的问题是 有没有办法在启动时将CP
  • Linux:如何对系统内存施加负载?

    我正在开发一个小功能 它可以让我的用户了解 CPU 的占用情况 我在用着cat proc loadavg 它返回众所周知的 3 个数字 我的问题是 当我正在开发时 CPU 目前没有做任何事情 有没有一种好方法可以在CPU上产生一些负载 我在
  • 通过 C 将线程固定到 cpuset 中的核心

    我有 cgroup cpuset set1 set1有2 5 8 我想将一个进程绑定到该 cpuset 然后将该进程中的一个线程固定到核心 4 cpuset 的名称 线程名称以及我应该将线程绑定到的核心位于 m 配置文件中 是否有任何 C
  • C++ 中的 CPUID 实现

    我想知道这里是否有人有一些可以从任何托管 net 语言引用的 C CPUID 实现的好示例 另外 如果情况并非如此 我是否应该注意 X86 和 X64 之间的某些实现差异 我想使用 CPUID 来获取运行我的软件的机器上的信息 崩溃报告等
  • NodeJS CPU 一次飙升至 100%

    我有一个用 NodeJS 编写的 SOCKS5 代理服务器 我正在使用原生net and dgram打开 TCP 和 UDP 套接字的库 它可以正常工作大约 2 天 所有 CPU 的最大利用率约为 30 两天没有重新启动后 一个 CPU 峰

随机推荐

  • MSSQL分享:sp_writeall 将文本文件内容全部写入某一文件

    alter PROC sp writeall 64 dirpath varchar 1024 64 filetype varchar 255 61 39 sql 39 as declare 64 sql varchar 4000 64 sq
  • 多旋翼飞行器设计与控制实践学习总结

    在11 4 3半自主控制模式控制器上加入自己的控制器 注意事项 1 在进行硬件在环仿真时必须保证整个系统是离散控制系统 xff0c 这里有一个傻瓜式的方式 xff0c 就是一键将所有模块均替换为离散模块 xff0c 可以参照这个连接 htt
  • 如何看英文文档

    本一直以为看不懂官方英文文档是因为词汇量不够 后来发现其实并不是 xff0c 如果没有专业背景 xff0c 没有相应的知识点 xff0c 就算你认识这个单词 xff0c 也会看不懂他在说什么 理由如下 xff1a 在看MyBatis Gen
  • 技术人成长中的得与失,想当程序员或者已经是程序员的要注意了!

    每个人在成长过程中 xff0c 都免不了在得失中摇晃 xff0c 对我来说 xff0c 将来如何更好地去平衡得失 xff0c 是需要思考的问题 xff0c 而对新入行的年轻人来说 xff0c 能从我这些总结中获得一点点启发 xff0c 那我
  • UCOSII 使用笔记

    UCOS使用总结 1 UCOS 是抢占式系统 xff0c 换句话来说 xff0c 优先级高的能够被准时执行 xff0c 优先级低的很容易被高优先级抢占 xff0c 导致执行任务延迟 2 UCOS一般为64个优先级 xff0c 有些可以到25
  • 在华清远见学习嵌入式开发的总结

    一 前言 在华清 xff08 成都中心 xff09 四个多月的学习即将结束 xff0c 在学习中有学到新知识的兴奋 xff0c 也有为代码中的bug而难受一整天的痛苦 xff0c 这些都是学习过程中的常态 xff0c 只要我们善于总结 xf
  • LDMDA指令使用的方法

    在linux内核中 xff0c 文件arch arm kernel head common S中 xff0c 有如下代码 xff1a lookup processor type adr r3 3f ldmda r3 r5 r7 long p
  • ELK-FileBeat入门

    ELK FileBeat入门 文章目录 ELK FileBeat入门 前言windows上安装filebeat配置授之以鱼不如授之以渔输入端配置 前言 filebeat是logstash轻量级版 xff0c 功能相对比nxlog全很多 xf
  • 树莓派3B+安装Ubuntu mate 20.04 armhf

    众所周知 xff0c 树莓派3B 43 使用了64位ARM xff0c 因此可以安装ARM64版本的Ubuntu mate 然而 xff0c 此版本官网明确说更适合2G内存以上的树莓派使用 xff0c 树莓派3B 43 是1G内存啊 xff
  • Linux apt 命令

    apt xff08 Advanced Packaging Tool xff09 是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器 apt 命令提供了查找 安装 升级 删除某一个 一组甚至全部软件包的命令 xff0
  • 基python实现多线程网页爬虫

    一般来说 xff0c 使用线程有两种模式 一种是创建线程要执行的函数 把这个函数传递进Thread对象里 xff0c 让它来执行 另一种是直接从Thread继承 xff0c 创建一个新的class xff0c 把线程执行的代码放到这个新的c
  • C++中的HTTP协议问题

    1 HTTP Hyper Text Transfer Protocol xff08 超文本传输协议 xff09 是一种通信协议 xff0c 它允许将超文本标记语言 HTML 文档从Web服务器传送到客户端的浏览器 在Internet中所有的
  • DB2 的自增主键方式

    DB2 的自增主键方式 xff1a 1 not null generated by default as identity 不会自增长 一定要指定主键值 2 not null GENERATED ALWAYS AS IDENTITY 自增
  • “猿”?“媛”?

    我来自农村 xff0c 父辈告诉我读书是走出这里的唯一途径 xff0c 所以 xff0c 教育在我们家备受重视 高考那年家里发生了一场变故 xff0c 我亲爱的爷爷去世了 xff0c 高考 xff0c 我是一个人跟着学校的车去考试的 xff
  • bootstrap后台 uniform.default.css 使用checkbox 默认选不中问题

    昨天在实际操作中遇见了一个问题 input type 61 39 checkbox 39 设置ckecked 选不中 一直以为是js问题 后来F12看页面发现 是样式的掩盖 lt label gt lt input name 61 34 g
  • linux下安装ffmpeg 语音amr文件为MP3 包含各依赖

    最近安装ffmpeg 转换语音amr文件为MP3 xff0c 在网上查看了很多的版本 xff0c 都是要make 编译 xff0c 而且还有装各种依赖 xff0c 如MP3解码lame等 在官网找到已打包好的文件 xff0c 直接安装 ht
  • 新浪微博与微信公众号开发总结

    微信公众号开发总结 微信公众号开发者文档地址 xff1a https mp weixin qq com wiki t 61 resource res main amp id 61 mp1445241432 可根据文档开始微信者公众号开发 x
  • ROS学习笔记(三)

    元功能包 将plumbing pub sub plumbing server client plumbing param server关联在一起 http wiki ros org catkin package xml Metapackag
  • ELK-filebeat+logstash采集nginx日志

    ELK filebeat 43 logstash采集nginx日志 文章目录 ELK filebeat 43 logstash采集nginx日志 前言采集访问日志第一种方式 xff1a 修改nginx访问日志输出格式为json修改nginx
  • 【计算机系统】CPU是如何运行程序的

    一 CPU组成部分 寄存器 xff1a 存储CPU执行的指令的数据 xff0c CPU每次执行指令都会重新更新寄存器 程序计数器 PC xff1a 记录CPU即将执行的指令内存中的地址 逻辑控制单元 ALU xff1a CPU中负责逻辑计算