OS复习笔记ch11-2

news2025/2/7 20:19:06

上一节我们学习的内容是I/O系统的特点和设备分类和差异,这一节我们将主要关注I/O控制方式、OS设计问题、I/O逻辑结构等。

I/O功能的演变

在专栏的ch1-2中,我们详细讲解了CPU与外设的三种交互方式,这里简单地带过。
(1)轮询的方式,一般I/O操作CPU是空闲的,且都要经过CPU数据中转到内存
(2)中断的方式,一般是CPU在等待I/O操作完成的同时可以执行其他任务
(3)磁盘一般都是DMA(挪用总线周期,无需CPU高速传输),键盘一般是中断驱动的

image.png
一开始I/O功能直接由处理器直接控制,处理器来调度和操作外设
后来添加了控制器和I/O模块,使用类似于“轮询”的方式与外设进行交互,这样I/O设备就由自身的控制器控制,处理器不需要直接处理。

image.png
然后,控制器开始支持中断的方式,处理器就不需要每次“轮询”等待I/O操作,但是处理器仍然要执行中断处理程序,参与数据移动。
接着,出现了更高级的DMA方式,数据块通过总线直接进入内存,处理器不需要参与数据移动,大大加快了数据传输速率。

image.png
为了使CPU从I/O事务中解脱出来,提高CPU与设备,设备与设备之间的并行工作能力,OS又引入了通道。通道是独立于CPU的专门负责数据输入/输出传输工作的处理机,可以执行通道程序。

通道相当于一个功能简单的处理机,包含通道指令(空操作,读操作,写操作,控制,转移操作),并可执行用这些指令编写的通道程序。因此可以进行较为复杂的I/O控制,通道程序通常由操作系统所构造,放在内存里,执行一个通道程序可以完成多批I/O操作。

I/O设计目标和问题

image.png
设计目标:高效率+通用性

  1. 高效率:最重要的是提高I/O自身的性能,其次可以使用类似于文件系统多级划分来提高
  2. 通用性
    1. 为了简单性避免出错,应以统一方式处理所有I/O设备
    2. 将设备I/O的大部分细节隐藏在底层例程中(read, write, open, close, lock and unlock等),底层例程主要是各种初始化,比如设备的初始以及寄存器的初始化

I/O软件需要考虑的问题

  • 设备无关性
    • 逻辑设备(将设备视为文件),OS将逻辑设备进行转换完成对实际物理设备的驱动,比如键盘是0号文件、显示器是1号文件、错误信息是2号文件
    • 物理设备:键鼠、显示器等不同种类的外设
  • 出错处理:只能报告错误,不能解决问题
  • 同步:阻塞需要I/O的进程,通过异步传输(中断驱动)
  • 缓冲技术:硬盘的读写一次需要ms级别的传输

I/O的逻辑结构

分层管理:每一层功能向下依赖,向上提供服务

  • Logic I/O:针对用户接口提供抽象命令:open、write等
  • Device I/O:逻辑设备与物理设备间的过度协调机构
    • 用户请求的I/O序列
    • I/O缓冲区
  • Scheduling and Control:物理设备控制实体,往往是设备驱动程序

e.g., 抽象结构图示
image.png

事实上,分层并没有唯一的标准,不同的OS有自己的架构。

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

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

相关文章

C++之STL(一)

1、泛型程序设计 目的:提供相同的算法,相同的逻辑,来对不同类型的数据结构进行操作。 所以需要将类型当作参数,也就是参数类型化。 2、什么是STL STL是基于模板实现的。编译的时候进行实例化 3、STL组件 4、容器算法迭代器关系 …

第二次IAG

IAG in NanJing City 我与南京奥体的初次相遇,也可能是最后一次! 对我来说,IAG 演唱会圆满结束啦! 做了两场充满爱[em]e400624[/em]的美梦 3.30号合肥站,6.21号南京站[em]e400947[/em] 其实,没想到昨天回去看呀!(lack of money […

如何修改外接移动硬盘的区号

- 问题介绍 当电脑自身内存不够使用的时候,使用外接硬盘扩展内存是一个不错的选择。但是当使用的外接硬盘数量过多的时候,会出现分配硬盘的区号变动的情况,这种情况下会极大的影响使用的体验情况。可以通过以下步骤手动调整恢复 - 配置 版本…

SpringBoot 快速入门(保姆级详细教程)

目录 一、Springboot简介 二、SpringBoot 优点: 三、快速入门 1、新建工程 方式2:使用Spring Initializr创建项目 写在前面: SpringBoot 是 Spring家族中的一个全新框架,用来简化spring程序的创建和开发过程。SpringBoot化繁…

【C语言】操作符(上)

目录 1. 操作符的分类 2. 原码、反码、补码 3. 移位操作符 3.1 左移操作符 3.2 右移操作符 4. 位操作符:&、|、^、~ 5. 单目操作符 6. 逗号表达式 最近准备期末考试,好久不见啦,现在回归—— 正文开始—— 1. …

WPF文本绑定显示格式StringFormat设置-数值类型处理

绑定显示格式设置 在Textblock等文本控件中,我们经常要绑定一些数据类型,但是我们希望显示的时候能够按照我们想要的格式去显示,比如增加文本前缀,后面加单位,显示百分号等等,这种就需要对绑定格式进行处理…

【Java】已解决java.io.ObjectStreamException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.io.ObjectStreamException异常 在Java中,java.io.ObjectStreamException是一个在序列化或反序列化对象时可能抛出的异常基类。这个异常通常表示在对象流处理…

iMazing3软件下载-详细安装教程视频

​值得肯定的是智能备份:iMazing为使用者提供了免费的备份服务,并且支持两种连接方式:USB数据线连接备份和Wi-Fi无线连接,所备份的文件不会被覆盖。我们必须承认iMazing软件特色:使用你的 iOS 设备像外部驱动器。基本上…

MSPM0G3507——特殊的串口0

在烧录器中有串口0,默认也是串口0通过烧录线给电脑发数据。 如果要改变,需要变一下LP上的跳线帽。 需要更改如下位置的跳线帽

SpringBoot 搭建sftp服务 实现远程上传和下载文件

maven依赖&#xff1a; <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version> </dependency>application.yml sftp:protocol: sftphost: port: 22username: rootpassword: sp…

论文阅读03(基于人类偏好微调语言模型)

1.主题 基于人类偏好微调语言模型&#xff08;Fine-Tuning Language Models from Human Preferences&#xff09; 出处&#xff1a; Fine-Tuning Language Models from Human Preferences、 2.摘要 奖励学习使得强化学习&#xff08;RL&#xff09;可以应用于那些通过人类判断…

云安全下的等级保护2.0解决方案

云安全解决方案 知识星球&#x1f517;除了包含技术干货&#xff1a;Java代码审计、web安全、应急响应等&#xff0c;还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 ​

Git简单使用和理解

workspace: 本地的工作目录。 index/stage&#xff1a;暂存区域&#xff0c;临时保存本地改动。 local repository: 本地仓库&#xff0c;只想最后一次提交HEAD。 remote repository&#xff1a;远程仓库。 对于Git,首先应该明白第一git是一种分布式版本控制系统&#xff0c;最…

Echarts饼图-实现今日进度-动态图

效果预览 本次实现的是一个饼图&#xff0c;蓝色科技背景色&#xff0c;星球转动效果 进度显示。 构建一个动态饼图&#xff0c;采用ECharts&#xff0c;背景为蓝色科技风&#xff0c;有星球转动效果。通过echarts.init初始化&#xff0c;设置图表尺寸和背景色&#xff0c;配…

Add and Remove Rows

New Item Row 数据网格可以显示一个空行&#xff0c;使用户可以添加新记录。该行由显示在相应行指示符单元格内的星号&#xff08;*&#xff09;标识。若要取消添加新行&#xff0c;用户可以按Esc键。 相关API GridOptionsView.NewItemRowPosition — 允许您启用一个新的项…

快速又不失灵活性的JeecgBoot框架

简介JeecgBoot 开源界 "小普元" 超越传统商业平台。引领低代码开发模式 (OnlineCoding-> 代码生成器 -> 手工 MERGE)&#xff0c;低代码开发同时又支持灵活编码&#xff0c; 可以帮助解决 Java 项目 70% 的重复工作&#xff0c;让开发更多关注业务。既能快速提…

如何自制一个Spring Boot Starter并推送到远端公服

在现代Java开发中&#xff0c;Spring Boot无疑是一个强大且便捷的框架&#xff0c;它通过提供大量的Starter来简化依赖管理和项目配置。有时&#xff0c;我们可能需要为特定功能或团队定制Starter。本文将指导你如何创建自己的Spring Boot Starter并将其推送到远程公共服务器上…

WRONGPASS invalid username-password pair or user is disabled

连接redis客户端的时候报错&#xff1a;WRONGPASS invalid username-password pair or user is disabled 当前redis版本为7.2.4 一、问题分析 默认情况下&#xff0c;Redis 7.0 使用默认用户名 default 和空密码进行身份验证。如果未设置 requirepass&#xff0c;则默认用户名…

C++之提高篇

1.标准输入输出流 cin与cout的使用&#xff0c;就不多说了&#xff0c;说一个有关保留小数位数的操作&#xff0c;使用ostream对象的precision&#xff08;&#xff09;方法&#xff0c;表达的意思是数字总共有几位&#xff0c;注意&#xff0c;此时是包括整数部分的&#xff…

Charles抓取安卓应用https包演示

一、准备软件 夜神安卓模拟器 (yeshen.com) Charles (charlesproxy.com) 二、配置抓包 2.1 Charles安装PC根证书 记住这里的ip端口 三、安卓模拟器配置 3.1 配置安卓客户端网络代理 填写上文的ip端口&#xff0c;保存 3.2 安装根证书 3.2.1 导出根证书 linux主机执行 op…