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

【OS】IO

IO层析结构

用户层软件

假脱机技术(SPOOLing)

组成

输入缓冲区和输出缓冲区

是在内存中开辟的两个缓冲区,用来暂存输入设备传入的数据和从输出井准备传给输出设备的数据

输入进程和输出进程

  • 输入进程也称为预输入进程,模拟脱机输入时的外围控制机,将用户要求的数据从输入设备送到输入缓冲区,再存放到输入井
  • CPU需要输入设备时,直接从输入井读入内存
  • 输出进程也称缓输出进程,用于模拟脱机输出时的外围控制机,把数据从内存传送并存放在输出井,输出设备空闲时再从输出井经过缓冲区输出到输出设备

输入井和输出井

  • 是在磁盘上开辟出来的两个存储区域,输入井模拟脱机输入时的磁盘,用来收容IO设备输入的数据

  • 输出井模拟脱机输出时的磁盘,收容用户程序的输出数据

  • 输入输出井中的数据一般以文件的形式组织管理,把这些文件称为井文件

  • 一个文件仅存放某一个进程的输入或输出数据,所有进程的数据输入文件连接成一个输入队列,输出同理

井管理程序

控制作业和磁盘井之间的信息交换,作业执行过程中发出输入输出请求时,操作系统调用井管理程序,控制信息输入输出

特点

提高了IO速度

把独占设备改造成共享设备

实现了虚拟设备功能

应用程序接口

块设备接口

流设备接口

网络设备接口

设备独立性(无关性)软件

IO调度

内核缓冲区

提前读

比请求更多地读取磁盘上的数据,保存在缓冲区,以备程序后续使用

延迟写

不会直接把数据写入到磁盘文件中,而仅仅是写入到缓冲区中,如果当前进程或其他进程再次访问该数据时,内核可以从直接从缓冲区中提供更新的文件数据

目的

减少io次数

用户缓冲区

提前读

从内核缓冲区拷贝比请求更多的数据,保存在用户缓冲区,以备程序后续使用

延迟写

不会把数据写入到内核缓冲区,而仅仅是写入到用户缓冲区中,如果当前进程或其他进程再次访问该数据时,可以从直接从用户缓冲区中提供更新的文件数据

目的

减少cpu变态次数

设备的分配与回收

逻辑设备表LUT

  • 整个系统设置一张LUT,记录所有进程的分配情况,这样就不能有相同的逻辑设备名,多用户环境下难以做到
  • 每个用户设置一张LUT,用户登陆时就为用户建立一个进程,同时建立LUT,并放入PCB中

缓冲区管理

单缓冲区

磁盘把数据输入到缓冲区时间为T OS将缓冲区数据传到用户区时间为M CPU的处理时间为C

T=C时,处理一块数据的时间是M+T或M+C

T>C时,处理一块数据的时间是M+T

T<C时,处理一块数据的时间是M+C


每一块数据处理时间为Max(C,T)+M

双缓冲区

若C<T,可让块设备连续输入

若C>T,可使CPU不必等待设备输入


每一块数据处理时间为Max(C+M,T)

设备驱动程序

功能

  • 接受上层软件发来的命令和参数,转换为与设备相关的底层操作序列(如逻辑盘块号转换为磁盘的磁道号、扇区号)

  • 检查用户IO请求的合法性,了解IO设备的工作状态,传递与IO设备操作有关的参数,设置设备的工作方式

  • 发出IO命令,如果设备空闲则启动IO设备,设备忙碌则将请求者的请求挂在队列等待

  • 及时响应由设备控制器发来的中断请求,根据其中断类型,调用相应的中断处理程序进行处理

特点

  • 驱动程序是实现在与设备无关的软件和设备控制器之间通信和转换的程序,它将抽象的IO请求转换成具体的IO操作后传送给控制器,又把控制器中记录的设备状态和IO操作完成情况反映给请求IO的进程

  • 驱动程序与设备控制器和IO设备的硬件特性紧密相关,不同的设备要配置不同的驱动程序。但可以为相同的多个终端设置一个终端驱动程序

  • 驱动程序与IO设备所采用的IO控制方式紧密相关,常用的IO控制方式是中断驱动和DMA方式(就是根据外设的类型来选择io方式,并且写驱动程序的,这两件事都取决于外设类型,由驱动完成)

  • 驱动程序和硬件紧密相关,一部分必须用汇编语言书写

  • 驱动程序应允许可重入,正在运行的驱动程序常会再一次调用完成前被再次调用

中断处理程序

用户保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完毕后恢复被中断进程的现场后,返回到被中断进程

磁盘

磁盘格式化

低级格式化(物理格式化)

将磁盘分成扇区,以便磁盘控制器能够进行读/写操作

一些非常底层、非常硬件、非常不可能由用户拿到磁盘才会做的事情

磁盘分区

将磁盘分成C盘、D盘等

创建分区表

高级格式化(逻辑格式化)

将初始文件系统数据结构存储到磁盘上,包括空闲空间、已分配空间

调度算法

先来先服务FCFS

最短寻道时间优先SSTF

扫描SCAN

循环扫描C-SCAN

2011

2012

2013

2020

2011

2013

2015

2016

2020

2022

2009

2012

2017

2018

2022

2010

2019

2021

http://www.dtcms.com/a/354678.html

相关文章:

  • 不同业务怎么选服务器?CPU / 内存 / 带宽配置表
  • [肥用云计算] Serverless 多环境配置
  • 【SpringBoot 版本升级整合Redis异常解决】Unable to connect to 127.0.0.1:6379
  • 云计算学习100天-第32天
  • InnoDB存储引擎底层拆解:从页、事务到锁,如何撑起MySQL数据库高效运转(上)
  • 音频转PCM
  • PCM转音频
  • 底层音频编程的基本术语 PCM 和 Mixer
  • docker 1分钟 快速搭建 redis 哨兵集群
  • GD32VW553-IOT OLED移植
  • JavaWeb 30 天入门:第二十一天 ——AJAX 异步交互技术
  • React Hook+Ts+Antd+SpringBoot实现分片上传(前端)
  • openEuler常用操作指令
  • Java开发 - 缓存
  • 我店生活平台是不是 “圈钱平台”?揭开消费补贴新模式的面纱
  • 从零开始的云计算生活——第五十三天,发愤图强,kubernetes模块之Prometheus和发布
  • DistributedLock 实现.Net分布式锁
  • Kafka02-集群选主
  • BeyondMimic——通过引导式扩散实现动作捕捉:基于Diffuse-CLoC构建扩散框架,可模仿动作、导航避障(含UniTracker的详解)
  • InstructGPT:使用人类反馈训练语言模型以遵循指令
  • ARM相关的基础概念和寄存器
  • Shell编程知识整理
  • 从 WPF 到 Avalonia 的迁移系列实战篇2:路由事件的异同点与迁移技巧
  • Linux下OpenRadioss源码编译安装及使用
  • Shell 字符串操作与运算符
  • 利用ChatGPT打造行业LLM大模型应用
  • 外部请求至k8s集群内部对应节点全流程介绍
  • 使用docker搭建嵌入式Linux开发环境
  • HTML5七夕节网站源码
  • Java:TCP/UDP网络编程