操作系统复习5.1.0-I/O管理

news/2024/5/18 9:37:24/文章来源:https://blog.csdn.net/weixin_51109304/article/details/130965776

分类

按使用特性分

人机交互类:键盘、鼠标、打印机
存储设备:移动硬盘、光盘
网络通信设备:调制解调器

按速率分

低速设备:键鼠
中速设备:打印机
高速设备:磁盘

按信息交换单位分

块设备:磁盘等以块为单位传输
字符设备:键鼠,以字节为数据传输单位

I/O控制器

用于实现对I/O设备的控制

功能

  • 接受和识别CPU发出的命令:控制器中有相应的控制寄存器来存放命令和参数
  • 向CPU报告设备的状态:控制器中有相应的状态寄存器,用于记录I/O设备的当前状态
  • 数据交换:设置数据寄存器,暂存CPU和设备发来的数据
  • 地址识别:区分设备寄存器中的各个寄存器,分别给其设置地址用于区分读写寄存器

组成

在这里插入图片描述
I/O控制器可能对应多个设备
数据寄存器、控制寄存器、状态寄存器可能有多个,且有对应地址
若这些寄存器占用内存地址的一部分,称为内存映像I/O
若采用I/O专用地址,即寄存器独立编址

寄存器编址方式

在这里插入图片描述
内存映像I/O方便操作,而寄存器独立编制则需要设置专门指令并指明寄存器的地址和控制器的编号

I/O控制方式

程序直接控制方式在这里插入图片描述

  • CPU向控制器发出读指令,设置状态寄存器为1
  • 轮询检查控制器的状态,直至其为0,表明设备准备好
  • 输入设备准备好数据后将数据传入控制器并报告状态
  • 控制器将输入数据放到数据寄存器中,并将状态改为0
  • 此时控制器的状态为0,CPU会将数据寄存器放到CPU寄存器中,再拷贝到内存中

在这里插入图片描述
缺点在CPU和I/O只能串行,CPU处于轮询忙等

中断驱动方式

由于程序直接控制方式CPU利用率低,忙等,提出了中断驱动方式

引入中断机制,在CPU发出指令后,将等待I/O进程阻塞,先切换到别的进程执行
当I/O完成后,控制器向CPU发出一个中断信号,CPU检测到后会保存当前进程的运行环境信息,转去执行中断处理程序处理中断
处理中断时,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。
接着CPU恢复等待I/O的进程的运行环境,然后继续执行

CPU在每个指令周期末尾检查中断,中断处理过程中需要保存、恢复进程的运行环境,频繁发生中断也会降低系统性能
在这里插入图片描述
避免了CPU轮询,切换别的进程执行,CPU和I/O并行工作,但每次传输都需要CPU介入,频繁中断会消耗较多CPU时间

DMA方式

中断驱动解决了程序直接控制方式,但每次只能读写一个字会造成CPU频繁切换
DMA直接存储器存取,用于块设备
数据传送单位是块,不再是以字为单位
数据在设备和内存间传送,无需CPU介入
仅当传送开始和结束时才需要CPU干预
在这里插入图片描述
CPU指明此次要进行的操作,说明要读入数据的大小、数据存放在内存上的位置、数据在外部设备上的地址
控制器根据CPU提出的要求完成数据的读写工作,整块数据的传输完成后,才向CPU发出中断信号

在这里插入图片描述
控制器从设备读取数据也是一个一个字读取并存到DR,DR存满时才放入内存
在这里插入图片描述
缺点:CPU每发出一条I/O指令,只能读写一个或多个连续的数据块,如果要读写多个离散存储的数据块,或者要将数据分别写到不同的内存区域时,CPU要分别发出多条I/O指令,多次中断才能完成

通道控制方式

通道控制是用来解决连续存储问题
CPU告诉通道要执行的任务所在的内存地址,通道去取出任务,做完后发消息给CPU

  • CPU向通道发出I/O指令,指明通道程序在内存中的位置,并指明要操作的是哪个I/O设备,之后CPU切换进程
  • 通道执行内存中的通道程序,指明要读入写出的数据等
  • 通道执行完任务后,向CPU发出中断信号
    在这里插入图片描述

I/O层次

在这里插入图片描述

用户层软件

用户层实现了与用户交互的接口,使用提供的封装系统调用的库函数对设备进行操作
用户层软件将用户请求翻译成格式化I/O请求,并通过系统调用请求操作系统内核的服务

设备独立性软件

设备独立性软件,又称设备无关性软件,与设备硬件特性无关的功能都在此层实现,提供六大功能

  • 向上层提供统一的调用接口
  • 设备保护:校验设备访问权限
  • 差错处理:处理设备错误
  • 设备的分配与回收
  • 数据缓冲区管理:通过缓冲技术屏蔽设备间数据交换单位大小和传输速度差异
  • 建立逻辑设备名和物理设备的映射关系:根据设备类型选择调用相应的驱动程序。用户指定逻辑设备名,系统通过逻辑设备表LUT确定逻辑设备对应的物理设备,并找到对应的设备驱动程序

LUT 可以在整个系统中只设置一张,但只适合单用户操作系统
也可每个用户设置一张LUT,每个用户使用的逻辑设备名可重复,适用于多用户操作系统,系统在用户登录时为其建立管理进程,LUT存放在用户管理进程的PCB

不同设备的驱动程序不同,因为内部结构不一样,空闲字不同、数据寄存器数量不同等等…

设备驱动程序

负责对硬件设备的具体控制,将上层命令转化为特点设备的指令,设置设备寄存器、检查设备状态等

中断处理程序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

假脱机

为了避免人工影响I/O速度,引入了脱机技术:磁带等
假脱机SPOOLing使用软件模拟脱机

输入井和输出井

在这里插入图片描述
输入井和输出井就是缓冲区
在这里插入图片描述

I/O设备分配与回收

分配因素

设备固有属性

独占设备、共享设备、虚拟设备

设备分配算法

先来先服务、优先级高优先、短任务优先

设备分配中的安全性

安全分配:进程获得设备后阻塞直到I/O将进程唤醒,不会死锁,但进程和I/O串行
不安全分配:发出I/O请求,系统为其分配I/O设备,进程可继续执行,之后还可发出I/O请求,只有I/O请求不满足时才堵塞,实现了I/O和进程并行,但可能死锁

静态分配与动态分配

静态分配:进程运行前分配所有资源,运行结束后归还资源
动态分配:进程运行时动态申请设备资源

分配管理的数据结构

在这里插入图片描述

设备控制表DCT

系统为每个设备配置一张DCT
在这里插入图片描述

控制器控制表COCT

在这里插入图片描述

通道控制表CHCT

在这里插入图片描述

系统设备表SDT

在这里插入图片描述

分配步骤

根据进程请求的物理设备名查找系统设备表SDT
根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列,不忙碌时将设备分配给进程
根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列,不忙碌则将控制器分配给进程
根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列,不忙碌时则将通道分配给进程

缺点在用户编程时需要使用物理设备名,编程困难,且拓展麻烦
若请求的物理设备正在忙碌,即时有同类型设备,进程也必须阻塞

分配步骤的改进

设置逻辑设备法LUT建立逻辑设备名和物理设备名之间的映射关系
用户进程第一次使用设备时使用逻辑设备名向操作系统发出请求,操作系统根据逻辑设备名来查找系统设备表,找到空闲设备分配给进程,并在LUT添加表项

当用户进程再次通过相同逻辑设备名请求设备,则系统通过LUT得知对应物理设备
多用户操作系统中LUT是每个用户一张
单用户操作系统中LUT是只有一张

缓冲区

缓冲区可以解决CPU和I/O设备间速度差异,避免每输出一个字就要向CPU发送一次中断信号

单缓冲

在这里插入图片描述
当T>C时,即传输时间大于处理时间
在这里插入图片描述
当T<C时
在这里插入图片描述

双缓冲

在这里插入图片描述
在这里插入图片描述
对比
两台机器单缓冲则只能在同一时刻内只能单向传输
两台机器双缓冲则可实现双向数据传输

循环缓冲区

在这里插入图片描述

缓冲池

在这里插入图片描述
需要收容输入时,从空缓冲队列取出空缓冲区,冲满数据后将缓冲区挂到输入队列队尾
需要提取输入时,从输入队列取出缓冲区,取空后将空缓冲区挂到空缓冲队列队尾
其他以此类推

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

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

相关文章

排序算法——直接插入排序

直接插入排序 基本思想 直接插入排序是一种简单明了的插入排序法&#xff0c;其基本思想是&#xff1a;把待排序的数据按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有数据插入完为止。 在现实生活中&#xff0c;我们玩扑克对牌进行排序就运用了…

银行从业——法律法规——金融基础知识

第二章 金融基础知识 第二节 货币政策 【 知识点1】 货币政策目标 制定和实施货币政策&#xff0c; 首先必须明确货币政策最终要达到的目的&#xff0c; 即货币政策的最终目标。中央银行通过货币政策工具操作直接引起操作目标的变动&#xff0c;操作目标的变动又通过一定的途…

设计一个像ESPN一样的实时视频流系统

功能需求 •直播事件与流之间的最大延迟不超过1分钟•系统应能够适应大量用户&#xff08;异构交付&#xff09;•系统应能将视频转换为不同的分辨率和编解码器•系统应具备容错性 视频转换和接收 由于我们正在实时直播整个事件&#xff0c;因此我们不能等待整个视频结束后再开…

华为OD机试真题 Java 实现【火车进站】【牛客练习题】

一、题目描述 给定一个正整数N代表火车数量&#xff0c;0<N<10&#xff0c;接下来输入火车入站的序列&#xff0c;一共N辆火车&#xff0c;每辆火车以数字1-9编号&#xff0c;火车站只有一个方向进出&#xff0c;同时停靠在火车站的列车中&#xff0c;只有后进站的出站了…

Nginx网络服务——主配置文件-nginx.conf

Nginx网络服务——主配置文件-nginx.conf 一、全局配置的六个模块简介二、nginx配置文件的详解1.全局配置模块2.I/O 事件配置3.HTTP 配置4.Web 服务的监听配置5.其他设置 三、访问状态统计与控制1.访问状态统计2.基于授权的访问控制3.基于客户端的访问控制 一、全局配置的六个模…

python实现Canny算子边缘检测算法

边缘检测是一种将图片中关键信息表现出来的一种图片技术&#xff0c;它的结果并不是字面意思上的获取图片边缘&#xff0c;而是将图片有用的信息勾勒出来&#xff0c;类似素描的结果&#xff0c;但是已经去掉了很多信息。如下所示&#xff0c;一张原始的图片是这样的&#xff1…

李沐动手学习深度学习 2023年Win10 下安装 CUDA 和 Pytorch 跑深度学习(最新)

目录 一、安装Anaconda 1.下载Anaconda 测试是否安装成功 二、安装pytorch 验证pytorch是否安装成功 4.测试 3.配置pycharm 一、安装Anaconda 1.下载Anaconda 可以在官网下载&#xff0c;但是速度较慢&#xff0c;这里我选择了清华镜像源的下载 https://mirrors.tuna.t…

chatgpt赋能python:Python列表倒序排序

Python列表倒序排序 Python是一种高级编程语言&#xff0c;被广泛用于各种领域的应用程序开发中&#xff0c;包括数据科学和机器学习。Python语言自带许多强大的编程工具&#xff0c;其中列表是其中最基础的数据结构之一。它可以让程序员整理和管理大量的数据&#xff0c;在实…

RISC-V IDE MRS使用笔记(八):实现局域网下的远程调试功能

RISC-V IDE MRS使用笔记(八)&#xff1a;实现局域网下的远程调试功能 1.原理介绍 MRS调试时上位机与硬件的通信基于gdb客户端与服务端的连接。调试时&#xff0c;首先启动openocd以挂载gdbserver的服务到指定端口上。通信建立后&#xff0c;监听到界面操作后以gdb指令的形式发…

用于ECharts的全国省市区县乡镇街道级的行政区划边界数据(GeoJSON格式)

https://map.vanbyte.com 提供了免费的省市县3级行政边界数据(GeoJSON格式)、省市县乡4级联动数据。 至于行政区划边界数据的来源&#xff0c;网络上有各种教程。授人以鱼不如授人以渔&#xff0c;下面记录一下各类方法的具体步骤。 来源1&#xff1a;阿里云的数据可视化平台…

Makerbase SimpleFOC ESP32 例程3 I²C双编码器测试(AS5600)

Makerbase SimpleFOC ESP32 例程3 IC双编码器测试(AS5600) 第一部分 硬件介绍 1.1 硬件清单 序号品名数量1ESP32 FOC V1.0 主板12YT2804电机2312V电源适配器14USB 线156pin杜邦线2 注意&#xff1a;YT2804是改装的云台无刷电机,带有AS5600编码器&#xff0c;可实现360连续运…

Ai作画区域控制的几种方法

背景 距上次发文章&#xff0c;又过去好久。这期分享给大家带来的是Ai作画的图结构控制几种方法。现在大家用AI作画大部分情况是直接使用AI单图生成能力&#xff0c;其实并不太会取考虑构图&#xff0c;也不太会考虑到大图的图结构这件事。其实构图这件事是一件很综合复杂的事…

冒泡排序Java实现

冒泡排序的时间复杂度为O(n^2) package com.qianfeng.homework;import java.util.Arrays;public class BubbleSort {public static void bubbleSort(int[] nums){for (int i 0; i < nums.length-1; i) {for (int j 0; j < nums.length-i-1; j) {if(nums[j] > nums[…

Node.js+vue多用户个人博客网站i03nz

基于nodejs语言设计并实现了个人博客。该系统基于B/S即所谓浏览器/服务器模式&#xff0c;应用Vue框架&#xff0c;选择MySQL作为后台数据库。系统主要包括首页、个人中心、用户管理、文章分类管理、博客文章管理、留言板管理、系统管理等功能模块。要循序渐进&#xff0c;心急…

一文读懂MVCC:数据库中的并发读写利器!

大家好&#xff0c;我是你们的小米&#xff0c;一个积极活泼、喜好分享技术的小伙伴。今天&#xff0c;我想和大家聊一聊数据库领域的一个重要话题——MVCC多版本并发控制。MVCC是MySQL和其他一些数据库系统中常用的并发控制技术&#xff0c;通过它&#xff0c;我们可以在高并发…

Elasticsearch文件存储

分析Elasticsearch Index文件是如何存储的&#xff1f; 主要是想看一下FST文件是以什么粒度创建的&#xff1f; 首先通过kibana找一个索引的shard&#xff0c;此处咱们就以logstash-2023.05.30索引为例 查看下shard分布情况 GET /_cat/shards/logstash-2023.05.30?vindex …

tcp shrinking window 之进退

一个有趣的问题&#xff1a;Unbounded memory usage by TCP for receive buffers, and how we fixed it 引出一个 kernel patch&#xff1a;[PATCH] Add a sysctl to allow TCP window shrinking in order to honor memory limits 但这 patch 把一个问题变成了两个问题&#…

0基础学习VR全景平台篇第32章:场景功能-嵌入文字

大家好&#xff0c;欢迎观看蛙色VR官方系列——后台使用课程&#xff01; 本期为大家带来蛙色VR平台&#xff0c;场景管理模块-嵌入功能文字模块&#xff01; 功能位置示意 一、本功能将用在哪里&#xff1f; 嵌入功能可对VR全景作品嵌入【图片】【视频】【文字】【标尺】四…

值得收藏 | 脑机交互作用研究

神经损伤和疾病对许多人的生活产生了巨大的影响&#xff0c;导致了许多运动障碍和日常任务无法独立完成。皮质假体系统通过脑机接口&#xff08;BCI&#xff09;接收一个动作命令来执行所需的位置&#xff0c;从而使得经历神经损伤的人能够实现部分功能恢复。BCI技术可以在侵入…

基于深度学习的目标姿态检测方法_kaic

目录 摘要 第1章 引言 1.1 研究背景和意义 1.2 国内外研究现状 1.3 主要内容 第2章 单目相机的目标姿态检测技术 2.1单目相机的工作原理 2.2目标姿态检测 2.3已有的目标姿态检测方法及其局限性 2.4本章总结 第3章 构建数据集 3.1 数据集来源 3.2数据集标注 3.3数据集分析 3.4本…