【计算机系统】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是如何运行程序的 的相关文章

  • 回首2013,展望2014

    此刻值此2013年末 xff0c 明天便是元旦 近日浏览CSDN论坛时 xff0c 发现有许多的坛友都在写2013年度总结 xff0c 博客作为个人的名片 xff0c 也决定开始尝试写博客 xff0c 我的第一篇博客就是关于2013年度总结

随机推荐

  • 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中负责逻辑计算