1. 操作系统提供的服务
操作系统提供一系列服务,以便用户和程序能方便、高效地使用计算机系统。这些服务可以分为两大类:
面向用户/程序的服务:
- 用户界面:提供用户与系统交互的方式。
- CLI:命令行界面,用户通过输入文本命令来操作。
- 例子:Windows 中的
cmd或PowerShell,Linux 或 macOS 中的Terminal。
- 例子:Windows 中的
- GUI:图形用户界面,用户通过点击鼠标、拖拽等图形元素来操作。
- 例子:Windows 的桌面、macOS 的 Finder。
- 例子:Windows 的桌面、macOS 的 Finder。
- CLI:命令行界面,用户通过输入文本命令来操作。
- 程序执行:将程序从硬盘加载到内存,并启动运行。
- I/O
操作:由于用户程序不能直接控制硬件,操作系统提供统一的接口来执行输入/输出。
- 例子:当你用程序读取一个文件时,你调用的是操作系统提供的
read函数,而不是直接去操作硬盘磁头。
- 例子:当你用程序读取一个文件时,你调用的是操作系统提供的
- 文件系统操作:提供创建、删除、读取、写入、搜索文件和管理目录的功能。
- 通信:允许进程之间交换信息。
- 方式:共享内存 或
消息传递。
- 例子:复制一段文字,在另一个程序中粘贴,背后可能就是通过操作系统的通信服务实现的。
- 方式:共享内存 或
消息传递。
- 错误检测:持续监控系统,检测硬件(如CPU错误、内存故障)、软件(如除零错误、访问非法内存)的错误,并确保计算正确进行。
确保系统自身高效运行的服务:
- 资源分配:当多个用户或多个作业同时运行时,操作系统需要将
CPU 时间、内存空间、文件存储空间、I/O 设备等资源分配给它们。
- 例子:你的电脑同时运行着浏览器、音乐播放器和Word,操作系统负责公平地分配CPU时间片给它们。
- 例子:你的电脑同时运行着浏览器、音乐播放器和Word,操作系统负责公平地分配CPU时间片给它们。
- 记账:记录用户使用了多少以及何种类型的资源。这可以用于计费,或简单地用于统计系统性能和使用模式。
- 例子:云计算服务商会记录你使用了多少CPU小时、存储空间和网络流量,并据此收费。
- 例子:云计算服务商会记录你使用了多少CPU小时、存储空间和网络流量,并据此收费。
- 保护与安全:
- 保护:控制进程或用户对系统资源的访问,防止相互干扰。
- 例子:用户A不能未经授权访问或删除用户B的文件。
- 例子:用户A不能未经授权访问或删除用户B的文件。
- 安全:防御来自系统外部的攻击,如病毒、木马、黑客入侵等。
- 保护:控制进程或用户对系统资源的访问,防止相互干扰。
2. 用户与操作系统的接口
系统调用
- 是什么:系统调用是操作系统内核为运行在用户态的程序提供的、请求服务的编程接口。它是用户程序进入内核态的唯一入口。
- 重要性:用户程序不能直接执行特权指令(如直接操作硬件),必须通过系统调用“请求”操作系统代为执行。
- 例子:在C语言中,你调用
printf(“Hello”)来打印。printf函数库的内部最终会触发一个write系统调用,通知操作系统内核将字符串“Hello”输出到屏幕上。
- 传递参数的方法:
- 通过寄存器:将参数放在CPU的寄存器中。
- 通过内存块:将参数放在内存的一个表格里,然后将表格的地址存放在寄存器中。
- 通过栈:程序将参数压入栈中,操作系统再从栈中弹出这些参数。
- 通过寄存器:将参数放在CPU的寄存器中。
系统程序
- 是什么:系统程序是运行在操作系统之上的实用工具软件集合,它们利用系统调用来完成更复杂的功能。它们定义了大多数用户眼中的“操作系统体验”。
- 例子:
- 文件操作:文件管理器、复制命令
(
cp)、删除命令 (rm)。
- 状态信息:任务管理器、系统监视器
(
top)。
- 编程语言支持:编译器 (
gcc)、解释器 (Python)。
- 程序加载与执行:命令行解释器
(
shell)。
- 文件操作:文件管理器、复制命令
(
3. 操作系统的结构与设计
设计目标
- 用户目标:系统应该方便使用、易于学习、可靠、安全、快速。
- 系统目标:系统应该易于设计、实现、维护,并且灵活、可靠、无错误、高效。
机制与策略
- 机制:如何做。指实现一个功能的底层具体方法和步骤。
- 策略:做什么。指决定在何时、为何做某件事的高层决策。
- 分离原则:将机制与策略分离是一个重要设计原则,它允许我们在不改变底层机制的情况下,灵活地调整策略。
- 例子:CPU调度是一个机制,它负责在进程间切换。而调度算法(如先来先服务、时间片轮转)则是策略。我们可以轻松地更换调度算法,而无需重写整个进程切换的底层代码。
操作系统的几种结构
- 简单结构(如 MS-DOS)
- 特点:没有清晰的模块划分,接口和功能层级混乱。为了在有限的空间内提供最多功能,应用程序甚至可以绕过操作系统直接访问硬件。
- 缺点:极其不安全,一个程序的错误可能导致整个系统崩溃。
- 特点:没有清晰的模块划分,接口和功能层级混乱。为了在有限的空间内提供最多功能,应用程序甚至可以绕过操作系统直接访问硬件。
- 分层结构
- 特点:操作系统被划分为若干层(级),每一层只使用其下一层提供的服务,并为上一层提供服务。最底层是硬件,最高层是用户界面。
- 优点:简化了设计和调试,层与层之间接口清晰。
- 缺点:性能可能稍差,因为一个高层请求可能需要穿越多个层。
- 特点:操作系统被划分为若干层(级),每一层只使用其下一层提供的服务,并为上一层提供服务。最底层是硬件,最高层是用户界面。
- 微内核结构
- 思想:将内核中最基本的功能(如进程调度、进程间通信、底层内存管理)保留在内核中,而将其他服务(如文件系统、设备驱动、网络协议栈)作为独立的“用户态进程”运行。
- 优点:
- 高可靠性:一个服务崩溃不会导致整个内核崩溃。
- 高安全性:更少的代码运行在内核模式。
- 易于扩展与移植:添加新服务只需添加新的用户态程序。
- 高可靠性:一个服务崩溃不会导致整个内核崩溃。
- 缺点:由于需要频繁在用户态和内核态之间切换,性能可能成为瓶颈。
- 思想:将内核中最基本的功能(如进程调度、进程间通信、底层内存管理)保留在内核中,而将其他服务(如文件系统、设备驱动、网络协议栈)作为独立的“用户态进程”运行。
- 虚拟机
- 思想:将分层思想推到极致。虚拟机管理器(VMM)运行在裸机上,它负责多道编程和提供多个虚拟机的错觉。每个虚拟机都认为自己独占整个计算机系统(包括CPU、内存、I/O设备)。
- 例子:VMware、VirtualBox。你可以在你的Windows电脑上创建一个虚拟机,并在里面安装一个完整的Linux系统,这个Linux系统感觉就像运行在一台独立的真实电脑上。
- 优点:
- 完全隔离:一个虚拟机的崩溃不影响其他虚拟机。
- 研究与开发:是研究新操作系统的完美平台,不会破坏宿主系统。
- 完全隔离:一个虚拟机的崩溃不影响其他虚拟机。
- 缺点:实现困难,且由于需要模拟硬件,性能会有损失。
- 思想:将分层思想推到极致。虚拟机管理器(VMM)运行在裸机上,它负责多道编程和提供多个虚拟机的错觉。每个虚拟机都认为自己独占整个计算机系统(包括CPU、内存、I/O设备)。
- Java 虚拟机
- 特点:JVM 本身就是一个虚拟机的例子。它提供了一个与底层硬件和操作系统无关的运行时环境,使得Java程序可以“一次编译,到处运行”。
4. 系统启动
- 系统生成:操作系统需要针对特定计算机的硬件配置进行定制和编译,这个过程称为
SYSGEN。
- 引导程序:
- BIOS:存储在主板ROM中的基本输入输出系统。计算机加电后,首先运行BIOS,它进行硬件自检,并加载引导程序。
- Bootstrap:一个更小的程序,负责在硬盘上找到操作系统的内核,将其加载到内存中,并跳转到内核的起始地址开始执行。
- 类比:启动计算机就像发射火箭。
- BIOS是发射前的最终系统检查。
- Bootstrap是第一级推进器,负责将火箭(内核)推出地面。
- 内核是主发动机,一旦启动就接管了整个系统。
- BIOS是发射前的最终系统检查。
- BIOS:存储在主板ROM中的基本输入输出系统。计算机加电后,首先运行BIOS,它进行硬件自检,并加载引导程序。
如果您喜欢我的文章,可以考虑打赏以支持我继续创作.