计算机入门——计算机系统概述


layout: port
title: 计算机系统概述
date: 2022-03-09 10:08:02
tags:
categories: 计算机系统
description: 计算机系统概述

计算机系统概述

一、从 hello.c 开始

对于程序员来说,我们往往会学习一门语言进入计算机世界,如 C/C++、python、Java等。这些语言被称为高级程序设计语言,是一类比较接近我们日常书面语言的程序语言。只要学习一定的语法,就可以像阅读书籍一样阅读程序。而日常使用的软件就是我们使用这类高级语言,完成一定的数据结构和算法设计出来的。

但人类的思维方式和计算机硬件的思维方式是完全不同的。高级语言利于我们编写和阅读,但是,计算机是无法直接理解和执行高级程序语言程序的。因此计算机首先使用翻译程序将高级语言翻译成计算机可以理解执行的机器语言,再将机器语言“理解”成控制信号,程序才能在计算机上执行。

OK,我们现在从源代码 --> 可执行文件的过程出发,开看看计算机系统究竟是什么样子,引出计算机系统的相关概念。下面是每个人都非常熟悉的 hello.c 程序。

#include <stdio.h>
int main()
{
    printf("hello, world\n");
    return 0;
}

在这里需要插一句。

hello.c 文件是以 ASCII 码的形式存储的,也就是用一个唯一的单字节大小的整数值来表示每个字符。下图是 hello.c 程序的 ASCII 码表示。类似 hello.c 这样只由 ASCII 字符构成的文件称为文本文件,而其他文件都称为二进制文件

hello.c 经过预处理编译汇编链接,生成可执行文件。

  • 预处理阶段:预处理阶段主要处理源文件中以“#”开头的预编译指令。例如 hello.c 中,预处理器读取系统头文件 stdio.h 的内容,并把它直接插入#include <stdio.h>的位置中。
  • 编译阶段:编译阶段将文本文件 hello.i 翻译成文本文件 hello.s,它包含一个汇编语言程序(还是文本)。汇编程序是可阅读的,只是阅读难度比高级程序语言大。
  • 汇编阶段:汇编阶段将 hello.s 中的指令逐条翻译成机器语言,生成可重定位目标程序 hello.o 中。hello.o 文件是一个二进制文件,不可读,所以打开看到的是乱码。
  • 链接阶段。链接过程将多个可重定位目标文件合并以生成可执行目标文件,该文件可以被加载到内存中由系统执行。hello.c 程序调用了 printf 函数,而 printf 函数存在于一个名为 printf.o 的单独的可重定位目标程序中,链接阶段将 hello.o 和 printf.o 合并生成 hello。

这里简略地将了源程序 --> 可执行文件的过程,详细点的可以阅读程序转换处理过程,更详细地请阅读《程序员的自我修养》。

二、计算机系统层次结构

我们已经知道了源程序 --> 可执行文件的大致过程,现在我们从这个过程出发,来看看计算机系统的结构。

程序在不同的阶段有不同的存在形式,总结起来就是三类:高级语言 --> 汇编语言 --> 机器语言 --> 控制信号。在袁春风老师的《计算机系统基础》中是这样描绘不同层次语言之间的等价转换的:

不同层次语言之间的等价转换

在我看来,汇编语言和机器语言都是由一条一条的指令构成,为了方便,我称它们为“指令型语言”。因此,我们可以将语言转换过程再精炼一下,如下图所示:

image-20220307175808283

按照不同阶段的语言类型,我们将计算机描绘出我们都知道的两层:软件层和硬件层。高级语言是用于编写应用程序的,属于软件层的范围;而控制信号是对硬件逻辑门的控制,属于硬件层的。

而“指令型语言”就是沟通软件和硬件的关键,是软件层和硬件层的桥梁。这一层我们抽象出来,称为指令集体系结构(Instruction Set Architecture,简称 ISA)。ISA 是一种规范(Specification),主要目的是规定了如何使用硬件。它有很多规定,其中和“指令型语言”相关的就有:指令格式操作种类(加法还是减法)操作数类型(立即数还是寄存器)、通用寄存器个数。当然这些规定现在听起来有些模糊,之后会详细讲述的。我们目前只要知道,ISA 是软硬件接口即可。

image-20220307172520018

我们虽然知道计算机分为软件层、硬件层以及沟通它们的桥梁 ISA,但并不知道软件层、硬件层具体包括哪些东西,现在我来看看计算机系统具体包括什么。

2.1 软件层

当我们打开电脑时,除了看到品牌的标志外,第一眼看到了是什么?没错,就是 Windows 或 Linux 等操作系统的开机图标。似乎开机运行的第一个程序就是操作系统(操作系统也是软件),而其他应用程序都是在操作系统运行之后才开始运行。这种感觉没有错,其他应用程序都是“运行”在操作系统之上的,所以我们可以在 ISA 上面再抽象出一层——操作系统

那么为什么要操作系统呢?难道应用程序要在不能直接运行在计算机上吗?因为应用程序要使用硬件资源,如果直接运行再硬件上,那么编写应用程序要时刻注意硬件资源,并且要非常熟悉硬件知识。同时,针对不同的机器还要编写不同的应用程序。这对程序员来说无疑是巨大的负担。所以就有了操作系统这个系统软件,来帮我们管理硬件资源。我们编写程序时,就不需要过多地考虑硬件,只要说明我们需要什么资源,操作系统可以帮我们协调这些资源。也就是说,操作系统是来管理和协调硬件资源的。这样,我们又再一次远离了硬件,在计算机系统上又抽象了一层。

OK!知道操作系统概念之后,我们便可以将整个计算机软件层抽象层下面的结构。

计算机系统抽象层

有人就会问了,既然操作系统在这上面都有了,那怎么没有我们熟悉的数据库和网络呢?因为数据库管理系统(DBMS)和 web 服务器(程序)属于应用程序的范畴。

2.2 硬件层

硬件层无需过多的赘述,这里直接给出计算机硬件层的抽象,想要详细了解的可以阅读《编码:隐匿在计算机软硬件背后的语言》,这是一本入门计算机硬件知识的好书。

image-20220307194728212

三、计算机课程之间的关系

在此之前,我们通过跟踪 hello.c 程序的生命周期,得出了计算机系统的层次结构。

image-20220307195911745

但是同学们仍然会有疑问,不知道数据结构、计算机组成原理、操作系统、计算机网络、数据库、Web开发这些课程之间是什么关系,对整个计算机领域还是比较模糊。因此,我打算从另一角度来说明它们之间的关系。

3.1 计算机领域核心——数据的计算和存储

每个人对计算机领域有每个人的看法。有人认为操作系统是计算机系统的核心,也有人认为 CPU 是计算机系统发核心。我个人认为计算机领域的核心是数据,具体点说是数据的计算和存储。如果将计算机领域的一切都从数据的计算和存储视角来看,你就会觉得计算机领域是有规律可循的。

图灵机是计算机理论模型,其他像冯诺依曼结构、哈弗结构都是基于该理论的一种实现。所以,我们先来看看图灵机,了解计算机原理上是否符合我的看法。

Universal_Turing_machine

图灵机内部的状态转移图(table of U)定义了一套运算规则(这套规则蕴含着指令),进行着数据的计算;TAPE(纸带)上存放了数据。而冯诺依曼结构中,table of U对应运算单元、Control Unit对应控制单元、读写头对应输入输出设备,并且创造性地将指令和数据放在了存储器里面。从这里可以看出,现代计算机创造之初就是从考虑数据计算和存储开始的。这一点证明了我的观点。

好!既然计算机领域的核心是数据的计算和存储这一观点暂时没有错误的话,那我们来看看如何按照这条线来理一理计算机的课程。

数据结构是对数据的组织,是为了更好地管理数据,也是为了更好地实现算法,从而进行更好的数据计算。

计算机组成原理主要是介绍数据计算和存储的工具,因此计算机组成本质上就是清楚并掌握计算机资源,如何高效利用这些资源来更好的完成数据计算和存储。计算机组成很多方案的提出,都是因为资源不够,但又要进行高效的计算和存储,如局部性原理、虚拟内存、多核处理器。

操作系统主要是来管理硬件资源的。由于计算机资源有限,且要使每个程序都能够高效正确地进行计算存储,操作系统就产生了进程管理的概念。进程管理很大程度上是操作系统的核心(内存管理是基石)。

下面的思维导图是一个总结。

image-20220308161012916

(这里插一句,数据交互也是计算机的一个核心,但我更愿意将交互纳入“计算”的范畴)

Web 开发分为前端和后端。前端主要是更好地将数据展示给我们看(html、css、js也是数据的一种);后端主要负责与数据库的交互,比如用户名和密码、增删改查一些数据等。计算机网络就是实现不同设备间的数据交互。

数据库顾名思义,是结构化数据的有组织的集合。

OK!现在我们按照计算机领域的核心是数据的计算和存储,基本上将这些领域串联起来了。其他像分布式、云计算、人工智能其实都可以这样理解的。当然这一点是我学习过程中得出的一个观点,是为了方便理解串联知,不认同也不要紧。随着学习的深入,其他人产生自己对计算机的理解,这是最好不过的了。

下一节,我们将从软硬件接口——ISA 出发,正式进入计算机系统吧!

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值