虽然以前知道计算机里有CPU,内存,硬盘,显卡这么些东西,我还真不知道这些东西是怎么协作起来完成一段程序的,能写出程序却不懂程序,也不会向别人解释他们的关系,所以特意总结了一下,写的比较浅显,和我一样是菜鸟或小白的人可以看一看,解释的角度是从完全不懂的人的角度来考虑的。

首先程序是什么?程序和我们的电脑硬件CPU,内存,硬盘,到底有什么关系?

  程序是指一套做事的流程,比如村里召开妇女大会的流程,可能就是先找好开会场地,然后通知领导和妇女,安排领导讲话等等。计算机指的程序也差不多,也是一套做事的流程,只不过计算机只能读懂他们所理解字符,我们开会的流程是通过人与人之间的协作完成,计算机的程序跑起来是通过硬件的协作完成。

  在这里我们先做一个比喻,假设CPU,内存,硬盘等这些东西都是来自一个星球的外星人,既然是外星人,当然不懂我们地球人的语言啊,而且这些外星人有一个特点,他们只有一只手,且手上只有一根手指,每次算数的时候,因为要靠手指来计数,我们的10进制数字,他们一根手指根本不够用啊,这就和我们小时候数到11就得借用脚趾头一样,所以他们来计算我们地球人的数字时就需要借用很多小伙伴手来表示一个大于2的数字,这个就是他们的2进制。

  现在知道了CPU,内存,硬盘的特殊算数方式,我们来进一步来看看他们之间的协作,他们是怎么完成我们人类的要求的。

  首先每个人都有自己擅长的东西,计算机星球的这几个小伙伴也是,各有各的属性,CPU这个人最聪明,算数最快,缺点就是记不住太多东西,算完的东西不存起来就忘了,所以需要别人协助记流程数据。再看看硬盘,硬盘体格最大,记性好(虽然慢点),所以他被分配了一个任务,那就是记住我们地球人分配的各种无聊的流程数据(什么开会的流程啊,请那些人啊,这些人的电话号码多少啊等等),但是呢由于硬盘反应慢,cpu并不想直接和硬盘打交道,然后再看看内存, 内存比硬盘小很多,反应比硬盘快好多倍,但是就是记的东西有点少,而且没电的时候就罢工,把东西忘的一干二净 ,但因为反应快,且记的东西比自己多,cpu决定和内存直接打交道要流程数据。

  这样我们就可以一次性把很多任务的流程写好堆给硬盘兄,什么开会的流程啊,查看天气预报的流程啊,给女朋友打电话的流程啊统统提前写好塞给硬盘,然后当我们需要计算机完成一个任务时,内存从硬盘那把这个任务的流程全都要过来,此时的程序是一堆的指令集(做事的流程),cpu从内存逐条要指令,一条指令计算调度一次,每完成一个步骤后都要内存帮忙翻到相应的地方,看这个流程下一步要求是什么,从头到尾一路算完,这样他们就完成了计算机程序。

  刚刚我们提到了程序员这个角色,那为什么他们写的东西,计算机星球的这些外星人能听懂呢?明明刚刚说的计算机星球的这些人只懂0和1嘛,程序员写的好歹也是英文嘛,难道,计算机星球的外星人懂英文?他们当然不懂,程序员理论上写好计算机能直接读懂的01代码是可以的,但是程序员如果每次都要把程序直接转写成01代码势必会大大降低写程序的效率,而且每个程序员要从底层这么深入了解计算机语言也会非常费时间,所以早期的程序员大神干脆写了个翻译程序,这个程序也叫编译器,这个编译器可以专门把一门特定的语言转成机器能读懂的计算机语言,这样有了这个么翻译,后来的程序员写程序就会轻松很多,可以直接写上地球程序员方便阅读的代码,所以我们应该感谢发明编译器的人,他们让人类世界和计算机世界交流变得更便捷了。

以上只是大概介绍了下计算机cpu,内存,硬盘和程序的关系,用了些可能不算好的比喻,如有纰漏和不正确的地方,望指正。

计算机程序是怎么通过cpu,内存,硬盘运行起来的?的更多相关文章

  1. Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数)

    [转]Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的数据至关重要,关系着优化和分析出现的问题.我是在运维过程中要用到的.因此,今天给出Wind ...

  2. VPS性能测试:CPU内存,硬盘IO读写,带宽速度,UnixBench和压力测试

    现在便宜的VPS主机越来越多了,一些美国的VPS主机甚至给出1美元一月的VPS,堪比虚拟主机还要便宜,巨大的价格优势吸引不少人购买和使用,而近些年来国内的主机商也开始意识到便宜的VPS对草根站长的诱惑 ...

  3. Windows 性能监视器的基本指标(CPU,内存,硬盘参数)

    转载:http://kms.lenovots.com/kb/article.php?id=7045 Windows 性能监视器的基本指标(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的 ...

  4. 一个统计 CPU 内存 硬盘 使用率的shell脚本

    一个统计 CPU 内存 硬盘 使用率的shell脚本,供大家学习参考 #!/bin/bash #This script is use for describle CPU Hard Memery Uti ...

  5. centOS7下实践查询版本/CPU/内存/硬盘容量等硬件信息

    1.系统 1.1版本 uname -a 能确认是64位还是32位,其它的信息不多 [root@localhost ~]# uname -a Linux localhost.localdomain 3. ...

  6. DSAPI 获取实时统计信息CPU/内存/硬盘/网络

    有时,我们需要获取当前计算机中CPU.内存.硬盘.网络等实时信息,如下图:\ 要实现上述几项信息的获取,通常需要使用Timer控件来间隔获取,以便刷新最新的数据. 本示例中,放一个Timer控件,放一 ...

  7. CPU 内存 硬盘的区别

    第一点:CPU 是处理器,内存和硬盘是存储器,受CPU 的控制.  第二点:由于内存的速度很快,在电脑运行的过程中,CPU通常只与内存交换数据,但内存断电数据就会全部丢失,因此电脑使用硬盘作为主要的存 ...

  8. linux 查看cpu 内存 硬盘 文件夹大小

    文件夹大小 显示cpu使用率 top 1 查看CPU 1.1 查看CPU个数 # cat /proc/cpuinfo | grep "physical id" | uniq | w ...

  9. 查看CPU 内存 硬盘 网络 查看进程使用的文件 uptime top ps -aux vmstat iostat iotop nload iptraf nethogs

    #安装命令 yum install  sysstat #包含 iostat vmstat yum install iotop yum install  nload yum install iptraf ...

  10. centOS下实践查询版本/CPU/内存/硬盘容量等硬件信息

    更详细参考: https://blog.csdn.net/dream_broken/article/details/52883883 1.查看内存 DirectMap2M: 33544192 kB [ ...

随机推荐

  1. day 67 Django基础三之视图函数

    Django基础三之视图函数   本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Dja ...

  2. MySQL初始化(35-03)

    1, 在MySQL的安装目录下新建个data目录. 2,初始化mysqld --initialize-insecure

  3. 第二十二篇:Spring简单定时任务

    背景:有些操作,不适合放在页面上让用户手动触发去执行,比如一些需要不断更新的数据(如统计数据)有些需要同步的数据,不需要非常实时,可以在固定的时间或者固定的频率执行同步 第一步:配置xml第二步:编写 ...

  4. Java必备的几个开发工具,你会几个?

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 以下是Java技术栈微信公众号发布的所有关于 Java 常用工具干货,会从以下几个方面汇总,本文会长期更新. 开发工具篇 M ...

  5. 帝国cms学习

    手册地址1 手册地址2 入门 安装: 将下载的upload里的文件上传到网站更目录 然后 域名/e/install/index.php Warning: Use of undefined consta ...

  6. JPA默认方法查询遇到转JSON的处理

    JPA提供的findAll等查询方法在有关联的对象时 比如:在查userInfo @Entity@Table(name = "user_info")public class Use ...

  7. Johnson–Lindenstrauss 定理-Johnson–Lindenstrauss lemma

    Johnson–Lindenstrauss 定理是这样的:一个一百万维空间里的随便一万个点,一定可以几乎被装进一个几十维的子空间里! 严格说来是这样:在 M 维空间中的 N 个点,几乎总是被包含在一个 ...

  8. php实现在不同国家显示网站的不同语言版本

    首先,你的网站本身要拥有多个语言版本.不然的话你就只能用JS去转化了. 1.通过ip去定位,这个要引用到第三方的接口进行数据的完整返回,但是不知道是我的网速太慢还是什么原因,个人觉得这个方法会卡顿: ...

  9. unordered_map

    #include <iostream> #include <cstdio> #include <queue> #include <algorithm> ...

  10. apache配置域名子目录,访问不同子项目

    <VirtualHost *:443> DocumentRoot "E:/phpstudy/WWW/nextplus" ServerName local-main.co ...