操作系统(五)输入/输出(I/O)管理

操作系统(五)输入/输出(I/O)管理

  • 一、I/O控制器
  • 二、I/O控制方式
    • 程序直接控制方式
    • 中断驱动方式
    • DMA方式
    • 通道控制方式
    • I/O软件层次结构
  • 假脱机技术
  • 设备的分配与回收
  • 缓冲区
    • 单缓冲
    • 双缓冲
    • 循环缓冲区
    • 缓冲池

一、I/O控制器

I/O设备由机械部件电子部件组成
机械部件:I/O设备的机械部件主要用来执行具体I/O操作。
电子部件:I/O设备的电子部件通常是一块插入主板扩充槽的印刷电路板。

CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。这个电子部件就是I/O控制器,又称设备控制器。CPU可控制I/O控制器,又由I/O控制器来控制设备的机械部件。

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

①一个I/O控制器可能会对应多个设备;
②数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。
在这里插入图片描述

二、I/O控制方式

程序直接控制方式

在这里插入图片描述

在这里插入图片描述

中断驱动方式

引入中断机制。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。处理中断的过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行。
在这里插入图片描述

DMA方式

在这里插入图片描述

在这里插入图片描述

通道控制方式

在这里插入图片描述

在这里插入图片描述

I/O软件层次结构

在这里插入图片描述
用户层软件:用户层软件实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作。用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务。
设备独立性软件:又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。

  1. 向上层提供统一的调用接口(如 read/write 系统调用)
  2. 设备的保护原理类似与文件保护。设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样。
  3. 差错处理,设备独立性软件需要对一些设备的错误进行处理
  4. 设备的分配与回收
  5. 数据缓冲区管理,可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异
  6. 建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序。

在这里插入图片描述
操作系统系统可以采用两种方式管理逻辑设备表(LUT):
第一种方式,整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适用于单用户操作系统。
第二种方式,为每个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中。

设备驱动程序:主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置
设备寄存器;检查设备状态等。因为不同的I/O设备有不同的硬件特性,具体细节只有设备的厂家才知道。因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序。

中断处理程序:当I/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。中断处理程序的处理流程如下:
在这里插入图片描述

假脱机技术

在这里插入图片描述

设备的分配与回收

设备的固有属性可分为三种:独占设备、共享设备、虚拟设备。
独占设备:一个时段只能分配给一个进程(如打印机)
共享设备:可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用。
虚拟设备:采用 SPOOLing 技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用 SPOOLing 技术实现的共享打印机)

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

在这里插入图片描述
设备控制表(DCT):系统为每个设备配置一张DCT,用于记录设备情况
在这里插入图片描述

控制器控制表(COCT):每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器进行操作和管理。
在这里插入图片描述

通道控制表(CHCT):每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和管理。
在这里插入图片描述

系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目。
在这里插入图片描述

设备分配的步骤

  1. 根据进程请求的物理设备名查找SDT(注:物理设备名是进程请求分配设备时提供的参数)
  2. 查找SDT,找到用户进程指定类型的、并且空闲的设备,将其分配给该进程。操作系统在逻辑设备表(LUT)中新增一个表项。
  3. 根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。
  4. 根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程。

缓冲区

缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区。

单缓冲

在这里插入图片描述

双缓冲

在这里插入图片描述

循环缓冲区

在这里插入图片描述

缓冲池

在这里插入图片描述

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

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

相关文章

Linux下的I/O多路复用select,poll,epoll浅析

转载:http://blog.csdn.net/u011573853/article/details/52105365 一,什么是I/O多路复用 所谓的I/O多路复用在英文中其实叫 I/O multiplexing. 就是单个线程,通过记录跟踪每个I/O流(sock)的状态,来同时管理多个I/O流 。) I/O mu…

计算机组成原理(一)计算机系统概述

计算机组成原理(一)计算机系统概述一、计算机系统层次结构冯诺伊曼机计算机工作过程多级层次结构一、计算机系统层次结构 冯诺伊曼机 特点: 计算机由五大部件组成指令和数据以同等地位存于存储 器,可按地址寻访指令和数据用二进…

计算机组成原理(二)数据的表示和运算

计算机组成原理(二)数据的表示和运算一、BCD码二、奇偶校验码三、海明码四、循环冗余校验码(CRC)五、乘法运算原码乘法补码乘法六、除法运算原码除法补码除法七、浮点数的表示与运算浮点数的运算一、BCD码 组合式BCD码&#xff1…

Linux IO复用区别与epoll详解

转载:http://blog.csdn.net/hacker00011000/article/details/52160590 一、select、poll、epoll之间的区别总结[整理]   select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一…

简单图和多重图

一、简单图    ① 不存在重复边;    ② 不存在顶点到自身的边; 二、多重图   ① 某两结点之间边数多于一条;   ② 允许顶点通过一条边和自己关联;

C++笔记:select多路复用机制

转载:http://blog.csdn.net/qdx411324962/article/details/42499535 函数作用: 系统提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件…

交叉编译执行应用程序出现:No such file or directory

问题分析 当我在arm板子上执行交叉编译过的程序的时候发现了这个错误。通过百度查询基本都是缺少32位库什么的,但是都不能解决问题。 然后我用ll指令,也排除了权限的原因。 我们用ldd指令发现,它不是动态执行的,虽然我们可以使用-static指…

select、poll、epoll 比较

转载:http://blog.csdn.net/dodo_328/article/details/39081183 1.Selet:本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。 缺点:1 单个进程可监视的fd数量被限制,因为受描述符集合fd_set限制,fd数量…

C库函数 File

C库函数常用的有:fopen, fclose, fread, fwrite, fgets, fputs, fscanf, fprintf, fseek, fgetc, fputc, ftell, feof, flush等, 当使用fopen打开一个文件时通常返回一个文件指针 FILE *fp。FILE类型是一个结构体,包含文件描述符(…

Unix 网络编程(四)- 典型TCP客服服务器程序开发实例及基本套接字API介绍

转载:http://blog.csdn.net/michael_kong_nju/article/details/43457393 写在开头: 在上一节中我们学习了一些基础的用来支持网络编程的API,包括“套接字的地址结构”、“字节排序函数”等。这些API几乎是所有的网络编程中都会使用的一些&…

C库函数与系统函数的关系

转载于:https://www.cnblogs.com/lr1402585172/p/10464933.html

Unix网络编程(六)高级I/O技术之复用技术 select

转载:http://blog.csdn.net/michael_kong_nju/article/details/44887411 I/O复用技术 本文将讨论网络编程中的高级I/O复用技术,将从下面几个方面进行展开: a. 什么是复用技术呢? b. 什么情况下需要使用复用技术呢? c. …

Ubuntu在vmware虚拟机无法上网的解决方法

http://blog.csdn.net/xueyushenzhou/article/details/50460183 在vmware中安装Ubuntu之后,我们希望基本的功能如上网、传输文件等功能都是可用的,但是经常遇到不能上网的情况。使用笔记本时,我们经常希望能通过无线网卡上网,但是…

IO 多路复用之poll总结

http://www.cnblogs.com/Anker/p/3261006.html IO多路复用之poll总结 1、基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的…

C++项目中的extern C {}

http://www.cnblogs.com/skynet/archive/2010/07/10/1774964.html 引言 在用C的项目源码中,经常会不可避免的会看到下面的代码: 123456789#ifdef __cplusplusextern "C" {#endif/*...*/#ifdef __cplusplus}#endif它到底有什么用呢,…

C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)

http://blog.csdn.net/xiaofeige567/article/details/27484137 C语言实现单链表&#xff08;带头结点&#xff09;的基本操作&#xff08;创建&#xff0c;头插法&#xff0c;尾插法&#xff0c;删除结点&#xff0c;打印链表&#xff09; [plain] view plaincopy #include<…

单向循环链表C语言实现

http://blog.csdn.net/morixinguan/article/details/51771633 我们都知道&#xff0c;单向链表最后指向为NULL&#xff0c;也就是为空&#xff0c;那单向循环链表就是不指向为NULL了&#xff0c;指向头节点&#xff0c;所以下面这个程序运行结果就是&#xff0c;你将会看到遍历…

web服务器原理

什么是web服务器&#xff1f; 在Mosaic浏览器&#xff08;通常被认为是第一个图形化的web浏览器&#xff09;和超链接内容的初期&#xff0c;演变出了“web服务器”的新概念&#xff0c;它通过HTTP协议来提供静态页面内容和图片服务。在那个时候&#xff0c;大多数内容都是静态…

(C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作

http://blog.csdn.net/fisherwan/article/details/19760681 上午写了下单向循环链表的程序&#xff0c;今天下午我把双向链表的程序写完了。其实双向链表和单向链表也是有很多相似的地方的&#xff0c;听名字可以猜到&#xff0c;每个节点都包含两个指针&#xff0c;一个指针指…

(C++版)链表(一)——实现单向链表创建、插入、删除等相关操作

http://blog.csdn.net/fisherwan/article/details/25557545 前段时间用C语言实现了链表的相关操作&#xff0c;但是发现当时挺清楚的&#xff0c;过了一段时间又忘的差不多了&#xff0c;所以现在打算用C再实现一遍&#xff0c;由于初次用C实现&#xff0c;存在错误的地方还望大…