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

操作系统精髓与设计原理(只讲大概的,例子讲的少,详细请看书)

文章目录

  • 第一章 计算机系统概述
    • 1.1 基本构成
    • 1.2微处理器的发展
    • 1.3指令的执行
    • 1.4中断
    • 1.5存储器的层次结构
    • 1.6高速缓存
    • 1.7直接内存存取
    • 1.8多处理器和多核计算机组织结构
  • 第二章 操作系统概述
    • 2.1操作系统的目标和功能
    • 2.2操作系统的发展史

第一章 计算机系统概述

1.1 基本构成

计算机有四个主要的结构化部件:
处理器: 用来控制计算机的操作,执行数据处理功能
内存: 存储我们的数据和程序
输入/输出模块: 也就是在计算机内部和我们的外部进行数据的移动,比如说将内存中的数据显示到显示屏上
系统总线: 在各个部件之间进行通信,比如说进行数据的传输

在这里插入图片描述

1.2微处理器的发展

微处理器,是指用一片或少数几片大规模集成电路组成的中央处理器,它的发明为台式计算机和便携式计算机带来了一场硬件革命
今天,微处理器不仅成为了最快的通用处理器,还发展成为了多处理器,每个芯片上面容纳了多个处理器,每个处理器上有多层大容量缓存,并且多个处理器之间共享内核的执行单元
为了满足便携式设备的需求,传统微处理器正在被片上系统所取代

1.3指令的执行

在这里插入图片描述
指令的执行可以分为两个阶段,一个是取指,另一个是执行,在每个指令周期开始时,处理器从存储器中取一条指令,取完后除非在某种情况下,否则处理器在每次取指后总是会递增PC,指向下一条指令存放的地址,执行完后继续取指,就这样不断的循环,直到我们关机或出现故障的时候程序执行才会停止

1.4中断

中断最初是用于提高处理器效率的一种手段,那为什么能提高处理器效率呢,假设现在一台打印机发出的打印的请求,那我们的程序只有在打印机完成打印后才能继续执行,但是打印机的运行速度相较于CPU很慢,就会导致浪费了时间
但是我们知道,打印机要完成一个工作要有一个准备阶段,而我们中断机制是指在打印机完了准备阶段后发出中断请求,然后CPU保存现在程序的信息,去指向打印机的请求,这比我们单纯等待打印机完成准备打印阶段花费的时间要少
也就是说没有中断我们需要等待打印机准备和执行的时间,而有了中断后我们就只需要在打印机准备好后再进行工作
在这里插入图片描述
由于中断随时会发生,所以在取指阶段和执行阶段之间要加上一个中断阶段来判断是否有I/O设备发出中断请求,如果没有中断就继续执行指令的下一个阶段,如果有中断,那么当前程序暂停,执行中断返回后再执行当前程序,这就导致我们的指令周期变成了下面这张图
在这里插入图片描述
在这里插入图片描述
前面我们介绍的只是单个中断,但是在实际的系统运行中往往不止一个中断发生,往往会有多个中断同时发生,那么当多个中断同时发生的时候我们该怎么处理呢
第一种就是正在处理一个中断的时候,禁止处理其它中断,也就是只有当前中断处理完成后才能处理其它设备发出的中断
但是这种方法的缺点是,未考虑相对优先级和时间限制的要求,例如,当来自通信线的输入到达的时候,可能需要快速接收以便腾出空间让处理下一批输入,如果在下一批输入到达的时候一开始的输入还没有处理完,那么就可能丢失数据
所以,为了防范这种情况的发生,就有了第二种方法,第二种方法是定义中断优先级,假设某个中断优先级比当前正在执行的中断的优先级更高,那么就执行中断优先级高的

1.5存储器的层次结构

在这里插入图片描述
为什么要用怎么多层呢,只用一层不好吗,当然不行,因为我们要求的是容量大,速度快,价格便宜,单单某一级的存储器无法满足我们的要求,所以我们才采用多级的结构来尽量满足我们的要求
在这个结构当中,某一些存储器是易失的,也就是一旦断电我们存储的数据都会消失,与之相对的就是非易失的,像我们的磁盘就是非易失的,断电后数据依然存在

1.6高速缓存

为何要用高速缓存呢,因为长期以来,处理器速度的提升比访问存储器速度的提升要快,这就带来了一个问题,那就是可能出现数据的传输跟不上指令的执行速度,这就会对处理器造成性能浪费
如果我们采用和处理器速度相同的存储器进行存储数据,成本又很高,承担不起,所以我们采用了高速缓存
高速缓存利用的程序的局部性原理,也就是在某一段时间内,可能程序只用到某段连续的内存,比如说我们的for循环操作,所以我们可以将这些将来很可能用到的数据提前放到比当前存储器速度快的上一级存储器当中,这样处理器就能更加充分的利用,在现代CPU中,往往有多级高速缓存

在这里插入图片描述
在这里插入图片描述
那高速缓存如何设计才能最大程度的发挥它的功能呢
当新的块读入高速缓存中的时候,将由映射函数确定这个块将占用哪个高速缓存单元,如果当所有单元都满的时候,我们需要使用置换算法来置换将来访问可能性最小的块。
并且当某个块被修改的时候,我们需要再这个块的数据被换出高速缓存前的时候将其写回进内存,写策略规定何时发生存储器写操作,一种极端情况是当块更新的时候就写回,另一种极端情况是当块被置换时才写回

1.7直接内存存取

执行I/O操作的技术有三种:可编程I/O,中断驱动I/O和直接内存存取(DMA)

可编程I/O就是说当处理器遇到I/O相关指令的时候,I/O模块执行相关动作,但是这时处理器不会去执行其它指令,而是每隔一段时间就检查I/O状态,确认是否完成,如果没有完成继续等待
这种方式会让CPU等待过长时间,会降低系统运行的效率和性能

第二种是中断驱动,就类似于我们直接的中断操作,当遇到I/O相关操作的时候发送命令给I/O,让I/O准备数据,期间处理器继续执行指令,当I/O准备完成后再执行I/O程序

第三种就是直接内存存取,这种方式只需要处理器发送命令给DMA模块,然后DMA控制I/O自行处理完所有程序并且自行传输数据,不需要处理器来传输数据,前两种都靠处理器来传输数据
但是要注意这种方式需要跟处理器抢占总线,当DMA模块正在传输数据的时候,处理器无法使用总线

1.8多处理器和多核计算机组织结构

多处理器的发展离不开我们对性能的要求,随着技术的发展和硬件价格的下降,计算机的设计者们找到了越来越多的并行处理机会,很常用的方法就是添加处理器

对称多处理器(SMP)
在这里插入图片描述
对称多处理器交互的基本单元可以是单个元素,而不像松散耦合多处理器系统的交互单元通常是一条消息或者一个文件,这就使得对称多处理器的进程之间可以进行高度的协作
其实多处理器结构有很多相对于单处理器结构的优势,在书上有详细的写,这里不多做讲解
在现代计算机中,处理器通常至少有专用的一级高速缓存,高速缓存的使用带来了新的设计问题,由于每个本地高速缓存包含一部分内存的映像,如果修改了当前高速缓存中的一个字,就会使得该子在其他高速缓存中变得无效,但是这种问题不是用操作系统解决的,而是用硬件解决的

多核计算机
我们首先要了解多核和多处理器的区别:多核CPU在同一芯片上集成多个处理核心,提高性能并允许同时处理多个任务。相比之下,多处理器是通过主板上的多个物理CPU实现并行处理,成本较低但效率不如多核
其中一个例子就是英特尔酷睿i7-990X

第二章 操作系统概述

2.1操作系统的目标和功能

操作系统是应用程序和计算机硬件之间的接口,并且操作系统也是一个程序,方便我们更好的使用硬件而不需要了解硬件的具体原理
它有三个目标:
方便: 操作系统使计算机更易于使用
有效: 操作系统允许以更加有效的方式使用计算机系统资源
扩展能力: 在构造操作系统时,应允许在不妨碍服务的前提下,有效地开发,测试和引入新的系统功能

作为用户/计算机接口的操作系统
在这里插入图片描述

在现在我们学初学编程很容易,只需要学一些相关的语法就能编写程序,比如说C语言,了解语法就可以编写程序,那我们是否思考过程序是怎样调用硬件的呢
当然是用我们C语言自带的函数,这些函数就变成了我们与硬件沟通的接口,这些接口的内部也是一些系统程序,这些系统程序我们可以将其当成操作系统,我们传入参数给函数,函数通过操作系统调用硬件,最后返回结果
简单来说,操作系统通常提供一下几个方面的服务:
程序开发: 简单来说就是提供工具帮助我们开发程序
程序运行: 当我们想要运行程序的时候,操作系统将我们的指令和数据加载到内存并且初始化一些资源
I/O设备访问: 每个设备都有不同,所以对应的操作也会不同,操作系统提供了一个统一的接口以便让我们更好的操作设备
文件访问控制: 避免我们在写程序的时候不小心修改了关键文件的信息,操作系统提供了文件的保护机制
系统访问: 就是访问我们的硬件,保护我们的硬件,避免程序直接访问硬件造成某些影响或者破坏,并且有时还要解决资源竞争时的冲突问题
错误检测和响应: 当计算机系统运行的时候可能会发生各种各样的错误,这个时候操作系统必须提供响应使错误对我们程序的影响最小。响应可以是终止引起错误的程序,重试或简单地给应用程序报告错误
记账: 统计我们对资源的利用率,并且统计相关数据,这对我们将来增加功能或者调整系统又帮助

上图也指明了典型计算机系统中的三种重要接口:
指令系统体系结构,程序二进制接口,程序编程接口

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

操作系统在某种角度看是在控制数据的移动和处理,但是这种控制机制和我们日常生活中说的控制机制有所不同,日常生活中控制器独立于控制对象,比如说热水控制器和烧水装置,但是操作系统不一样,因为操作系统归根结底也是一组程序,也是存储在硬件之内的,所以它不是独立于硬件的
这个不同主要有两方面:
操作系统是由处理器执行的一段程序或一组程序
操作系统经常会释放控制,并且必须依赖处理器才能恢复控制
在这里插入图片描述
如图显示了操作系统的一部分在内存中,包括内核程序和当前正在使用的其他操作系统程序,内核程序包含操作系统最常用的功能

操作系统的易扩展性

重要的操作系统不断发展,原因如下:
硬件升级和新型硬件的出现,新的服务,纠正错误

2.2操作系统的发展史

串行处理
早期的计算机需要程序员直接与计算机硬件打交道,因为当时没有操作系统,但是这种系统会导致两个主要问题:
1.调度: 当时如果想要使用装置,需要预订,并且通常是以半个小时为单位,但是有时候就会出现预订了一个小时但是实际上程序只用了45分钟就完成的工作,剩下的15分钟计算机是空闲的,还有的时候在程序的运行过程中遇到了问题就会导致程序中止,你原来分配的时间就会不够用,所以在还未完成目标前就不得不停止使用
2.准备时间: 当我们写了一个称为作业的程序想要运行的时候,就需要向内存中保存我们的程序,并且还要完成一系列准备工作,这一系列工作的每个步骤都可能需要安装或拆卸磁带,或准备卡片组,如果这个过程发生错误,就只能重新开始,所以我们会花费大量的时间在程序的准备工作当中

简单批处理系统

http://www.xdnf.cn/news/9432.html

相关文章:

  • 高效获取唯品会商品数据:API 接口开发与实时采集方案实现
  • QT布局综述
  • Flutter 实现6个验收码输入框
  • python多进程
  • 应用签名分发平台开发源码时数据储存是如何实现
  • vue3自定义指令来实现 v-focus 功能
  • LittleFS 小型文件系统(一)
  • HOW - 从0到1搭建自己的博客站点(三)
  • KV Cache:大模型推理加速的核心机制
  • shell脚本中的常用命令
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月27日第90弹
  • 【系分】论文模版
  • w笔记--Swagger
  • 开源即战力!从科研到商用:Hello Robot 移动操作机器人Stretch 3多模态传感融合(RGB-D/激光/力矩)控制方案
  • 仿真环境中机器人抓取与操作 - 上手指南
  • java常用工具类:实现文件下载
  • AD-PCB--电子设计学习思路 DAY 1
  • 从零到一:影刀RPA学习者的破局之路
  • 分布式系统中的消息幂等性与流量控制(一)
  • Vue组件技术全解析大纲
  • mediapipe标注视频姿态关键点(基础版加进阶版)
  • Navicat 17 SQL 预览时表名异常右键表名,点击设计表->SQL预览->另存为的SQL预览时,表名都是 Untitled。
  • 【Elasticsearch】scripted_upsert
  • 小白成长之路-计算机网络(四)
  • BUG调试案例十二:LM5117输出电压纹波偏大问题案例
  • 初识 ProtoBuf
  • 破解Docker镜像下载难题
  • 永磁同步电机控制算法--变结构PI调节器
  • 面向测试编程——SmartRefreshLayout的测试case
  • Ubuntu系统开放 45876/tcp 端口