操作系统 概论
计算机系统
计算机系统通常包括计算机硬件(Hardware)、操作系统(Operating System)和应用程序(Application)以及用户(User)几个部分;操作系统运行在计算机硬件上,而应用程序依赖于操作系统向上层提供的一系列服务和接口运行,最后,用户使用应用程序完成自己的工作;这些部分之间的关系如下所示。
1 |
|
可以看到,从硬件向上到应用程序,它们的覆盖范围是逐层加大的。可以这样理解:操作系统通过各种方法扩展和增强了硬件的功能(例如虚拟内存机制的使用,在应用程序层面来看扩充了实际内存的大小;又例如分时多任务机制的使用,在用户层面来看有多个程序在同时运行,但实际的处理器数量并没有这么多);而应用程序又利用操作系统提供的各种接口和服务进一步扩展和增强了计算机的功能(例如五花八门的应用程序让用户通过计算机完成各种任务,而不仅限于计算)。
操作系统
计算机系统是一个具有层次结构的系统,操作系统是处于硬件和应用程序中间的软件,它向上为应用程序提供简洁易用的资源抽象,屏蔽复杂的底层逻辑;向下管理种类繁多的硬件资源。
功能和目标
功能
- 资源管理(包括处理器管理、存储管理、设备管理、文件管理等)
- 控制执行(例如进程调度、进程的并发控制等)
- 提供接口(例如作业管理提供了向计算机输入作业的接口)
目标
- 方便用户使用
- 提升机器能力(例如:并发控制使得单核处理器计算机也能“同时”运行多个程序)
- 提高运行效率(例如:并发有效利用了处理器资源)
- 提供开放环境(例如:操作系统提供了一个可供应用程序运行的开放环境)
主要特征
并发性
- 并发是指两个或两个以上事件在同一时间间隔内发生。并发提高了资源利用率(一心多用),但是增加了管理复杂度(例如为了保证程序之间不相互影响而对资源进行的保护,等等)
- 支持并发的操作系统称之为多任务系统
并行是指两个或两个以上事件或活动在同一时刻发生,它是并发的特例。
共享性
- 共享性是指系统中的资源可被多个并发执行的任务(作业)所使用
- 两类共享方式:
- 互斥访问(适用于某一时刻只能被一个任务访问的资源,例如打印机、屏幕输出等)
- 同时访问(适用于某一时刻可以被多个任务访问的资源,例如读取文件内容、读取传感器数据等)
异步性
- 主要表现
- 任务执行的时间、推进速度等不定(例如,每个程序执行的时间可能是不相同的)
- 事件发生的不可预期,如各种中断的发生(例如,我现在按了一下键盘的某个键)
- 对操作系统的要求
- 能够处理随机发生的各种事件
- 在不同的事件序列中,确保任务的正确执行(例如,程序不能因为我插了个耳机就崩溃了)
虚拟性
- 虚拟性是操作系统中的一种管理技术,是指将物理上的一个实体变成逻辑上的多个对应物,或将物理上的多个实体变成逻辑上的一个对应物的技术。
- 例如,虚拟内存(将逻辑上的一个个内存块映射到不同的内存或磁盘空间中)
操作系统运行机制概览
从接通电源到操作系统
Step 1:接通电源,运行BIOS
接通电源后,CPU首先会执行一条跳转指令,这条指令将会使CPU跳转BIOS代码继续执行,BIOS在进行一系列初始化和自检工作(该过程被称为POST过程)后,执行自举过程,该过程将第一阶段引导程序的代码(是主引导记录的一部分)从磁盘指定位置(磁盘的首个扇区)调入到内存中,随后跳转到第一阶段引导程序继续执行。
BIOS的全称是Basic Input OutputSystem,它是硬件厂商在硬件上自带的一段启动的代码,作用是进行一些硬件检查,并且跳转到引导程序bootloader。
引导程序,英文为Bootloader,引导在英文中为“boot”,是bootstrap的缩写,源自于短语“Pulloneself up by one'sbootstraps”,即“靠自己振作起来”。引导程序的任务是将另一段程序代码加载到内存中。
主引导记录,英文为Master BootRecord,简称MBR,又称主引导扇区,记录着引导程序代码和硬盘本身的相关信息以及硬盘各个分区的大小及位置信息。
Step 2:第一阶段引导程序加载第二阶段引导程序
第一阶段引导程序经由BIOS加载并开始执行,而第一阶段引导程序将会把第二阶段引导程序加载到内存中,然后跳转到第二阶段引导程序。这么做的原因是第一阶段引导程序的大小受到限制(因为它存储在主引导记录中,而主引导记录仅有一个扇区大小),无法完成复杂的功能。
Step 3:第二阶段引导程序加载操作系统
第二阶段引导程序不再拘于一个扇区大小,因此可以完成更复杂的功能,它将会把操作系统内核(Kernel)加载到内存中,最终把计算机的控制权交给操作系统内核。常见的第二阶段引导程序有LILO、GRUB等。
对于UEFI系统,由EFI应用程序(即EFI系统分区中的.efi
文件)取代MBR和第二阶段引导程序,UEFI固件会加载引导程序的.efi
文件,再由引导程序加载操作系统。
至此,操作系统被顺利加载到内存并接管了计算机。
操作系统初始化
在UNIX/类UNIX操作系统中,操作系统内核(Kernel)首先构造出第一个进程(这里称为init进程),init进程通过fork和exec操作创建若干个子进程来进行各项任务(比如用户登录、终端、桌面,等等)。
操作系统基本形态
如下所示,操作系统的核心主要包括调度程序(这里指短程调度,即选择已被加载到内存中的进程投入运行)和中断处理程序(这里包括来自进程的系统调用和来自进程或外部设备的中断)。
1 |
|
操作系统如何保护自己
答案是利用硬件提供的保护机制:
- CPU区分内核态和用户态,两种状态下,CPU能执行的指令集有所区别(禁止用户态执行可能威胁到操作系统的指令)
- 主存保护机制,使程序只能访问它有权访问的主存空间
操作系统分类
- 批处理操作系统
- Batch Operating System,批量化处理作业
- 特点:
- 用户脱机工作,将任务(作业)批量交给操作系统之后无需持续关注运行情况,操作系统将自动安排这些任务的输入和执行
- 成批处理作业(作业成批进入系统,全部完成后成批从系统输出结果)
- 多道程序运行(早期为单道)
- 作业周转时间长(一批作业在全部完成后才会被输出)
- 分时操作系统
- Time Sharing Operating System,允许多个联机用户同时使用一台计算机系统进行计算的操作系统称分时操作系统。
- 特点
- 同时性,多个用户同时
- 独立性,每个用户相对独立
- 及时性,快速响应用户请求
- 交互性,用户联机工作(这里指用户与作业的交互)
- 实时操作系统
- 必须在一个事先定义好的时间限制内,对外部或内部的事件进行响应和处理的操作系统
- 按照满足条件的不同分为软实时系统和硬实时系统
- 例如信息查询、过程控制系统
操作系统提供的服务和接口
- 从完成功能的角度看,包括如下基本服务
- 创建程序
- 执行程序
- 数据的输入输出
- 信息的存取
- 通信服务
- 错误检测和处理
- 从提高系统效率角度看,增加如下服务
- 资源分配
- 统计
- 保护
- 操作系统通过提供接口向上层提供服务:
- 用户接口(User Interface)
- 命令行用户界面(Command Line User Interface, CLI),如Shell程序
- 图形用户界面(Graphic User Interface, GUI),如Windows用户界面
- 程序接口(API,Application Interface),系统调用(System Call)
- API函数库(以API函数的形式提供系统调用,但API函数并不都进行系统调用)
- 用户接口(User Interface)
操作系统的基本元素
- 内核,提供支持系统运行的基本功能和基本操作
- 微内核
- 宏内核
- 进程,资源分配的最小单位,CPU调度的单位
- 线程,CPU调度的最小单位