AS Level Computer Science (9618) 学习笔记:系统软件
欢迎来到系统软件的世界!如果说硬件是计算机的躯体,那么系统软件就是让一切运转起来的大脑和神经系统。它们是管理机器本身的关键程序,让你(以及你的应用程序)能够真正使用计算机。
在这一章中,我们将剖析两种主要的系统软件:操作系统 (OS) 和各类语言翻译程序。别担心有些概念听起来很抽象——我们会用大量的类比来确保你能轻松掌握!
5.1 操作系统 (OS)
什么是操作系统,为什么我们需要它?
操作系统 (OS) 是最重要的系统软件。它充当了用户/应用程序与物理硬件(CPU、内存、打印机、磁盘驱动器)之间的管理者和翻译官。
为什么操作系统必不可少?
- 它能最大化资源利用率(确保 CPU 不会闲置)。
- 它提供用户界面 (UI)(如图形用户界面 GUI 或命令行界面 CLI),将复杂且混乱的硬件底层细节对用户隐藏起来。你根本不需要编写二进制代码就能打开一个文件!
- 它高效地管理和控制所有的任务与硬件。
操作系统的关键管理任务
操作系统同时执行多项关键的管理任务。你可以把操作系统想象成一家公司的 CEO,协调着所有的部门。
记忆辅助: 要记住这五个主要任务,可以记作:People Make Funny Shapes Helping. (进程 Process、内存 Memory、文件 File、安全 Security、硬件 Hardware)
1. 进程管理 (流量控制员)
进程 (Process) 是指当前正在运行的程序。当你运行多个应用程序(多任务处理)时,操作系统必须公平地管理它们。
- 调度 (Scheduling): 决定哪个进程可以获得 CPU 的访问权限以及持续多长时间。
- 进程状态 (Process States): 进程在不同状态间循环:运行 (Running)(正在使用 CPU)、就绪 (Ready)(等待获取 CPU 时间)和阻塞 (Blocked)(等待 I/O 操作,例如等待打印机响应)。
调度算法
操作系统使用不同的调度算法来分配 CPU 时间:
- 轮询调度 (Round Robin): 每个进程获得固定的时间片。这种方式很公平,但对于关键任务来说可能较慢。
- 最短作业优先 (SJF): 等待时间最短的作业优先执行。它能最大化吞吐量,但前提是必须预先知道作业的长度。
- 先来先服务 (FCFS): 按作业到达的顺序进行处理。简单易行,但如果先来了一个长作业,可能会导致“瓶颈”。
- 最短剩余时间 (SRT): SJF 的抢占式版本。如果一个运行时间更短的新作业在长作业执行期间到达,长作业会暂停。
2. 内存管理 (座位规划)
操作系统管理计算机的主存 (RAM),确保每个运行中的进程都有所需的空间,且不会互相干扰。
- 分配 (Allocation): 将内存块分配给程序。
- 回收 (Deallocation): 程序结束后回收内存。
虚拟内存、分页与分段
当 RAM 用完时会发生什么?操作系统会使用虚拟内存 (Virtual Memory)。
- 虚拟内存: 操作系统将辅助存储器(如硬盘)的一部分当作 RAM 使用的技术。这使得运行的程序总量可以超过物理 RAM 的容量。
- 分页 (Paging): 内存被划分为固定大小的块,称为页 (pages)。这些页根据需要,在 RAM 和辅助存储器之间进行交换。
- 分段 (Segmentation): 内存根据程序员构建代码的方式(例如,程序主体一段,数据一段),被划分为大小不一的逻辑块(段 segments)。
- 磁盘抖动 (Disk Thrashing): 这是使用虚拟内存的一个负面影响。当页面在 RAM 和磁盘之间频繁交换时,系统会因为花费大量时间在交换数据而非处理任务上,从而导致运行速度严重下降。
3. 文件管理 (图书管理员)
操作系统控制文件和文件夹在辅助存储器(如 HDD 或 SSD)上如何存储、命名、访问和保护。
- 它维护文件目录结构。
- 它处理读/写访问权限和安全许可。
4. 硬件管理 (翻译官)
也称为输入/输出 (I/O) 管理。操作系统协调所有的硬件设备(打印机、键盘、屏幕)。
- 它使用设备驱动程序 (device drivers)——这是允许操作系统与特定硬件进行通信的特殊软件组件。
- 它管理缓冲区 (buffers)(临时存储区)以处理不同设备间的速度差异(例如,在不阻塞 CPU 的情况下逐步输出打印数据)。
5. 安全管理 (安保卫士)
操作系统保护系统资源和数据免受未经授权的访问。
- 它使用用户账户和密码。
- 它管理访问权限(例如,只读、读/写、执行)。
操作系统管理着进程 (P)、内存 (M)、文件 (F)、安全 (S) 和 硬件/I/O (H)。其目标是实现最大的效率并对用户屏蔽硬件的复杂性。
实用程序 (Utility Software)
实用程序是指旨在帮助维护、优化和保护计算机系统的系统程序。
操作系统提供的常见实用程序:
- 磁盘格式化工具: 通过创建必要的文件结构和寻址系统,为磁盘(硬盘、U 盘)存储数据做准备。
- 病毒查杀程序 (杀毒软件): 扫描、检测并清除恶意软件。
- 磁盘碎片整理程序: 对硬盘上的文件碎片进行物理重新排列,使数据能够连续存储。这能加快访问速度。(注意:这对 SSD 来说意义不大。)
- 磁盘内容分析/修复工具: 检查磁盘的物理结构是否存在错误(坏道),并尝试恢复丢失的数据。
- 文件压缩工具: 减小文件大小,以节省存储空间并缩短传输时间(例如 ZIP 文件)。
- 备份软件: 将文件或整个系统复制到辅助存储器上,以备灾难恢复。
程序库 (可重用代码)
程序库 (Program library) 是预先编写并经过测试的代码例程(如函数或过程)集合,开发者可以将它们包含在自己的程序中。
- 对开发者的好处: 它们节省了时间、精力和调试成本,因为开发者无需从零开始编写通用功能(如列表排序或对数计算)。
- 动态链接库 (DLL) 文件: 这是常用的库文件(特别是在 Windows 中),包含许多程序都会用到的例程。它们仅在程序需要时才被加载到内存中,而不是永久编译进可执行文件中。
你知道吗? 使用 DLL 可以节省磁盘空间和 RAM,并且只需更换 DLL 文件即可轻松更新程序,而无需重新安装整个程序。
5.2 语言翻译程序
当我们编写代码时,我们使用像 Python 或 Java 这样的高级语言 (HLL),它们易于阅读。然而,CPU 只能执行机器码 (Machine Code)(二进制)指令。
语言翻译程序是弥合这一差距所必需的系统软件工具,它将人类可读的代码转换为机器可执行的代码。
翻译程序的类型
1. 汇编程序 (针对低级语言)
- 用途: 将汇编语言 (Assembly Language) 程序翻译成机器码。
- 特点: 汇编语言非常接近机器码(使用 ADD 和 MOV 等助记符)。翻译过程通常是简单的“一对一”指令映射。
2. 编译器 (书本翻译员)
- 用途: 在程序运行之前,将整个高级语言源代码文件翻译成一个独立的可执行文件(机器码)。
- 处理阶段:
- 词法分析: 将源代码分解为标记(Token,如关键字和标识符等可识别单元)。
- 语法分析: 检查标记是否符合语言的语法规则。(如果在此处发现错误,编译将停止)。
- 代码生成: 生成目标代码(机器码)。
- 优化: 尝试使生成的代码更高效(更快或更小)。
编译器的优点:
- 程序一旦编译,执行速度非常快。
- 运行程序不需要原始源代码(保护知识产权/源代码安全)。
- 在程序运行前即可识别出错误。
编译器的缺点:
- 编译过程可能比较缓慢。
- 调试较困难,因为错误与原始源代码相关联,而不是可执行文件。
3. 解释器 (同声传译员)
- 用途: 在程序运行时,逐条、逐行地翻译并执行高级语言程序。
- 特点: 不会生成独立的可执行文件;每次运行程序时都必须有源代码。
解释器的优点:
- 非常适合调试,因为一旦发现错误,程序会立即停止执行,并清晰地标识出错误的行。
- 代码具有高度的可移植性——同一份源代码可以在任何安装了必要解释器的平台上运行。
解释器的缺点:
- 执行速度比编译后的程序慢得多,因为每次运行都要重新翻译每一行(特别是在循环中)。
- 必须提供源代码(安全性较低)。
比较说明 (编译器 vs 解释器)
- 使用编译器的情况: 对速度要求极高(如操作系统、商业游戏)且需要保护源代码安全时。
- 使用解释器的情况: 程序用于测试、学习,或者可移植性至关重要时(如 Web 脚本、教学环境)。
部分翻译(混合方法): 一些语言,例如 Java(控制台模式),既不是纯编译也不是纯解释。它们首先被编译成一种中间形式(称为字节码 Bytecode),然后在执行过程中由虚拟机(如 Java 虚拟机 JVM)进行解释。这种方法在可移植性和速度之间取得了平衡。
记住:编译器将整个程序一次性翻译,创建一个永久的可执行文件。解释器则是一行一行地翻译,每次运行程序时都要重复此过程。
集成开发环境 (IDE)
IDE 是一款为计算机程序员提供软件开发综合设施的应用程序。它将基本工具集成到一个界面中,就像一个专业的“工作间”。
典型 IDE 的关键功能:
1. 编码功能
- 上下文提示: 在开发者输入时自动建议关键字或变量名,从而提高编码速度并减少拼写错误。
2. 初步错误检测 (语法)
- 动态语法检查: 在开发者输入时同步检查代码的语法规则,并立即高亮显示错误(如缺少分号或结构不正确)。
3. 展示功能
- 代码美化 (Prettyprint): 自动格式化代码(缩进、间距、颜色编码),使其更易于阅读。
- 代码块折叠: 允许开发者隐藏部分代码(如过程体),以专注于整体结构。
4. 调试功能
这些工具有助于开发者发现并修复错误 (Bug):
- 单步执行 (Single stepping): 允许开发者逐行执行程序,以仔细观察逻辑流程。
- 断点 (Breakpoints): 在代码中设置执行暂停点,允许开发者在特定位置检查程序的运行状态。
- 变量与表达式查看窗口: 一个显示断点处变量当前值或表达式结果的面板,有助于追踪逻辑错误。
本章小结:系统软件
系统软件是任何计算机的基础层。操作系统管理所有资源(P、M、F、S、H)并提供必要的实用程序以进行维护。语言翻译程序(汇编程序、编译器、解释器)确保人类编写的代码能够被转换为机器码。最后,IDE 为开发者提供了高效编写和调试代码的强大环境。