当前位置:网站首页>对于程序员,那些既陌生又熟悉的计算机硬件
对于程序员,那些既陌生又熟悉的计算机硬件
2020-11-09 23:53:00 【架构师修行之路】
程序员一步入中年,不知不觉便会被铺天盖地的“危机感”上身,曾经的那个少年已经不在,时间就是这样公平。就算你能发明c语言,随着时间的推移,你注定还是要成为慢慢变蔫的茄子,缓缓变黑的葡萄。
看着乐视退市的消息,周末我赶紧拉着儿子的小手,复习起了大学那曾经考试”满分“的计算机基础,你别说,只读了一小部分我就发现一个事实,记忆力果然指数级下降,儿子一遍就可以熟记,我却衰退的就像没上过大学。
原来程序员写的程序实际上就是一个由0和1组成的位序列,或者说是比特序列,8个比特(bit)被分为一组,称为字节。系统中所有的信息,包括网络传送的数据,内存中的数据以及磁盘文件,程序等,都是由一串比特(bit)表示的。如果你要问为什么非要8个字节呢?难道不会百度吗?我又不是计算机发明者^_^。可能有一点非常重要,你可以拿去和面试官吹水:一个同样的字节可能代表一个整数,浮点数,甚至字符串,区分他们的唯一方法是这些数据的上下文信息。
顺便提一下,在计算机中数字的表示方式其实是对实际值的有限近似值,只不过一些高级语言对这些值处理的很好而已,不得不吐槽,JavaScript在处理这个问题上做的不是太好,不信你可以浏览器的F12 运行一下
0.1+0.2
0.30000000000000004
0.01 + 0.05
0.060000000000000005
言归正传,作为一个有着”代码改变世界“梦想的程序员,对自己手艺要精益求精,就必须了解你的真爱的物力构成。无论多diao的软件都运行在硬件基础之上,虽然近几年硬件的发展速度比你衰老的速度还要快,但是核心内容几乎没变,这才是你真爱的裸妆。
CPU
先撸一下这个不成熟的百度百科
中央处理器(CPU,central processing unit)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元
说的直白一点,这个家伙几乎是软件运行的核心,是解释和执行指令的引擎。目前主流的cpu的核心是一个32位或者64位(未来还可能更大)长度的存储设备或者寄存器,被称为程序计数器(PC,一个蛋疼的简称)。在任何时刻,程序计数器都指向内存中某条指令的地址。
CPU表面上是按照一个特定的模型去执行指令,这个模型由指令集的架构来决定的(每个架构类型都不一样,所以才会有AMD,Intel)。自系统通电开始,直到系统断电,CPU一直都在不断的执行指令。如果没有实际的软件执行指令呢?拿windows来说,软件层虚拟出来了一个“System Idle Process”进程,被称为系统空闲进程,这个进程会告诉cpu挂起(停止工作),所以这个进程的cpu使用率和其他进程是相反的意思,它的使用率越高说明CPU的压力越小。
CPU从程序计数器指向的内存地址读取指令内容,并解释该指令执行指令的操作,然后更新程序计数器,使他指向下一条指令,而这条指令很有可能和上条指令并非相邻。简单来说,cpu可能会频繁的执行以下操作
- 数据加载:从主存复制一段数据到寄存器,以覆盖寄存器中原来的内容。
- 数据存储:把寄存器中的一段数据复制到主存的一个位置,以覆盖主存原来位置上的内容。
- 指令操作:把两个寄存器的内容复制到逻辑计算单元,逻辑计算单元会对这两段数据做指令运算,并将结果存储在一个寄存器中。
- 指令跳转:从指令本身抽取一段内容并复制到程序计数器中,以覆盖程序计数器中原来的值。
主存
老规矩,没有百度不到的知识,一个没有百度百科的名词,说明不是很有名
主存储器(Main memory),简称主存。是计算机硬件的一个重要部件,其作用是存放指令和数据,并能由中央处理器(CPU)直接随机存取。现代计算机是为了提高性能,又能兼顾合理的造价,往往采用多级存储体系。即由存储容量小,存取速度高的高速缓冲存储器,存储容量和存取速度适中的主存储器是必不可少的。主存储器是按地址存放信息的,存取速度一般与地址无关。
主存是一个临时的存储设备,在程序被执行过程中用来临时存放程序内容和处理结果。从物理来讲,主存是由一组动态随机存取存储器芯片组成(你可以想象成一大排二极管),从逻辑上来讲,主存是一个线性的字节数组,每个字节都有一个唯一的地址,这些地址是从0开始的,现在主流的主存在个人计算机上已经是16G的大小,让我这个还在用4G主存的老人无言以对呀。
输入输出设备
当年计算机第一堂课,那个地中海的老师就讲过这个概念,虽然具体内容现在已经和我的秀发一并褪去,但是每天的工作中还是能偶尔看到IO这个词。
IO(输入输出)是系统与外部世界的连接通道,像我们每天撸王者农药的鼠标键盘,释放压力看小电影的高清显示器,存储苍老师的磁盘等等,这些都隶属于输入输出设备。
每个IO设备都有一个控制器或者适配器,它是和系统交互的途径,一般都和IO总线连接。说直白一点,每个IO设备都有它的驱动程序,要不然系统不可能无缘无故就能使用键盘鼠标这些设备的,即使现在的外设都是免驱的。
系统总线
总线是连接整个系统的桥梁,物理上是一组电子管道。他负责携带信息字节并在各个组件之间进行传递,就像我们软件系统设计SOA中的总线。总线根据系统定义的位数来传输定长的数据,每个系统都不一样,不过现在主流的长度要么是四个字节(32位),要么是8个字节(64位)。从这里就可以联想到,64位的系统在数据传输速度上要比32位的系统快一倍,也许将来很快会迈入128,256时代呢
如果非要加一张图的话,此图最有代表性
更多精彩文章
版权声明
本文为[架构师修行之路]所创,转载请带上原文链接,感谢
https://my.oschina.net/caicaijun/blog/4710340
边栏推荐
- 代码中的软件工程--对menu项目的源码分析
- jt-day10
- What is the SRM system? SRM supplier management system functions
- Apache Hadoop的重要组成
- Problems of input and button (GAP / unequal height / misalignment) and Solutions
- The length of the last word in leetcode
- 表单验证,为避免全局污染,少定义全局变量写法
- ES6, ES7, es8 Learning Guide
- 商品后台系统优化
- 一幅图像能顶16x16字!——用于大规模图像缩放识别的变压器(对ICLR 2021年论文的简要回顾)
猜你喜欢
JMeter的简单使用
C++异常实现机制
Youtube订阅——解决在弹窗内使用Youtube订阅按钮高度显示不全的问题
将Map中对应的key和value赋值到对象中
DB engines database ranking in November: PostgreSQL holds the top spot in the same period
公网IP地址和SSL证书可以提升SEO吗?
2020-11-09:谈谈布隆过滤器和布谷鸟过滤器的相同点和不同点?
【LeetCode】 92 整数反转
Incomplete Polyfill of proxy
Interviewer: what are cache penetration, cache avalanche and cache breakdown?
随机推荐
一幅图像能顶16x16字!——用于大规模图像缩放识别的变压器(对ICLR 2021年论文的简要回顾)
Technical point 5: XML language
SQL filter query duplicate columns
Python中[:]与[::]的用法
CUDA常用概念及注意点
代码中的软件工程--对menu项目的源码分析
The kth smallest node in the print binary search tree of offer
剑指offer之打印二叉搜索树中第k小的结点
编码风格:Mvc模式下SSM环境,代码分层管理
Common concepts and points for attention of CUDA
快来学习!个性化推荐系统开发指南(附网盘链接)
What is the SRM system? SRM supplier management system functions
那么当下的行情投资者该怎么办呢? 现在新的投资风口来了!
ES6、ES7、ES8学习指南
CUDA_ Memory model
Formal class D25
Can public IP address and SSL certificate improve SEO?
PLSQL Developer常用设置
Operation and design of rights management in ERP
Using tail as time series to identify whales