操作系统基础:IO管理概述【上】

在这里插入图片描述

在这里插入图片描述

🌈个人主页:godspeed_lucip
🔥 系列专栏:OS从基础到进阶

🏆🏆本文完整PDF源文件请翻阅至文章底部下载。🏆🏆


  • 🎮1 I/O设备的基本概念与分类
    • 🔫1.1 总览
    • 🔫1.2 什么是IO设备
    • 🔫1.3 IO设备的分类
      • 🎭1.3.1 按使用特性
      • 🎭1.3.2 按传输速率
      • 🎭1.3.3 按信息交换的单位
    • 🔫1.4 总结
  • 🎮2 I/O软件基本层次结构
    • 🎯2.1 基本架构
    • 🎯2.2 用户层软件
      • 🎨2.2.1 主要的功能
      • 🎨2.2.2 例子
    • 🎯2.3 设备独立性软件
      • 🎨2.3.1 解释
      • 🎨2.3.2 主要的功能
    • 🎯2.4 设备驱动程序
      • 🎨2.4.1 什么是驱动程序?
      • 🎨2.4.2 为什么要有驱动程序?
      • 🎨2.4.3 驱动程序的功能
      • 🎨2.4.4 注意
    • 🎯2.5 中断处理程序
      • 🎨2.5.1 解释
      • 🎨2.5.2 处理流程
    • 🎯2.6 总结
  • 🎮3 输入输出应用接口与设备驱动接口
    • 🕹️3.1 总览
    • 🕹️3.2 输入输出应用程序接口
      • 🖼️3.2.1 为什么要有应用程序接口?
      • 🖼️3.2.2 字符设备接口
      • 🖼️3.2.3 块设备接口
      • 🖼️3.2.4 网络设备接口
    • 🕹️3.3 阻塞与非阻塞I/O
      • 🖼️3.3.1 阻塞I/O
      • 🖼️3.3.2 非阻塞I/O
    • 🕹️3.4 设备驱动程序接口
      • 🖼️3.4.1 解释
  • 🎮4 总结


🎮1 I/O设备的基本概念与分类

🔫1.1 总览

image1

🔫1.2 什么是IO设备

image2
注意:
UNIX系统将外部设备抽象为一种特殊的文件,用户可以使用文件操作相同的方式对外部设备进行操作

🔫1.3 IO设备的分类

🎭1.3.1 按使用特性

image3

🎭1.3.2 按传输速率

image4

🎭1.3.3 按信息交换的单位

image5

🔫1.4 总结

image6

🎮2 I/O软件基本层次结构

🎯2.1 基本架构

image1

🎯2.2 用户层软件

🎨2.2.1 主要的功能

(1) 实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作。
(2)用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务

🎨2.2.2 例子

例如C语言中的"printf(“Hello\n”)",printf就是方便用户使用的库函数,而它会被翻译成write系统调用。
对于一些需要参数的系统调用,用户在使用库函数时显然也应该填入相应的参数。

🎯2.3 设备独立性软件

🎨2.3.1 解释

image2
这一层会向用户层提供系统调用的接口,所以有时候也被成为系统调用层。

🎨2.3.2 主要的功能

(1)向上层(用户层)提供统一的调用接口
比如read、write系统调用

(2)设备的保护
原理类似于文件保护。设备被看做是一种特殊的文件(UNIX系统中),不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样。

(3)差错处理
设备可能会出错,因此设备独立性软件需要对一些设备的错误进行处理

(4)设备的分配与回收
设备属于一种临界资源,对临界资源的分配和回收是相当重要的。

(5)数据缓冲区管理
通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异

(6)建立逻辑设备名到物理设备名的映射关系
①解释
image3
②逻辑设备表的基本结构
image4
③管理逻辑设备表的方法

image5根据设备类型选择调用相应的驱动程序

驱动程序的说明见下第四大点

🎯2.4 设备驱动程序

🎨2.4.1 什么是驱动程序?

简单来说,就是驱动计算机里软件的程序

🎨2.4.2 为什么要有驱动程序?

不同设备的内部结构也不同,其内部硬件特性也不同。而这些特性、结构只有厂家才知道,因此厂家须提供与设备相对应的驱动程序,CPU执行驱动程序的指令序列,来完成设置设备寄存器,检查设备状态等工作,程序才可以正常运行。

🎨2.4.3 驱动程序的功能

image6

🎨2.4.4 注意

驱动程序一般会以一个独立进程的方式存在。

🎯2.5 中断处理程序

🎨2.5.1 解释

image7

🎨2.5.2 处理流程

image8

🎯2.6 总结

image9

🎮3 输入输出应用接口与设备驱动接口

🕹️3.1 总览

image1

🕹️3.2 输入输出应用程序接口

🖼️3.2.1 为什么要有应用程序接口?

不同类型设备的I/O操作的细节是不同的,因此无法使用一个统一的接口对所有的设备进行调用。
我们之前已经学习过I/O软件的层次结构,设备独立软件层的任务之一就是给用户层提供标准的接口。

🖼️3.2.2 字符设备接口

比如:键盘
image2

🖼️3.2.3 块设备接口

image3

🖼️3.2.4 网络设备接口

(1)解释
image4
(2)主机之间通信过程描述
①主机1、主机2中的一个进程使用socket系统调用,创建一个网络套接字(可以理解为在内核区申请一片空间)。套接字会绑定主机的一个端口(bind系统调用)。

②发送方主机1中使用write系统调用向内存中写入一些数据。并将数据移入网卡进行发送,这个过程需要 “设备无关性软件” 调用 “网络控制器驱动程序”

③主机1在发送之前显然已经知道主机2的socket套接字绑定的端口(可以通过一些协议实现)。结合IP地址及端口,主机1的数据就可以精确发送到主机2中。

④主机2收到数据后通过网卡将其存在内存中,这个过程需要“中断处理程序”调用“网络控制器驱动程序”。进程使用read系统调用进行读取。

(3)示意图
image5

🕹️3.3 阻塞与非阻塞I/O

🖼️3.3.1 阻塞I/O

应用程序发出I/O系统调用,进程需转为阻塞态等待。比如说:C语言中的scanf函数,只要键盘没有输入字符,那么程序就不会往下继续执行,也就是被阻塞了。

🖼️3.3.2 非阻塞I/O

应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待。比如说:在块设备接口往磁盘写数据的过程中,只要块设备将数据复制到内核中去了,那么就可以交给内核执行,而自己就可以进行其他的工作。

🕹️3.4 设备驱动程序接口

🖼️3.4.1 解释

不同厂商生产的I/O设备的结构不同,其驱动程序也不同。可能相同的系统调用但是其参数又不一致。这样,设备独立层软件在享受驱动程序提供的服务时就会出现问题。
操作系统规定好设备驱动程序的接口标准,各厂商必须按要求开发设备驱动程序。

🎮4 总结

本文PDF文件下载链接:提取码:ikun

操作系统,如默默守护的守夜者,无声地管理硬件与软件的交流,为计算机创造和谐秩序。

它是无形的引导者,让复杂的任务变得井然有序,为用户提供无忧体验。

操作系统的巧妙设计,让计算机变得更加智能高效,让人与科技之间的交流更加顺畅。

在每一次启动中,它如信任的伙伴,带领我们进入数字世界的奇妙旅程。

渴望挑战操作系统的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多操作系统的奇迹吧。我们推出了引领趋势的💻OS专栏:《OS从基础到进阶》 ,旨在深度探索OS的实际应用和创新。🌐🔍

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

538. 把二叉搜索树转换为累加树

给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件&#…

屏幕字体种类介绍

[ Script and font support in Windows ] [Windows 中的脚本和字体支持] 在Windows 2000 以前,Windows 的每个主要版本都会添加对新脚本的文本显示支持。本文介绍了每个主要版本中的更改。 Since before Windows 2000, text-display support for new scr…

云原生之基石-Docker Compose

1. 前言 在上一篇文章中介绍了基本的Docker工具,我们对单个应用程序进行单机单进程部署,制作Dockerfile文件,执行docker build来生成docker镜像, 执行docker run来运行一个容器,自己指定需要的参数如-v,但是…

【教3妹学编程-算法题】输入单词需要的最少按键次数 I

3妹:2哥,新年好鸭~ 2哥 : 新年好,3妹这么早啊 3妹:是啊,新年第一天要起早,这样就可以起早一整年 2哥 :得,我还不了解你,每天晒到日上三竿 3妹:嘿嘿嘿嘿,一年是…

作业2.12

1、选择题 1.1、以下程序的输出结果是____A____。 main() { int k11,k22,k33,x15; if(!k1) x--; else if(k2) if(k3) x4; else x3; printf(“x%d\n”,x); } A x4 B x15 C x14 D x3 1.2、有以下程序,while循环执行____A____次。 int main&#x…

STM32自学☞定时器定时中断案例

timer_interrupt.c文件 /* 初始化函数编写步骤: 1.打开时钟 2.选择时基单元的时钟源(内部时钟源) 3.配置时基单元 4.NVIC配置 5.启动定时器 */ #include "stm32f10x.h" #include "stm32f10x_tim.h" #include …

【Linux】进程信号概念 | 核心转储 | 信号的产生

文章目录 一、信号入门1.1 生活中的信号1.2 进程角度的信号1.3 信号的概念1.4 信号的三种常见处理方式 二、信号的产生2.1 通过终端按键产生信号问题1:OS怎么知道键盘输入了ControlC ?问题2:按CtrlC终止进程和按Ctrl\终止进程,有什…

Visual Studio 2010+C#实现信源编码

1. 要求 本文设计了一套界面系统,该系统能够实现以下功能: 克劳夫特不等式的计算,并且能够根据计算结果给出相应的信息。可通过用户输入的初始条件然后给出哈夫曼编码以及LZ编码,结果均通过对话框来显示哈夫曼编码结果包含相应的…

算法沉淀——分治算法(leetcode真题剖析)

算法沉淀——分治算法 快排思想01.颜色分类02.排序数组03.数组中的第K个最大元素04.库存管理 III 归并思想01.排序数组02.交易逆序对的总数03.计算右侧小于当前元素的个数04.翻转对 分治算法是一种解决问题的算法范式,其核心思想是将一个大问题分解成若干个小问题&a…

代码控制邮件服务器发送电子邮件

1、引言 在用户注册的时候我们如果需要让用户接收动态验证码通常有两种方式。一种是给用户发送短信验证码,另一种是发送邮箱验证码。而发送短信验证码的话就必须购买短信流量,这无疑增加了投入的成本,那么此时我们可以使用发送邮箱验证码的形…

算法刷题:盛水最多的容器

盛水最多的容器 .习题链接题目题目解析算法原理我的答案 . 习题链接 盛水最多的容器 题目 题目解析 VH*W h为左右两边低的一边,w为左右两边之间的距离 算法原理 定义两个指针 left0,rightn-1; left从左往右对数组进行遍历,right从右往左进行遍历 遍历的过程中,每一次都需要…

微信小程序scroll-view组件[使用竖向横向滚动,flex布局,点击滚动到该元素及其滚动动画]

1、使用竖向横向滚动 scroll-y 属性:使用竖向滚动,必须给 scroll-view 一个固定高度 例如:height:60rpx; scroll-x 属性:使用横向滚动,必须加以下样式 1、给 scroll-view 加 width: 100%; white-space: n…

使用matplotlib库来绘制直方图

# coding: utf-8 from matplotlib import font_manager from matplotlib import pyplot as plt# 设置字体,这里使用微软雅黑字体 my_font font_manager.FontProperties(fnameC:\Windows\Fonts\msyh.ttc, size10)# 数据列表 a[131,98,125,131,124,139,131,117,128,1…

知识图谱 多模态学习 2024 最新综述

知识图谱遇见多模态学习:综述 论文题目:Knowledge Graphs Meet Multi-Modal Learning: A Comprehensive Survey 论文链接:http://arxiv.org/abs/2402.05391 项目地址:https://github.com/zjukg/KG-MM-Survey 备注:55…

第二篇【传奇开心果微博系列】Python微项目技术点案例示例:成语接龙游戏

传奇开心果微博系列 系列微博目录Python微项目技术点案例示例系列 微博目录一、微项目目标二、雏形示例代码三、扩展整体思路四、玩家输入示例代码五、成语判断示例代码六、回答判断示例代码七、电脑判断示例代码八、游戏结束示例代码九、界面优化示例代码十、扩展成语库示例代…

证明之圆的分割

圆的分割 “数学证明问题:圆上点连线分割区域总数的倍增推理” 既然我已经谈到了数学证明的本质,现在让我们回到本系列开始时的问题。圆上有n个点,我们用直线将这些点两两连结起来,希望能够表明这些直线所分割出的区域总数是 2 …

【程序设计竞赛】C++与Java的细节优化

必须强调下,以下的任意一种优化,都应该是在本身采用的算法没有任何问题情况下的“锦上添花”,而不是“雪中送炭”。 如果下面的说法存在误导,请专业大佬评论指正 读写优化 C读写优化——解除流绑定 在ACM里,经常出现…

【Java程序设计】【C00251】基于Springboot的医院信息管理系统(有论文)

基于Springboot的医院信息管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的医院信管系统 本系统分为管理员功能模块、系统功能模块以及医生功能模块。 系统功能模块:医院信管系统,…

Swift Combine 用 Future 来封装异步请求 从入门到精通十一

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…

【C语言】解析刘谦春晚魔术《守岁共此时》

今年的春晚上刘谦表演了魔术《守岁共此时》,台上台下积极互动(尤其是小尼),十分的有趣。刘谦老师的魔术不仅仅是他的高超手法,还有这背后的严谨逻辑,下面我们来用C语言来解析魔术吧。 源代码 #define _CRT…