408计组考研:计算机的层次结构知多少

现代计算机是一个硬件与软件组成的综合体

  • 第一级是微程序机器层,这是一个实在的硬件层,它由机器硬件直接执行微指令
  • 第二级是传统机器语言层,它是一个实际的机器层,由微程序解释机器指令系统
  • 第三级是操作系统层,它由操作系统实现。操作系统程序是由机器指令和广义指令组成的,这些广义指令是为了扩展机器功能而设置的,是由操作系统定义和解释的软件指令,所以这一层也称为混合层
  • 第四级是汇编语言层,他为用户提供一种符号化的语言,借此可编写汇编语言源程序
  • 第五级是高级语言层,它是面向用户的,是为方便用户编写应用程序而设置的

其实在高级语言层之上,还可以有应用层,它由解决实际问题的程序组成,比如word,chrome等等。

对于某层的使用者来说,它只关心该层即可,而无需关心下一层的实现

  • 需要注意的是在许多情况下,计算机的某些功能既可以由硬件实现,也可以由软件来实现,因此硬件和软件没有严格的界限

软件是人们事先编制的具有各类特殊功能的程序,他们通常存放在计算机的主存或外存中,按其功能可以分为以下两类

系统软件是一组保证计算机系统高效,正确运行的基础软件,通常作为系统资源提供给用户使用。系统软件主要有操作系统(OS)、数据库管理系统(DBMS)、语言处理程序,分布式软件系统、网络软件系统、标准库程序、服务型程序等。

应用软件是指用户为解决某个应用领域中的各类问题而编制的程序、如各种科学计算类程序,工程设计类程序,数据统计与处理程序。

注意:汇编程序是由汇编语言编写而成的程序,与编译型程序和解释型程序完全不是一个概念

  • 解释程序:它将源语言书写的源程序作为输入,解释一句就提交给计算机执行一句,并不形成目标程序
  • 编译程序:把高级语言源程序作为输入,进行翻译转换,产生出的机器语言作为目标程序,然后让计算机去执行这个目标程序,得到计算结果。

对于编译程序来说,它产生目标代码的执行速度要比解释程序的执行速度快,比如循环,解释程序需要不停的重复解释,而编译程序只需要一次即可。

  • 机器语言:用二进制“0”和“1”描述不同指令,编程人员需要记忆每一条指令的二进制编码。其优点就是计算机可以直接识别并执行
  • 汇编语言:其实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。汇编语言的程序必须经过一个称为汇编程序的系统软件的翻译,将其转化为机器语言,才能在计算机的硬件系统上运行
  • 高级语言:需要经过编译程序编译成汇编语言程序,然后经过汇编操作得到机器语言程序。其优点在于方便编程人员写出解决问题的方案和解题过程。
  • 计算机体系结构:研究的是机器语言程序所见的计算机系统的属性概念性的结构与功能特性(指令系统、数据类型、寻址技术、I/O机理)。也就是说是如何设计硬件与软件之间的接口,举例:无乘法指令
  • 计算机组成原理:研究的是计算机体系结构体现出来的属性,对于程序员来说是“透明的”。也就是说是如何使用硬件实现所定义的接口,举例:如何实现乘法指令

不用高级语言也不用汇编可以写程序,汇编语言的前世今生

现在大家开发软件都非常方便,有很多高级语言可以选择,如C++、Java等,但在计算机刚发明出来时,编程可就没有这么方便了。

1946年世界第一台计算机诞生时,程序就是一堆杂乱无章的电线,程序员需要摆弄电线来编程。现在的程序员自嘲说自己是码农,但在当时,程序员干的确实是体力活。

这么反人类的操作,当然的程序员也受不了,非常累,出错率也极高。于是哈佛大学的艾肯发明了打孔纸带编程,将预先需要编程的程序,按照计算机指令,在纸带上提前打孔,送入计算机执行,执行结果经另一条纸带打孔显示出来。打孔编程是真正按照计算机的原指令来编程的,按照计算机的二进制规则,提前在纸带表上特定的位置打孔,有孔的位置相当于1,没有孔相当于0。

打孔纸带实现了最初级的编程,但指令的编写和输入输出都极为麻烦,而且二进制的打孔纸带可读性极差,往往会耗费数周甚至数月的时间完成纸带代码,再用数周的时间分析执行结果。

随着计算机的发展,打孔纸带编程已经慢慢落后,基于指令助记符的汇编语言慢慢发展。计算机指令原生是二进制形式,指令和操作数混在一起,需要对着指令手册才能识别。汇编语言使用人类能读懂的字符代替二进制指令码,如mov ax 1234H,很容易就能想到把十六进制数1234H给ax寄存器,再经过系统的学习,就可以完全扔掉二进制的指令码了。

汇编解决了指令的易读问题,但还是太基础,即使能读懂大部分指令的意思。但汇编语言还是直接基于指令的语言,包含着大量计算机底层的晦涩难懂的内容,如寄存器、内存地址、中断等,上手学习难度也比较大。

与此同时,另一种更接近人类语言的高级计算机语言也在发展。如现在流行的C++语言,可以使用变量、语句、函数、判断、循环、类等人类语言的概念来开发软件,只需经过简单的学习,就可以上手开发软件。

当然,计算机并不能直接识别类似C++的高级语言,高级语言需要先编译成汇编语言,再把汇编转成计算机机器码执行。如今,汇编大部分时间都被用作高级语言的中间语言,或开发驱动和底层应用的利器。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。