操作系统精髓与设计原理-操作系统概述

本文若未注明均摘抄自《操作系统精髓与设计原理》:William Stallings著,陈向群、陈渝译,机械工业出版社出版第六版

2 操作系统概述

关键词
批处理 管程 物理地址 串行处理
批处理系统 单体内核 特权指令 对称多处理
执行上下文 多道批处理系统 进程 任务
中断 多道程序设计 进程状态 线程
作业 多任务 实地址 分时
作业控制语言 多线程 常驻监控程序 分时系统
内核 时间片轮转 但到程序设计 内存管理
操作系统 调度 虚地址 微内核

2.1 操作系统的目标和功能

操作系统是应用程序和计算机之间的接口,它的目标是方便、有效、可扩展。

2.1.1 作为用户/计算机接口的操作系统

应用程序的用户,即终端用户,通常不需要关心计算机的硬件细节。

操作系统精髓与设计原理-操作系统概述_第1张图片

如果完全用控制计算机硬件的机器指令开发应用程序,将是非常复杂的任务。为了简化这个任务,操作系统提供了以下几个方面的服务:

  • 程序开发:操作系统提供了各种各样的工具和服务,如编辑器和调试器,用于帮助程序员开发程序。不属于操作系统核心的一部分
  • 程序运行:操作系统为用户处理调度问题,如运行一个程序前的载入内存,初始化等工作
  • I/O设备访问
  • 文件访问控制
  • 系统访问
  • 错误检测和响应:计算机运行时发生的内部外部硬件错误,操作系统应当有所响应以清除错误条件,使其对正在运行的程序影响最小
  • 监控和记录

2.1.2 作为资源管理器的操作系统

一台计算机就是一组资源,这些资源用于对数据的移动、存储和处理, 以及对这些功能的控制。操作系统负责管理这些资源。

操作系统也是一种软件,与普通计算机软件原理相同,因此也经常会释放控制,而且必须依赖处理器才能恢复控制。

2.2 操作系统的发展

2.2.1 串行处理

原始的串行系统存在两个影响性能的问题:

  • 调度:大多数装置使用一个硬拷贝的登记表预定机器时间,预定1小时但45分钟运行完,就只能闲置15分钟。预定45分钟但运行1小时,解决问题的过程就会被终止。
  • 准备时间:一个程序称作“作业”,作业的每一步可能都需要安装或卸载磁带,准备卡片组,准备程序运行需要大量的时间

2.2.2 简单批处理系统

为了克服串行处理的弊端,人们开始开发批处理操作系统,简单批处理方案的中心思想是使用一个称作监控程序的软件。计算机操作人员直接将一批作业放在输入设备上,这个监控程序将自动顺序加载这些作业。

简单的说,这个监控程序对于处理器来说就是一个不断调用其他子程序的常驻程序,称为常驻监控程序(resident monitor),每个用户作业被当作子程序调用,结束后就又返回到常驻监控程序中。

简单批处理系统相对于串行处理而言最大的进步之处在于使用了一下概念

  • 内存保护:用户不能改变监控程序内的内存区域,否则硬件将报错。
  • 定时器:定时器用于防止一个作业独占系统
  • 特权指令:一些机器指令被设计成特权指令,只能由监控程序执行。
  • 中断早期计算机模型并没有中断能力。这个特征使得操作系统能让用户放弃控制权或从用户程序获得控制权时具有更大灵活性。

2.2.3 多道程序设计批处理系统

简单批处理系统相当于一种自动作业序列,在这种系统中,处理器在某些情况下依然会长时间空闲,问题在于I/O设备相对于处理器太慢。

操作系统精髓与设计原理-操作系统概述_第2张图片

图2.5a显示了这种只有一个单独程序的情况,称作单道程序设计(uniprogramming)。这种低效可以在多道程序设计批处理系统中得到改善。这种系统可以保存三个、四个甚至更多的程序,并在他们之间切换(见图2.5c),这种处理称作多道程序设计(multiprogramming)或多任务处理(multitasking),他是现代操作系统多任务方案的最初形态。

操作系统精髓与设计原理-操作系统概述_第3张图片
操作系统精髓与设计原理-操作系统概述_第4张图片

对多道程序设计有用的最显著的辅助功能是支持I/O终端和直接存储器访问操作(DMA)的硬件。多道程序操作系统相比单个程序或单道程序系统,由于需要在同一时段内运行多个作业,这些作业必须同时存在于内存中,这就需要内存管理(memory management)。此外还需要决定哪个作业先运行的调度算法

多道程序设计批处理系统示例:

类别 JOB1 JOB2 JOB3
作业类型 大量计算 大量I/O 大量I/O
持续时间 5分钟 15分钟 10分钟
需要的内存 50M 100M 75M
是否需要磁盘
是否需要终端
是否需要打印机
类别 单道程序设计 多道程序设计
处理器使用 20% 40%
存储器使用 33% 67%
磁盘使用 33% 67%
打印机使用 33% 67%
总运行时间 30分钟 15分钟
吞吐量 6个作业/小时 12个作业/小时
平均响应时间 18分钟 10分钟

操作系统精髓与设计原理-操作系统概述_第5张图片

2.2.4 分时系统

分时系统与前述的多道程序设计批处理系统在基本理念上相似,但侧重不同,后者的目的在于充分使用CPU的运算资源,而前者的设计目的在于能够同时响应多个用户的请求。

在这种系统中,系统时钟会以固定频率产生中断,在每个中断处,系统得到控制权并将处理器分配给另一位用户。这项技术被称为时间片(Time slicing)技术。在每个新用户程序得到CPU控制权之前老的用户程序和数据被写出到磁盘。当获得下一次机会时,老的用户程序代码和数据才被恢复到内存中。

新来的的程序只会占用内存中恰好足够他使用的空间,这样可以节省磁盘读取开销(如图2.7)

操作系统精髓与设计原理-操作系统概述_第6张图片

分时和多道程序设计引发了操作系统中许多的新问题,如内存中有多个作业时必须保护它们互不干扰,有多个用户时,必须对文件系统进行保护,还必须处理资源竞争问题。针对这些问题在现代操作系统中已经有了一些较为成熟的解决方案。

2.3 现代操作系统主要成就

现代操作系统已经采用了一些行之有效的办法,来使得多任务处理变得可靠健壮。[DENN80a]提出在操作系统开发中的五个重要理论进展:进程、内存管理、信息保护和安全、调度和资源管理、系统结构。接下来将对这五个领域进行简单的回顾。

2.3.1 进程

进程的定义:

  • 一个正在执行的程序
  • 计算机中正在运行的程序的一个实例
  • 可以分配给处理器并由处理器执行的一个实体
  • 单一的顺序的执行线程一个当前状态一组相关的系统资源所描述的活动单元

计算机系统的发展有三条主线:多程序批处理操作、分时和实时事务系统,在这些类型的系统中,总是要面对将有不同活动需要同时被处理。这样的处理很容易出现一些错误,而这些错误的产生又主要有4种原因:

  • 不正确的同步
  • 失败的互斥
  • 不确定的程序操作::例如两个程序共享一段内存并在同一段时间内被由处理器控制交错修改一这段内存,就会发生不可预期的操作。
  • 死锁:例如,两个程序请求两个相同的设备的控制权,一个程序获得了一个设备的控制权,另一个获得了另一个设备的控制权,两者都等待对方先释放,就造成了死锁。

解决这些问题的一种概念就是——进程,进程可以看作由三部分组成:

  • 一段可以执行的程序
  • 程序所需要的相关数据(变量、工作空间、缓冲区等)
  • 程序的执行上下文

其中执行上下文(execution context)是进程的根本,又被称作进程状态(process state),是操作系统用来管理和控制进程所需的内部数据。这种内部信息和进程是分开的,因为操作系统不允许被进程直接访问。

以图2.8为例,进程表的每条表项对应一个进程,表项内容包括指向包含进程的存储块地址的指针,还包括该进程的部分或全部执行上下文。进程索引寄存器(process index register)负责记录当前处理器正在处理的进程。当需要由A切换到B时,先将当前上下文存入到A的表项,再将B的表项中的上下文加载到各寄存器。

操作系统精髓与设计原理-操作系统概述_第7张图片

根据博主理解,其过程其实和调用函数时将CPU状态压入堆栈原理相似。其实就相当于运行栈中各层CPU状态是以“栈”的数据结构组织的,后存储的先被还原;而在进程表中,CPU状态是以“队列”形式组织的,你存我加载,轮流得到时间片。

2.3.2 内存管理

操作系统担负着五个基本的存储器管理责任:

  • 进程隔离:防止各个进程的存储空间相互干涉
  • 自动分配和管理:程序分配到一块物理内存的过程对程序员来说是透明的,由操作系统负责分配。
  • 支持模块化程序设计:具有统一有效的二进制结构,使得程序员能够定义程序模块(如动态链接库、COM组件)并动态地创建、销毁或修改模块。
  • 保护和访问控制:操作系统必须允许一部分内存可以由各种用户以各种方式进行访问,因此不同的内存应由不同的访问权限保护
  • 长期存储:许多应用程序需要在

典型情况下,操作系统使用虚拟存储器和文件系统机制来满足这些要求。虚拟存储机机制允许程序从逻辑的角度访问存储器,而不考虑物理内存上可用的空间数量。

当处理器在切换进程时,由于一些进程体积偏大,很难被紧密的压入内存中,因此引进了分页系统。在分页系统中进程被分割为固定大小的块,被称作页。程序通过虚地址(virtual address)访问字,虚拟地址又页号和页中的偏移量组成。

操作系统精髓与设计原理-操作系统概述_第8张图片

进程被分为多个页之后,就可以以页为单位零散的分配在内存中。分页系统提供了程序中使用的虚拟地址和内存中的实地址(real address)或称物理地址之间的动态映射。

2.3.3 信息保护和安全

大多数与操作系统相关的安全保护问题可分为四类

  • 可用性:保护系统不被打断
  • 保密性:保证用户不能读到未授权访问的数据
  • 数据完整性:保护数据不被未授权修改
  • 认证:涉及用户身份的正确认证和消息或数据的合法性

2.3.4 调度和资源管理

操作系统的一个关键任务是管理各种可用资源(内存空间、I/O设备、处理器),并调度各种活动进程使用这些资源。分配和调度策略必须考虑3个要素:公平性、有差别的响应性、有效性。

图2.11给出了多道程序设计环境中涉及进程调度和资源分配的操作系统主要组件。操作系统中维护者多个队列,每个队列代表着等待某些资源的进程的简单列表。

操作系统精髓与设计原理-操作系统概述_第9张图片

短期队列中包含了等待处理器并且随时可以准备运行的进程。而具体哪个进程会下一个使用处理器取决于短期调度器,或称为分派器(dispatcher)。一个常用的策略是依次给队列中的每一个进程一定的时间(时间片技术 round-robin)。另一种策略是带优先级队列。

长期队列是等待使用处理器的新作业列表。作为短期队列的补充。

I/O队列用于排列多个请求使用同一个I/O的进程

2.3.5 系统结构

一个功能完善的操作系统导致了4个让人遗憾但又普遍存在的问题

  1. 操作系统在交付使用时就习惯性地表现出落后,这就要求有新的操作系统或升级老的操作系统。
  2. 随着时间的推移会暴露很多潜在缺陷,这些缺陷必须被及时修复。
  3. 总是难以达到预期的性能
  4. 理论表明,无法设计出即复杂又安全的操作系统

对于大型操作系统,软件的体系结构和信息抽象的概念得到越来越广泛的使用,通常情况下被设计成一系列的层

名称 对象 示例操作
13 shell 用户程序设计环境 shell语言中的语句
12 用户进程 用户进程 退出、终止、挂起和恢复
11 目录 目录 创建、销毁、连接、分离、查找和列表
10 s设备 外部设备,如打印机、显示器和键盘 打开、关闭、读写
9 文件系统 文件 创建、销毁、打开、关闭、读写
8 通信 管道 创建、销毁、打开、关闭、读写
开发者透明
7 虚拟存储器 段、页 读写和取
6 本地辅助存储器 数据块、设备通道 读写、分配和空闲
5 原始进程 原始进程、信号量、准备就绪列表 挂起、恢复、等待和发信号
HAL
4 中断 中断处理程序 调用、屏蔽、去屏蔽和重试
3 过程 过程、调用栈、显示 标记栈、调用、返回
2 指令集合 计算栈、微程序解释器、标量和数组数据 加载、保存、加操作、减操作、转移
1 电路 寄存器、门、总线 清空、传送、激活、求反

2.4 现代操作系统的特征

至今大多数操作系统都有一个单体内核(monolithic kernel),微内核体系结构只给内核分配一些最基本的功能,包括地址空间、进程间通信(InterProcess Communication, IPC)和基本调度。

线程和进程有以下区别

  • 线程:可分派的工作单元。它包括处理器上下文环境(包含程序计数器和栈指针)和栈中自己的数据区域(为允许子程序分支)。线程顺序执行,并且是可中断的,这样处理器可以转到另一个线程。
  • 进程:一个或多个线程和相关系统资源(入包含数据和代码的存储空间、打开的文件和设备)的集合。这紧密对应于一个正在执行的程序的概念。通过把一个应用程序分成多个线程,程序员可以在很大程度上控制应用程序的模块性和应用程序相关事件间的安排。

在拥有多个微处理器的计算机上,为了实现更高的有效性和可靠性,可使用对称多线程(Symmetric MultiProcessing, SMP)技术。对称多处理计算机可以定义为具有以下特征的一个独立的计算机系统:

  1. 有多个处理器
  2. 这些处理器共享同一个内存和I/O设备,他们之间通过通信总线或别的内部链接方案相连接。
  3. 所有处理器都可以执行相同的命令(因此称为对称)

近年来单芯片上的多处理器系统(也称为单片多处理器系统)已经开始广泛应用。

2.5 微软的windows概述

没细看,只放张图

操作系统精髓与设计原理-操作系统概述_第10张图片

2.6 传统的UNIX系统

没细看,只放张图

操作系统精髓与设计原理-操作系统概述_第11张图片

2.7 现代UNIX系统

没细看,只放张图

操作系统精髓与设计原理-操作系统概述_第12张图片

2.8 Linux系统

操作系统精髓与设计原理-操作系统概述_第13张图片

2.8.1 模块结构

Linux的结构是一个模块的结合,这些模块可以根据需要自动地加载或卸载,这些相对独立的块叫做可加载模块(loadable module)。因此虽然Linux被认为是单体内核,但他的模块结构克服了在开发和发展内核过程中所遇到的困难。
Linux可加载模块有两个重要特征:

  • 动态链接:当内核已经在内存中并正在运行时,内核模块可以被加载和链接到内核。模块也可以在任何时刻被断开链接,从内存中移出。
  • 可堆栈模块:模块按层次排列,当被高层的客户模块访问时,他们作为库;当被低层模块访问时,它们作为客户。

图2.17举例说明了Linux的管理模块的结构,该图显示了当只有两个模块FAT和VFAT被加载后内核模块的列表。每个模块有两个表定义,即符号表和模块表。模块表包含以下元素:

  • *next:指向后面的模块
  • *name:指向模块名的指针
  • size:模块的大小,以内存页计
  • usecount:模块的引用计数
  • flags:模块标志
  • nsyms:输出的符号数
  • ndeps:引出的模块数
  • *syms:指向这个模块符号表的指针
  • *deps:指向被这个模块引用的模块列表的指针
  • *refs:指向使用这个模块的模块列表的指针

图2.17显示了VFAT模块在FAT模块后被加载,并且它依赖于FAT模块

操作系统精髓与设计原理-操作系统概述_第14张图片

2.8.2 内核组件

图2.18显示了基于IA-64体系结构(例如Intel Itanium)的Linux内核的主要组件。

操作系统精髓与设计原理-操作系统概述_第15张图片

主要内核组件简介如下:

  • 信号: 内核通过信号通知进程,比如除零错误等,表2.6给出了一些信号的例子
  • 系统调用:进程是通过系统调用来请求系统服务的
  • 进程和调度器:创建、管理和调度进程
  • 虚拟内存:违禁成分陪和管理虚拟内存
  • 文件系统:为文件、目录和其他文件相关的对象提供一个全局的、分层次的命名空间,还提供文件系统函数
  • 网络协议:为用户的TCP/IP协议提供套接字接口
  • 字符设备驱动:管理想内核一次性发送或接收一个字节数据的设备
  • 块设备驱动:管理以快为单位想内核发送和接收数据的设备
  • 网络设备启动:对网络接口和通信端口提供管理
  • 陷阱和错误:处理CPU产生的陷阱和错误
  • 物理内存:管理实际内存中的内存页池和为虚拟内存分配内存页
  • 中断:处理来自外设的中断

操作系统精髓与设计原理-操作系统概述_第16张图片

你可能感兴趣的:(系统,硬件)