计算机操作系统概述

操作系统的基本概念

操作系统(OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,是计算机系统中最基本的系统软件


  • 操作系统是系统资源的管理者

举例:如果要用QQ和同学视频聊天,首先需要在文件夹中找到QQ安装位置(文件管理),其次双击打开QQ.exe程序(内存管理),QQ程序正常运行(进程管理),开始和朋友视频聊天(输入输出管理)。

  • 操作系统向上层提供方便易用的服务

GUI:图形化用户接口(Graphical User Interface)用户可以使用形象的图形界面进行操作,而不需要记忆复杂的命令和参数

联机命令接口,又称交互式命令接口,即在命令提示符中直接输入命令进行交互

脱机命令接口,即批处理命令接口,可以将命令写成.bat的批处理文件,与系统进行交互

程序接口:可以在程序中进行系统调用来使用程序接口,即系统调用,用户通过程序间接使用

image-20220704171945140

  • 最接近硬件的一层软件

没有任何软件支持的计算机称为裸机,在裸机上安装的操作系统,可以提供资源管理功能和方便的服务功能,通常把覆盖了软件的机器称为扩充机器,又称之为虚拟机


操作系统的特征

一共有4个特征:并发,共享,虚拟,异步

并发

指两个或多个事件在同一时间间隔内发生,这些事件宏观上是同时发生的,但微观上是交替发生的

操作系统的并发性指计算机系统中“同时”运行着多个程序,这些程序宏观上看是同时运行的,微观上看是交替运行的

单核CPU同一时刻只能执行一个程序,各个程序只能并发的执行

多核CPU同一时刻可以同时执行多个程序,多个程序可以并行的执行


共享

共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用

互斥共享:某些资源,虽然可以提供给多个进程使用,但一个时间段只允许一个进程访问该资源

同时共享:系统中的某些资源,允许一个时间段内由多个进程同时对它们进行访问

共享和并发互为存在条件


虚拟

虚拟是指把一个物理上的实体变为若干个逻辑上的对应物,物理实体是实际存在的,逻辑上的对应物是用户感受到的

比如单核CPU的计算机中,可以运行多个程序,这就是虚拟处理器技术,实际只有一个CPU,但是在用户看来似乎用6个CPU在同时服务,这里利用了时分复用技术


异步

在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是程序的异步性


操作系统的发展和分类

手工操作阶段:用户独占全机,人机速度矛盾导致资源利用率极低

批处理阶段-单道批处理系统:引入了脱机输入/输出技术,并由监督程序负责作业的输入和输出,

缺点:内存中仅能有一道程序运行,CPU有大量的时间在空闲等待I/O完成

批处理阶段-多道批处理系统:操作系统正式诞生,多道程序并发执行,共享计算机资源。

优点:

  • 让CPU处于忙碌状态,利用率高;在内存中装入多道程序提高内存的利用率,此外还可以提高I/O设备的利用率
  • 系统吞吐量大,仅当作业完成时或运行不下去才进行进程切换

缺点:

  • 平均周转时间长
  • 无交互能力
  • 系统需要付出额外的系统开销来组织作业和切换作业,系统开销大

分时操作系统:计算机以时间片为单位轮流为各个用户服务,各个用户可以通过终端与计算机进行交互,用户请求可以被即时响应,解决了人机交互问题,主要缺点是不能处理一些紧急任务

实时操作系统:主要优点:能够响应一些紧急任务,某些紧急任务不需要时间片排队,在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且在严格的时限内处理完时间,主要特点是及时性和可靠性


程序的运行环境

CPU运行模式

操作系统的内核(Kernel)是操作系统最重要最核心的部分,也是最接近硬件的部分

操作系统内核为管理者,有时会让CPU执行一些特权指令,如:内存清零指令,这些指令只允许管理者来使用,在CPU设计和生产的时候就划分了特权指令和非特权指令,因此CPU执行一条指令前就能判断其类型

CPU有两种状态:内核态和用户态

处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令

处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令

内核态切换到用户态:执行一条特权指令,修改PSW的标志位为用户态,这个动作意味着操作系统主动让出CPU使用权

用户态切换到内核态:由中断引发,由硬件自动完成变态过程,触发中断信号意味着操作系统强行夺回CPU的使用权


中断和异常

中断分为内中断和外中断

内中断与当前执行的指令有关,中断信号来源于CPU内部,又称异常

  • 故障(fault),由错误条件引起,可能被内核程序修复。内核程序修复后会把CPU使用权还给应用程序,让它继续执行下去
  • 终止(abort),由致命错误引起,内核程序无法修复该错误,因此直接终止该应用程序
  • 陷入(trap),由陷入指令引发,应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令–陷入指令,执行陷入指令意味着主动将CPU控制权还给操作系统

外中断与当前执行的指令无关,中断信号来源于CPU外部,即是狭义的中断

  • 时钟中断,时钟部分每隔一个时间给CPU发送一个时钟中断信号
  • I/O中断,当输入输出任务完成时,向CPU发送中断信号

中断机制的基本原理

不同的中断信号,需要用不同的中断处理程序来处理,当CPU检测到中断信号后,会根据中断信号的类型去查询中断向量表,以此来找到相应的中断处理程序在内存中的存放位置

中断机制的处理过程

image-20211228220130496

子程序调用会在保存断点步骤中保存程序计数器保存

中断处理程序会保存程序计数器,程序状态字以及某些通用寄存器的内容


系统调用

系统调用是操作系统提供给应用程序使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得系统内核的服务

应用程序通过系统调用请求操作系统的服务,而系统中的共享资源都由操作系统统一掌管,因此凡是与共享资源有关的操作,都必须通过系统调用的方式向操作系统的内核发出服务请求,这样可以保证系统的稳定性和安全性

操作系统的功能都要通过系统调用的形式实现,比如:

  • 设备管理
  • 文件管理
  • 进程控制
  • 进程通信
  • 内存管理

系统调用的过程:

传递系统调用参数—>执行陷入指令(用户态)—> 执行相应的内核程序处理系统调用(核心态)—>返回应用程序


程序的装入和链接

内存可以存放数据,程序执行前需要先放到内存中才能被CPU处理,最后将其再转变为一个可以执行的程序,通常要经过以下几个步骤

  1. 编译:由编译程序对用户源程序进行编译,形成若干个目标模块(此过程形成了逻辑地址)
  2. 链接:由链接程序将编译后形成的一组目标模块和它们所需要的库函数链接在一起,形成一个完整的转入模块
  3. 装入:由装入程序将装入模块装入内存

image-20210801151654153


程序的链接

源程序经过编译后,可得到一组目标模块,链接程序的功能是将这组模块以及它们所需要的库函数装配成一个完整的装入模块

  • 静态链接方式

在程序运行前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件,之后不再拆开

  • 装入时动态链接

将各目标模块装入内存时,边装入边链接的链接方式

  • 运行时动态链接

在程序执行过程中需要该目标模块时,才对它进行链接,其优点是便于修改和更新,便于实现对目标模块的共享


程序的装入

为了解释方便,假设一个无需链接的单个目标模块的装入过程,该目标模块也就是装入模块,根据装入的时间,可以有如下三种装入方式

  • 绝对装入方式

在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码,装入程序按照装入模块中的地址,将程序和数据装入内存

  • 静态重定位

静态重定位:又称可重定位装入,编译,链接后的装入模块的地址都是从0开始的,指令中使用的地址,数据存放的地址都是相对于起始地址而言的逻辑地址。可以根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行重定位,将逻辑地址变换为物理地址

静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业,作业一旦进入内存后,在运行期间不能移动

  • 动态重定位

动态重定位:又称动态运行时装入。编译,链接后的装入模块的地址都是从0开始的,装入程序把装入模块装入内存后,并不会立即将逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行,因此装入内存后所有的地址依然是逻辑地址,这种方式需要一个重定位寄存器的支持


操作系统的体系结构

image-20211228220105434

时钟管理:利用时钟中断实现计时功能

原语:是一种特殊的程序,这种程序必须被执行完成,不能被中断


宏内核

将操作系统的主要功能模块都作为了系统内核,运行在核心态

image-20220704171853233

优点:高性能,内核内部各种功能可以直接调用

缺点:内核代码庞大,结构混乱,难以维护


微内核

只把最基本的功能保留在内核

image-20220704173351063

优点:内核功能少,结构清晰

缺点:状态切换频繁,性能低,模块不能直接相互调用,只能通过内核的消息传递来间接通信


分层结构

操作系统的内核会分为多层,每层可单向调用更低一层的接口

image-20220704171035881

优点:便于调试和验证,容易扩充和维护,调用接口清晰

缺点:效率低,不可以跨层调用


模块化

将内核划分为多个模块,各模块之间相互协作

主模块:只负责核心功能,如进程调度,内存管理

可加载内核模块:可以动态加载新模块到内核,而无需重新编译整个模块

image-20220704172308591

优点

  • 模块间逻辑清晰,易于维护,确定模块间接口后可多模块同时开发
  • 支持动态加载新的内核模块,增加操作系统适应性
  • 任何模块都可以直接调用其他模块,效率高

缺点

  • 模块之间相互依赖,调试困难

外核

内核负责进程调度,进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,负责保证资源使用安全

优点

  • 外核可直接给用户进程分配不虚拟,不抽象的硬件资源,使用户进程可以更灵活的使用硬件
  • 减少了虚拟硬件资源的映射,提升效率

缺点

  • 降低了系统的一致性
  • 使系统变得复杂

image-20220704191719378


操作系统的引导

操作系统会将一整块磁盘分为若干分区

image-20220704141922953

主引导记录(MBR,Master Boot Record):包含了磁盘引导记录和分区表

image-20220704150228939

引导记录(PBR,Partition Boot Record) :负责记录根目录中的启动管理器

在CPU的内存中,ROM中有BIOS系统,会找到磁盘中的MBR,MBR在内存运行后会找到PBR,PBR运行后会找到根目录里面的启动管理器,从而实现开机


虚拟机

使用虚拟机技术,将一台物理机器虚拟化为多台虚拟机器(Virtual Machine,VM),每个虚拟机器都有独立运行一个操作系统

第一类VM直接运行在硬件上,每台虚拟机可以直接享用硬件资源

image-20220704182615199

第二类VM运行在宿主操作系统上

image-20220704190759697

image-20220704191609229