首页 > 运维 > linux运维 > 正文

有趣的操作系统:文件IO和网络IO

雪夜
发布: 2025-07-15 09:24:39
原创
668人浏览过

有趣的操作系统:文件io和网络io一、从i/o开始 在学习和使用计算机的过程中,i/o(输入/输出)是不可避免的一个概念,指的是操作、程序或设备与计算机之间发生的数据传输过程。

对于计算机来说,I/O操作和计算处理是其两大核心任务,其中大部分时间都用于执行I/O操作。I/O操作包括硬件和软件两部分,即I/O设备和I/O子系统。

I/O设备 随着时间推移,I/O设备的种类变得越来越多,根据其功能(或工作方式)可以分为以下几类:

存储设备 : 也称为块设备,这类设备以固定大小的块存储信息,每个块都有自己的地址,且可以独立读写。常见的存储设备包括磁盘和磁带。传输设备 : 也称为网络通信设备,用于与远程设备通信,常见的有网卡和Modem。人机交互设备 : 也称为字符设备,以字符为单位传输信息。常见的字符设备有屏幕、键盘和鼠标,这些设备直接面向用户,允许用户与计算机交互,因此被称为人机交互设备。特殊设备 : 除了上述三种设备之外的其他进行I/O传输的设备都归为特殊设备。可以看到,I/O设备种类繁多,差异显著。为了隐藏底层设备的差异和细节,同时标准化硬件和软件接口,操作系统内核设计使用了设备驱动程序模块。设备驱动程序为I/O子系统提供统一的设备访问接口,类似于系统调用为应用程序与操作系统之间提供统一的标准接口。但需要注意的是,I/O设备和设备驱动程序之间的通信是通过硬件接口(端口)完成的,这需要软硬件的共同协作。

I/O子系统 即使硬件再先进,如果没有相应的软件进行控制管理,其提供的服务也无法实现。正如上文所述,对计算机连接的设备(I/O设备)的控制是操作系统的主要任务之一,这些控制方法的集合构成了I/O子系统。

随着I/O设备的发展,设备种类越来越多,如果没有标准的、抽象的I/O操作接口,新类型的I/O设备很难接入操作系统。为了屏蔽底层硬件设备的差异和细节,操作系统通过设备驱动程序抽象并统一了设备的访问接口,具体实现由硬件设备的厂商完成。(可以看到,面向抽象编程的思想很早就被应用)

讨论完I/O的一些基本概念后,我们来看一下在日常开发中经常遇到的两个概念:文件I/O和网络I/O。

二、文件I/O 我们将要讨论的文件I/O概念更多是指软件层面,即操作系统层面。为了方便用户或开发人员使用由外设提供的数据信息,操作系统对存储设备的各种属性进行了抽象,从而定义了逻辑存储单元(文件),并将文件映射到物理设备上。需要注意的是,文件的概念不仅适用于存储设备,还适用于其他I/O设备,区别在于文件类型和操作系统对这两种不同类型文件的操作。这也验证了Linux中的一句话:“一切皆文件”。(这里再次体现了面向对象的设计理念)我们这里仅讨论与存储设备相关的文件I/O概念。

虎课网
虎课网

虎课网是超过1800万用户信赖的自学平台,拥有海量设计、绘画、摄影、办公软件、职业技能等优质的高清教程视频,用户可以根据行业和兴趣爱好,自主选择学习内容,每天免费学习一个...

虎课网 62
查看详情 虎课网

有趣的操作系统:文件IO和网络IO 从上图可以看出,如果一个应用程序想要发起文件I/O请求,需要通过操作系统中的文件系统来完成对应的I/O操作。如上所述,操作系统提供给用户可以操作的逻辑存储单元是文件(在UNIX环境中使用了文件描述符这一概念),这个可操作的文件对象包含了实际被操作对象的基本属性,操作系统将其抽象为文件属性,如名称、标识符、类型、位置、大小、保护、用户标识以及时间等信息。针对文件这一抽象数据类型,文件系统提供了创建、写入、读取、定位、删除和截断等系统调用。

如果我们将文件I/O的概念进一步限定在Linux环境中,可以称之为低级磁盘I/O,任何兼容POSIX标准的操作系统都能支持文件I/O。同时,文件I/O能够访问存储设备中不同类型的文件,但访问文件时不会通过缓冲区,而是直接通过系统调用访问相应资源。

三、网络I/O 我们日常讨论的网络通信本质上就是网络I/O,通过网络I/O,我们可以与远程设备进行通信(数据交换)。由于网络I/O和普通的磁盘I/O在性能和访问方式上存在显著差异,因此针对磁盘I/O的读写方法不适用于网络I/O。大多数操作系统针对网络I/O抽象出了一套特殊的接口——网络Socket接口,用于对网络I/O进行操作。当然,如上所述,在Linux中“一切皆文件”,为了统一概念,Socket在Linux中也是通过文件描述符来描述的,只不过这个文件描述符描述的不是本地文件,而是远程设备对应的文件。

由于网络通信存在不可预测的问题,因此产生了多种I/O模型,这些I/O模型本质上是客户端(或服务消费者)对网络I/O请求的处理方式。由于网络上这类资料非常丰富,这里就不详细描述了。

四、总结 从大的概念来看,文件I/O和网络I/O本质上都是对资源的访问,只不过一个是本地设备,一个是远程设备。但从访问方式和性能上来看,文件I/O和网络I/O在I/O接口和系统调用上存在显著差异。

以上就是有趣的操作系统:文件IO和网络IO的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号