【计算机系统】CPU是如何运行程序的
一、CPU组成部分
寄存器:存储CPU执行的指令的数据,CPU每次执行指令都会重新更新寄存器。
程序计数器 PC:记录CPU即将执行的指令内存中的地址。
逻辑控制单元 ALU:CPU中负责逻辑计算的部分。
一个典型系统的硬件组成:
![](/assets/blank.gif)
二、CPU执行程序的过程
①执行程序,操作系统利用直接存储器存取DMA技术,加载程序到内存中,这里可以不经过CPU。
![](/assets/blank.gif)
②PC读取即将执行的线程指令对应的内存地址。
![](/assets/blank.gif)
③根据PC记录的指令地址,读取程序指令数据存储到寄存器中(每一次读取数据都会完全更新寄存器内容,不保留之前的数据)。
④如需逻辑计算,由逻辑控制单元进行计算并返回结果保存到寄存器中。
![](/assets/blank.gif)
当前线程指令的执行结果会放入栈中,继续往下执行步骤②到④。
假如遇到线程切换,CPU要从当前线程T1切换到执行另一个线程T2,这个是由操作系统的线程调度决定的。
切换前首先是保留现场(JVM是由虚拟机栈栈帧和线程的程序计数器记录保存执行状态,等待再次切换时继续执行)。
线程切换后操作系统控制CPU程序计数器读取T2线程程序计数器(还原现场,继续执行T2线程指令),重复执行步骤②到④。
⑤线程执行结束,CPU将寄存器结果返回给图形适配器,CPU继续执行下一线程的指令。
![](/assets/blank.gif)
参考资料:《深入理解计算机系统》。
【计算机系统】CPU是如何运行程序的相关推荐
- python 死循环程序能占满cpu吗_运行tensorflow python程序,限制对GPU和CPU的占用操作...
一般情况下,运行tensorflow时,默认会占用可以看见的所有GPU,那么就会导致其它用户或程序无GPU可用,那么就需要限制程序对GPU的占用.并且,一般我们的程序也用不了所有的GPU资源,只是强行 ...
- linux指定cpu运行程序,进程/线程绑定到特定CPU核的linux实现(有代码有实例)
前言 现在计算机上的CPU大多都是多核的,有4核甚至是8核的.但是一个计算机启动之后其进程数是远远多于CPU核数的,因为操作系统会给自动调度这些进程在CPU核上轮流运行.但是对于应用程序或者进程,其性 ...
- c语言如何多核运行程序,对于多线程程序,单核cpu和多核cpu如何工作?
1. 单核和多核CPU上多线程执行效率的探讨 a1: 多线程实际上是在单个CPU中按顺序执行的,但是系统可以帮助您切换该执行,但是它不是很快的(相反,是缓慢的) 如果有多个cpus,则可以同时在两个c ...
- 苹果IOS,与windows Phone7,系统,内存,CPU处理,及后台程序运行,详解微软墓碑机制的系统...
关于ios的多任务以及内存管理 看了很多人为自己的可用内存是350mb还是380mb纠结.为了多优化出一点可用内存费脑筋. ios的任务管理和内存管理,跟windows是有很大差别的.很多人习惯于用 ...
- 计算机系统—CPU结构和内部工作
一.计算机系统硬件组成 计算机系统的基本组成由:计算器.控制器.存储器.输入和输出设备这5大核心部件组成. 运算器和控制器等继承在一起成为CPU.以下通过这张图能够非常清楚的表达计算机系统.先从全局上 ...
- 哈工大计算机系统2022大作业:程序人生-Hello‘s P2P
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算机类 学 号 120L022115 班 级 2003007 学 生 王炳轩 指 导 ...
- 2022春哈工大计算机系统大作业——hello的程序人生
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算学部 学 号 班 级 学 生 指 导 教 师 计算机科学与技术学院 2021年5月 摘 ...
- (二)【软件设计师】计算机系统—CPU运算器控制器
文章目录 一.CPU 1.计算机硬件基本组成(了解) 2.中央处理单元(了解) 3.CPU组成 4.例题 二.运算器 1.运算器有两个主要功能 2.简要介绍运算器中各组成部件的功能 三.控制器 1.例 ...
- 哈工大计算机系统大作业-Hello的程序人生
目录快速链接 摘要 第一章 概述 1.1Hello简介 1.2环境与工具 1.3中间结果 1.4本章小结 第二章 预处理 2.1预处理的概念和作用 Ubuntu下的预处理命令 2.3Hello的预处理 ...
最新文章
- C++11中std::unique_lock的使用
- “压扁数组”技巧(flattening the array)
- SaaS市场普及 网络推广策略最有效
- block的用法以及block和delegate的比较(转发)
- 前端学习(2463):vue中 关于$emit的用法
- android登陆的编写
- 一周搞定scrapy之3,将爬取到的起点中文网信息保存到mysql
- RNA 6. 差异基因表达之-- 火山图 (volcano)
- 16进制ff转化为二进制_二进制与十六进制的转换与应用
- 网易云音乐encseckey算法php,求助网易云音乐_secretKey及_encSecKey获取
- 聚合架构-晓岩企业架构系列讲座整理(0-19)
- ORACLE EBS常用表查询语句
- 有道云笔记设置界面 占满全屏(右侧)
- 使用python判断一个数是否为素数
- my live PC / ThinkCentre M920x Tiny / ThinkStation P330 Tiny / Thinkpad yoga 12 vPro
- 【数据库】数据库基本知识
- 【大数据处理技术】期末复习整理
- SHA256sum系列命令检测文件完整性
- spring中事务提交后再发MQ消息
- 可视化数据下的全国人口出生率