在程序是怎样跑起来的这本书中我们首先被询问的一个问题是“程序是什么?它是有什么组成的?而CPU又与程序有什么关系呢?”,若我们能知道前两个,其实更容易将你带入讨论“CPU是什么?”这一话题中,你也能更加深入去理。首先这一章节读下来我知道程序的指令和操作是CPU执行的,而CPU是计算机的核心部位,就像我们所说的“大脑”。我知道了CPU是通过汇编语言(汇编语言编写的程序转化成机器语言的过程称为汇编,反之称为反汇编。)来说明运行的,这是因为汇编语言与机器语言基本上是一一对应,高级编程语言与之大不相同,因此被"OUT"。而CPU又有四部分构成——寄存器、控制器、运算器和时钟,但其中最重要的就是寄存器,因为寄存器的作用是用来暂存指令、数据等处理对象,而其它三个只是CPU运行的步骤罢了,寄存器才是目标,因此也可以说在整个程序进行过程中寄存器是被作为对象来描述的。所以我们若想了解CPU必须了解寄存器,在之后的阅读中我明白CPU也就是寄存器的一个大的集合。我想这张图更能体现:

然而这也说明寄存器不止一种(例如eax和ebp),而且不同种类的CPU其内部寄存器的数量、种类以及寄存器存储的数值范围都不同。但可根据功能将其大致分为八种:

在大致了解了CPU后也就能够讨论程序的运行流程了,首先自然是用户发出程序指令,之后就是造作系统将程序复制到内存中,最后就是CPU内的寄存器开始工作了。其中起决定性作用的是程序计数器,因为程序流程有三种——顺序执行、条件分支、循环,而条件分支与循环又包括跳转指令,因此它决定着程序的流程走向。下面这一列子更加通俗易懂:

但我认为标志寄存器是CPU运算时不可或缺的部分,因为CPU在进行运算时会先参考标志寄存器(负责存放溢出和奇偶校验的结果)的数值后进行判断是否执行跳转指令。在1.5节中我们可以知道对于解决跳转指令后无法实现函数的调用我们可以使用call指令和return指令,因为在通过跳转指令给程序计数器设定值后,需要储存地址,处理函数,最终再返回函数调用点。而单纯的跳转必然无法实现,这是我们就可以借助call指令将调用函数后要执行的指令地址存储在名为栈的主内存中,函数处理完毕后,再通过return指令将保存在栈中的地址设定在程序计数器中。通过这两个主要的程序流程就可以使这一程序变得非常流畅。例图可以更加清晰的表明这一事实:      

CPU是什么?的更多相关文章

  1. 闰秒导致MySQL服务器的CPU sys过高

    今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...

  2. 继电器是如何成为CPU的(1)

    继电器是如何成为CPU的(1) ——<穿越计算机的迷雾>整理和总结 究竟是如何设计的电路,具有计算和控制的智力? 这一点也不高深.本系列文章从初中学的最简单的电路图说起,看看能不能从最初的 ...

  3. Linux上如何查看物理CPU个数,核数,线程数

    首先,看看什么是超线程概念 超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的 ...

  4. 一个表缺失索引发的CPU资源瓶颈案例

    背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...

  5. [原] KVM 虚拟化原理探究(3)— CPU 虚拟化

    KVM 虚拟化原理探究(3)- CPU 虚拟化 标签(空格分隔): KVM [TOC] CPU 虚拟化简介 上一篇文章笼统的介绍了一个虚拟机的诞生过程,从demo中也可以看到,运行一个虚拟机再也不需要 ...

  6. [原] Cgroup CPU, Blkio 测试

    关于Cgroup的简单测试 [toc] 简单介绍Cgroup (如果对cgroup熟悉可以忽略) 一般情况下,cgroup挂载到一个虚拟文件目录,然后可以通过文件系统的API对其操作. ># m ...

  7. %iowait和CPU使用率的正确认知

    resources 理解 %IOWAIT (%WIO) LINUX系统的CPU使用率和LOAD Linux Performance Observability Tools How Linux CPU ...

  8. Linux下高cpu解决方案

    昨天搞定了一个十万火急的issue,客户抱怨产品升级后系统会变慢和CPU使用率相当高,客户脾气很大,声称不尽快解决这个问题就退货,弄得我们 R&D压力很大,解决这个issue的任务分给了我,客 ...

  9. 《CPU的工作过程》

    本文转载自inter官方网址:https://software.intel.com/zh-cn/articles/book-Processor-Architecture_CPU_work_proces ...

  10. PC虚拟现实应用的性能分析与优化:从CPU角度切入

    如今,虚拟现实 (VR) 技术正日益受到欢迎,这主要得益于遵循摩尔定律的技术进步让这一全新体验在技术上成为可能.尽管虚拟现实能给用户带来身临其境般的超凡体验,但相比传统应用,其具有双目渲染.低延迟.高 ...

随机推荐

  1. KingbaseES Json 系列六:Json记录操作函数一

    KingbaseES Json 系列六--Json记录操作函数一(JSONB_TO_RECORD,JSONB_TO_RECORDSET,JSON_TO_RECORD,JSON_TO_RECORDSET ...

  2. 【Java面试题】SpringMVC

    九.SpringMVC 63)SpringMVC 的流程 a.用户向服务器发送请求,请求被 SpringMVC 前端控制器 DispatchServlet 捕获: b.DispatcherServle ...

  3. #dp#洛谷 5774 [JSOI2016]病毒感染

    题目 分析 此题肯定不是绿题,哪有这么恶心的dp 试想这样的情形:假设当 JYY 第一次抵达村庄 \(i\),未作救治并直接前往了另一个村庄.那么由于 \(i\) 村庄的人们求生心切, 一旦当 JYY ...

  4. 数据库操作入门:PyMongo 和 MongoDB 的基本用法

    MongoDB MongoDB是一种流行的NoSQL数据库,它将数据存储在类似JSON的文档中,使数据库非常灵活和可扩展 PyMongo Python需要一个MongoDB驱动程序来访问MongoDB ...

  5. std::thread 一:创建线程的三种方式

    前言: #include <thread> thread.join() // 阻塞 thread.detach() // 非阻塞 thread.joinable() // bool,判断线 ...

  6. JS启动Windows上的exe

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. pyqt5报错:qt.qpa.plugin: Could not find the Qt platform plugin "windows" in "" This ap

    环境: win10 Python 3.7.5 vs code 解决方法: 新建环境变量,然后重启  vs code 就可以了 QT_QPA_PLATFORM_PLUGIN_PATH C:\Users\ ...

  8. Redis Stack功能介绍及redis-om-dotnet使用示例

    为了简化开发人员对较新的 Redis 模块及其提供的功能的体验,同时简化支持其功能的文档和客户端.以帮助开发人员从开始使用 Redis 的那一刻起,就能充分提高工作效率.Redis Stack诞生了. ...

  9. k8s之持久卷NFS

    一.简介 NFS网络存储卷,Kubernetes原生支持NFS作为Kubernetes的持久存储卷之一.NFS可以实现Pod的跨界点的数据持久性. 首先需要创建一个nfs 服务器,作为存储服务器: 将 ...

  10. SilentEye qsnctf wp

    题目附件(注:文件名为Luminous.jpg) 根据题目提示,使用SilentEye工具 将图片使用SilentEye打开 使用左下角的Decode解密功能 猜测密码为文件名,输入并开始解密 将被加 ...