当前位置: 首页 > news >正文

【操作系统】第一章 计算机系统概述

第一章 计算机系统概述

1.1 操作系统的基本概念

概念

操作系统是指控制和管理整个计算机系统的硬件和软件资源,合理调度、组织计算机的工作和资源分配,进而为用户和其他软件提供方便接口与环境的程序集合,操作系统是计算机系统中最基本的系统软件

特征

并发和共享是最基本的两个特征

并发

并发是指两个或者多个应用程序在同一时间间隔内运行,操作系统的并发性指的是计算机系统中存在多个运行的程序,因此它具有处理和调度多个程序同时执行的能力,是通过进程和分时实现的。

并发和并行有所区别,并发和并行在宏观上都是有多道程序同时执行,但是并发在微观上,是多个程序在一个时间间隔内交替执行,而并行是多个程序在微观上同时执行,需要特殊硬件支持。

共享

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

  1. 互斥型共享

系统中的某些资源,比如打印机,为了结果不混淆,应该在某一时间内只允许一个进程访问该资源。

  1. 同时访问共享

系统中有些资源允许在一段时间内有多个进程并发地访问他们,比如说磁盘。

**虚拟 **
虚拟是指把一个物理上的实体变为若干个虚拟上的对应物。前者是物理实体,比如说一块硬盘,而后者为人为划分出来的逻辑上的对等物,比如说在一个硬盘上人为划分出的C盘和D盘。操作系统利用虚拟技术实现虚拟存储器、虚拟内存和虚拟外部设备等等功能。虚拟为多道程序并发执行提供了支持,使得每个程序在使用同一个设备时都好似有一个设备专门为之服务。

虚拟处理器技术是通过多道程序设计技术,采用让多道程序并发执行的办法来分时使用一个处理器。使得在只有一个处理器的情况下让每个应用程序都感觉有一个中央处理器在为他们专门服务

异步

多道程序环境允许多个程序并发执行,但是由于资源有限,可能会因为资源占用产生中断,进程的执行并不是一贯到底的,而是走走停停的,比如在某时候进程需要使用打印机的时候,打印机正在被另外的进程所占用,从而需要等待。进程在以不可预知的速度向前推进,这就是进程的异步性。

操作系统的目标和功能

为了给多道程序提供良好的运行环境,操作系统应该具有以下几方面的功能:处理机管理、存储器管理、设备管理和文件管理。为了方便用户使用操作系统,还需要向用户开放接口。

1.操作系统是计算机系统资源的管理者

计算机对于处理器、存储器、文件和设备的管理使得用户无需过于关注这些方面,而是专注于用户所需的功能。

2.操作系统作为用户与计算机硬件系统之间的接口

操作系统提供给用户的接口主要分为两类:

命令接口

用户利用这些操作命令组织和控制作业的执行;另外一类是程序接口,编程人员可以使用他们来请求操作系统服务。实际上就是我们常见的cmd就是一个命令接口。命令接口分为两类:联机命令接口是用户输入一条指令就执行一条指令的,用户通过控制台输入操作指令,然后命令解释程序解释并且执行输入的命令。脱机命令接口又称为批处理命令接口,它由一组作业控制命令组成,连同作业一同交给系统。系统调度作业的时候,由系统中的命令解释程序逐条解释顺带的命令。常见的批处理命令有.bat文件,点击.bat文件可以批量执行一系列脚本。

程序接口和系统调用

程序接口由一组系统调用组成。用户通过在程序中使用这些系统调用来请求操作系统为其提供服务。

最流行的程序接口为图形用户界面(GUI),又称图形接口,用户点击图形界面上的内容,然后GUI通过调用程序接口实现操作

3.操作系统实现了对计算机资源的扩充

没有任何软件支持的计算机称为裸机,仅仅构成了计算机系统的物理基础,而实际上的计算机是除了物理系统外还有若干层软件。操作系统将裸机高造成了功能更强,使用更方便的计算机。

1.2 操作系统发展历程

手工操作阶段

用户在计算机上的所有操作都需要人工干预,比如程序的装入、运行、输出等。该阶段操作系统还没诞生。

手工操作有两个突出缺点:1.用户独占全机,由于计算机运算速度比人操作速度快,因此机器效率低 2.CPU等待手工操作,利用不充分

批处理阶段

操作系统初级阶段就是批处理系统。

1.单道批处理系统

系统对作业的处理是成批进行对,但是内存中始终只有一道作业,主要特点如下:

  • 自动性:在顺利的情况下,磁带上的一批作业能自动逐个运行,无需人工干预
  • 顺序性:磁带上的各道作业依次进入内存,各个作业完成顺序和他们进入内存顺序一致,没有异步性
  • 单道性:内存中仅有一道程序字啊运行

单道的主要问题在于,运行期间会出现高速CPU在等待低速的IO的情况,比如等待用户输入数据的时候,CPU是一动不动的。因此为了进一步提高资源利用率,提出了多道程序技术

2.多道批处理系统

多道程序设计技术允许多个程序同时进入内存并允许他们在CPU中交替地运行,这些程序共享系统中的各种资源。当一道程序因为IO请求而暂停时,CPU会立即转向处理另外一个程序。在实际操作中,多个用户将若干个作业提交给计算机系统批量处理。

多道程序设计的特点是:

  • 多道:计算机内存中同时存放多道相互独立的程序
  • 宏观上并行
  • 微观上串行

优点:资源利用率高,系统吞吐量达

缺点:用户响应时间长,不具备人机交互能力,用户不了解也无法控制程序运行状况

分时操作系统

所谓分时技术,就是将处理器的运行时间划分为很短的时间片,按时间片轮流将处理器分配个各个作业使用。在时间片耗尽时及时作业未完成,也会进入下一个时间片。由于处理器速度很快,时间片流转也很快,因此在用户主观角度就像是多个任务同时执行一样。和多道批处理作业的区别是:分时操作系统是有人机交互能力的。

同时性:允许多个用户使用一台计算机

交互性:具有人机交互能力,用户可以直接控制程序

独立性:多个用户彼此独立操作,如同独占计算机一般

及时性:采用时间片轮转法,使得能够在很短时间内响应

实时操作系统

为了能够在某个时间限制内完成紧急任务而不需要进行时间片排队,但成了实时操作系统,分为软实时系统和硬实时系统

1.3 操作系统运行环境

处理器运行模式

计算机中,处理器需要执行两种不同性质的程序:一种是操作系统的内核程序;另外一种是用户自编程序,也就是我们平时接触到的应用程序。对于OS来说,前者由于是管理程序,因此需要执行一些特权指令,以从更底层操作计算机,而用户自编的应用程序则不能使用这些底层指令。

特权指令指的是不允许用户直接使用的指令,比如置中断指令、IO指令,主要是防止用户程序对计算机系统造成破坏,与之相对的非特权指令则是用户可以直接使用的指令。

在具体实习拿上,可以将CPU的运行模式分为用户态(目态)核心态(管态)

在软件工程思想和结构化程序设计的方法影响下诞生的现代操作系统,几乎都是分层式的结构。一些和硬件关联紧密的模块,比如说时钟管理、中断管理、驱动管理处于最底层。这些模块加上运行频率比较高的程序比如进程管理、存储器管理构成了操作系统的内核。大多数计算机操作系统的内核包括以下四部分:

1.时钟管理

时钟的一个功能在于计时,向用户提供标准时间。另外通过时钟中断管理实现进程的切换。比如说在分时操作系统中采用时间片轮转调度,就是利用时钟管理进行分片的

2.中断机制

引入中断机制的初衷是提高多道程序下CPU的利用率,后来得到了充分的发展。键盘鼠标信息的输入、进程的管理调度、系统软功能的调用都离不开中断机制。中断机制中只有负责保护和恢复中断现场信息的那一部分属于内核,他们可以将控制权转交到其他程序,使得该程序在中断的时候处理机可以去处理其他任务,减少中断处理时间,提高系统并行处理能力。

3.原语

按层次结构设计的操作系统,底层是一些可以被调用的公用小程序,各自负责完成一个规定的操作。其特点如下:

  • 处于操作系统最底层,最接近硬件的部分
  • 操作都是原子操作,也就是操作只能一气呵成,不能拆分
  • 程序运行时间短,调用频繁

通常把具有这些特点的程序称之为原语

4.系统控制的数据结构以及处理

系统会采用各种数据结构来登记各种状态信息,比如作业控制块、各类链表、消息队列、缓冲区等等。为了实现有效管理,系统需要一些基本操作,常见的操作有以下三种

  • 进程管理
  • 存储器管理
  • 设备管理

中断和异常的概念

对于计算机来说,缺少中断是难以想象的,因为操作系统的发展过程大体就是一个提高资源利用率的过程,而提高资源利用率就需要在程序并未使用某种资源的时候,把它占有的资源释放,而这种操作需要依靠中断来实现。

1.中断和异常的定义

中断又称为外中断,是指CPU执行指令外部的事件,比如IO结束中断,表示设备的输入输出处理已经完成;时钟中断,表示固定的时间片已经到了,让处理器切换任务。

异常又称为内中断,是来自CPU执行指令的内部事件,比如地址越界、运算溢出等事件,异常不可以被屏蔽,一旦发生就要立刻处理

2.中断和异常的分类

外中断可分为可屏蔽中断和不可屏蔽中断,可屏蔽中断是用过INTR线发出的中断请求。不可屏蔽中断是通过过NIMI线发出的中断请求,通常是紧急的硬件故障。而异常则都不可屏蔽。

异常可以分为故障(Fault)、自陷(Trap)和终止(Abort)。故障是由指令执行引起异常,比如运算溢出。自陷则是事先安排的“异常”事件,用于在用户态下调用操作系统内核程序。终止是指出现了使得CPU无法继续执行的硬件故障。

3.中断和异常的处理过程

当CPU在执行用户程序的第i条指令时检测到一个异常事件,或者是中断请求信号(比如std::in),则CPU打断当前的用户程序,然后转到相应的中断或者异常处理程序去执行。如果中断或异常处理程序可以解决相关问题,则处理完后通过返回指令,回到被打断的用户程序的第i条或者i+1条指令;如果中断或者异常处理程序发现是不可修复的致命错误,则终止用户程序。

系统调用

系统盗用指的是用户在程序中调用操作系统所提供的一些子功能,可以视为特殊的公共子程序。由于系统中的各种共享资源都由操作系统统一掌管,因此与资源有关的操作,都必须通过系统调用的方式向操作系统提出服务请求,并且由操作系统代为完成,而不是直接操作系统资源。

用户可以通过执行陷入指令(trap)来进行系统调用(又称访管指令)。用户执行陷入指令,相当于一种中断,将CPU的使用权从用户态主动交给操作系统的内核程序,然后内核程序会收到用户程序的系统调用请求,内核程序完成系统调用后,再把控制权交给用户。这么设计的目的是,用户不能直接执行对系统影响非常大的操作,而是需要操作系统代操作,防止用户程序随意更改或者访问重要的系统资源,影响其他进程的运行。

用户态转核心态的例子:

  1. 用户程序请求操作系统服务
  2. 发生一次中断
  3. 用户程序产生了一次错误状态
  4. 用户程序试图执行一条特权指令

1.4 操作系统结构

1.分层法

分层法是将操作系统分为若干层,最底层为硬件,最高成为用户接口,每层只能调用紧邻它的低层的功能和服务,而不能跨层调用。整体结构比较类似于互联网网络体系。依赖关系比较固定

分层法的优点在于:1.方便系统的调试和验证,简化了设计和实现。可以只是调试和验证一个层次而无需考虑其他层次。 2.易于扩展和维护,在系统中增加、修改或者替换一层中的模块或者整个层级的时候,只要不改变层间的接口就不影响其他层

分层法的缺点在于:1.合理定一个层比较困难,而且由于依赖关系的固化,往往会不太灵活。 2.效率差,操作系统每次执行一个功能都要穿过许多层,导致各层之间都需要通信机制,并且造成额外开销。

2.模块化

模块化是将操作系统按照功能划分为若干个具有一定独立性的模块。每个模块具有某方面功能,并且通过各个模块之间的接口进行通信。在划分模块的时候,如果将模块划分过小。会增加模块之间的联系过多,造成系统混乱;如果划分太大,则会增加模块内部复杂性。因此在划分模块的时候,要考虑独立性,独立性越高,模块之间交互越少,系统结构越清晰。

模块化的优点在于1.提高了操作系统设计的正确性、可理解性和可维护性。 2.增强了操作系统的可适应性。 3.加速了操作系统的开发过程。

模块化的缺点在于1.模块化之间的接口规定难以满足对接口的实际需求。 2.各模块设计者齐头并进,导致无法找到一个可靠的决定顺序。

3.宏内核

从操作系统的内核架构来划分可以分为宏内核和微内核

宏内核又称单内核,是指将系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为用户程序提供高性能的系统服务。因为个管理模块之间共享信息,能够有效利用相互之间的特性,所以具有无可比拟的性能优势。

但是随着结构和应用需求的不断发展,宏内核的核心开始变得臃肿,所以出现的微内核技术是将非核心功能移动到用户空间,所需的新服务可以在用户空间增加,内核基本不需要进行改动。缺乏可扩展性不方便移植,同时一旦一部分功能崩溃会导致整个内核崩溃,可靠性低

如今的大部分操作系统,包括Windows, Android ,Linux和iOS都是基于宏内核架构,但是也不是纯粹的宏内核架构了,而是广泛吸收了许多微内核优点后揉合成的混合内核。

4.微内核

  • 基本概念

    微内核构架,是指将内核中最基本的功能保留在内核,而将不需要在核心态执行的功能移动到用户态执行,从而降低内核的设计复杂性。那些移出内核的操作系统代码根据分层原则被划分为若干服务程序。

    微内核结构将操作系统分为两大部分:微内核和若干个服务器(进程)。微内核是能够实现操作系统最基本核心功能的小型内核,通常包括:1.与硬件密切相关的部分;2.一些比较基本的功能;3.客户与服务器之间的通信。操作系统的绝大部分功能都放置在微内核外的一组服务器(进程)中实现,运行在用户态,客户与服务器之间是借助微内核提供的消息传递机制来交互的。

    在微内核中,一个模块的错误只会使得该模块崩溃,而不会牵连其他部分,从而提高了可靠性

  • 基本功能

    微内核采用“机制与策略分离“的原理构造OS系统,有以下功能

    • 进程(线程)管理
    • 低级存储器管理
    • 中断和陷入管理
  • 微内核特点

    ​ 微内核主要优点有:

    • 扩展性和灵活性:许多功能从内核中分离出了,需要新则则直接增加服务器,需要更改则更改对应服务器
    • 可靠性和安全性
    • 可移植性:微内核与硬件相关,但各种服务器均与硬件平台无关,因此将操作系统移植到另一个平台上所需要的修改较少
    • 分布式计算

    微内核结构主要问题是性能问题,因为需要频繁地在核心态和用户态之间进行切换,操作系统开销偏大。

5.外核

1.5 操作系统引导

  1. 激活CPU。激活CPU读取ROM的boot指令,并且将指令寄存器置为BIOS的第一条指令

  2. 启动BIOS之后,先进行硬件自检,如果有故障会直接蜂鸣

  3. 加载带有操作系统的硬盘,自检完成后开始读取Boot Sequence,把控制权交由第一个设备

  4. 加载主引导记录MBR。主引导记录MBR的作用是告诉CPU去硬盘的哪个主分区去找系统

  5. 扫描硬盘分区表

  6. 加载分区引导记录PBR

  7. 加载启动管理器

1.6 虚拟机

虚拟机是一台逻辑计算机,使用特殊的虚拟化技术,为用户提供抽象的、统一的、模拟的计算环境,主流有两种虚拟化方法:

1.第一类虚拟机管理程序

2.第二类虚拟机程序

相关文章:

  • 【Vue】Vue的Mustache插值语法、v-bind指令
  • Android7.1.1系统,Toast的Exception: android.view.WindowManager$BadTokenException解决
  • TiKV 监控指标详解
  • 嵌入式系统开发笔记92:感受开源之美
  • VLC 编译安装 [for android, linux, windows]
  • 字节内部私藏的数据结构与算法刷题笔记,太顶了熬夜刷上头
  • 前端性能优化方法与实战开篇词 开启刻意练习之路,进阶前端性能技术专家
  • 实战java高并发程序设计(第2版)学习(1-3)
  • TiCDC 重要监控指标详解
  • T1063 最大跨度值(信息学一本通C++)
  • JavaSE 一些技巧 03——Stream流常用API
  • VMware安装Android-x86示例
  • [HUBUCTF 2022 新生赛]
  • 【Machine Learning】13.逻辑回归小结and练习
  • Cadence Allegro 过孔通孔盲孔埋孔详细说明及设计举例图文教程
  • Angular 响应式表单之下拉框
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • C++入门教程(10):for 语句
  • flask接收请求并推入栈
  • js写一个简单的选项卡
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • leetcode386. Lexicographical Numbers
  • Material Design
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • nodejs调试方法
  • python3 使用 asyncio 代替线程
  • 从PHP迁移至Golang - 基础篇
  • 对JS继承的一点思考
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 聊聊flink的BlobWriter
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 使用putty远程连接linux
  • 我有几个粽子,和一个故事
  • 一道闭包题引发的思考
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 智能合约Solidity教程-事件和日志(一)
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ###STL(标准模板库)
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (bean配置类的注解开发)学习Spring的第十三天
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (规划)24届春招和25届暑假实习路线准备规划
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十一)图像的罗伯特梯度锐化
  • (算法)N皇后问题
  • (算法二)滑动窗口
  • (一)插入排序
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)程序员疫苗:代码注入
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?