穿越计算机迷雾,从零开始构建计算机

像Hellow World这样的小程序表面上看起来非常简单。你可曾想过如何才能在计算机中运行这个程序呢?让我们来提示其中的原委。对于初学者而言,程序只是一堆存储在文本文件中的字符而已。因此我们必须要做的第一件事情就是对该文本进行语法分析,提示其语义,然后用某种计算机能理解的低级语言来重新表达程序。这个翻译过程(即编译,compilation)产生的结果就是生成另外一个包含机器代码的文本文件。

当然,机器语言也是一种抽象,是一级计算机能理解的二进制代码。为了将该抽象形式具体化,就必须由某种硬件体系(hardware architecture)来实现的。这个硬件设备都是由许多基本逻辑门(Logic gates)集成构建出来的。当然,每个原始门又是由若干个转换设备(switching devices)组成,这些设备一般用晶体管实现。

计算系统设计中蕴含的多层抽象结构可能用自顶向下的形式来描述,以此来展示高级抽象如何被简化或表示成较简单抽象。同样的结构也可以用自下而上的形式来描述,以此展示底层抽象如何构建更复杂的抽象。本文采用后一种方式进行阐述:从最基本的元素(原始逻辑门)开始,然后一直向上层进发,直到最后构建完整的计算机系统。

1 布尔代数

布尔代数处理布尔型(也称为二进制型)数值,只需要处理两个符号:1 or 0,true or false,yes or no。因为计算机硬件基于二进制数据的表示和处理——所以布尔函数在硬件体系结构的描述、构建和优化过程中扮演着十分重要的角色。

描述布尔函数最简单的方法就是枚举出函数所有可能的输入变量组合,然后写出每一种组合所对应的函数输出值。这就是真值表表示法。

2 门逻辑Gate Logic

门(gate)是用来实现布尔函数的物理设备。如果布尔函数f有n个输入变量,返回m个二进制的结果,那么用来实现这个函数f的门将会有n个输入管脚(input pins)和m个输出管脚(output pins)。当我们把一些值v1…vn从这些门的输入管脚输入,它的内部结构即门的逻辑会计算然后输出f(v1…vn)的值。正如复杂的布尔函数能够通过相对简单的函数来表达一样,复杂的门电路也是由很多基本的门组成的。最简单的门是由微小的开关设备(称为晶体管,transistors)构成,这些微小开关设备按照设计的拓扑结构进行连接,来实现整个门的功能。

虽然当今的计算机多数使用电学来表述二进制数据从一个门到另一个门的传递,但实际上任何具有转换(switching)和传导(conducting)能力的技术都是可用的。事实上,在过去的50年里,研究人员已经建立了很多布尔函数的硬件实现方法,包括磁、光、生物、水力和风力设备。今天,大多数门都采用晶体管来实现,这些晶体管在硅上蚀刻并封闭成芯片。

硬件设计人员从这些基本的门开始,将它们进行连接,来实现功能更复杂的复合(composite)门电路。

2.1 半加器(Half-adder):用来表示两位加法。

2.2 全加器(Full-adder):用来表示三位加法。

2.3 加法器(Adder):用来进行两个n位加法。

3 冯·诺依曼结构的存储程序概念

冯·诺依曼结构的存储程序概念的基本思想其实相当简单。计算机基于固定的硬件平台,能够执行固定的指令集。同时,这些指令能够被当成构件模块,组成任意的程序。而且,不同于1930年以前的机械计算机,这些程序的逻辑并没有被嵌入到硬件中,而是被存储到计算机的存储设备(memory)里,跟数据一样,成为所谓的“软件(software)”。因为计算机的操作是通过当前正在执行的软件来向用户展示其功能,所以每次向计算机中载入不同的程序时,同样的硬件平台可以实现完全不同的功能。

冯·诺依曼机的内存中存有两种类型的信息:数据项(data items)和程序指令(programming instructions)。对这两种信息通常采用不同的方式来处理,在某些计算机里,被分别存储到不同的内存区中。尽管它们具有不同功能,但两种信息都以二进制数形式存储在具有通用结构的随机存储器中(一个连续的固定宽度的单元阵列,也称为字即word,或者存储单元,每个单元都有一个独立的地址)表示。因此,一个独立的字(代表一个数据项或者一条指令)通过它的地址来指定。

4 机器语言

机器语言是计算机体系中意义最深奥的接口-它也是硬件和软件相接的中间线。借由机器语言,程序员用符号指令表达的抽象思维被转换成执行在硅片上的物理操作。因此,既可以将机器语言看作编程工具,也可能将其看作硬件平台内部不可分割的一部分。事实上,正如我们设计机器语言是为了使用给定的硬件平台一样,我们设计硬件平台是为了获取、解析并执行用给定机器语言编写而成的指令。

控制流程:程序通常以线性方式,一个命令接着一个命令执行,但偶尔也包含分支,执行其他地方的命令。分支能够实现好几种结构,包括反复(repetition,跳回到循环的初始位置)。有条件的执行(conditional execution,如果布尔条件是false,则向前跳到“if-then”语句之后的位置),以及子程序调用(subroutine calling,跳到另一代码段的第一条命令处)。为了支持这些程序结构,各种机器语言都可以有条件(conditional)或无条件(unconditional)地跳转到程序指定的地址。在汇编语言中,程序中的位置也用一些符号表示。

机器语言一般用二进制来表示,如二进制码(11000010100000011000000000000111)代表一条实际的机器指令,它能被底层硬件所理解。指令最左边的8位代表操作码(比如Load),接着的8位代表寄存器(比如R3),剩下的16位表示地址(比如7)。根据硬件的逻辑设计和相应的机器语言,整个32位指令可以让硬件去执行操作“将Memory[7]的内容加载到寄存器R3中。”现代计算机平台支持数十个这样的基本操作。如此一来,机器语言会变得相当复杂,因为其涉及到很多操作码、不同的内存寻址模式和不同的指令格式。

5 汇编和编译

解决复杂性的方法之一是,使用约定的语法来表示机器指令,如用Load R3,7而不是11000010100000011000000000000111表示机器语言。由于将符号表示翻译成二进制码是直截了当的,所以允许用符号表示法来编写底层代码,并用计算机程序将底层程序翻译成二进制码是很有意义的。符号化的语言称为汇编(assembly),翻译程序称为汇编编译器(assembler)。汇编编译器对每个汇编命令的所有部分进行解析,将每个部分翻译成它对应的二进制码,并将生成的二进制码汇编成真正能被硬件执行的二进制指令。

一个编译器一般由词法分析器和代码生成器组成。

6 操作系统

操作系统的作用是用来衔接硬件系统和软件系统,以使得整个计算机对程序员和用户而言更容易使用。如为了使得文本“Hello World!”在计算机屏幕上显示,必须在特定的屏幕位置上画几百个像素。就可以通过参考硬件规范,编写相关的代码来完成,该代码在驻留RAM的屏幕映像中放置必要的比特位。显然,高级程序员希望事情能够变得更好些。他们希望使用诸如printString(“Hello World!”)的命令,然后让别人来负责其中的实现细节,操作系统在其中就起到了很重要的作用。

任学堂说科技:穿越计算机迷雾,从零开始构建计算机相关推荐

  1. 计算机系统制造时间成本,如何构建计算机成本核算系统.doc

    如何构建计算机成本核算系统.doc 如何构建计算机成本核算系统 [摘要]为您整理了计算机论文-如何构建计算机成本核算系统,希望和您一起探讨! 目前为止,国内企业,特别是机械制造业ERP实施成功的范例不 ...

  2. 北京语言大学计算机大赛获奖,学堂在线携手北京语言大学 助力中国大学生计算机设计大赛...

    8月4日至8月7日,2016中国大学生计算机设计大赛微电影总决赛在北京语言大学举行.中国大学生计算机设计大赛由中国大学生计算机设计大赛组织委员会主办.教育部高等学校计算机类专业教学指导委员等联合组办, ...

  3. 具有N个量子存储位的计算机,未来世界是科技的世界,未来的计算机也会有这几类...

    很多朋友在关注< 未来世界是科技的世界,未来的计算机也会有这几类>,下面带大家一起来阅读吧! 财理财小提示:未来世界是科技的世界,未来的计算机也会有这几类 未来世界是科技的世界,当前的计算 ...

  4. 技校计算机科技都学什么好,技校计算机都学什么?

    回答 不懂快来找老师 市场经济的发展.计算机应用的家庭化.普及化,信息产业的规模化,推动了计算机技术人才市场的发展,特别是加入世贸组织以后,计算机应用人才更是供不应求.很多高技学校有开设计算机专业课程 ...

  5. 我确实不知道如何使用计算机,【图片】从零开始的计算机教程:看不懂我就打死你【红石电路吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 =============================================================== [###====== [# ...

  6. mhk科技计算机报名时间,2021计算机等级考试报名时间

    想要了解江西省2021年3月计算机等级考试报名时间的小伙伴,赶紧来瞧瞧吧!下面由出国留学网小编为你精心准备了"2021年3月江西计算机等级考试报名时间已公布",本文仅供参考,持续关 ...

  7. 为什么谷歌会从零开始构建一个全新的操作系统?

    腾讯科技编者按 <快公司>网站日前发表文章,对谷歌开发一个全新操作系统的原因进行了分析,解释了现有操作系统存在的问题,并对谷歌此举的动机进行了推测,以下为原文: 上周,谷歌一个团队做了一件 ...

  8. 万字干货:如何从零开始构建企业级推荐系统?

    「免费学习 60+ 节公开课:投票页面,点击讲师头像」 作者丨gongyouliu 编辑丨zandy 来源 | 大数据与人工智能(ID: ai-big-data) 最近几个月有很多人咨询作者怎么从零开 ...

  9. 计算机信息管理技术 互联网,计算机信息管理技术在网络安全中的运用思路

    计算机信息管理技术在网络安全中的运用思路 随着计算机技术的快速发展,也促进了计算机信息管理技术的发展进步,这也对计算机网络安全工作的开展产生了较大的影响. 摘要:计算机技术在人们生活中融入的程度不断加 ...

  10. 计算机课程认识,认识计算机课程教案.doc

    认识计算机 第1课时 教学目的: (1)回顾计算机的发展简史. 了解计算机的硬件知识. (3)了解容量单位的换算关系. (4)了解常见外存储器的特点. (5)学会查看硬件的配置信息. 教学重点: 了解 ...

最新文章

  1. [Android] 获取设备的APP信息
  2. 怎么用python自动注册_python selenium自动化(二)自动化注册流程
  3. 打开eclipse出现an error has occurred.see the loh file
  4. Ubuntu常用命令与技巧
  5. python seaborn 热图 值对应颜色_基于行值的seaborn热图配色方案
  6. python排序元组两个元素_在python中对具有3个元素的元组列表进行排...
  7. springboot入门_模板
  8. matlab在常微分方程的应用,MATLAB在常微分方程上应用.ppt
  9. 在linux上安装jenkins
  10. UIAUTOMATOR
  11. php在HTML的遍历,php里面怎么循环嵌入html元素
  12. QQ输入法怎么设置快捷短语
  13. 数据通信最新技术复习
  14. iOS游戏开始者从零开始:6个月的学习编程经历
  15. MCS51 系列单片机的中央处理器(CPU)
  16. 免费稳定的APP分发托管平台,支持应用合并、内测分发、扫码下载
  17. 力扣解法汇总969-煎饼排序
  18. 【无标题】UBUNTU22.04 WIFI图标显示
  19. ESLint-插件化JS代码检测工具以及VSCode配置
  20. 浅析 Transformer Stage 在 DataStage 作业中的用法及功能实现

热门文章

  1. 捷联惯导系统学习4.3(静基座误差)
  2. 期末作业面向对象程序设计(Java)“猜拳游戏”
  3. 小白进阶之影片TS版,TC版,CAM版,HD版,BD版,DVD,HDVD等版本介绍
  4. elasticsearch所有版本的x-pack-sql-jdbc下载地址
  5. 数论基础及其代码实现
  6. liteon460w服务器电源管理系统,PS-5251-06 LITEON光宝工业电源
  7. mysql 收货地址表_会员收货地址 - 数据库设计 - 数据库表结构 - 果创云
  8. [nssl1320][jzoj cz 2108] 买装备 {dfs}
  9. 论文翻译|疾病自动编码|Clinical-Coder: Assigning Interpretable ICD-10 Codes to Chinese Clinical Notes
  10. eova、easyui及普通DOM表单元素操作