408操作系统学习笔记——输入/输出(I/O)管理(上)

简介: 408操作系统学习笔记——输入/输出(I/O)管理

1.I/O管理基础

1.1.I/O设备的概念和分类

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

①write操作:向外部设备写出数据

②read操作:从外部设备读入数据178c0d9acec844798114e1bf96715526.png

1.2.I/O控制器

1.I/O控制器是CPU和设备的机械部件之间的中介

2.I/O控制器的功能:65de64073b8e40bfa8a653e5ae1e5c1d.png

3.I/O控制器的组成:

①CPU与控制器的接口(即CPU和I/O控制器连接的部分):实现CPU和控制器的通信

②控制器与设备的接口(即I/O控制器和设备的机械部分连接的部分):实现控制器和I/O设备的通信

③I/O逻辑(即进行中间处理的部分):将CPU发出的命令翻译为对象设备能明白的命令,通过控制器与设备的接口发送给具体设备3b94fd49d0394ee3a4b9a3c4e62a389e.png

其中:

(1)控制器与设备的接口可能有多个,即一个I/O控制器可能控制多个具体的I/O设备,为了区别CPU具体控制的是哪个设备,需要给各个设备进行编号,即给各个控制器与设备的接口编址,同时,CPU也需要指明将要操作的是哪个设备

(2)在有多个I/O设备的情况下,数据、状态、控制寄存器可能有多个,需要对这些寄存器进行编址,方便识别是对哪个寄存器进行操作。有两种编址方式:第一种,这些寄存器占用内存地址的一部分,称位内存映像I/O;第二种,采用I/O专用地址,即寄存器独立编址99fa45f06bea4a869386626824f992ed.png

4.CPU输出数据的过程:

①CPU通过控制线向I/O控制器发出I/O一个具体的I/O指令,同时通过地址线指明自己要操作的是哪个设备

②通过数据总线将自己要输出的数据放入到I/O控制器的数据寄存器中,并且CPU发出的I/O指令可能存在一些参数,这些参数将会放入I/O控制器的控制寄存器中(也是通过数据总线)

③I/O逻辑从数据寄存器中取出CPU想要输出的数据,I/O逻辑负责向具体的设备输出数据;I/O逻辑从控制寄存器中取出参数,I/O逻辑负责向具体的设备发出控制信息

④为了实现CPU对I/O设备的管理,CPU将会通过数据总线读出状态寄存器中各个设备的状态,而I/O逻辑将会对状态寄存器中写入各个设备的状态(设备需要向I/O逻辑反馈状态)3e0a4a8ed0114019bdf1cd50b38b2334.png

1.3.I/O控制方式

1.3.1.程序直接控制方式

1.一次读/写操作的过程:

①CPU向控制器发出读命令后,就开始不断轮询检查控制器的状态

②数据需要经过CPU的寄存器才能读到CPU的内存中dedc1c1482054fa19ba17f99494687b4.png

2. 特点:CPU需要过多的干预I/O操作,利用率低;以字为单位读/写;CPU和I/O设备串行工作 ce72510ebe684f80b1407904ac7a77f4.png

1.3.2.中断驱动方式

1.CPU可以将等待I/O设备的进程阻塞,从而执行其他进程

2.每次中断只能读/写入一个字的数据,写入大量数据就将导致大量中断,系统效率降低

4d9cc072149f42518b7d0044202e6338.png

197e2d4d5f784e7081dd1eaae4d14c79.png

1.3.3.DMA方式

1.DMA和内存数据的传输单位是块,但DMA和I/O设备数据的传输单位仍然是字

2.DMA可以直接对内存进行读/写,即数据的流向不再经过CPU

3.缺点:读/写多个离散的块时,需要发出多条I/O指令f749b607c0424a6893f342509d21fc83.png1aef0be492bc4fa28ad11dbf189b633f.png

b9a285f94d4a49c9a24041a656da4281.png

1.3.4.通道控制方式

1.通道程序就是一系列通道指令的集合,本质上与普通程序无异

2.通道在执行通道程序时才知道自己具体要做什么事,CPU只是向通道指明通道程序在内存中的存储位置和向通道发出I/O指令

3.数据的传输单位是一组数据块(可以离散存放的数据块)956616a1a8cc4340a8e27ba4e40289e4.png

25d6f51f7da24cb79078b9689a0b60df.png9e559e308ef14a57a40c83939b77edef.png

1.4.I/O软件层次结构

1.只有设备驱动程序和中断处理程序回和硬件进行直接接触

22d017a141964d65a2928def3917e9a8.png

2.用户层软件:

①向上:用户提供接口,使用户能够对I/O设备进行操作

②向下:将用户的请求翻译为格式化的I/O请求,并通过系统调用请求操作系统内核服务

51d3adbb10a049458ce7eb738b6eb24f.png

3.设备独立性软件:实现与设备的硬件特性无关的功能

①向上:提供同一的系统调用接口(read、write)

②实现设备保护:每个用户对不同设备(设备被看做是一种特殊的文件)的访问权限不一样

③设备的分配和回收:很多设备是一种临界资源,不能够同时被多个用户使用

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

⑤建立逻辑设备名(用户发出I/O操作相关的系统调用时所使用的设备名,即用户所看到的设备名)和物理设备名之间的映射关系:根据逻辑设备表来确定逻辑设备对应的物理设备

⑥根据设备选择调用相应的驱动程序:根据逻辑设备表找到该设备对应的驱动程序的入口地址(同一类型的不同设备所对应的驱动程序可能不同,操作系统通过驱动程序实现对I/O设备的控制)

其中,逻辑设备表有两种管理方式(类似单级目录和两级目录):

(1)整个系统只有一张逻辑设备表:只适用于单用户操作系统,因为不同用户可能使用某些相同的逻辑设备名

(2)一个设备对应一张逻辑设备表:适用于多用户操作系统,各个用户的逻辑设备名可以重复

cf8b58ccae0f4551ba6662ec4e601b12.png

4.设备驱动程序:设备独立性软件不能直接操控硬件,必须调用驱动程序实现对硬件的具体控制1ac154ec5c9c4cb5b29e7e846eddd6a5.png

5.中断处理程序:中断处理程序将从设备读入的一个字放入内存后交由设备驱动程序处理

b9cf880374e24ad28b338df93f766c31.png

2b0a0ec300f549808b9e7f9f87517c99.png

1.5.输入/输出应用程序接口和设备驱动程序接口

1.不同的I/O设备的硬件特性不同,需要设备独立软件提供不同的系统调用接口

①字符设备接口:数据的读(get)/写(put)以字符为单位(没有地址的概念)

②块设备接口:数据的读(read)/写(write)以块为单位;seek系统调用可以用来修改读/写指针的位置(读/写指针用来指明读/写的位置,即有地址的概念,需要提供地址参数;通过seek修改读/写指针的位置后,再用write/read进行读/写)

③网络设备接口(网络套接字接口):

(1)socket系统调用:创建一个网络套接字,需要指明所使用的网络协议(TCP、UDP)。socket可以理解为在内核中申请一片存储空间用于接受/发送数据;socket会给用户返回一个指向该socket(一片内核存储空间)的指针的fd(描述符)

(2)bind系统调用:将套接字绑定到某个本地端口(IP地址+端口号可以映射到特定应用程序)

(3)connect系统调用:将套接字连接到远程地址

(4)read/write系统调用:从套接字读/写数据08e4f01d51094e889ecce52d8b419d96.png

2.网络设备端口例:

①P1通过socket系统调用申请了一片内核存储空间,并通过bind系统调用绑定了本机的211端口

②P1通过socket系统调用申请了一片内核存储空间,并通过bind系统调用绑定了本机的6666端口

③P1使用connect系统调用:connect(fd,168.98.xxx.xxx,6666),指明将fd指向的套接字连接到168.98.xxx.xxx的6666端口,即将IP地址和端口号作为参数。这样形成了两个套接字之间的连接(应用层的连接,点对点),即两个主机可以通过套接字进行通信,传输层指定TCP/UDP,

④P1使用write系统调用向socket写入P3传输的数据,设备无关性软件接收到write系统调用后,把用户进程准备好的数据复制到socket所对应的内核区缓冲区中

⑤设备无关性软件调用网络控制器驱动程序处理数据:网络控制器将socket内核缓冲区的数据输出到P1网络控制器中

⑥P1网络控制器将数据发送到P3的网络控制器中,P3的网络控制器收到数据后,向主机2发出中断信号,中断处理程序调用网络控制器驱动程序,网络控制器驱动程序将数据输入到socket的内核缓冲区中

⑦P3使用read系统调用指明从socket中读出数据,设备无惯性软件接收到read系统调用后,把内核缓冲区的数据复制到用户区中a4f0205f59d747aba2fd3e9242fa9d79.png

3.阻塞I/O和非阻塞I/O:发出系统调用后,是否需要转为阻塞态

ac4615a8f07549318ea52914e5626fea.png

4.设备驱动程序接口:设备无关性软件需要根据实际操作设备的不同调用不一样的设备驱动程序,驱动程序软件需要向设备无关性软件提供一个同一标准的接口(不同的厂商根据不同的操作系统开发不同的驱动程序)

aa26b35655704ef5ae377de02f040523.png

相关文章
|
4月前
|
缓存 Linux UED
深入理解操作系统的虚拟内存管理
【5月更文挑战第30天】 在现代计算机系统中,虚拟内存是允许用户程序逻辑地址空间与物理内存解耦的关键概念。此技术不仅增强了多任务处理能力,还提供了内存保护和简化了内存管理。尽管虚拟内存的基本概念广为人知,但本文将探讨其背后的机制,以及如何通过分页和分段优化系统性能。我们将分析虚拟内存对操作系统稳定性的影响,并讨论当前操作系统中虚拟内存管理的最佳实践。
|
4月前
|
安全 算法 网络协议
探索Linux操作系统的内核管理
【5月更文挑战第31天】本文将深入探讨Linux操作系统的内核管理机制,包括其设计原则、主要组件以及它们如何协同工作以提供高效的系统性能。通过分析Linux内核的关键特性和功能,我们将揭示这一开源操作系统如何在各种计算环境中保持其稳定性和灵活性。
|
2月前
|
算法
深入理解操作系统的虚拟内存管理
【7月更文挑战第24天】在现代操作系统中,虚拟内存管理是一项至关重要的技术,它允许系统拥有比物理内存更大的地址空间,从而提升多任务处理能力。本文将详细探讨虚拟内存的工作原理、关键技术及其对操作系统性能的影响,帮助读者构建对虚拟内存管理的深入理解。
|
2月前
|
Cloud Native Devops 数据库
云原生架构:未来软件开发的引擎深入理解操作系统的虚拟内存管理
【7月更文挑战第30天】在这篇文章中,我们将深入探讨云原生架构的概念,以及它如何改变软件开发的世界。我们将从云原生的基本概念开始,然后深入到它的关键技术和实践,最后讨论它对软件开发的未来影响。无论你是软件开发者,还是IT专业人士,这篇文章都将为你提供深入理解和掌握云原生架构的重要信息。 【7月更文挑战第30天】在数字世界的构建中,虚拟内存是操作系统不可或缺的一环。本文将探索虚拟内存的核心概念、工作机制及其对现代计算环境的重要性,同时揭示其背后的技术细节和面临的挑战。
27 3
|
2月前
|
缓存 算法
操作系统的虚拟内存管理
【7月更文挑战第29天】本文深入探讨了操作系统中至关重要的虚拟内存管理机制,包括其设计原理、实现方式以及在现代计算机系统中的作用。通过分析分页系统、分段系统、页面置换算法和内存分配策略,揭示了虚拟内存如何优化资源利用,提高系统性能,并确保进程间的安全性与隔离性。此外,文章还讨论了虚拟内存管理面临的挑战及未来的发展方向。
|
2月前
|
缓存 算法 程序员
深入理解操作系统中的虚拟内存管理
【7月更文挑战第14天】本文将深入探讨操作系统中至关重要的组成部分——虚拟内存管理。通过分析其设计原理、实现机制以及性能优化策略,旨在为读者提供一个全面而深入的视角来理解虚拟内存在现代操作系统中的作用和重要性。文章不仅会涵盖虚拟内存的基本概念和功能,还会讨论其在多任务处理、内存保护及系统性能提升方面的贡献。
|
2月前
|
算法 Linux 调度
操作系统中的虚拟内存管理:原理与实现
本文深入探讨了操作系统中虚拟内存管理的核心概念,包括分页、分段、需求分页和页面置换算法。通过分析现代操作系统如Linux和Windows的虚拟内存实现机制,文章揭示了虚拟内存在提升内存利用率、进程隔离和保护内存中的关键作用。同时,讨论了虚拟内存管理面临的挑战,如内存泄漏、碎片化以及性能开销,并提出了相应的优化策略。
|
3月前
|
算法
深入理解操作系统中的虚拟内存管理
【6月更文挑战第19天】在现代操作系统中,虚拟内存管理是一个至关重要的组件。它不仅使得程序能够在有限的物理内存中运行更大的地址空间,还为系统提供了多任务处理能力。本文将深入探讨虚拟内存的概念、实现机制以及它在操作系统中的重要性,同时也会讨论虚拟内存管理中遇到的挑战和解决方案。
39 4
|
3月前
|
Python
Python中使用os库管理环境变量
在Python中,可以使用os库来管理操作系统的环境变量。通过os.environ对象,我们可以获取、修改和删除环境变量的值。
51 3
|
2月前
|
Windows 内存技术
nvm 管理和切换 node版本(windows操作系统)
nvm 管理和切换 node版本(windows操作系统)
56 0