admin管理员组

文章数量:1561027

前言

  • 文章内容来源:东北大学的操作系统MOOC视频
  • 在操作系统的不同阶段,计算机的工作形式也不同,不要在一开始就将操作系统在心里预设成现代的 windows 或 linux 操作系统,以及将计算机预设成个人电脑等,防止代错对象、误导理解
  • 在操作系统的学习过程中,会出现:作业、任务、程序之类的词,它们是类似的概念,只是在不同的操作系统阶段对计算机需要处理的问题的代称。以及计算机、处理机、主机之类的词,都是指的具有计算能力的硬件。希望大家不要被术语所误导
  • 在学习操作系统的过程中,本文会从简单的算法/解决方案逐步引申出复杂成熟的算法/解决方案,这样的过程可以体现出思维的发散性,方便大家理解记忆,不建议各位同学在初次学习时直接去看成熟的算法/解决方案,否则可能理解较浅,过时则忘

操作系统概述

操作系统的概念

  • 操作系统在计算机系统中的位置:

    操作系统本身属于系统软件,在硬件之上、应用软件之下,是应用软件使用硬件能力的接口。可以说硬件这块儿“硬骨头”都让操作系统啃了,使得普通用户、程序员能够方便、高效、安全的使用计算机
  • 操作系统的定义:操作系统是计算机系统中的一个系统软件,它是一些程序模块的集合,它们能以尽量有效、合理的方式组织和管理计算机的软硬件资源、组织计算机的工作流程,控制程序的执行,并向用户提供各种服务功能

操作系统的发展历史

先要概念介绍
  • 联机:I/O设备直接与主机连接,即:输入设备 -> 主机 -> 输出设备。在这种模式下,当作业输入时,主机就必须接收输入,不能再进行其他操作; 当作业结果输出时,主机就必须控制输出,不能再进行其他操作。在输入、输出时,可能I/O设备执行速度较慢,则主机执行速度也要受制于I/O设备

  • 脱机:I/O设备不直接与主机连接,而是通过卫星机间接与主机相连,即:输入设备 -> 卫星机 -> 主机 -> 卫星机 -> 输出设备。卫星机类似于缓冲区,在输入设备将作业输入到卫星机的过程,主机仍可以执行已经录入到内存中的作业,当作业完全输入到卫星机后,主机再一次性将作业录入到内存; 当作业执行完成后,主机将作业结果一次性输出到卫星机,再由卫星机输出到输出设备。在这种模式下,作业的输入、作业结果的输出与主机的执行可以并行发生,提高了主机的利用率,主机的执行速度虽受制于卫星机的读写速度但也比受制于I/O设备要快。

  • 批处理:批则就是指多个,用户将一批(多个)作业输入到输入设备,主机处理后,作业结果再成批输出到输出设备。反之,非批处理,则是将一个作业输入到输入设备,主机处理后,再将一个作业结果输出到输出设备。

  • 单道:主机一次只从输入设备调入一个作业到内存进行处理,处理完成后将结果输出到输出设备后,再从输入设备调入另一个作业到内存进行处理

    如上图,在单道系统下,当单个作业请求输入时,须在等待输入的完成后才可以继续进行计算,在中间的等待过程中主机处于空闲状态,主机利用率不高

  • 多道:主机根据内存情况一次从输入设备尽可能多的调入多个作业到内存中,多个作业交替调度执行,执行完成后输出结果到输出设备,如果内存允许,则继续从输入设备调入作业执行

    如上图,在多道系统下,多个作业被交替调度执行,当程序A需要等待I/O时,由程序B执行,反之程序B需要等待I/O时,由程序A执行,这样使得主机尽可能一直都在被使用,提高了主机的利用率

    对单/多道批处理对比如下:

以上,批处理强调的是作业输入过程是不是有多个作业进行输入,单/多道强调的是主机处理作业过程中是不是有单/多个作业进行执行。如果作业一次输入多个,而主机仅调度一个作业到内存执行,则为单道批处理; 如果作业一次输入多个,主机也调度多个作业到内存执行,则为多道批处理。对上述更优的概念进行整合,可以得到脱机多道批处理是我们主要的研究对象

发展历史
  • 无操作系统阶段:普通用户使用不了计算机,计算机用户都是操作员,是计算机专业人员,通过纸带将机器语言输入到计算机执行,即:从输入设备输入单个作业 -> 在处理机执行 -> 输出结果到输出设备 -> 从输入设备输入单个作业 -> ... 这样的串行工作流。在这一阶段,计算机利用率低,用户独占全机所有资源

  • 批处理阶段:相比于上一阶段,作业可以一次输入多个,主机也可以一次调入多个作业到内存执行,解决了主机利用率低、用户独占全机所有资源的问题。其中监督程序对作业使用I/O时的调度、作业之间交替执行的调度等行为也开始体现出操作系统的特性,因此监督程序是操作系统的早期雏形。

    批处理作业调度示意图:

以上,对用户独占进行解释:假如用户A将自己的问题描述给计算机操作员,操作员将作业录入到计算机执行后,用户B又来了,计算机操作员同样需要将用户B的问题转为作业后录入到计算机,如果用户B的作业需要等用户A的作业执行完才能进行执行,那么此时相当于全机所有资源是被用户A独占的; 如果用户B的作业可以跟用户A的作业在主机交替执行,则全机所有资源是被用户A、用户B共用的,则没有被独占

  • 分时系统阶段:在上一阶段,通过对多道程序的调度解决了主机利用率低的问题,但没有解决公平性问题:如果作业A进入内存执行后,一直不进行I/O请求让出执行权,那么作业A后面的作业就都没有机会得到执行。为了解决这一问题,操作系统将处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各作业使用,如图:

  • 实时系统阶段:在上一阶段,通过分时机制解决了公平性问题,但没有考虑到作业的紧迫程度,比如在工业过程控制、军事实时控制等领域,某些作业必须在一定时间范围之内完成,如果同上一阶段一样,将它们的执行时间分散到其他不紧迫作业的多个时间片中,可能会因执行时间过长导致作业失败。为了解决这一问题,操作系统将作业进行优先级分类,优先级高的先执行,甚至可以抢占正在执行的低优先级作业的执行权; 优先级相同的作业之间再进行分时执行。

下图为对操作系统发展的各个阶段的对比:

在现代的操作系统中,通常兼具批处理、分时、实时系统的功能,被称作通用操作系统。

操作系统的功能

  • 在上述操作系统的历史中,将操作系统分为了:批处理、分时、实时系统。这其实是按操作系统对处理机的调度策略进行分类的。操作系统除了对处理机进行管理之外,还包括:存储管理、设备管理、文件管理、用户接口。
处理机管理
  • 完成处理机资源的分配、调度、回收等功能
存储管理
  • 存储器的分配与回收
  • 地址映射:逻辑地址到内存物理地址的映射
  • 存储保护:保证进程间相互隔离
  • 利用覆盖、交换、虚拟存储等技术提高内存利用率,扩大进程的内存空间
设备管理
  • 设备的分配与回收
  • 利用设备驱动程序完成对设备的操作
  • 提供统一的设备接口,提高可适应性
  • 利用缓冲区技术匹配CPU与外设的速度,提高两者的利用率
文件管理
  • 文件的存储、目录管理、共享与保密
用户接口
  • 命令接口:例如 cd、ls、echo 等在命令行/终端窗口使用的命令,或者在具有UI界面的操作系统中(如: windows),对命令接口进一步封装,通过图形操作间接使用命令接口,例如双击打开文件夹,相当于使用了 cd 命令

    另一种使用命令接口的方式是将其编写成 shell脚本(linux上) 或 bat 脚本(windows上),作为批处理运行。之所以将其称作批处理,是因为将每一个命令看成一个程序,脚本通常包含多个命令,则就是一次录入多个程序,执行时从上向下按顺序逐个执行每个程序,即单道批处理

    shell 脚本示意如下,截图来自菜鸟教程。

    同时应该注意到,为了方便编程,除了命令接口之外,还引入了程序控制语句、赋值等特性使得命令接口编程更加灵活

  • 编程接口:为程序调用操作系统功能所提供的接口,包括系统调用和库函数,例如在编程时使用的:open、fork、printf 等接口

    对系统调用进行说明:
    系统调用包含:中断指令 调用号,其中,中断指令由机器指令提供,如 int; 调用号则是指操作系统提供的功能的编号。int 0x21H,即是指调用 0x21H号系统调用
    从上一条描述可以看出,系统调用的具体功能是由操作系统实现的,而操作系统运行在内核态,用户程序运行在用户态,所以在执行系统调用时,会有 用户态 -> 进入内核态 -> 返回用户态 的状态变化
    从上一条描述可以看出,在系统调用时CPU执行权会有执行用户程序 -> 执行操作系统的系统调用 -> 返回执行用户程序的变化,因此在进入系统调用时,需要将当前用户程序的执行现场保存,在系统调用执行完成后,再将执行现场恢复,使得用户程序从断点处继续执行

作业管理

操作系统对处理机的管理,即对处理机的分配、调度、回收,是围绕作业进行的,因此我们应该先学习作业的建立

作业的基本概念

学习作业的建立之前,先了解下什么是作业:

  • 作业 = 程序 + 数据 + 作业说明书。其中,程序+数据 被称为作业体,也就是执行需要的部分; 而作业说明书里包含了作业的基本情况、控制描述、资源要求描述等信息,之后会通过作业说明书在内存建立作业控制块(JCB),是作业管理需要的部分

作业的建立

  • 作业的建立过程:包括作业的输入和作业控制块的建立
    - 作业控制块是系统管理作业的必要信息,主要包括:作业名、优先级、估计执行时间、资源要求、作业状态等

进程管理

先要概念介绍

  • 进程:前面不管我们说的是作业还是程序,都是指的静态的代码+数据,而进程指的是程序的一次执行活动,比作:正在进行的程序。进程体现的是程序的动态特性。如果把程序当成菜谱,进程则是照着菜谱烧菜的过程
  • 并行:多个进程在同一时刻同时向前推进执行,常见于多核处理器中
  • 并发:多个进程交替执行,在一段时间内共同向前推进,但在同一时刻仅有最多一个进程在CPU上执行
  • 异步:由于多个进程在CPU上交替执行,进程走走停停,虽然在同一个进程内代码的执行顺序是确定的,但在不同进程之间代码执行的时序是不可确定的。
  • 可再现性:在初始条件相同的情况下,程序的反复执行应该得到相同的结果

以上,由于进程的并发执行所产生的异步性破坏了程序的可再现性,示意如下:

// 共用变量
let a = 1;

// 程序 A
a++;			//(1)
console.log(a);	//(2)

// 程序 B 
a--;			//(3)
console.log(a);	//(4)

<

本文标签: 操作系统