Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
有趣的操作系统:文件IO和网络IO_创想鸟

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

有趣的操作系统:文件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概念。

有趣的操作系统:文件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的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/23223.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ThinkPHP6接口限流与防刷:保护接口的安全性
上一篇 2026年9月21日 09:24:06
苹果手机蓝牙连接不稳定 配对设备频繁断开解决方法
下一篇 2025年11月9日 09:21:43

相关推荐

  • Linux中如何查看进程状态_Linux进程状态查看的详细方法

    掌握Linux进程查看方法可高效管理程序,常用ps aux或ps -ef查看进程快照,top和htop实时监控,/proc/PID/目录下获取详细状态,pgrep和pidof快速定位PID。 在Linux系统中,查看进程状态是系统管理和故障排查中的基本操作。掌握多种方法可以更高效地监控和管理运行中的…

    2026年9月21日
    1200
  • 控制台命令(Console Command)开发

    控制台命令是程序员日常工作中不可或缺的工具,它提高了开发效率并帮助理解和控制程序运行。1) 通过简单的文本输入,完成复杂任务,如文件管理和系统监控。2) 控制台命令可用于快速调试、测试代码和自动化重复工作。3) 开发控制台命令时需注意安全性和兼容性问题。4) 控制台命令可实现有趣功能,如监控服务器资…

    2026年9月21日
    100
  • Linux如何恢复被删除的用户数据

    恢复Linux被删数据需立即停用磁盘并使用photorec或extundelete等工具,结合快照或备份可提高恢复成功率。 恢复Linux中被删除的用户数据,并非易事,但并非完全不可能。可能性取决于数据被删除的方式、删除后系统是否被继续使用,以及是否采取了合适的预防措施。核心在于理解数据删除的机制,…

    2026年9月21日
    200
  • Maingear电脑黑屏问题如何修复?专业级主机BIOS设置方法详尽

    Maingear电脑黑屏问题通常由BIOS设置、硬件接触不良或显示输出配置引起。首先应尝试进入BIOS,检查并调整显卡输出模式为PCIe/PEG,确保未误设为集成显卡;排查PCIe插槽模式兼容性,必要时切换为Gen3或Auto;若启动异常,可尝试切换UEFI/Legacy模式或恢复BIOS默认设置(…

    2026年9月21日
    000
  • mysql安装后如何优化配置文件

    答案:优化MySQL配置需先定位配置文件,再根据硬件和业务调整内存、InnoDB、连接等核心参数。具体包括设置innodb_buffer_pool_size为物理内存50%~70%,合理配置日志参数与连接数,启用慢查询日志,并使用工具辅助调优,避免过度配置,确保稳定高效。 MySQL 安装后,优化配…

    2026年9月21日
    000
  • Linux怎么列出系统中已安装的deb包

    使用dpkg -l或apt list –installed可列出已安装的.deb包,前者结合grep ^ii过滤已安装项,后者输出更清晰,两者均支持重定向保存到文件。 在Linux系统中,特别是基于Debian的发行版(如Ubuntu),可以使用命令行工具列出已安装的.deb包。最常用的…

    2026年9月21日
    000
  • VSCode的括号匹配功能如何自定义?

    可通过 settings.json 自定义括号高亮的边框和背景色;2. 用 editor.matchBrackets 控制是否启用高亮;3. 启用 bracketPairColorization 可为嵌套括号着色;4. 使用 Ctrl/Cmd + Shift + 快速跳转配对括号。 VSCode 的…

    2026年9月21日
    000
  • Linux如何使用dnf安装软件包

    dnf是Fedora、CentOS Stream和RHEL 8+的默认包管理工具,用于安装、更新、删除软件包。1. 安装单个包:sudo dnf install package_name,如htop;2. 安装多个包:sudo dnf install vim curl;3. 从本地.rpm文件安装:…

    2026年9月21日
    000
  • 在Java中如何实现线程优先级控制

    Java中线程优先级通过Thread类实现,取值范围1-10,分别对应MIN_PRIORITY、NORM_PRIORITY和MAX_PRIORITY;新线程继承父线程优先级,可通过setPriority()设置;尽管高优先级线程更可能被调度,但执行顺序不保证,因受操作系统影响;应避免依赖优先级控制关…

    2026年9月21日
    000
  • 如何在Java中使用接口实现多继承效果

    Java不支持多继承,但可通过实现多个接口模拟该效果。类可同时实现Flyable、Swimmable等接口,具备多种行为能力,并能利用默认方法复用逻辑,如Loggable提供日志功能。当多个接口含同名默认方法时,需在类中显式重写以解决冲突。接口用于定义“能做什么”,抽象类描述“是什么”,因类只能单继…

    2026年9月21日
    100
  • Windows11的Hyper-V虚拟机无法启动怎么解决_Windows11Hyper-V虚拟机无法启动修复方法

    首先检查BIOS中是否启用虚拟化技术,再确认Hyper-V服务运行状态,接着修复虚拟硬盘权限,尝试关闭内存完整性,检查虚拟机引导记录,最后可重装Hyper-V功能解决启动失败问题。 如果您尝试在Windows 11系统中启动Hyper-V虚拟机时遇到失败,可能是由于服务配置、权限问题或硬件兼容性导致…

    2026年9月21日
    000
  • Linux文件和目录管理常见命令

    Linux文件和目录管理依赖于ls、cd、mkdir、rm、cp、mv等核心命令,用于浏览、创建、删除、复制和移动文件与目录;通过find、du、grep等命令可查找文件、定位大文件并清理磁盘空间;使用rename、mmv或脚本可实现批量重命名;为安全起见,应谨慎使用rm命令,推荐结合-i选项或使用…

    2026年9月21日
    000
  • VSCode的代码格式化快捷键是什么?

    VSCode代码格式化快捷键为Shift+Alt+F(Windows/Linux)或Shift+Option+F(macOS),需安装对应语言的格式化工具;若无效,可能是未安装扩展、文件类型不支持或快捷键冲突;可右键选择“格式化文档”或通过命令面板执行,也可在键盘快捷方式中自定义。 VSCode的代…

    2026年9月21日
    000
  • Linux怎么踢出指定的登录用户

    要踢出指定登录用户,首先使用w或who命令识别其TTY或会话ID,再通过pkill -KILL -t 强制终止会话,或用loginctl terminate-session 优雅结束;若需防止重新登录,可临时锁定账户(passwd -l)或将用户shell改为/sbin/nologin。 在Linu…

    2026年9月21日
    000
  • 如何配置mysql初始用户和密码

    答案:MySQL安装后默认用户为root,密码为空或自动生成。需先确认服务运行,再登录并设置密码;若为空密码则直接登录后用ALTER USER修改,若为临时密码需从日志获取并强制修改;可创建远程用户并授权;推荐运行mysql_secure_installation进行安全加固,包括设密码、删匿名用户…

    2026年9月21日
    000
  • Linux如何查看默认网关

    使用ip route命令可查看默认网关,如ip route | grep default显示default via 192.168.1.1 dev eth0,其中192.168.1.1为网关地址。 在Linux系统中,查看默认网关是网络排查中的常见操作。可以通过命令行工具快速获取当前系统的默认路由信…

    2026年9月21日
    200
  • Linux如何设置虚拟网卡并分配IP

    Linux如何设置虚拟网卡并分配IPLinux如何设置虚拟网卡并分配IPLinux如何设置虚拟网卡并分配IPLinux如何设置虚拟网卡并分配IP

    可通过创建虚拟网卡为同一物理网卡绑定多个IP,临时使用ip addr add加label方式,永久配置则需修改对应系统网络配置文件,CentOS修改ifcfg-eth0:0,Ubuntu在interfaces文件中添加iface eth0:0,最后重启网络服务并验证接口状态。 在Linux系统中,可…

    2026年9月21日 用户投稿
    000
  • Win7系统信息查询

    Win7系统信息查询Win7系统信息查询Win7系统信息查询Win7系统信息查询

    通过按下 Win+R 组合键打开“运行”对话框,输入 cmd 并按回车,可以打开命令提示符窗口。在此界面中执行特定指令可获取 Windows 7 的系统详情,这是一种常见的查询方式。 在命令提示符中输入 systeminfo 命令,即可显示包括操作系统版本、系统架构(32位或64位)、安装日期以及网…

    2026年9月21日 用户投稿
    200
  • Linux如何创建新用户并设置初始密码

    Linux如何创建新用户并设置初始密码Linux如何创建新用户并设置初始密码Linux如何创建新用户并设置初始密码Linux如何创建新用户并设置初始密码

    创建新用户并设初始密码需用useradd加passwd命令,如sudo useradd -m -s /bin/bash devuser创建用户,sudo passwd devuser设置密码;通过sudo usermod -aG sudo devuser赋予sudo权限;密码策略应包含长度、复杂度、…

    2026年9月21日 用户投稿
    100
  • LINUX怎么判断一个文件是否存在_Linux判断文件是否存在方法

    1、使用test命令或[ ]、[[ ]]结构结合-f选项可判断文件是否存在,返回0表示存在;2、通过if语句实现条件判断;3、使用-d、-L等选项可检测目录、符号链接等类型。 如果您需要在脚本或命令行中确认某个文件是否存在于系统中,可以通过多种方式检查其状态。这类操作常用于条件判断和自动化流程控制。…

    2026年9月21日
    100

发表回复

登录后才能评论
关注微信