1.3 计算机系统的层次结构
计算机采用分层方式构建,通过上层用户提供一个抽象的简洁接口而将较低层次的实现细节隐藏起来,计算机解决问题的过程就是不同抽象层进行转换的过程。
计算机系统抽象层的转换
提供程序编辑器和各类翻译转换软件的工具包统称为 语言处理系统 或者 集成开发环境(IDE) ,具有人机交互功能的用户界面和底层系统调用服务例程则由 操作系统(OS) 提供。
在软件到硬件之间需要有一个桥梁进行沟通和通信,它就是 指令集体系结构(ISA) ,简称 指令集架构或者指令系统。实现ISA的电路逻辑结构称为 计算机组织,或者 微体系结构,简称 微架构 ,ISA和微架构是两个不同层面上的概念。微架构中的功能部件由 逻辑电路 实现,每个基本逻辑电路通过相应的 器件技术 实现。
计算机系统的不同用户
计算机系统由 硬件 和 软件 两个部分组成。其中硬件是各种物理装置的总称,比如芯片,板卡,声卡,显卡,电缆。软件则是运行在硬件上的程序和数据以及相关的文档。
程序 是指挥计算如何操作的一个指令序列,数据 是指令操作的对象,根据软件用途,一般将软件分为 系统软件 和 应用软件 两大类。
相关名词英语对照
硬件(Hardware - HD)
软件(software)
程序(program)
数据(data)
系统软件(System Software)
应用软件(Application Software - App)
系统软件 介于计算机硬件与应用程序之间,能够有效、安全地使用和管理计算机以及为开发和运行应用软件而提供的各种软件。例如手机的蓝牙模块,webview等,如果这些相关的内容缺失,则蓝牙将不可使用,即便是下载蓝牙管理应用软件,也不可使用。
应用软件 专门为数据处理、科学计算、事务管理、多媒体处理、工程设计以及过程控制等应用所编写的各类程序。例如email,game,web浏览器,excel等等等。
根据计算机的任务区分,可以将计算机的用户分为四类:最终用户、系统管理员、应用程序员、系统程序员,他们的区别如下。
最终用户(End User):大多数计算机的使用者,比如炒股软件的股民,玩计算机游戏的人,使用财务软件的财务人员。
系统管理员(System Administrator):能够利用操作系统对系统进行配置、管理和维护的的操作人员。
应用程序员:使用高级编程语言编制应用软件的程序员。如开发OA系统的开发者,开发wps的开发者。
系统程序员:设计和开发系统软件的程序员。例如显卡的驱动开发工程师等。
很多情况下,同一个人有多种用户身份,即他可能是最终用户,也是系统管理员,同时还是应用程序员。例如一个学计算机的学生,平时玩玩游戏,炒炒股,网购,和朋友在一起的时候打打游戏,有时候需要使用系统工具清理一下磁盘,管理一下计算的数据内容,有时还要升级或者备份数据,同时还要完成老师布置的应用程序开发作业等等。
计算机系统核心层之间的关联
在程序的编译转换过程中,整个过程可以分为前端和后端,通常把中间代码生成及之前的部分称为 前端,把中间代码之后的生成和优化过程称为 后端。
⚠️提示
请不要和web程序开发流程里的前端开发和后端开发,这个前后端进行混淆。
程序的编译转换过程中,前端处理与高级编程语言的标准规范密切相关,后端则必须遵循ISA的规定和ABI规范。
1、程序转换和编程语言标准之间的关系
如果程序员不了解语言规范,则会造成与直觉不符合的情况。造成这种情况的原因有两种,一种是不了解语言标准规范,另一种是开发者编写了含有未定义行为或未执行行为或实现定义行为的源程序。
(1)未定义行为
int x = 1234;
printf("%lf",x);例如以上C语言例子中,格式说明符和参数类型不匹配时,输出结果是未定义的。
(2)未指定行为
未指定行为指语言标准规范中没有强制规定程序行为,而是列出多种结果提供编译器选择,不同编译器可能选择不同行为结果。
(3)实现定义行为
实现定义行为指语言标准规范的实现(如编译器)需要在文档中说明其选择的未指定行为。
2、目标代码与ISA和ABI规范之间的关系
编译程序的后端处理应根据ISA和应用程序 二进制接口(ABI)规范 进行设计实现。ABI不同于API 应用程序编程接口,API定义了较高层次的源程序代码和库之间的接口,通常是和硬件无关的接口。
| 维度 | API (Application Programming Interface) | ABI (Application Binary Interface) |
|---|---|---|
| 层级 | 源码级(人类/编译器关注) | 二进制级(机器/链接器关注) |
| 关注点 | 函数名、参数类型、返回值(.h 头文件) | 寄存器分配、栈帧布局、内存对齐(.o/.so 文件) |
| 稳定性 | 相对稳定,修改后只需重新编译 | 极度敏感,修改会导致程序崩溃 |
| 例子 | pintf("Hello")这个调用接口 | printf函数在内存中的确切地址和调用约定 |
3、ISA与硬件、ABI和操作系统之间的关系
在计算机系统中,指令集架构(ISA)是硬件与软件之间的核心契约,它定义了处理器可执行的指令集合、寄存器组织、内存访问模式及异常处理机制等,是硬件实现与软件编程的抽象接口。
硬件(CPU、内存等)是ISA的具体物理实现,负责执行ISA所定义的指令。
操作系统建立在ISA之上,通过内核和系统调用提供对硬件资源的管理与抽象,其实现必须遵循目标ISA的规范。应用程序二进制接口(ABI)则是特定操作系统在特定ISA平台上定义的二进制级交互规范,它规定了函数调用约定、数据表示、目标文件格式、动态链接等底层细节,确保编译后的应用程序能在该操作系统上正确执行。
因此,ISA是连接硬件与操作系统的基础,ABI是连接操作系统与应用程序的二进制纽带,四者共同构成从硬件到应用程序的完整计算栈。
