操作系统设备管理

操作系统实现对外接设备的管理功能,主要是I/O设备,unix适用将外部设备抽象为特殊文件,用户用与外部文件相同的方法操作外部设备,具体又可以分为:
人机交互类外部设备,如鼠标键盘等,这类设备数据传输速度慢;
存储设备,传输速度快,
网络通信设备,速度介于二者之间,
也可以根据信息交换的单位分类,分为字符设备和块设备,字符设备传输慢,不可寻址,常采用中断驱动方式,块设备传输快,可寻址。

设备组成

设备由机械部件,电子部件组成,电子部包括I/O控制器和设备控制器,用于实现cpu对设备的控制,具体实现过程如下:

I/O控制器有相应的控制寄存器,用于接收和识别cpu发出的命令,寄存器中存放来自cpu的命令和参数
状态寄存器记录当前设备的状态,向cpu报告设备状态
数据寄存器用于暂存数据,实现cpu和设备的数据交换
cpu判断区分各寄存器,实现地址识别

I/O控制器

组成

cpu与控制器的接口,cpu由控制线发出命令,用地址线指明操作设备,数据线输入输出数据
I/O逻辑,接收识别cpu命令,对设备发出命令
控制器与设备的接口,实现控制器与设备的通信

一个I/O控制器可能对应多个设备,为了简化指令,与内存统一编址;寄存器可能有多个需要编址,可用内存映像I/O,使对设备的操作与内存一致,也可采用寄存器独立编址,采用I/O专用地址进行单独编址,该方法需要设置专门指令来实现对控制器的操作。

I/O控制方式

即采取什么样的方式来控制I/O设备的数据读写。

程序直接控制方式
1,cpu向控制器发指令,设备启动
2,cpu轮询检查状态寄存器状态,1为未就绪
3,设备准备好后,报告自身状态,将数据传送给控制器
4,控制器将输入的数据放到数据寄存器中,状态改为0就绪状态
5,cpu发现设备已就绪,将数据寄存器中的内容读入cpu寄存器,再放入内存
该方法cpu不断轮询检查,干预频繁,每次只能读写一个字,每个字的读写都需要cpu控制,好处是实现简单,软件即可实现,但cpu和I/O设备只能串行工作,cpu需要一致检查,利用率低。

中断驱动方式
cpu发出I/O指令后,将等待I/O的进程阻塞,切换进程执行,I/O完成后控制器向cpu发出中断信号,cpu检测后保存当前进程运行环境信息,转去执行中断处理程序,从I/O控制器读一个字的数据传送到cpu寄存器,再写入内存,cpu恢复等待进程的运行环境后继续执行。
cpu在每个周期末尾检查中断,中断保存恢复运行环境有性能开销,cpu只在I/O操作的开始完成阶段介入,等待过程可以切换过程执行,解放cpu效率,但每次只能读写一个字,大量传输时中断处理的开销大,读写还需要经过cpu寄存器中转,浪费空间。

直接存储器存储器存取DMA
主要用于块设备,数据传送的单位是块,数据直接在内存和设备交互,仅在传输开始和结束时需要cpu干预,只能读写连续的块,存入的内存也连续,cpu指挥DMA执行读写操作,具体构成如下:

数据寄存器DR,暂存数据
内存地址寄存器MAR,表示输入输出位置
数据计数器DC,剩余读写字节数
命令/状态寄存器CR,存放cpu发来的I/O指令或设备状态信息

该方法传输单位大,cpu介入频率低,传输不需要经过cpu,并发性能得到提升,但cpu一次指令只能读写连续的块。

通道控制方式
适用硬件实现,可识别执行一系列通道指令。
1,cpu向通道发出I/O指令,指向程序需要的I/O设备
2,通道执行内存中的通道程序,指明数据量和读写位置
3,通道执行完任务后,向cpu发出中断指令,cpu进行处理
有I/O任务时cpu只要给通发指令让其执行即可,通道自身与程序交互,通道程序自己有任务清单,相当于简易cpu,cpu干预极低,完成一组数据块才发出中断,并行工作资源利用率高,但实现复杂,需要专门通道硬件支持。

I/O软件层次结构

用户层,实现用户交互的接口,如库函数,适用系统调用,请求操作系统内核的服务
设备独立性软件,也称设备无关性软件,与设备硬件特性无关的功能在此实现,实现设备保护,差错处理,设备分配回收,数据缓冲区管理,
设备驱动程序,向上提供统一的调用接口,负责对硬件设备的具体控制,因为不同硬件特征不同,运行方式也不同,需要厂商提供特定驱动完成
中断处理程序,I/O任务完成时,I/O控制器发送一个中断信号,系统根据中断信号类型和硬件直接交互,找到相应中断处理程序并执行

建立逻辑设备名到物理设备名的映射关系,根据设备类型选择用户相应的驱动程序,通过逻辑设备表LUT实现,具体有整个系统一张LUT和每个用户设置一张LUT两种方法。

I/O应用程序接口

用户层应用无法适用统一的系统调用接口完成所有类型设备的I/O,系统提供接口供底层硬件厂家实现,举例有:
字符设备接口,getput读写一个字符
块设备,readwriteseek
网络模块接口,socket套接字,bind绑定端口,connect建立远程地址,readwrite套接字读取数据,控制网卡,我们网络编程大多也要使用套接字实现,原来该方法这么底层,对应的计算机网络应该是运输层

设备驱动程序接口

不同硬件的驱动接口不统一,操作系统难以调用设备的驱动程序,所以操作系统要求统一标准驱动。

假脱机SPOOLING

为缓和手工操作输入输出的速度矛盾,批处理引入脱机输入输出技术,即脱离主机控制进行输入输出,假脱机就是适用软件方式模拟脱机技术,该技术在I/O的用户层实现,组成如下:

磁盘上开辟出两个存储区域,输入井和输出井,用于收容输入输出的数据
输入输出进程分别模拟脱机输入输出的外围控制机,作为数据中转站,与井交互

比如打印机为独占设备,可用SPOOLING技术改造为共享设备。

设备的分配回收

设备分配时硬考虑设备的固有属性,独立、共享、虚拟
分配算法有先进先出,优先级算法和短任务有限等
基于安全性考虑有两种策略:
安全分配,分配设备后进程阻塞,I/O完成后才唤醒,破坏请求和保持条件,不会死锁,cpu和I/O串行工作,利用率低
不安全分配,进程发出I/O请求后系统为其分配设备,进程可以继续执行,只有某个I/O请求得不到满足时才将进程阻塞,计算与I/O任务可并行处理,有可能发生死锁

静态分配,进程运行前分配全部所需资源,运行结束后归还资源
动态分配,运行进程中动态申请设备资源

设备分配管理中的数据结构

通道->控制器->设备
设备控制表DCT,每个设备配置一张,用于记录设备情况
控制器控制表COCT,每个设备控制器一张表,操作系统根据其对控制器进行操作和管理
通道控制表CHCT,操作系统用于管理通道
系统设备表SDT,记录操作系统中全部设备的情况,每个设备对应一个表项

设备分配的步骤

1,根据进程请求的物理设备名查找SDT,物理设备名是由进程请求时提供的参数
2,根据SDT找到DCT,若设备忙碌则将进程的PCB挂到设备的等待队列中,否则分配
3,根据DCT找到COCT,若设备忙碌则将进程的PCB挂到设备的等待队列中,否则分配
4,根据COCT找到CHCT,若设备忙碌则将进程的PCB挂到设备的等待队列中,否则分配
三次分配完成则设备分配成功

上述过程要求用户编程时适用物理设备名,更换物理设备会导致程序无法运行,请求的物理设备忙碌时,就算操作系统中有同类型设备,进程也需要阻塞等待,建立逻辑设备名与物理设备名的映射,再由操作系统进行映射可以极大提高效率,具体过程如下:
1,根据逻辑设备名查找SDT,确定设备类型
2,在SDT中找指定类型的空闲设备进行分配,操作系统在逻辑设备表LUT中新增表项
3,依次查找COCT和CHCT
上述过程会建立逻辑设备名和物理设备名的映射关系,再次请求时可直接找到对应物理设备,也可知驱动程序的入口地址

缓冲区管理

可以由专门的硬件寄存器组成,也可以利用内存作为缓冲区,作用如下:
缓和cpu与I/O设备直接速度不匹配的矛盾
减少对cpu的中断频率,放宽对cpu中断响应时间的限制
解决数据粒度不匹配的问题,输入输出数据的大小不同
提高cpu与I/O设备的并行性

单缓冲区管理

操作系统在主存分配一个缓冲区,大小为一个块,缓冲区非空时只能取,空了才能写,为空时只能写,满了才能取。

双缓冲区管理

分配两个缓冲区,用设备换并行,相互通信的机器设置双缓冲区可同时通信

循环缓冲区

多个大小相等的缓冲区链接成一个循环队列,in指针指向下一个可冲入数据的空缓冲区,out指针指向下一个可取出数据的满缓冲区。

缓冲池

系统中共用的缓冲区组成,根据使用状况可分为空缓冲队列和输入输出队列,根据功能不同分为收容输入,提取输入。

磁盘

磁盘结构

表面由磁性物质组成的用于记录二进制数据,盘面划分为刺刀,磁道划分为扇区,各扇区存放数据量相同,内侧道扇面面积,数据密度大,读写数据时磁头移动到磁道,磁盘旋转,让目标扇区从磁头下划过,一个磁盘可以由多个盘片组成,多个磁头,一个盘片可能有两个盘面,所有磁头在一个磁臂,同时进退,所有盘面中位置相同磁道组成柱面,用(柱面号,盘面号,扇区号)定位地址。

分类可分为:
活动头磁盘,固定头磁盘
可换盘磁盘,固定盘磁盘

磁盘调度算法

一次读写的操作时长=寻道时间(启动磁头臂时间+移动磁头时间+旋转磁盘时长)+延迟时间+传输时间
其中延迟时间和传输时间操作系统无法优化,只有寻道时间可以影响。

先来先服务算法FCFS,公平,大量进程竞争使用磁盘,请求访问的磁道分散时性能较差

最短寻找时间有限SSTF,优先处理与当前磁头最近的磁道,保证每次时间最短,但整体未必最优,性能好,平均寻道时间短,可能产生饥饿

扫描算法SCAN,也称电梯算法,规定磁头移动到最外侧磁道才能向内,到最内磁道才能向外,防止饥饿
只有到最边上磁道才能改变方向,有时浪费,对各个磁道响应频率不平均

LOOK算法,磁头移动方向上没有别的请求,立即改变磁头方向

循环扫描,磁头朝特定方向移动处理访问请求,返回时直接移动至起始端不处理任何请求

C-LOOK算法,磁头移动方向无访问请求,返回到有访问请求的位置即可

减少延迟的方法

磁盘连续读取时需要时间处理,逻辑上相邻的扇面物理上应该间隔,故逻辑连续的盘面物理上应该交替编号,让连续的逻辑扇区所需延迟减小。

磁盘管理

初始化过程

1,低级(物理)格式化,将磁道划分为扇区,扇区分为头尾和数据区域,管理信息在头尾中存储
2,分区,分区由若干柱面组成
3,逻辑格式化,创建文件系统

引导块

初始化(自举)程序完成开机初始化的相关工作,该程序存在ROM只读存储器中,出厂写入不可修改,完整的自举程序在磁盘引导块上存放,硬盘的固定位置,有启动分区的盘称为启动磁盘。

坏块管理

无法正常使用的扇区且无法修复,应该标记出来避免错误使用,磁盘在FAT表上表明,对OS不透明,复杂的磁盘还会使用磁盘控制器维护坏块链表,出厂低级格式化时初始化,并管理备用扇区用于替换坏块。

固态硬盘SSD

基于闪存技术,使用电可擦除ROM,读快,写慢,支持随机访问,电路定位,安静,耐摔,能耗低。

组成如下:
闪存翻译层,将逻辑块映射到物理地址
闪存芯片,由数据块构成,数据块又可分为页,读写以页为单位,相当于机械硬盘的扇区,擦除以块为单位,擦除后的块每个页只能写一次,更新单个页时复制其他页,写入新更新的页,再重新映射。

一个块被擦除过多时会损坏,机械硬盘则不会因为写的次数多损坏,该问题有如下方法缓和:
磨损均衡技术,让擦除平均分布在每一个块
动态均衡技术,写入时优先选累计擦除次数少的新闪存块
静态均衡技术,监测块的读写状况,读多写少的数据迁移到老的块上,让较新的块承担更多写任务

那固态硬盘容易坏吗?我们来计算一下,一块1T的硬盘,每个块可擦除1K次,一天写入128G的数据,多久能写坏?
每个块都被擦一次需要1T/128=8天,而有了磨损均衡技术,需要8×1K=8千天,大概二十年才能损坏,而现在的固态硬盘可能支持到一万次的擦写,更不必担心硬盘数据损坏,大胆用就行了。

总结

本章介绍了操作系统管理外部设备的方法,I/O控制采用通道管理,相当于一个小cpu专门管理I/O设备,还介绍了缓冲区和磁盘相关内容,重要的是磁盘调度算法,但日常来说固态已经成为主流,传统磁盘调度以及不大需要了解了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年阿里云服务器搭建幻兽帕鲁游戏_保姆级教程

玩转幻兽帕鲁服务器,阿里云推出新手0基础一键部署幻兽帕鲁服务器教程,傻瓜式一键部署,3分钟即可成功创建一台Palworld专属服务器,成本仅需26元,阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

SpringBoot集成WebService

1&#xff09;添加依赖 <dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-spring-boot-starter-jaxws</artifactId><version>3.3.4</version><exclusions><exclusion><groupId>javax.validation<…

【Linux】线程预备知识{远程拷贝/重入函数与volatile关键字/认识SIGCHILD信号/普通信号/实时信号}

文章目录 0.远程拷贝1.重入函数与volatile关键字2.认识SIGCHILD信号3.普通信号/实时信号 0.远程拷贝 打包资源&#xff1a;tar czf code.tgz *远程传输&#xff1a;scp code.tgz usr服务器ip:/home/usr/路径解压&#xff1a;tar xzf code.tgz 1.重入函数与volatile关键字 先看…

默写单词cpp(初学者版本)

笔摔坏了直接使用版:yum:仔细学习版:yum:1.直接使用版:yum:&#xff08;文件使用规范&#xff09;(1)文件(2)使用规范 2.仔细学习版。将会讲各个函数的功能和细节。今天太晚了&#xff0c;明天再写。 笔摔坏了 在一个阳光明媚的早晨&#xff0c;我愉快的奋笔疾书&#xff0c;抄…

【Stable Diffusion】专栏介绍和文章索引(持续更新中)

目录 1 背景2 思考3 文章索引&#xff08;持续更新中&#xff09;3.1 入门3.2 初级3.3 中级3.3 高级 1 背景 最近开始学习AIGC&#xff0c;对Stable Diffusion比较感兴趣&#xff0c;所以新建了这个专栏&#xff0c;来记录自己在使用和学习Stable Diffusion的一些方法、资料以…

推荐4个c++进度条开源库

在C中&#xff0c;有许多开源库可以帮助你创建进度条。以下是一些常用的C进度条库&#xff1a; 1. **indicators**: - GitHub链接: [https://github.com/p-ranav/indicators](https://github.com/p-ranav/indicators) - 特点: 轻量级&#xff0c;易于使用&#xff0c;支…

OpenCV学习笔记(十)——利用腐蚀和膨胀进行梯度计算以及礼帽和黑帽

梯度计算 在OpenCV中&#xff0c;梯度计算是图像处理中的一个基本操作&#xff0c;用于分析图像中像素值的变化速率的方向&#xff0c;其中梯度的方向是函数变化最快的方向&#xff0c;因此在图像中&#xff0c;沿着梯度方向可以找到灰度值变化最大的区域&#xff0c;这通常是…

我的自建博客之旅04之Halo

我的自建博客之旅04之Halo Halo是我无意间发现的一款博客框架,如果你讨厌Hexo,Vuepress等静态框架本地编辑,构建部署等方式,如果你想要一款一次搭建,前台是博客,后台是文章维护,并且支持各种定制化折腾的博客框架,可能Halo会比较适合你。 因为我个人还是比较偏技术,…

android11 添加实时记录logcat日志保存到data目录

软件平台&#xff1a;Android11 硬件平台&#xff1a;高通QCS6125 需求&#xff1a;设备即将上线&#xff0c;需要后台实时采集logcat日志&#xff0c;保存到相应目录下&#xff0c;方便app端上传到服务器&#xff0c;从而分析问题。 改动集中在logcat相关部分&#xff1a; …

【数据结构取经之路】栈

目录 引言 栈的性质 顺序栈 栈的基本操作 初始化 销毁 插入 删除 判空 取栈顶元素 栈的大小 完整代码&#xff1a; 引言 栈(stack)&#xff0c;可以用数组实现&#xff0c;也可以用链表实现。用数组实现的栈叫顺序栈&#xff0c;用链表实现的栈叫链式栈&#…

【Python 48小时速成 4】注释

在 Python 中&#xff0c;注释是用来解释代码的说明文本&#xff0c;不会被解释器执行。Python 中的注释以 # 开头&#xff0c;可以是单行注释或多行注释。以下是注释的使用示例&#xff1a; # 这是一个单行注释""" 这是一个多行注释 多行注释可以跨越多行 在三…

wayland(xdg_wm_base) + egl + opengles 使用 Assimp 加载材质文件Mtl 中的纹理图片最简实例(十六)

文章目录 前言一、3d 立方体 model 属性相关文件1. cube.obj2. cube.Mtl3. 纹理图片 cordeBouee4.jpg二、代码实例1. 依赖库和头文件1.1 assimp1.2 stb_image.h2. egl_wayland_obj_cube.cpp3. Matrix.h 和 Matrix.cpp4. xdg-shell-client-protocol.h 和 xdg-shell-protocol.c5.…

SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…

02 Statement和PreparedStatement

文章目录 StatementPreparedStatement Statement (1)相同的SQL语句&#xff0c; 重复执行第n次&#xff0c;编译n次 — 效率低 (2)Statement sql中的参数赋值 直接通过字符串拼接&#xff0c;可能会有非法sql注入&#xff0c;导致数据泄露 import java.sql.*; import java.util…

【Leetcode-189.轮转数组】

题目&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3…

理论学习:KL散度

KL散度&#xff08;Kullback-Leibler Divergence&#xff09;&#xff0c;也称为相对熵&#xff0c;是衡量两个概率分布差异的一种方法。想象一下&#xff0c;你有两本关于同一个话题但写法不同的书。如果你想知道这两本书实际上讲的是不是同一个故事&#xff0c;你可以通过比较…

Hero Talk|无缝扩展:Kubernetes 上的 Amazon Aurora 分片和流量管理

亚马逊云科技 Data Hero 潘娟正在打开开源之门。作为“2020 中国开源先锋人物”以及“2021 OSCAR 尖峰开源人物”奖项获得者&#xff0c;她致力于赋能数据领域的开发者&#xff0c;助力他们把握先机。在亚马逊云科技 re:Invent 2023 大会上&#xff0c;潘娟就 Kubernetes 上的 …

杂题——1188: 做幻方

题目描述 Apple最近迷上了做幻方&#xff0c;Apple还是个中高手&#xff0c;只要你说个奇数N就能把N*N的幻方做出来。其实你可以比他做得更好的。Apple总是画得很乱&#xff0c;而你可以利用程序排得很整齐^_^ 幻方的要求&#xff1a;每一行&#xff0c;每一列&#xff0c;还有…

外贸网站建设需要注意什么

在外贸网站建设过程中&#xff0c;需要注意以下几点&#xff1a; 多语言支持&#xff1a;考虑目标市场的语言需求&#xff0c;提供多语言版本的网站&#xff0c;以便更好地与国际客户进行沟通和交流。 跨境支付和物流&#xff1a;为国际客户提供方便快捷的跨境支付方式&#x…

【Godot4.2】 基于SurfaceTool的3D网格生成与体素网格探索

概述 说明&#xff1a;本文基础内容写于2023年6月&#xff0c;由三五篇文章汇总而成&#xff0c;因为当时写的比较潦草&#xff0c;过去时间也比较久了&#xff0c;我自己都得重新阅读和理解一番&#xff0c;才能知道自己说了什么&#xff0c;才有可能重新优化整理。 因为我对…