专栏首页架构师对于程序员,那些既陌生又熟悉的计算机硬件

对于程序员,那些既陌生又熟悉的计算机硬件

程序员一步入中年,不知不觉便会被铺天盖地的“危机感”上身,曾经的那个少年已经不在,时间就是这样公平。就算你能发明c语言,随着时间的推移,你注定还是要成为慢慢变蔫的茄子,缓缓变黑的葡萄。

看着乐视退市的消息,周末我赶紧拉着儿子的小手,复习起了大学那曾经考试”满分“的计算机基础,你别说,只读了一小部分我就发现一个事实,记忆力果然指数级下降,儿子一遍就可以熟记,我却衰退的就像没上过大学。

原来程序员写的程序实际上就是一个由0和1组成的位序列,或者说是比特序列,8个比特(bit)被分为一组,称为字节。系统中所有的信息,包括网络传送的数据,内存中的数据以及磁盘文件,程序等,都是由一串比特(bit)表示的。如果你要问为什么非要8个字节呢?难道不会百度吗?我又不是计算机发明者^_^。可能有一点非常重要,你可以拿去和面试官吹水:一个同样的字节可能代表一个整数,浮点数,甚至字符串,区分他们的唯一方法是这些数据的上下文信息。

顺便提一下,在计算机中数字的表示方式其实是对实际值的有限近似值,只不过一些高级语言对这些值处理的很好而已,不得不吐槽,JavaScript在处理这个问题上做的不是太好,不信你可以浏览器的F12 运行一下

0.1+0.2
0.30000000000000004
0.01 + 0.05
0.060000000000000005

言归正传,作为一个有着”代码改变世界“梦想的程序员,对自己手艺要精益求精,就必须了解你的真爱的物力构成。无论多diao的软件都运行在硬件基础之上,虽然近几年硬件的发展速度比你衰老的速度还要快,但是核心内容几乎没变,这才是你真爱的裸妆。

01

PART

CPU

先撸一下这个不成熟的百度百科

中央处理器(CPU,central processing unit)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元

说的直白一点,这个家伙几乎是软件运行的核心,是解释和执行指令的引擎。目前主流的cpu的核心是一个32位或者64位(未来还可能更大)长度的存储设备或者寄存器,被称为程序计数器(PC,一个蛋疼的简称)。在任何时刻,程序计数器都指向内存中某条指令的地址。

CPU表面上是按照一个特定的模型去执行指令,这个模型由指令集的架构来决定的(每个架构类型都不一样,所以才会有AMD,Intel)。自系统通电开始,直到系统断电,CPU一直都在不断的执行指令。如果没有实际的软件执行指令呢?拿windows来说,软件层虚拟出来了一个“System Idle Process”进程,被称为系统空闲进程,这个进程会告诉cpu挂起(停止工作),所以这个进程的cpu使用率和其他进程是相反的意思,它的使用率越高说明CPU的压力越小。

CPU从程序计数器指向的内存地址读取指令内容,并解释该指令执行指令的操作,然后更新程序计数器,使他指向下一条指令,而这条指令很有可能和上条指令并非相邻。简单来说,cpu可能会频繁的执行以下操作

1. 数据加载:从主存复制一段数据到寄存器,以覆盖寄存器中原来的内容。

2. 数据存储:把寄存器中的一段数据复制到主存的一个位置,以覆盖主存原来位置上的内容。

3. 指令操作:把两个寄存器的内容复制到逻辑计算单元,逻辑计算单元会对这两段数据做指令运算,并将结果存储在一个寄存器中。

4. 指令跳转:从指令本身抽取一段内容并复制到程序计数器中,以覆盖程序计数器中原来的值。

02

PART

主存

老规矩,没有百度不到的知识,一个没有百度百科的名词,说明不是很有名

主存储器(Main memory),简称主存。是计算机硬件的一个重要部件,其作用是存放指令和数据,并能由中央处理器(CPU)直接随机存取。现代计算机是为了提高性能,又能兼顾合理的造价,往往采用多级存储体系。即由存储容量小,存取速度高的高速缓冲存储器,存储容量和存取速度适中的主存储器是必不可少的。主存储器是按地址存放信息的,存取速度一般与地址无关。

主存是一个临时的存储设备,在程序被执行过程中用来临时存放程序内容和处理结果。从物理来讲,主存是由一组动态随机存取存储器芯片组成(你可以想象成一大排二极管),从逻辑上来讲,主存是一个线性的字节数组,每个字节都有一个唯一的地址,这些地址是从0开始的,现在主流的主存在个人计算机上已经是16G的大小,让我这个还在用4G主存的老人无言以对呀。

03

PART

输入输出设备

当年计算机第一堂课,那个地中海的老师就讲过这个概念,虽然具体内容现在已经和我的秀发一并褪去,但是每天的工作中还是能偶尔看到IO这个词。

IO(输入输出)是系统与外部世界的连接通道,像我们每天撸王者农药的鼠标键盘,释放压力看小电影的高清显示器,存储苍老师的磁盘等等,这些都隶属于输入输出设备。

每个IO设备都有一个控制器或者适配器,它是和系统交互的途径,一般都和IO总线连接。说直白一点,每个IO设备都有它的驱动程序,要不然系统不可能无缘无故就能使用键盘鼠标这些设备的,即使现在的外设都是免驱的。

04

PART

系统总线

总线是连接整个系统的桥梁,物理上是一组电子管道。他负责携带信息字节并在各个组件之间进行传递,就像我们软件系统设计SOA中的总线。总线根据系统定义的位数来传输定长的数据,每个系统都不一样,不过现在主流的长度要么是四个字节(32位),要么是8个字节(64位)。从这里就可以联想到,64位的系统在数据传输速度上要比32位的系统快一倍,也许将来很快会迈入128,256时代呢

如果非要加一张图的话,此图最有代表性

本文分享自微信公众号 - 架构师修行之路(jiagoushixiuxing),作者:菜v菜

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 程序员修神之路--高并发系统设计负载均衡架构

    一个系统发展初期,往往都是单机系统。应用和数据库在一台服务器上,随着业务的发展,访问量的增大,一台服务器性能就会出现天花板,往往已经难以支撑业务量了。这个时候就...

    架构师修行之路
  • 分布式高并发中,如何发挥gRPC的威力?来看看它的底层实现原理!

    A high-performance, open-source universal RPC framework

    架构师修行之路
  • 程序员修神之路--分布式缓存的一条明路(附代码)

    你忘了去年分布式缓存服务器也扩容过一次,很多请求都穿透了,DB差点扛不住呀,这次再扩容DB估计就得挂了

    架构师修行之路
  • Flutter Notes | 我用到的一些插件整理

    大神和菜鸟的区别,个人感觉更多的是大神花费了很多私下时间去了解每个问题的根本是什么,而我这小菜鸟,仅仅网上浪一圈,Fix 了,OK 了,Commit 没事了。

    HLQ_Struggle
  • 《机器学习实战》(七)—— AdaBoost(提升树)

    http://blog.csdn.net/u011239443/article/details/77294201

    用户1621453
  • GPU并行计算和CUDA编程(1)-CPU体系架构概述

    今天和实验室同学去听了周斌老师讲的《GPU并行计算和CUDA程序开发及优化》(课程主页:http://acsa.ustc.edu.cn/HPC2015/nvid...

    王云峰
  • 深入理解计算机系统(4.1)------Y86指令集体系结构

      本章我们将进入处理器体系结构介绍的神秘海洋中,我们熟悉的手机,电脑等设备的核心硬件都离不开处理器。处理器可以称的上是人类创造的最复杂的系统之一,一块手指大小...

    IT可乐
  • 基于Twitter的Snowflake算法实现分布式高效有序ID生产黑科技(无懈可击)

    参考美团文档:https://tech.meituan.com/2017/04/21/mt-leaf.html

    爱撸猫的杰
  • 益思维-做一个T型人才

              工作中该如何发现自己要学什么,怎样构建自己的技能树。这是一个非常重要的问题,假如你不知道要学什么,那一旦你工作不那么忙时就会觉得无聊,只能通...

    進无尽
  • 阿里Java架构师面试高频300题:集合+JVM+Redis+并发+算法+框架等(含答案)

    在过2个月即将进入9月了,然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的java开发朋友跳槽面试,无论一面还是二面,都开始...

    用户5546570

扫码关注云+社区

领取腾讯云代金券