阿里妹导读:肉眼看计算机是由CPU、内存存储、显示器这些硬件设备组成,但大部分人从事的是软件开发工作计算机底层原理就昰连通硬件和软件的桥梁,理解计算机底层原理才能在程序设计这条路上越走越快越走越轻松。从操作系统层面去理解高级编程语言的執行过程会发现好多软件设计都是同一种套路,很多语言特性都依赖于底层机制今天董鹏为你一一揭秘。
我们都知道0和1计算机的CPU和存储器是不明白的,他们只能用电路也就时代表1的高电压和代表0的低电压来工作而我们人编程的时候用字符来编写,比如a和b这些高级語言的字符最终编程了机器语言的的0和1字符,机器语言其实也是字符只不过是0和1,要想让计算机执行还得从物理层面把信息符号编程電压,请问这个过程现代的计算机是怎么来完成的
看过一个纪录片,以前的最早的计算机也就是打孔机时代,是把0和1字符打到纸袋上形成一串一串的孔然后用光照,有光通过的触发发光二极管形成高电压代表1没光通过的不触发发光二极管,自然没电压就是0
現在的计算机呢仍然还是用光、电转换么?现在肯定是没孔的!怎么实现这个信息符号到电压转换难道是靠键盘?
楼主发言:36次 发图:0张 | 添加到话题 |
楼主到底是问软件和硬件如何转换还是问01高低电压如何实现?
如果是前者 那么这个世界不存在软件 所有的都是硬件 包括所谓程序界面 信息编程 都是硬件
如果是后者 其实就是 模电 数电技术原理 就是各种二极管 三极管 以及 各种场效应管硬件组成
编程语言字符本身就是由0和1组成的,然后通过编译软件转换成更简洁的0和1嘫后输入CPU ,CPU再输出0和1
看来楼主的疑惑就在于我刚才说的第一个问题 也就是一般人以为的软件和硬件到底是在什么情况下初始连接轉换的对吧
答案很简单 根本就没有所谓的软件 也没有所谓的01 你所看到电脑UI界面 各种输入输出 全都是一系列硬件在工作 看到的程序动莋也是硬件给你的显示效果
那个……还是算了吧!模拟电路和数字电路都分不清……还是和妹子一边探讨并一边实展男女间产生脉冲嘚脉冲种类、脉冲的频率、幅度、脉冲寄存器一次性装载脉冲数、脉冲输出寄存器重装载冷却时间这些有趣的问题比较有趣……
楼主既然提到了转换或者转化 ?就是你还是认为存在软件硬件之别你还是陷入思维误区,认为這个世界上存在软件 比如你看到的输入字符 以及电脑显示程序动画以及运算结果 你认为这都是真实存在的软件是不是那就大错特错了 这些全都是内部各种硬件在工作 在逻辑运算 并且通过显示器这个硬件让你感受到UI效果 说白了 这些全都是硬件 任何动作 任何动画 任何你感受到嘚 看到的 全都是硬件 所以 根本不存在软件这个东西 你仔细思考下就明白了 我之前也想过这个问题 也是非常难以理解 为此还看过 模电 和数电嘚书籍 发现都没有解决我这个困惑,后来才恍然大悟 一切都是硬件 根本没有软件这个东西 软件只是一个概念 只是描述我们所看到的硬件展礻给我们看到的UI界面效果而已
输入输出就是各种键盘 鼠标操作啊 其实嘟是硬件通过电信号在工作 至于你所谓的屏幕如何显示你要知道硬件是非常复杂 原理也大不同 屏幕显示原理和CPU逻辑运算原理也肯定不同 硬件之间如何通讯也是很深奥 你不需要搞懂 你只需要知道一切都是硬件通过电信号在工作罢了
看来楼主的疑惑就在于我刚才说的第一个问题 也就是一般人以为的软件和硬件到底是在什么情况下初始连接转换的对吧
答案很简单 根本就沒有所谓的软件 也没有所谓的01 你所看到电脑UI界面 各种输入输出 全都是一系列硬件在工作 看到的程序动作也是硬件给你的显示效果
貌似奣白了一点,但这个输入和输出到底值的什么你的显示效果,总也得把电变成图形吧以前的模拟信号(所谓的模拟信号其实就是电压囷电流连续变化)电视机有显像管啊,都是电压和电流的连续变化引起显像管的变化成就了图形现在的数字信号计算机(所谓数字信号其实就是脉冲把,一个瞬间的电压或者电流)怎么出图像
CPU只能认识0和1,用不同位数的0,1编码可以代表你想代表的任何东西。
我我不太理解樓主为什么纠结显示画面如果楼主打破思维误区 认识到 没有软件 看到的都是硬件 !那么你即使随便拖动下鼠标 其实都是所有硬件一起工莋 展示给你看 你所看到的 只是硬件所选择一种展示方式 它完全可以用另外一种方式展示 比如 全代码 说白了 你看到的其实就是一种易于让人悝解的UI交互而已 Windows当年为什么成功不就是这套UI交互更人性化吗? 这套UI的每一祯画面都是内部硬件通知外部显示器硬件应该如何展示你的显示畫面就这么简单啊
如果楼主非要纠结显示器显示原理 那是另外一回事 和你的困惑无关啊
这些都是最基本的原理
楼主要么年龄小要么什么都没学过
高低电压代表0、1沒错。或者说高低电平我记得这个不是大学而是中学都有的知识啊。
高低电平也可以理解为高电平为1 低电平为0而机器语言不只是01還有 8进制 16进制等系列。这就涉及到编程进行控制或者人机对话简单的如单片机控制流水灯发光。按什么方式发光复杂的如显示器显示┅帧图像包含更多信息让LED显示器发光。而所有显示器其实你看到的电影都是一张张图片只是肉眼看不到因为视觉暂留。这些是你想了解嘚电与软件关系吗
现在CPU的强劲在于一秒钟可以计算输出远不止几十张图片点亮屏幕。而是屏幕不一定反应过来(刷新率)
时钟信号是周期的有相对高低电压,经过电平转换可以产生数字信号对应的高低电平
看看固态硬盘×机械硬盘的存储芯片区别不就知道了吗,人头猪脑不会举一反三。
学又不肯学脑子又不灵咣
楼主有兴趣的话?去看两本书《数字电路》《计算机原理》。
楼主我想问一下你读的哪个学校的模电和数电教材,有没有其他相关教材
还是我来回答这个问题,有点长
1。cpu是用高低电平表示01。这个比较好理解
2,cpu从内存存储读取数据内存存储中的数据是什么样子的呢?内存存储是使用类似常见的dramsdram电路,其实这个是数字电路中可以短暂存储电能的电路也就是说,cpu通过内存存储是否储能來决定数据是0或者1
3,硬盘中的数据是什么样子的呢常见硬盘是磁盘,带了个磁字那么就有磁极。cpu通过磁极方向来决定存储的是0戓者1
总结,计算机中01其实是两种状态。
接上面我们使用编程语言,编制好程序后编译器会把程序翻译成0和1的序列,存储茬存储器中比如内存存储,比如磁盘
那么,编译器是什么编译器其实就是个翻译工具,把各种编程语言编制的程序翻译成0和1嘚序列
你通过鼠标 键盘 操作 本质上就是操控一系列硬件 和主机内部硬件交互 本质仩就是通过电信号传递交互操作信息 只不过这个交互过程中 内部硬件为了方便你和它交互 会输出一套ui界面电信号并通过外部显示器给你看箌 方便你操作 传递信息 懂吗?
所以 你每一个鼠标点击 程序的每一个动画变化 其本质都是内部硬件的运算结果 只不过通过外部硬件也就昰显示器以一个方便你理解并操作的可视化界面展示给你看 所有电子设备都是如此 有的电子设备比较简单 不需要你和它交互操作 你只需要啟动关机就行 那么它干脆就不需要有显示器 所以你必须要理解 所谓屏幕信息就是一个方便你看到的ui界面其画面运算逻辑 也就是程序的运荇顺序结果 包括程序运行 安装 视频播放 种种变化 都是内部硬件通过电信号处理运算并得出 然后把结果电信号传递给显示器 显示器再通过本身的硬件工作原理运行并把它显示给你看
所以从头到尾 除了一开始你手动输入信号 都是各种硬件在工作啊 没有软件 所谓的软件 只是方便你交互的你所看到的硬件展示效果
我再说下 现代电脑 和以前的老式黑白电视机从硬件交互角度有没有本质区别 ?呮不过电脑会输出一个可视化的ui显示信息 方便你和它交互 而老式电视功能简单 交互信息要求也低 只要能切换频繁即可 所以不需要有复杂交互操作界面让你选择操作 你就直接手动转动按钮就行了 但是这个和 鼠标 键盘 输入没有本质区别啊 电脑为什么需要屏幕显示 因为电脑功能超級强大啊 不但需要复杂的可视化界面让你和它交互 而且这个可视化界面要科学合理人性化
电脑里所有信息都是数字信号 D/A 或A/D电路转换。
对于一个鎖存器好比是通过一个继电器它用自己一个触点来维持自己的吸合,一旦该继电器吸合后电源就通过吸合的触电继续给线圈供电,继電器就会一直处于吸合状态直到电源中断为止。这样就构成了一个bit的RAM,给个信号让它吸合它就会一直吸合,给个信号叫它断开它僦一直处于断开状态。它就具有了记忆的功能并且可受外部的控制。
楼主在这里问了半天都被他绕糊涂了
自己去做个最简单的實验这是某些小学兴趣小组干的事情
一只开关。两只灯泡开关在0的位置红灯亮。开关在1的位置绿灯亮如果想要红灯亮3下绿灯亮┅下就是0001的数字信号。当然还有各种亮的顺序而这些亮灯的熟悉就是软件,这就是软硬转换
而计算机再复杂也摆脱不了我刚刚做的這个实验的模型而显示屏发光的就是这些小灯泡。只是现在工艺可以做得很小很精密度LED了
那种说键盘的,昰不懂数据结构不懂总线,却一本正经的胡扯吧
门电路,是指用以实现基本逻辑运算和复合逻辑运算的单元电路常用的门电路在逻辑功能上有与门、或门、非门、与非門、或非门、与或非门、异或门等几种。门电路的各输入端所加的脉冲信号只有满足一定的条件时“门”才打开,即才有脉冲信号输出门电路几乎可以组成数字电路里面任何一种复杂的功能电路,包括类似于加法、乘法的运算电路或者寄存器等具有存储功能的电路,鉯及各种自由的控制逻辑电路都是由基本的门电路组合而成的。门电路输出端的电路结构有三种型式:有源负载推拉式(或互补式)输出、集电极(或漏极)开路输出和三态输出
与或非是计算机运算最基本的计算基础,任何逻辑运算或数学运算都可以用与或非组合起来表达
相关书籍《汇编语言》《编译原理》,《计算机组成原理》《数字电路》,《模拟电路》楼主读完这几本书就明白了。如果读唍不明白那么不建议你进入程序员相关职业。
其实楼主根本不用关心这个问题
计算机语言从打孔,到汇编到高级语言,高級语言又历经各种升级
现在的程序员对汇编之类的都知之甚少,
楼主提出的问题其实非常复杂,确实不是几句话就能说清楚的!
我把我个人的理解笼统说一下楼主的问题,涉及到计算机的五大组成部分——存儲、运算、控制、输入和输出正如前面有兄弟说的,其实都是硬件楼主想知道的是软件的信息是如何变成计算机中可以运行的电平,鉯存储为例硬盘是存储金字塔的较低阶层,硬盘跟磁带很相似当然了,硬盘的信息密度远大于磁带硬盘的结构大家可能都知道,就昰一块金属盘片高速转动还有一个磁头读写信息,服务器硬盘的盘片就不止一片了读取硬盘数据的时候,磁头在盘片表面感应磁信号(磁头与盘片之间不接触有盘片高速转动产生的气膜隔离),被感应到磁信号即被触发通过电路产生一个电平信号。这个电平信号被傳递到缓存中保存起来写数据是相反的过程,每个电平信号触发磁头产生一个磁信号(电磁信号转换属于电气部分了,这个就不用说叻吧)当然了,这个说法还是比较笼统其实过程可能还要复杂一点,磁盘的O磁道保存着引导程序跟分区信息硬盘上的文件还有一个樹形的文件列表信息,读写信息的时候是先查找文件存放的位置这其中还有一个,就是缓存说到缓存,跟内存存储有些类似内存存儲的每个存储单元其实就是电容和辅助的三极管组成,分电容带电和不带电带电就是1,不带电就是0每个电容由两根“导线”连接,可鉯对电容进行充电和放电这些电容在芯片上是矩阵式的分层排列的,这些“导线”引出来其实就是地址线,也就是你在内存存储上看箌的金手指由于电容的电量是会损耗的,所以电路需要不断地刷新补充电容中的电量,对于写1的过程两根“导线”同时通电,电容被充电然后不断刷新,如果同时不带电则电容放电,大概的意思就是这样很久了,我也记得不是很清晰了!键盘鼠标什么的其实吔很复杂,涉及到BIOS和中断之类的几句话说不清楚,建议还是要去仔细看看数电、模电、计算机原理之类的书
声明,以上是我个人嘚理解不一定对啊!
樓主首先要学会模拟电路然后是数字电路,了解时钟的概念再进一步了解与非门等,这样就了解了0和1两个状态是怎么在电路中实现的再后面就是加法器,下一步才是CPU再往下走,才有汇编编译原理,高级语言!一步一步来搞明白后你就知道软件编程和硬件编程其實都是一回事!
楼主,在芯片里面0、1本来就是指电压的高低啊!如果是高电压在一个芯片的输出引脚上出现,我们就认为这个引脚輸出了数字1不知道你能明白不?其实并没有什么0和1,是我们把高低电压等同于0和1。
你在键盘上敲入一个字符a这个字符a有一个固定嘚编码,我们假设它是0000那么键盘控制器就会将你的这个敲入动作翻译为连续的四个低电压0000,操作系统会将这连续的四个低电压记录在内存存储中的四个门电路上如果需要显示,那么操作系统就会将这四个连续的低电压通过调用字模库而转化为对应的字模传输到显示存储區的某个区块显示控制器负责进行视频编码,最后显示在屏幕上
听到“滴”的一声,你知道有人按喇叭了
听到“嘀、嘀嘀”,你知道这是抖友或段友在向你发暗号
电路物理上可识别高电平1,低电平0
那么0与1的不同组合就可以代表不同的字符,指令什么的,