设为首页收藏本站

天空语文 如皋  九华 作文  教学

 找回密码
 我要加入(register注册)

QQ登录

只需一步,快速开始

快捷登录

使用微信账号登录

最近看过此主题的会员

天空新人

蓝兰的花朵

天晴朗

嘿嘿嘿

joycy

颂颂.g

酷土土土

用户已注销

Jeremy

ʚ贴贴ɞ

果子黑

H·princess

李苏楠

方大金

依灵灵灵.

金川兰

lulululu

lisunan18795762

清风拂过

楠大人

王悦

朴弟

赵珺琦

王佳慧

八5霍程

徐灵丽

查看: 292|回复: 1
收起左侧

[数码知识] [超级干货]-程序在计算机中是如何运行的?

  [复制链接] TA的其它主题
来自- 保留地址

Ta在天空论坛排行

积分:NO. 19 名

发帖:NO. 19 名

在线:NO. 19 名

划过指尖的烟云 发表于 2020-4-5 18:59:11 | 显示全部楼层 |阅读模式 来自- 保留地址
天空便利贴:这里是语文的天堂,也是文学的乐园。如有原创或喜欢的文章,可推荐发表,供坛友欣赏提高。您的热情和才华是天空论坛最大的财富。
来自- 保留地址

加入天空更多精彩

您需要 登录 才可以下载或查看,没有账号?我要加入(register注册)

x
[超级干货]-程序在计算机中是如何运行的?朵藝IT技术 2020-03-28 15:52:40
开门见山,咱不说废话!
你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
熟悉吧,可能大家都知道,运行输出“Hello World!”,不过嘞,今天我带你从内存和CPU的角度去剖析一下这段代码在计算机中是如何执行的。
Hello World保存在哪?
首先问你个很简单的问题,当你写下这段代码的时候,你把它保存在哪了,假如说你说是桌面,就像现在这样


是的,一个HelloWorld.java文件就保存在了桌面上,这个叫做Java源文件,不过说是保存在桌面上这个有点模糊,这个桌面又是个啥呢,我们应该想象它保存在了我们电脑的哪个部分呢?一台计算机包含如下基本五个部分:
  • 运算器
  • 控制器
  • 存储器
  • 输入设备
  • 输出设备
在计算机中啊,保存信息主要靠存储器,而存储器又分为内部存储器和外部存储器,内部存储器就是内存了,而这个外部存储器主要就是磁盘了,磁盘又分为硬盘和软盘,而我们电脑中的大部分就都是硬盘了,这里也分为固态硬盘和传统机械硬盘。
不管怎么说吧,磁盘也好内存也罢,就是用来存放数据的,那么我们就知道了我们写的这个Java源文件应该就是存放在电脑中的磁盘了。
那么代码保存到硬盘中之后呢?
今天的主角,CPU和内存
代码被保存到硬盘之后,接下来就要CPU和内存登场了,提起精神了,超级干货来了。
告诉你个秘密,理解CPU和内存是如何在一块工作的,是每个学编程必备的基础中的基础,反正就是很重要!
我们在上面提到了硬盘,这里又说到了CPU和内存,那么我们就来看看这三个家伙
硬盘,内存和CPU
先看一张图


这张图大致描述了三者的一个关系,什么关系嘞,数据读取的关系,我们之前不是说我们写的代码保存到了硬盘中了吗,如果要执行这段代码的话,需要把这段代码从硬盘中读取到内存中,此时的代码已经变成了二进制文件存储在内存中,为了更好的去理解,我们把上面的代码再进一步改写下:
public class HelloWorld {
    public static void main(String[] args) {
        int a = 5;
        int b = 3;
        sum = a + b;
        System.out.println(sum);
    }
}
也就是加入了一个基础的加法运算,此时这段代码已经变成二进制文件放到了内存中,现在要继续执行,也就是要执行代码的加法操作,此时的数据a和b,也就是5和3已经是二进制的形式在内存中,现在需要把a和b做加法运算,CPU收到这个指令(将a和b相加),就会去内存中将a和b读取,然后存放到自己的寄存器中,然后由CPU中的运算器去做加法运算,得到的结果依然放到寄存器中。
是不是有点懵?啥是寄存器?运算器呢?别急,我们继续往下看。
内存是个啥?
这个内存是啥呢?内存条知道吧,我们电脑中的内存条,它是属于内部存储器,主要就是用来存放数据的,也可以理解为我们这里说的内存,这是实际存在的,我们可以看得见的内存条,但是关于数据存储,怎么存储,是不是还有点模糊,那么我们抽象点来说,这个内存其实就是一个个的小格子,就像这样:


这些小格子就是用来存放数据和指令的,而且每个格子都有自己的编号,这个编号大家也熟悉,就是我们经常说的内存地址。
另外你需要知道的是,计算机是只认识0和1的,所以存放在内存中的数据其实都是二进制文件了。
CPU是个重点
其实关于内存,先了解上面那些就足够了,内容比较多的就是CPU了,想必大家都听说过CPU就相当于人的大脑一样,对电脑来说,至关重要,所以啊,CPU的结构是真的复杂,怎么办?
一般碰到这样的,我们就需要有选择的进行掌握和学习,因此对于CPU,你必须了解的两个东西,一是寄存器,另外一个就是运算器,为啥,这又是啥?
想要搞明白这个问题,咱们需要先来看看如下这些知识点。
CPU的特点
首先,这家伙是真的复杂,除此之外嘞,你还需要知道对于CPU来说,必须要把数据读取到寄存器中才能做相应的运算,另外CPU的数据读写的速度是真的快,内存和硬盘根本没法比,可能你没啥概念,举个例子吧
CPU这家伙执行一条指令大约需要耗时1ns,但是对于内存呢?它去硬盘读取数据至少8ms,在这段时间内,CPU可以执行大约800万条指令,说这个,主要是为了让你直观的感受到CPU是真的快。
就像《码农翻身》一书中说的那样:
CPU的运算速度快的丧心病狂,但是它能做的事情简单的令人发指
啥?为啥做的事情简单的令人发指呢?
别看CPU那么牛,那么复杂,那么快,它做的事情真的挺无聊的,总结起来,CPU主要就干如下四件事情:
1、从内存中读取数据,然后放到寄存器中
2、把寄存器中的数据写入到内存
3、进行数学运算和逻辑运算(加减乘除,AND,OR)
4、依据相应的条件进行跳转,执行其他指令(一条指令跳转到另外一条指令)
不知道你发现没,我们似乎一直在提寄存器,这又是什么玩意?这就要看看CPU的构造了
CPU的重点组成部分
我们上面也说了,CPU的结构真的很复杂,但是我们需要重点关注如下几个重要组成部分:
寄存器
运算器
没错就是这俩货,那他们是干啥的嘞,首先你得知道他们是CPU中的东西,这个寄存器啊,说白了就是存放数据的,是个存储部件,还记得之前说内存就是一个个的小格子吗?这个寄存器你就可以简单的想成也是小格子,放数据的。
寄存器
寄存器是存储部件,容量非常有限,能存储的数据的大小,现在来说一般有两种,也就是我们常听说的32位和64位,32位的寄存器就能存储4个字节的数据,64位的寄存器就能存储8个字节的数据,另外CPU也分为32位和64位其实就是由其中的寄存器的位数决定的,可想而知,即使是64位的寄存器也干不了啥大事啊,所以啊,现在的CPU一般都内置了很多的寄存器,依此来完成比较复杂的操作
运算器
另外一个就是运算器了,这个是计算的核心,主要的作用就是用来做加减乘除这些运算的,不过嘞,这里你需要知道的一点就是,运算器是没法直接操作内存中的数据的,很容易想到,运算器操作的数据是寄存器中存放的数据。
CPU和内存的交互
简单的了解了内存和CPU之后,我们就可以来看看程序代码是如何进一步被执行的,上面提到了,程序代码被读取到内存中了,现在要执行这段代码,那就需要CPU出马了,首先嘞,CPU会去读取需要进行操作的数据,对了,继续看这代码:
public class HelloWorld {
    public static void main(String[] args) {
        int a = 5;
        int b = 3;
        sum = a + b;
        System.out.println(sum);
    }
}
也就是需要读取数据a和b,那么读取到的数据a和b存放在哪了呢?根据我们上面对CPU简单的了解可知,数据a和b是被放到了CPU中的寄存器中了,看这个图



在CPU中有两个比较重要的组件就是运算器和寄存器,寄存器有很多个,再看内存,是一个个的小格子,每个格子有编号,比如说现在数据a和b分别存放在#1和#2上,然后CPU将他们读取放在寄存器R1和R2上



这个时候就要计算a和b的和了,然后就轮到运算器出马了,它会拿到寄存器R1和R2,也就是拿到数据a和b,然后做加法运算


那么计算之后的结果也就是sum,运算器会再次把它放到寄存器,比如R1中,这个时候之前的数据b就会被覆盖,如此一来,CPU和内存就一起完成一次加法运算操作。
这里其实我们把关注点聚焦到了加法运算操作,实际上,程序代码被装载近内存的时候会产生数据和指令两部分,数据我们都知道是啥,指令嘞?
其实也好理解,指令就是说明程序该怎么执行,对于CPU来说就是告诉CPU该做什么,比如告诉CPU,读取数据a和b,然后再将他们相加,说白了,CPU是根据指令干活,指令让怎么干,咱就怎么干。
因此,你必须告诉CPU该干啥,否则,CPU也很懵的呦。
经过上面的简单介绍,我们再来看看CPU主要做的四件事情:
1、从内存中读取数据,然后放到寄存器中
2、把寄存器中的数据写入到内存
3、进行数学运算和逻辑运算(加减乘除,AND,OR)
4、依据相应的条件进行跳转,执行其他指令(一条指令跳转到另外一条指令)
怎么样,是不是更加清晰明了!
总结一哈
这么一看,也没啥难的吗?总的来说啊,就是我们写的程序是放在硬盘中的,在运行的时候才会被调入到内存中,也就是说内存中的数据是从硬盘来的,而CPU中寄存器的数据又是从内存中装载进来的,然后CPU会根据相应的指令去操作寄存器中的数据,比如加减乘除什么的,以此来完成一个程序在计算机中的运行。
一句话总结:
本身程序是在硬盘上,需要把程序加载进内存,然后由CPU去执行


我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 天空金币 , 目前已有1人回答

最近访客

来自- 保留地址
天空便利贴:
到底了,觉得文章不错的,可以给作者评论或者打赏,这是创作者向前的动力。可以向上滑,或者转到相关热帖。使用过程中如有好的意见或建议,欢迎联系页面qq客服。天空论坛因你更精彩。
回复

手机扫码浏览
天空论坛,有你有我,明天更好!
来自- 保留地址
点评回复 来自- 保留地址

使用道具 举报 私信管理员来自- 保留地址

来自- 中国湖北十堰

Ta在天空论坛排行

积分:NO. 10 名

发帖:NO. 11 名

在线:NO. 19 名

传奇私服cdegeq 发表于 2024-2-23 11:41:58 | 显示全部楼层 来自- 中国湖北十堰
来自- 中国湖北十堰
顶顶更健康!
来自- 中国湖北十堰
沙发 2024-2-23 11:41:58 回复 收起回复
B Color Smilies
还可输入 2000 个字符
回复
天空论坛,有你有我,明天更好!
来自- 中国湖北十堰
点评回复 支持 反对 来自- 中国湖北十堰

使用道具 举报 私信管理员来自- 中国湖北十堰

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

×天空论坛发帖友情提示:
1、注册用户在本论坛发表、转载的任何作品仅代表其个人观点,不代表本论坛认同其观点。
2、如果存在违反国家相关法律、法规、条例的行为,我们有权在不经作者准许的情况下删除其在本论坛所发表的文章。
3、所有网友不要盗用有明确版权要求的作品,转贴请注明来源,否则文责自负。
4、本论坛保护注册用户个人资料,但是在自身原因导致个人资料泄露、丢失、被盗或篡改,本论坛概不负责,也不承担相应法律责任。

QQ|手机版|我们的天空 ( 苏ICP备18048761号 ) |苏公网安备32068202000215号 |网站地图

GMT+8, 2024-4-29 11:57 , Processed in 0.281520 second(s), 64 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表