欢迎来到软件的世界!
在本章中,我们将探索每一台电脑背后的「大脑」。虽然硬件(Hardware)是你可以触摸到的实体,但软件(Software)才是让这些硬件变得有用的关键。想象一下智能手机:屏幕和电池是硬件,但应用程序和操作系统才是让它运作的软件。
别担心某些部分听起来很技术化;我们会透过简单的类比,把它拆解得清清楚楚!
3.6.1 硬件与软件:动态拍档
要了解电脑系统,你必须知道这两个主要部分之间的区别:
1. 硬件(Hardware): 这是系统中实体的电子组件。如果你能踢它或拿起它,那就是硬件!例如处理器(CPU)、内存(RAM)和主板。
2. 软件(Software): 这是由硬件执行的一系列指令(程序)。软件会告诉硬件具体该做什么。
类比: 想象一台钢琴。木制琴身、琴键和琴弦是硬件。告诉钢琴家演奏哪些音符的乐谱则是软件。没有乐谱,钢琴就只是摆设;而没有钢琴,音乐也无法被听见。
重点总结: 硬件是实体的机器;软件是在该机器上运行的指令集。
3.6.2 软件的分类
并非所有软件的工作都相同。我们通常将软件分为两大类:
系统软件(System Software)
这类软件负责管理电脑资源,并为其他程序提供运作平台。它就像汽车的「引擎」。你通常不会直接与它互动来完成工作,但没有它,你就无法运作。
它包括:
- 操作系统(OS)
- 实用程序(Utility Programs)
- 程序库(Libraries)
- 翻译程序(Translators)
应用软件(Application Software)
这是允许使用者执行特定任务或解决问题的软件。它就像你工具箱里的「工具」。
范例: 用于撰写文章的文字处理软件、浏览互联网的网页浏览器,或是用来娱乐的电子游戏。
快速复习盒:
- 系统软件: 执行电脑(例如 Windows、macOS)。
- 应用软件: 帮助使用者完成任务(例如 Photoshop、Excel)。
操作系统(OS):总管家
操作系统是最重要的系统软件。它的主要角色是为使用者和其他软件隐藏硬件的复杂性。这被称为抽象化(Abstraction)。你不需要知道硬盘在微观层面上是如何运作的就能存储文件;操作系统会帮你处理这些细节!
操作系统有四个你需要知道的重要工作:
1. 调度(Scheduling): 操作系统决定哪些程序可以使用处理器以及使用多久。它确保每个运行的程序都能公平地分配到「CPU 时间」,这样电脑才不会冻结。
2. 内存分配(Memory Allocation): 当你开启一个应用程序时,操作系统会在随机存取内存(RAM)中为它找到一个「停车位」。它确保应用程序不会试图占用相同的空间,从而导致崩溃。
3. 输入/输出(I/O)设备管理: 操作系统管理电脑与其周边设备(输入/输出设备)之间的通讯,例如你的键盘、鼠标和打印机。
4. 中断处理(Interrupt Handling): 「中断」是一种发送到处理器的信号,需要立即处理(例如鼠标点击或低电量警告)。操作系统会有效率地处理这些信号。
你知道吗? 如果没有内存分配,你的电脑将会是一团混乱!一个程序可能会意外覆盖另一个程序的资料,导致系统不断崩溃。
其他重要的系统软件
实用程序(Utility Programs): 这些是「管家」工具,增加了额外的功能来协助维护系统。
范例: 防病毒软件(安全性)和压缩程序(使文件变小以节省空间)。
程序库(Libraries): 这些是预先编写的代码集合,程序员可以使用它们来节省时间。与其从零开始编写复杂的数学函数,程序员可以直接从程序库中「借用」它。
翻译程序(Translators): 这些将人类编写的代码转换为电脑硬件能理解的语言(二进制)。我们将在下一节中更详细地介绍它们。
重点总结: 操作系统管理电脑的资源(调度、内存、I/O、中断),并使坐在桌前的使用者能轻松使用硬件。
3.6.3 程序语言与翻译程序
电脑只理解 1 和 0(机器码,Machine Code)。人类发现这非常难写!因此,我们有不同类型的程序语言。
语言分类
1. 低级语言(Low-Level Languages):
- 机器码: 原始的二进制指令。对电脑来说速度极快,但对人类来说几乎无法阅读。
- 汇编语言(Assembly Language): 使用助记符(Mnemonics)(如 ADD 或 SUB 等简短文字代码)代替二进制。它比机器码更容易,但仍然要求程序员精确理解硬件是如何运作的。
2. 高级语言(High-Level Languages):
- 这些语言使用类似英语的单词(如 if、while、print)。
- 它们是指令式(Imperative)的,意味着代码描述了电脑完成任务时应遵循的逐步过程。
- 它们学习和编写起来容易得多,而且相同的代码通常可以在不同类型的电脑上执行。
翻译程序的类型
由于电脑只说机器码,我们需要一个翻译程序来转换我们的代码。有三种类型:
1. 汇编器(Assembler): 将汇编语言翻译成机器码。
2. 编译器(Compiler): 一次将整个高级语言程序进行翻译。它会建立一个目标代码(Object Code)(可执行文件),随后可以在不需要原始源代码的情况下执行。
3. 解释器(Interpreter): 逐行翻译并执行高级语言程序。如果第 10 行出现错误,它会执行第 1 到第 9 行,然后才会停止。每次你想运行程序时,都需要这个解释器。
应避免的常见错误: 不要混淆源代码(Source Code)和目标代码(Object Code)。源代码是人类编写的内容;目标代码是由翻译程序产生的机器码。
中介语言(字节码,Bytecode)的力量
有些编译器不会直接输出机器码。相反,它们会产生一种中介语言(通常称为字节码)。
为什么要这样做?
- 可移植性(Portability): 字节码可以在任何拥有虚拟机(Virtual Machine)的电脑上执行。这就是为什么 Java 应用程序可以在 Windows、Mac 或 Android 上执行的原因!
- 安全性: 在代码转换为最终机器码之前,可以先检查是否有病毒。
- 效率: 即时(JIT)编译器可以在需要时,立即将该字节码转换为最适合该特定电脑的机器码。
重点总结: 高级语言对人类友好,但需要翻译程序(编译器或解释器)才能对机器友好(转为机器码)。
软件总结
- 硬件是物理组件;软件是指令。
- 系统软件(如操作系统)管理机器;应用软件协助使用者。
- 操作系统处理调度、内存、I/O 和中断。
- 编译器一次全部翻译;解释器逐行翻译。
- 字节码使程序具有可移植性,因此它们可以在许多不同的设备上执行。
如果刚开始觉得编译器和解释器之间的区别有点模糊,别担心。只需记住:编译器就像在任何人阅读之前将整本书翻译成新语言,而解释器就像联合国的现场口译员,在每一句话说出时进行同步翻译!