持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
What is an OS?
An extended machine 作为扩展
- 操作系统隐藏了必须执行的混乱细节——提供标准库(即把资源抽象)
- 操作系统在机器上实现一个更易于使用的虚拟机器(即为其编写程序)
- 这是操作系统的“自顶向下”(或外部视图)。
A resource manager 作为资源管理器
操作系统是一个或多个软件模块的集合,用于管理和控制计算机或其他计算或电子设备的资源,并为用户和程序提供一个利用这些资源的接口。
管理和保护多种计算机资源:CPU、进程、内部/外部内存、任务、应用程序、用户、通信通道等
- 处理资源并将其分配给在同一时间和空间运行的多个用户或多个程序(例如,处理器时间、内存、I/O设备)
- 决定冲突请求之间的冲突,以实现高效和公平的资源使用(例如,最大化吞吐量,最小化响应时间)
- 这是操作系统的“自下而上”(或内部)视图
History of OS
- First generation, no OS
- Second generation, early batch system
- Third generation, multiprogramming, spooling and timesharing 多道程序设计、假脱机、分时系统
- Fourth Generation 1980 – present - Large scale integration - Personal computers, hand-held devices, sensors 个人电脑、手持设备、传感器
- Fifth Generation 1990 – present - Mobile computers
概念解释
multiprogramming:是相对单一编程Uniprogramming而言的
- 内存中有多个作业- 相互保护。
- 操作系统也受到保护,不受每个作业的影响。
- 作业之间分配的资源(时间、硬件)。
- 仍然没有交互
spooling(Simultaneous Peripheral Operations On-Line外部设备连接并行操作):
开始批处理系统使用磁带机。 后来的批处理系统使用磁盘进行缓冲。- 操作员将卡片读取到连接到计算机的磁盘上。- 计算机从磁盘读取作业。- 计算机将作业结果写入磁盘。- 操作员指示从磁盘打印作业结果。 支持磁盘的同时联机外围设备操作(后台处理)- 计算机将一个作业的输入/输出与另一个作业的执行重叠。- 更好地利用昂贵的CPU。- 在任何给定时间仍只有一个作业处于活动状态
spooling系统的三大组成部分:
<1>.输入井和输出井
<2>.输入缓冲和输出缓冲
<3>.输入进程SPi和输出进程SPo
SPOOLing 技术实际上是一种外围设备同时联机操作技术,又称为排队转储技术。
它在输入和输出之间增加了“输入井”和“输出井”的排队转储环节。
若有进程要求对它打印输出时,SPOOLing系统并不是将这台打印机直接分配给进程,而是在共享设备(磁盘或磁鼓)上的输出SPOOLing存储区中为其分配一块存储空间,进程的输出数据以文件形式存放于此。各进程的数据输出文件形成了一个输出队列,由输出SPOOLing系统控制这台打印机进程,依次将队列中的输出文件实际打印输出。在SPOOLing 系统中,实际上并没有为任何进程分配,而只是在输入井和输出井中,为进程分配一存储区和建立一张I/O请求表。这样,便把独占设备改造为共享设备。
Timesharing(分时)
- 使用多道程序设计来处理多个交互式作业。
- 处理器的时间由多个用户共享。
- 多个用户通过终端同时访问系统。
- 兼容分时系统(CTSS)
分时和多道程序设计不同点
在分时系统中,多个用户可以使用自己的终端在计算系统上同时访问和执行计算。
多重编程系统允许用户同时运行多个程序。所有分时系统都是多道程序设计系统,但并非所有多道程序设计系统都是分时系统,因为多道程序设计系统可以在只有一个用户的PC上运行。
硬件
处理器
每个CPU都有特定指令集。
所有CPU都包含:
-
内部的通用寄存器用于保存关键变量和临时结果。
-
程序员可见的特殊寄存器:
-
程序计数器包含要提取的下一条指令的内存地址。
-
堆栈指针指向内存中当前堆栈的顶部。
-
PSW(Program Status Word 程序状态字) 包含由比较指令、CPU优先级、模式(用户或内核)和各种其他控制位设置的条件代码位。
CPU cycles:Fetch decode execute
指令的执行:所有指令都可在内核态(Kernel mode)执行,一部分可以在用户态执行(User mode)
执行分为流水线和超标量执行Superscalar
多线程和多核芯片
存储器
IO设备:
控制器
- 示例:磁盘控制器
- 控制器很难将操作系统请求转换为设备参数。
- 控制器通常包含小型嵌入式计算机。 设备Device
- 相当简单的界面和标准化。
- SATA(串行AT连接)—许多计算机上的标准磁盘类型。
设备驱动程序
- 与控制器对话、给出评论并接受响应的软件。
- 需要,因为每种类型的控制器可能不同。
- 它必须被放入操作系统中,这样才能在内核模式下运行。
- 每个控制器制造商为其支持的每个操作系统提供一个驱动程序(例如,Windows XP、Longhorn、UNIX的驱动程序)。
I/O的Methods
设备驱动程序如何与控制器对话,三种方式:
- 忙等待 Busy waiting
- CPU执行与控制器通信的程序。
- 读/写命令
- 传感状态
- 传输数据
- CPU等待控制器完成操作。
- 缺点是它浪费CPU时间。
- CPU执行与控制器通信的程序。
- 中断
- DMA
(a) 启动输入/输出设备并获取中断的步骤。
(b) 中断处理包括接收中断,运行中断处理程序,然后返回到用户程序。
Buses 总线
操作系统必须了解用于配置和管理的所有总线
- USB(universial Serial Bus)串行总线,将慢速I/O设备和计算机连接
- SCSI 小型计算机系统接口(SCSI,Small Computer System Interface)是一种用于计算机及其周边设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准
启动计算机——BIOS (Basic Input Output System)
它是一组固化到 计算机 内 主板 上一个 ROM 芯片 上的 程序 ,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从 CMOS 中读写系统设置的具体信息。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件。
操作系统概念
进程
进程:
- 进程是正在执行的程序。
- 进程是程序的运行实例。 与每个进程相关的有:
- 进程的地址空间(指令、数据、堆栈)
- 存储在一组寄存器中的值,包括程序计数器、堆栈指针和其他硬件寄存器。
- 运行程序所需的其他信息。
- 每个有权使用系统的人都被分配了一个UID(用户标识User IDentification)。每个进程都用一个进程id唯一标识。
Unix进程的内存映像:
- 文本:程序代码
- 数据:程序数据
- 静态声明的变量
- 由malloc()或new(heap)分配的区域
- 堆栈
- 自动变量
- 过程调用信息
- 地址空间增长
- 文本:不增长
- 数据:grow“up”
- 堆栈:向下增长
进程表或PCB表:
- 进程控制块是操作系统内核中的一种数据结构,包含管理特定进程所需的信息。
- OS为每个进程维护一个PCB。
- 操作系统跟踪进程表中的所有进程。
- 两种组织形式:Link index
进程可以创建子进程,形成进程树
进程管理活动
- 创建和删除用户进程和系统进程。
- 暂停和恢复进程。
- 提供进程同步机制。
- 进程通信机制。
- 提供死锁处理机制
存储管理
文件系统
I/O
保护硬件
- 操作系统必须防止未经授权访问太多资源。
- 还必须防止一个用户干扰另一个用户的资源(例如文件)
- 操作系统提供了以下机制:
- 确定谁可以访问计算机系统。
- 用户可以访问哪些资源。
- 用户可以对资源执行哪些操作。
保护示例:
- UNIX和Linux中的文件由9位二进制保护代码保护。
- 保护代码由三个3位字段组成,一个用于所有者,一个用于组,另一个用于其他字段。
- 每个字段都有一个读位、一个写位和一个执行位。它们被称为rwx位。
- 如rwxr-x--x
Kernel & Utility(应用程序)
内核:
- 通常指操作系统中实现基本功能并始终存在于内存中的部分。
- 在某些情况下,整个操作系统被创建为一个整体实体,整个单元称为内核。 应用程序:
- 不是操作系统内核的一部分,但与内核密切配合以提供易用性或对系统信息的访问的程序,例如Shell(外壳)
Shell
什么是Shell?
- shell是一种软件,它为操作系统的用户提供一个接口,以提供对内核服务的访问。 Shell的使用:
- shell的主要用途之一是解释在提示符下输入的命令
- shell的另一个重要功能是自定义用户环境,通常在shell初始化文件中完成。
- 设置终端键和窗口特性的定义。
- 设置定义搜索路径、权限、提示和终端类型的变量。
- 设置特定应用程序(如windows、文本处理程序和编程语言库)所需的变量。
- shell还可以用作解释性编程语言。
- Shell程序也称为脚本,由文件中列出的命令组成。
- 由Linux命令和基本编程结构组成,如变量分配、条件测试和循环。
Three Major Unix Shells:
- Bourne Shell (or Standard Shell): sh, bash, ksh\
- Fast\
- $ for command prompt\
- C Shell\
- Shell with C-like syntax\
- Better for user customization and scripting\
- %, > for command prompt\
- Korn shell: ksh\
- Superset of sh
系统调用 System Calls
操作系统的任务Job:
- 管理硬件资源:分配、保护、回收、虚拟化
- 向应用程序提供服务。怎么做?--系统调用
- 服务是操作系统内核向用户提供的功能。
- 抽象、简化、标准化应用程序操作系统硬件
系统调用:
- 应用程序从操作系统请求服务所使用的机制。
- 主要由程序通过高级应用程序编程接口(API)访问,而不是直接使用系统调用。
- 系统调用通常使用特殊的机器代码指令,这会导致处理器更改模式(例如,更改为“内核模式”或“受保护模式”)。
- 三种最常见的API
- Win32 API for Windows
- 用于基于POSIX的系统的POSIX API(包括几乎所有版本的UNIX、Linux和Mac OS X)
- Java虚拟机(JVM)的Java API
例子:完成系统调用read(11步)
POSIX(Portable Operating System Interface):
API的一系列互相关联的标准的总称(进程管理文件管理等等)
- 目标:应用程序跨多个操作系统的源代码可移植性。
- 应用程序与操作系统接口的标准方式。
- 主要但不限于Unix类型的操作系统。
- 无法实现完全的可移植性。
- POSIX过程调用到系统调用的映射不是一对一的
具体在操作系统实验中使用,即shell的一些命令,常常在C语言中写,Linux中头文件#include<sys/xxx.h>
Operating System Structure
Monolithic System 单体系统
- 所有操作系统操作都放在一个文件中。操作系统是一组过程(procedures),每个过程都可以调用任何其他过程。
- 基本结构
- 主过程 处理服务过程请求。
- 服务过程 执行系统调用。
- 实用过程 辅助服务过程。
问题:
- 内核组件之间没有相互保护。
- 不易扩展/修改。
- 结构可能不清楚。
Layered System 层次式系统
- 操作系统分为若干层(级别),每个层构建在较低层的顶部。
- 操作系统的不同服务被划分为不同的层,其中每一层都有一个特定的定义好的任务要执行。
- 底层(0层)是硬件;最高层(第N层)是具有用户界面的应用程序。
- 特定层可以访问其下方的所有层,但无法访问其上方的层。也就是说,层n-1可以访问从n-2到0的所有层,但不能访问第n层。
- 在每一层隐藏信息。
- 一次开发一层。
示例:THE分层系统,但是系统的所有部分仍最终都链接到一个exe中。
优势:
- 模块化:促进模块化,因为每个层只执行其计划执行的任务。
- 易于调试:调试出现错误的特定层。
- 易于更新:在特定层中进行的修改不会影响其他层。
- 无法直接访问硬件
- 抽象
缺点:
- 复杂而仔细的实现。
- 必须仔细安排各层。
- 模块化带来了复杂的实现。
- 执行速度较慢。
Microkernel 微内核
内核
- 操作系统的核心部分,用于管理系统资源。
- 它还充当着应用程序和计算机硬件之间的桥梁。
- 它是启动时加载的第一个程序之一(在引导加载程序之后)
微内核
与分层系统的不同点:使用消息传递在用户模块之间进行通信。
- 将尽可能多的功能从内核移动到“用户”空间。
- 操作系统内核非常小,功能非常少。
- 基本内存管理(地址空间)
- 输入/输出和中断管理
- 进程间通信(IPC)
- 基本日程安排
- 受信任服务器在用户级别提供的其他操作系统功能
- 内核信任的用户进程。
- 设备驱动程序、文件系统、虚拟内存
优势
- 系统的扩展更容易,只需将其添加到系统应用程序中,而不会干扰内核。
- 可靠性
- 可移植性 缺点:用进程之间的消息交换替换服务调用会导致性能开销。
Client-Server Model 客户端服务器模型
在微内核上产生细微变化:
- 区分两类进程:服务器和客户端。
- 将大部分代码向上移动到更高的层,使内核变得最小,只负责客户端和服务器之间的通信。 操作系统是提供特定服务的服务器的集合;例如,文件服务器
优点
- 适用于分布式系统
缺点
- 在用户空间中执行操作系统功能(例如加载物理I/O设备寄存器)很困难。
- 有两种方法可以解决这个问题:
- 让一些关键的服务器进程在内核中运行,完全访问硬件,但仍与其他正常进程通信。
- 增强内核以提供这些任务,但服务器决定如何使用它(拆分策略和机制)。
Virtual Machine 虚拟机
- 硬件上的虚拟软件层。
- 抽象机器的软件仿真。
- 多个硬件实例的镜像(illusion)。
- 支持多个Oss实例。
- I型虚拟机监控程序(Type I Hypervisor)
- 在原始硬件上运行。
- 就像一个操作系统
- Type II Hypervisor
- Runs on host OS
虚拟机的好处:
- 多个操作系统环境可以同时存在于同一台机器上,并相互隔离。
- 虚拟机可以提供不同于真实计算机的指令集体系结构。
- 易于维护、应用程序调配、可用性和方便的恢复。