「OS」Pre
定义
操作系统是一组管理计算机硬件资源的软件集合,它向计算机程序提供共性的服务:
- 提供一个计算机用户与计算机硬件系统之间的接口,使计算机系统更易于使用。(使用者)
- 有效地控制和管理计算机系统中的各种硬件和软件资源,使之得到更有效的利用。(资源管理者)
- 合理地组织计算机系统的工作流程,以改善系统性能(如响应时间、系统吞吐量)。
历史沿革
OS 史前阶段 -> 批处理 -> 分时 -> 现代 OS -> 网络化 OS / 分布式 OS
批处理
把用户提交的作业成批送入计算机,由作业调度程序自动选择作业运行
批处理系统
加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的作业(包括程序、数据和命令)
它分为:联机批处理系统和脱机批处理系统
- 首先出现的是联机批处理系统,即作业的输入/输出由CPU来处理。
- 在主机与输入机之间增加一个存储设备——磁带,在运行于主机上的监督程序的自动控制下,计算机可自动完成:成批地把输入机上的用户作业读入磁带,依次把磁带上的用户作业读入主机内存并执行,然后把计算结果向输出机输出
- 为缓解高速主机与慢速外设的矛盾,引入了脱机批处理系统,即输入/输出脱离主机控制。
- 增加一台不与主机直接相连而专门用于与输入/输出设备打交道的卫星机。
在前述的批处理系统中,引入多道程序设计技术后形成多道批处理系统
- 增加一台不与主机直接相连而专门用于与输入/输出设备打交道的卫星机。
- 多道:系统内可同时容纳多个作业。
分时
将CPU处理时间分割为多个时间片,将时间片分给不同程序,达到多个程序“同时”运行的效果。从而支持用户、多进程。
与批处理相比,增加了管理时间片的系统开销、管理多用户的系统开销、管理硬件的系统开销(引入了虚存)、交互IO的系统开销等等。
网络化 OS
在传统单机OS上增加一个模块——网络通信模块,主要提供联网功能和资源的远程访问,实现多机互联
网络操作系统主要指运行在各种服务器上的操作系统,目前主要有 UNIX、LINUX、Winodws。
分布式 OS
区别于集中式操作系统,分布式操作系统负责管理分布式处理系统资源和控制分布式程序运行。它是一个一体化系统,将若干独立的计算机连成网络,有一个全局操作系统负责全系统的资源分配和调度等工作,但整个系统对用户来说如同是一台计算机。
计算机网络是分布式操作系统的物理基础。
分布式操作系统的特点主要有:
- 分布性。网络操作系统虽具分布处理功能,但其控制功能却是集中在某个或某些主机或网络服务器中,即集中式。
- 透明性。分布式操作系统通常能很好地隐藏系统内部的实现细节。
- 并行性。分布式操作系统具有任务分配功能,可将多个任务分配到多个处理单元上,使这些任务并行执行,从而加速了任务的执行。
- 共享性。分布式操作系统支持系统中所有用户对分布在各个站点上的软硬件资源的共享和透明方式访问。而网络操作系统所提供的资源共享功能仅局限于主机或网络服务器中资源,对于其它机器上的资源通常仅有使用该机的用户独占。
- 健壮性。分布式操作系统由于处理和控制功能的分布性而具有较好的可用性和可靠性,即健壮性。而网络操作系统由于控制功能的集中式特点而使系统重构功能较弱,且具有潜在的不可靠性。
Boot
操作系统的启动过程。
CPU 加电,取指寄存器复位到固定值后,需要 Bootloader 的引导。bootloader 需要将内核镜像文件加载到内存中, 那么它就能选择使用哪一个内核镜像进行加载,即实现多重开机的功能。使用bootloader后,我们就能够在一个硬件上运行多个操作系统了。
Bootloader
从操作系统的角度看,boot loader 的总目标就是正确地调用内核来执行。 由于 boot loader 的实现依赖于 cpu 的体系结构,因此大多数 boot loader 都分为 stage1 和 stage2 两大部分。
stage 1
由于内存 RAM 尚未初始化完成, stage 1 直接运行在存放 bootloader 的存储设备上(比如FLASH)
- 初始化硬件设备,包括watchdog timer、中断、时钟、内存等。
- 为加载 stage 2准备RAM空间,然后将stage 2的代码复制到RAM空间
- 设置堆栈,并跳转到stage 2的入口函数。
stage 2
运行在RAM中。(由于 stage 1 不能在内存 RAM 中运行,其自身运行会受诸多限制, 比如有些 flash 程序不可写,即使程序可写的 flash 也有存储空间限制。这就是为什么需要stage 2的原因)
- 初始化这一阶段需要使用的硬件设备以及其他功能
- 将内核镜像文件从存储器读到RAM中
- 为内核设置启动参数
- 将CPU指令寄存器的内容设置为内核入口函数的地址,即可将控制权从bootloader 转交给操作系统内核。
以上两个工作阶段的具体实现在不同系统、不同硬件环境都会有差别。
比如 x86 PC 的启动过程中,首先执行的是BIOS中的代码,主要完成硬件初始化相关的工作, 然后BIOS会从MBR(master boot record,开机硬盘的第一个扇区)中读取开机信息。Linux中常说的 Grub 和 Lilo 这两种开机管理程序就是被保存在MBR中的。
注:GRUB(GRand Unified Bootloader)是GNU项目的一个多操作系统启动程序。简单的说,就是可以用于在有多个操作系统的机器上, 在刚开机的时候选择一个操作系统进行引导。
BIOS加载MBR中的Grub代码后就把CPU交给了Grub,Grub的工作就是一步一步的加载自身代码,从而识别文件系统, 然后就能够将文件系统中的内核镜像文件加载到内存中,并将CPU控制权转交给操作系统内核。 这样看来,其实BIOS和Grub的前一部分构成了前述stage 1的工作,而stage 2的工作则是完全在Grub中完成的。
*注:bootloader有两种操作模式:启动加载模式和下载模式。对于普通用户而言,bootloader只运行在启动加载模式,就是我们之前讲解的过程。 而下载模式仅仅对于开发人员有意义,区别是前者是通过本地设备中的内核镜像文件启动操作系统的,而后者是通过串口或以太网等通信手段将远端的内核镜像上载到内存的。