导读
大家好,很高兴又和大家见面啦!!!
在上一篇内容中我们介绍了计算机层次结构中硬件的组成。
随着“存储程序”这一概念的提出,于是计算机便逐渐演变成了现在的冯·诺依曼机的基本结构。
在早期的冯·诺依曼机中,主要是以运算器为核心,这样就导致了运算器在整个运行的过程中,主要起到了一个数据的转移的过渡角色,这样大大降低了运算器的使用效率;
为了改善这一问题,在后来的计算机中,便逐渐演变成了以存储器为核心的计算机结构,这样就能保证在整个运行的过程中,运算器只需要负责运算的工作即可,数据的转移、存储与过渡的工作则全部交由存储器来完成,大大提高了运算器的使用效率。
我们知道,一个完整的计算机系统是由硬件系统与软件系统共同构成,那么计算机软件系统又是如何构成的呢?在今天的内容中我们将会对计算机软件系统的相关内容进行学习;
一、计算机软件的分类
计算机软件按其功能进行分类可以分为系统软件用于应用软件。
- 系统软件是一组保证计算机系统高效、正确运行的基础软件,通常作为系统资源提供给用户使用。系统软件主要有操作系统(OS)、数据库管理系统(DBMS)、语言处理程序、分布式软件系统、网络软件系统、标准库程序、服务性程序等;
- 应用软件是指用户为解决某个应用领域中的各类问题而编制的程序,如各种科学计算类程序、工程设计类程序、数据统计与处理程序等。
二、计算机语言
计算机语言作为程序员与计算机之间进行沟通的桥梁,在整个编程过程中起着一个十分重要的作用。从ENIAC
开始到现在,计算机在发展的同时,随着操作系统的出现,计算机语言也在不断的发展。计算机语言可以分为3个级别的语言:
- 机器语言(又称二进制代码语言)——机器语言由代表电信号的0和1组成,是计算机唯一可以直接识别和执行的语言。编程人员在进行机器语言编程时,需要记忆每条指令所对应的二进制编码,因此机器语言对于计算机来说是可读性很强的语言,但是对于编程人员来说则是可读性极差的语言;
- 汇编语言——汇编语言使用英文单词或其缩写代替二进制的指令代码。相比于机器语言而言,汇编语言对于编程人员来说,可读性更强,更容易被人们记忆与理解,但是计算机却无法直接识别。因此经过汇编语言编辑的程序,必须经过一个称为汇编程序的系统软件的翻译,将其转换为机器语言程序后,才能在计算机的硬件系统上执行;
- 高级语言——高级语言是为了方便程序设计人员写出解决问题的处理方案与解题过程的的程序。对于编程人员而言,高级语言比汇编语言更加容易理解与记忆,但是对于计算机而言,由高级语言编写的程序则需要通过一定的方式转换成机器语言后,才能够被识别与运行。
在程序员的眼中,像机器语言与汇编语言属于低级的编程语言,其特点可以总结为语言的可读性不高,不容易被记忆与理解,而像C/C++/JAVA/Python这种编程语言都属于是高级语言,其特点是语言的可读性高,容易被记忆与理解。
在计算机眼中,越是高级的语言,就越难被计算机给识别,因此,为了保证由各种语言编译的程序能够在计算机中正常运行,所有的程序都需要通过一定的方式将其转换成机器语言程序。而能够进行这种转换的软件系统倍称为翻译程序。翻译程序由以下三类:
- 汇编程序(汇编器)——将汇编语言程序翻译成机器语言程序。
- 解释程序(解释器)——将源程序中的语句按执行顺序逐条翻译成机器指令并立即执行。
- 编译程序(编译器)——将高级语言程序翻译成汇编语言或机器语言程序。
对于C语言程序而言,它从完成编译到运行需要经过3个阶段:
- 预处理阶段:源文件与头文件会被处理成
.i
未后缀的文件 - 编译阶段:将预处理后的文件经过进一步处理后生成
.o
为后缀的汇编文件(Windows下生成的是.obj
文件) - 链接阶段:多个目标文件和链接库一起经过链接器处理生成
.exe
为后缀的最终的可执行程序。
类似于C语言程序这种由高级语言编写的能够一次性被翻译成机器语言程序的源程序,我们就可以将其称为编译程序;
而由Python编写的程序在执行时,会直接通过解释器将每一条语句翻译成对应的机器指令后立即执行。并且每一次运行该程序时,都需要借助翻译器完成一次翻译。类似于Python程序这种由高级语言编写的程序,每一次运行都需要借助解释器来完成翻译的源程序,我们就可以将其称为解释程序。
如果将高级语言比喻成计算机王国所使用的语言的话,那么这些翻译程序就是这类语言的翻译官。
- 对于编译程序这类翻译官而言,他们是选择在接收到翻译任务时,一次性将所有的内容完成翻译并记录在可执行程序中,当计算机每次需要读取这些信息时,只需要读取可执行程序中的内容即可;
- 对于解释程序这类翻译官而言,他们则是选择的同声传译,计算机每读取到一条语句,翻译官则会同步翻译一条语句,因此,当计算机每一次需要读取这些信息时,解释程序都需要对所有的内容进行一次同步翻译。
从这两种实现方式上来看,很明显编译程序的执行效率要比解释程序的执行效率要高。
三、计算机系统的层次结构
计算机是一个由硬件与软件组成的综合体。由于面对的应用范围越来越广,必须有复杂的系统软件和硬件的支持。由于软/硬件的设计者与使用者从不同的角度、用不同的语言来对待同一个计算机系统,因此他们看到的计算机系统的属性对计算机系统提出的要求也就各不相同。
计算机系统的多级层次结构的作用,就是针对上述情况,根据从各种角度所看到的机器之间的有机联系,来分清彼此之间的界面,明确各自的功能,以便构成合理、高效的计算机系统。
关于计算机系统的层次分层方式,目前尚无统一的标准,这里我们介绍如下图所示的层次结构:
在该多级层次结构中,微程序机器层为第一级,而高级语言层则为第五级。那从第一级到第五级分别代表什么意思呢?下面我们就一起来探讨一下;
3.1 从计算机语言的角度来理解多级层次结构
我们知道对于一台计算机而言,它能够识别的计算机语言有且仅有机器语言这一种,而计算机在识别到二进制语言后,会将该语言的指令进行拆解,并由指定的硬件来执行拆解后的各个指令,如果我们将完整的二进制代码视作机器指令的话,那么经由计算机识别并拆解后的指令我们则可以将其认为是一条条的微指令;
因此由硬件直接识别并执行的微指令层为计算机系统的最底层,在其上层则是机器语言层,不管是微指令层还是机器语言层都是计算机系统的硬件层面;
在计算机系统的软件层面中,最上层的是通过高级语言程序来进行编程的高级语言层,像C语言程序这样的高级语言程序会借助编译程序被翻译成汇编语言程序,因此高级语言层的下一级则是汇编语言层,在由高级语言编写的程序中难免会涉及到一些系统调用的指令,因此在汇编语言层的下一级则是操作系统层。
在操作系统程序中,主要有机器指令与广义指令,这些广义指令是为了扩展机器功能而设置的,是由操作系统定义和解释的软件指令,所以这一层也称为混合层。
3.2 计算机层次之间的关系
一台没有配备软件的存硬件计算机系统称为裸机,而第3层~第5层称为虚拟机,简单来说就是由软件实现的机器。
在虚拟机器中,观察者只能通过该层的语言来了解与使用计算机,而不必关心下一层是如何工作的,也就是说,对于高级语言层的使用者来说,他们能够直观的感受到的是计算机是能够识别他们所编写的高级语言程序的,但是他们并不会关心计算机从汇编到机器语言的整个识别过程;同理,对于汇编语言层的使用者来说,他们能够直观的感受到的是计算机是能够识别他们所编写的汇编语言程序的,但是他们并不关心计算机将其翻译成机器语言的过程。
在不同的层次之间,层次与层次的关系是紧密相连的,下层是上层的基础,而上层则是下层的扩展。
简单的理解就是,没有硬件能够直接识别与执行的微指令,就不存在计算机能识别的机器指令,而多条微指令结合则形成了机器指令,没有机器语言编写的机器指令,就不会存在操作系统,没有操作系统,就不会有后面的汇编语言甚至是高级语言。因此我们说,下层是上层的基础,上层是下层的扩展。
3.3 指令集体系结构(ISA)
软件与硬件之间的界面就是指令集体系结构(ISA),ISA定义了一台计算机可以执行的所有指令的集合,每条指令规定了计算机执行什么操作,以及所处理的操作数存放的地址空间和操作数类型。可以看出,ISA是指软件能够感知的部分,也称为软件可见部分。
结语
在今天的内容中我们介绍了计算机软件与计算机层次结构的相关内容:
- 计算机软件按其功能可分为系统软件与应用软件;
- 计算机语言可分为三类:
- 机器语言——计算机唯一能识别与执行的语言
- 汇编语言——通过英文单词或其缩写代替二进制的指令代码
- 高级语言——方便程序设计人员写出解决问题的处理发难与解题过程的程序
- 能够将高级语言翻译成机器语言的翻译程序分为三类:
- 汇编程序——将汇编语言翻译成机器语言的程序
- 解释程序——将源程序中的语句按执行顺序逐条翻译成机器语言并有计算机立即执行的程序
- 编译程序——将高级语言翻译成汇编语言或者机器语言的程序
- 计算机系统的多级层次结构并未有统一的标准,在今天的内容中介绍的层次结构为:
- 虚拟机器M4(高级语言机器)——由编译程序翻译成汇编语言程序
- 虚拟机器M3(汇编语言机器)——由汇编程序翻译成机器语言程序
- 虚拟机器M2(操作系统机器)——由机器语言直接解释操作系统
- 传统机器M1(机器语言机器)——用微程序解释机器指令
- 微程序机器M0(微指令系统)——由硬件直接执行微指令
- 计算机系统的层次结构中,下层是上层的基础,上层是下层的扩展,因此层次之间的关系紧密。
今天的内容到这里就全部结束了,在下一篇内容中我们将介绍《计算机系统的工作原理》的相关内容,大家记得关注哦!如果大家喜欢博主的内容,可以点赞、收藏加评论支持一下博主,当然也可以将博主的内容转发给你身边需要的朋友。最后感谢各位朋友的支持,咱们下一篇再见!!!