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

SPOOLing 技术(假脱机技术)独占设备 → 虚拟共享设备

一、基础定义与核心定位SPOOLing全称Simultaneous Peripheral Operations On-Line中文假脱机技术一句话核心在联机状态下用软件模拟实现脱机I/O的效果将低速独占设备虚拟成高速共享设备让 CPU 与 I/O 设备真正并行工作。它是操作系统I/O 管理、设备管理中最重要的技术之一也是虚拟设备技术的典型代表。二、出现背景解决什么问题早期联机 I/OCPU 直接控制打印机、读卡机等慢速外设CPU 大量时间等待 I/O利用率极低。早期脱机 I/O用专门的外围计算机先把数据读到磁带/磁盘再交给主机摆脱 CPU 等待。缺点需要额外硬件、人工干预、灵活性差、成本高。SPOOLing 出现不增加硬件纯软件 磁盘空间模拟脱机 I/O既避免 CPU 等待又实现设备共享。三、SPOOLing 系统组成整个系统由外存区域 内存缓冲 后台进程 管理程序四大部分构成1. 磁盘上输入井 输出井输入井磁盘上开辟的专用存储区暂存来自输入设备键盘、读卡机、扫描仪的数据。输出井磁盘上另一块存储区暂存用户进程要输出的数据。作用用高速磁盘做大容量缓冲屏蔽低速外设的速度差异。2. 内存中输入缓冲区 输出缓冲区外设与井之间不是直接读写而是先经过内存小缓冲区中转。输入外设 → 内存输入缓冲区 → 输入井输出输出井 → 内存输出缓冲区 → 外设区别缓冲区 内存小空间临时平滑速度井 磁盘大空间实现排队与共享。3. 两个后台守护进程不占用前台 CPU 主流程以后台方式运行输入进程SPOOL 输入进程负责输入设备 → 输入缓冲区 → 输入井。输出进程SPOOL 输出进程负责输出井 → 输出缓冲区 → 输出设备。4. 井管理程序负责输入井/输出井的空间分配与回收管理 I/O 请求队列打印队列、输入队列控制进程调度、并发访问互斥四、工作流程输入 输出双流程1. 输入流程以读卡/键盘输入为例输入设备将数据送到内存输入缓冲区缓冲区满后输入进程把数据写入磁盘输入井CPU 需要数据时直接从输入井高速读取全程输入设备与 CPU 并行工作CPU 不等待外设2. 输出流程以打印机为例最经典进程要打印时CPU 不直接控制打印机数据快速写入磁盘输出井并加入打印队列打印任务立即“完成”返回进程继续执行打印机空闲时SPOOLing 输出进程从队列取数据经输出缓冲区送往打印机打印效果多个进程同时“打印”都只是写磁盘打印机实际串行工作但用户感觉打印机被共享。五、SPOOLing 三大核心功能1. 将独占设备改造为共享设备最核心打印机、磁带机、读卡机都是独占设备同一时间只能一个进程使用。SPOOLing 不改变物理特性而是逻辑上虚拟化让多进程同时访问。2. 实现CPU 与 I/O 完全并行外设 I/O 由后台 SPOOLing 进程处理CPU 只与高速磁盘交互不再空转等待低速设备3. 实现虚拟设备对外呈现虚拟打印机、虚拟输入机本质用磁盘空间队列模拟出“多台设备”的效果。六、与联机 I/O、脱机 I/O 对比高频辨析对比项联机 I/O脱机 I/OSPOOLing假脱机硬件依赖无额外硬件需要外围机、磁带机仅需磁盘无额外硬件CPU 参与度全程控制大量等待完全不参与 I/O仅参与磁盘读写不等待外设并行性差CPU 与 I/O 串行较好极高CPU / I/O 真正并行灵活性差差人工干预高OS 自动调度共享能力无独占设备无法共享无有可将独占设备虚拟为共享设备成本与复杂度低高中软件逻辑稍复杂一句话总结SPOOLing 脱机 I/O 的效果 联机 I/O 的便捷 纯软件实现七、SPOOLing 与普通缓冲技术的区别很多人混淆缓冲Buffer和SPOOLing这里明确区分缓冲技术位置内存作用平滑速度差异单次 I/O 缓冲不改变设备属性不实现共享SPOOLing位置磁盘井 内存缓冲作用排队、共享、虚拟设备包含缓冲但远不止缓冲核心是进程 队列 外存缓冲的整体系统八、优点与缺点优点大幅提高外设利用率独占设备不再空闲等待持续工作。提高 CPU 利用率与系统吞吐量CPU 摆脱 I/O 等待可并行计算。实现设备共享支持多用户/多进程典型多人共用一台打印机。纯软件实现无需额外硬件成本减少外设频繁启停延长寿命批量 I/O集中处理。提升响应速度用户写磁盘即返回不用等物理打印。缺点占用大量磁盘空间输入井/输出井需要连续或大块磁盘区域。增加操作系统复杂度需要管理队列、进程同步、空间分配、互斥访问。磁盘成为瓶颈点所有 I/O 都经过磁盘磁盘 I/O 压力大。可能产生磁盘碎片频繁读写井区域会产生碎片。存在饥饿风险若调度不合理某些打印/输入任务长期不执行。可靠性依赖磁盘磁盘故障会导致所有虚拟设备失效。九、典型应用场景共享打印机最经典、必考多台 PC/进程同时打印任务进入输出井队列依次打印。批处理操作系统作业管理大量作业先存入输入井CPU 批量调度结果暂存输出井。终端 I/O 缓冲键盘、鼠标输入先入井平滑交互流量。网络打印/云打印打印任务上传服务器队列再下发打印机本质就是 SPOOLing。慢速磁带机、光盘机 I/O 优化先缓冲到磁盘再与 CPU 交互。十、关键补充知识点调度算法打印/输入队列默认使用FIFO先来先服务也可支持优先级调度。与通道技术、DMA 的关系DMA硬件负责内存与设备间高速传输通道独立处理 I/O 的硬件单元SPOOLing软件调度层三者配合构成现代 I/O 体系。互斥与同步多个进程同时写输出井必须互斥需用信号量等机制保护。是否必须多道程序环境是。SPOOLing 依赖后台进程与用户进程并发执行。属于哪种虚拟技术属于虚拟设备技术与虚拟内存、虚拟处理器并列。十一、高频考点总结SPOOLing 全称同时联机外围操作又称假脱机技术。核心独占设备 → 虚拟共享设备。组成输入井、输出井、输入进程、输出进程、井管理程序。最经典应用打印机共享。本质用磁盘做缓冲 后台进程 队列模拟脱机 I/O。最大价值CPU 与 I/O 并行提升系统效率。与缓冲区别缓冲在内存SPOOLing 基于外存并实现共享。十二、SPOOLing 技术模拟代码C代码逻辑对应输出井用线程安全队列模拟磁盘存储区SPOOLing输出进程独立后台线程守护进程用户打印仅将任务写入输出井立即返回不等待打印机打印机后台线程串行执行任务模拟物理独占设备#includeiostream#includequeue#includethread#includemutex#includechrono// -------------------------- SPOOLing 核心模拟 --------------------------// 1. 打印任务结构体模拟要输出的数据structPrintTask{intuser_id;// 用户IDstd::string content;// 打印内容};// 2. 输出井 Output Spool磁盘上的队列用线程安全队列模拟std::queuePrintTaskoutput_spool;std::mutex mtx;// 互斥锁保护多线程访问输出井boolis_spool_runningtrue;// 后台进程运行标志// 3. SPOOLing 后台输出进程守护进程真正控制打印机voidspooling_output_process(){while(is_spool_running||!output_spool.empty()){std::lock_guardstd::mutexlock(mtx);if(!output_spool.empty()){// 从输出井取出任务模拟发送给打印机PrintTask taskoutput_spool.front();output_spool.pop();// 模拟打印机打印慢速I/O操作std::cout\n【打印机】正在打印 用户task.user_id 的任务task.contentstd::endl;std::this_thread::sleep_for(std::chrono::seconds(2));// 打印耗时std::cout【打印机】用户task.user_id 任务打印完成\nstd::endl;}else{// 输出井空等待新任务std::this_thread::sleep_for(std::chrono::milliseconds(500));}}}// 4. 用户提交打印任务仅写入输出井立即返回CPU不等待打印机voidsubmit_print_task(intuser_id,conststd::stringcontent){std::lock_guardstd::mutexlock(mtx);output_spool.push({user_id,content});std::cout【用户user_id】提交打印任务成功数据已写入输出井继续执行其他操作...;}// -------------------------- 主函数测试 --------------------------intmain(){std::cout SPOOLing 假脱机打印系统启动 \nstd::endl;// 启动后台SPOOLing输出进程独立线程与CPU并行std::threadspool_thread(spooling_output_process);// 模拟 3个用户 同时提交打印任务多用户共享打印机submit_print_task(1,报告操作系统课程设计.doc);std::cout\n;std::this_thread::sleep_for(std::chrono::milliseconds(300));submit_print_task(2,发票2026年4月6日.pdf);std::cout\n;std::this_thread::sleep_for(std::chrono::milliseconds(300));submit_print_task(3,图片测试截图.png);std::cout\n;// 等待所有任务执行完毕std::this_thread::sleep_for(std::chrono::seconds(7));is_spool_runningfalse;spool_thread.join();std::cout SPOOLing 系统关闭 std::endl;return0;}编译运行命令# Linux/macOSg spooling.cpp-ospooling-pthread-stdc11 ./spooling# Windows (VS/MinGW)# 直接用IDE运行即可运行结果核心体现 SPOOLing 假脱机打印系统启动 【用户1】提交打印任务成功数据已写入输出井继续执行其他操作... 【用户2】提交打印任务成功数据已写入输出井继续执行其他操作... 【用户3】提交打印任务成功数据已写入输出井继续执行其他操作... 【打印机】正在打印 用户1 的任务报告操作系统课程设计.doc 【打印机】用户1 任务打印完成 【打印机】正在打印 用户2 的任务发票2026年4月6日.pdf 【打印机】用户2 任务打印完成 【打印机】正在打印 用户3 的任务图片测试截图.png 【打印机】用户3 任务打印完成 SPOOLing 系统关闭 代码部分对应 SPOOLing 知识点output_spool队列输出井磁盘上的存储区spooling_output_process线程后台SPOOLing输出进程守护进程用户调用submit_print_taskCPU仅写入输出井不等待打印机立即返回多用户同时提交任务独占设备→共享设备虚拟化后台线程与主线程同时运行CPU与I/O并行工作任务FIFO顺序执行输出井队列调度无等待用户提交任务后立刻继续执行CPU不被低速打印机阻塞共享性3个用户同时使用一台打印机物理独占→逻辑共享后台处理SPOOLing进程独立运行接管所有I/O操作线程安全互斥锁模拟OS对输出井的互斥访问

相关文章:

SPOOLing 技术(假脱机技术)独占设备 → 虚拟共享设备

一、基础定义与核心定位 SPOOLing 全称:Simultaneous Peripheral Operations On-Line 中文:假脱机技术 一句话核心: 在联机状态下,用软件模拟实现脱机I/O的效果,将低速独占设备虚拟成高速共享设备,让 CPU 与…...

AI Agent在物联网(IoT)中的应用前景

AI Agent在物联网(IoT)中的应用前景:从传感器孤岛到自治协作的智能数字生态 副标题:基于LLM/多模态感知、边缘云协同与分布式自治架构的深度实践与未来展望摘要/引言 问题陈述 当前的物联网(IoT)系统正陷入…...

JDBC事务管理:确保数据一致性的关键技术

JDBC事务管理:确保数据一致性的关键技术 在Java编程的世界里,JDBC(Java Database Connectivity)作为连接Java应用程序与各种关系型数据库的桥梁,扮演着至关重要的角色。它提供了一套标准的API,使得开发者能…...

中国信任度再居全球前列,但“信任孤岛“趋势浮现 | 美通社头条

、美通社消息:近日,国际领先的传播咨询机构爱德曼公关联合清华大学国家形象传播研究中心,在华发布了《2026年爱德曼信任度调查中国报告》。今年报告以"筑‘信为桥,跨越孤岛"为主题,聚焦全球社会在经历两极分…...

P13 | 异步任务:后台长时间操作的最佳实践

P13 | 异步任务:后台长时间操作的最佳实践 💰 付费文章 | 第二阶段:后端开发 为什么需要异步任务? 有些操作耗时很长,不适合同步等待: 操作 耗时 是否需要异步 查询列表 < 200ms ❌ 上传单张图片 1-3s ⚠️ 可选 批量生成 ZIP 打包下载 10s-5min ✅ 必须 AI 人脸识别…...

ROS实战:用rosbag_filter_gui和topic_renamer高效清洗与合并KITTI的sync/extract数据包

ROS数据工程实战&#xff1a;KITTI数据集高效清洗与合并全流程解析 在自动驾驶和机器人领域&#xff0c;KITTI数据集就像是一块未经雕琢的璞玉——原始数据包中混杂着不同频率的传感器数据、冗余话题和需要校正的时间戳。我曾花了整整三天时间处理一个27GB的KITTI数据包&#x…...

实战篇(一):从零构建领域知识图谱——基于Protege的本体建模与知识表示

1. 知识图谱与本体建模入门指南 第一次接触知识图谱时&#xff0c;我被那些复杂的术语吓得不轻。直到自己动手做了几个项目才发现&#xff0c;这东西就像搭积木一样有趣。知识图谱本质上就是用计算机能理解的方式&#xff0c;把现实世界中的事物和关系组织起来。比如在游戏领域…...

Python实战:三种GUI库打造可玩性五子棋(附完整源码)

1. 为什么用Python开发五子棋 五子棋作为经典策略游戏&#xff0c;用Python实现不仅能巩固编程基础&#xff0c;还能深入理解游戏逻辑与GUI交互。我最初选择用Python开发五子棋&#xff0c;就是看中它快速验证想法的特性——短短几十行代码就能看到棋子落在棋盘上的效果&#x…...

SystemVerilog Clocking Block实战:从接口同步到Verdi Delta Cycle调试

1. SystemVerilog Clocking Block基础解析 Clocking Block是SystemVerilog中用于接口同步的核心语法结构&#xff0c;它本质上是一个时序控制单元&#xff0c;能够精确管理信号采样和驱动的时序关系。想象一下&#xff0c;这就像在繁忙的十字路口设置红绿灯&#xff0c;确保不同…...

Unity3D——UGI基础知识(1)

一、六大基础组件介绍1、组件创建在UI中创建一个image&#xff0c;unity就会自动创建一个Canvas和一个EventSystem&#xff0c;这是必不可少的重要UGI内容。下面是他们的组件类别及作用概述。2、了解组件内容1.Canvas组件1.1Canvas组件的作用Canvas是画布&#xff0c;它是UGUI中…...

告别同步慢与数据泄露!2026国内主流企业网盘深度横评

在数字化转型的 2026 年&#xff0c;高效的文档协作已成为企业组织的核心竞争力。面对市面上琳琅满目的选择&#xff0c;主流网盘厂商究竟哪个能够真正适应复杂的业务场景&#xff1f;很多选型者在追求海量空间的同时&#xff0c;往往忽视了同步速度、网络抗并发性、权限管控及…...

ESP32 OTA升级实战:从零搭建一个带版本校验和自动回滚的远程固件更新服务

ESP32 OTA升级实战&#xff1a;构建企业级远程固件更新系统 去年夏天&#xff0c;我们团队的一个智能农业项目差点因为固件更新失败而损失惨重。当时200台部署在农田的ESP32设备因为网络波动导致固件下载不完整&#xff0c;系统陷入启动循环。正是那次经历让我意识到&#xff0…...

D4: 常见误区:管理者最容易踩的 5 个坑

文章目录 D4: 常见误区:管理者最容易踩的 5 个坑 🎯 为什么这个话题重要? 核心内容:管理者最容易踩的 5 个坑 坑 1:把 AI 当万能药,忽视基本功 坑 2:一刀切推行,忽视团队差异 坑 3:只看效率提升,忽视质量风险 坑 4:忽视安全与合规边界 坑 5:期待立竿见影,缺乏长期…...

语音识别入门必看:为什么Mel谱比原始波形和普通频谱图更好用?

语音识别中的Mel谱&#xff1a;为什么它比原始波形和普通频谱更胜一筹&#xff1f; 想象一下&#xff0c;你正在教一个刚学中文的外国朋友分辨"妈妈"和"马"这两个词的发音差异。直接播放原始录音可能让他一头雾水&#xff0c;但如果你把声音的高低变化画成…...

智能编程进入“所见即所得”时代:GPT-4o + Mermaid+AST可视化协同工作流(工业级实践白皮书首发)

第一章&#xff1a;智能编程进入“所见即所得”时代&#xff1a;GPT-4o Mermaid AST可视化协同工作流&#xff08;工业级实践白皮书首发&#xff09; 2026奇点智能技术大会(https://ml-summit.org) 传统代码生成范式正被实时、可验证、可交互的语义闭环工作流取代。GPT-4o 的…...

Mind+学习和项目栈1

提示&#xff1a;本内容仅供自己学习使用&#xff0c;以免长时间后&#xff0c;记忆检索困难&#xff0c;特此简单梳理操作思路和具体案例。安装包啥的官网就有&#xff0c;Mind官网 - 一站式满足程序设计、模型训练、界面设计。 0.认识工具了解功能&#xff1a;我觉得没有项目…...

Redis如何降低快照对CPU的影响_合理分配RDB执行时机避开业务高峰期

RDB快照导致CPU飙高源于fork后COW机制在高频写入时触发大量页复制&#xff1b;应禁用主节点自动快照&#xff0c;改由从节点低峰期执行&#xff0c;并关闭rdbcompression、rdbchecksum等加重CPU的默认配置。为什么RDB快照会让CPU突然飙高&#xff1f;Redis 生成 RDB 快照时&…...

AI辅助开发术语体系深度剖析

随着生成式AI与软件开发的深度融合&#xff0c;一系列全新的术语和开发范式应运而生。这些概念并非孤立存在&#xff0c;而是相互关联、层层支撑&#xff0c;共同构成了当前AI编程的新骨架。对于有一定基础的开发者而言&#xff0c;系统性掌握这套术语体系&#xff0c;不仅能提…...

别再手动改代码了!用Postman汉化插件5分钟搞定中文界面(附最新版下载)

5分钟解锁Postman中文界面&#xff1a;零代码汉化全攻略 第一次打开Postman时&#xff0c;满屏的英文术语是否让你望而却步&#xff1f;作为国内开发者&#xff0c;我们常常需要在这款强大的API测试工具和中文思维之间来回切换。其实&#xff0c;只需一个浏览器插件&#xff0…...

别再乱用self了!深入理解Python中@staticmethod和@classmethod的正确使用场景

别再乱用self了&#xff01;深入理解Python中staticmethod和classmethod的正确使用场景 在Python开发中&#xff0c;我们经常会遇到各种关于方法调用的困惑。特别是当看到"missing 1 required positional argument"这样的错误时&#xff0c;很多开发者会感到一头雾水…...

【生成式编程安全生死线】:从GitHub Copilot到CodeWhisperer,必须启用的4层静态+动态校验机制

第一章&#xff1a;智能代码生成代码安全性检查 2026奇点智能技术大会(https://ml-summit.org) 智能代码生成工具&#xff08;如Copilot、CodeWhisperer、Tabnine&#xff09;在提升开发效率的同时&#xff0c;可能引入未经验证的安全隐患——包括硬编码密钥、不安全的反序列化…...

【限时解密】2026奇点大会未公开闭门报告:AI编程助手在金融级代码审计、合规注释生成、跨语言重构三大高危场景的真实失效案例(仅剩97份内部摘要)

第一章&#xff1a;2026奇点智能技术大会&#xff1a;AI编程助手对比评测 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点智能技术大会上&#xff0c;来自全球12家主流厂商的AI编程助手接受了统一基准测试——包括代码补全准确率、跨文件上下文理解、调试建议有效性…...

PyTorch迁移学习避坑指南:修改SqueezeNet分类层时别忘了改这个隐藏参数

PyTorch迁移学习避坑指南&#xff1a;修改SqueezeNet分类层时别忘了改这个隐藏参数 在深度学习领域&#xff0c;迁移学习已经成为提升模型性能的利器。PyTorch作为当前最受欢迎的深度学习框架之一&#xff0c;其丰富的预训练模型库让开发者能够快速实现各种计算机视觉任务。然而…...

全网最细!Maven 编译构建 Java Web 项目从入门到实战一文吃透

使用Maven编译并构建java web项目 一、Maven概述 Maven&#xff0c;是一个专为Java平台设计的项目管理和构建工具。其核心思想在于“约定优于配置&#xff0c;通过提供一套默认的构建和依赖管理规则&#xff0c;降低了项目配置的复杂性&#xff0c;使开发者能够专注于业务逻辑…...

图像滤波实战:用MATLAB玩转频域,5分钟学会低通/高通滤波(附完整代码)

图像滤波实战&#xff1a;用MATLAB玩转频域&#xff0c;5分钟学会低通/高通滤波&#xff08;附完整代码&#xff09; 当你面对一张需要去噪或锐化的图片时&#xff0c;频域处理技术能像魔法一样帮你实现这些效果。不同于传统空间域的像素级操作&#xff0c;频域处理让我们能够直…...

如何利用S32DS与NCF Tool高效配置KEA的LIN节点(一)

1. 从零认识LIN总线与KEA系列MCU 第一次接触汽车电子开发的朋友可能会好奇&#xff0c;为什么车窗升降、雨刮控制这些简单功能需要专门的总线协议&#xff1f;其实在车身控制领域&#xff0c;LIN&#xff08;Local Interconnect Network&#xff09;总线就像小区里的自行车道—…...

077_D11、卡车小镇.Trucktown.适合3-8岁资料网盘下载

D11、卡车小镇.Trucktown.适合3-8岁资料网盘下载 如果你正在寻找一份适合低龄儿童启蒙观看或亲子共学的英语类动画资源&#xff0c;那么 D11、卡车小镇.Trucktown.适合3-8岁资料网盘下载 这类内容通常会是很多家长关注的方向。尤其是在家庭英语启蒙、日常磨耳朵和兴趣培养场景…...

SDR技术在医学成像OCT中的应用与优化

1. SDR技术与医学成像的跨界融合在医疗设备研发领域&#xff0c;一个令人着迷的现象是&#xff1a;尖端技术往往先在军事或通信领域成熟&#xff0c;随后才逐步渗透到民用医疗领域。这种技术迁移不仅降低了研发成本&#xff0c;更带来了性能的飞跃。软件定义无线电&#xff08;…...

为端到端API添加Naive RAG 流程

在前文中&#xff0c;我们结合langchain和fastapi搭建了一个端到端的问答API&#xff0c;这个agent可以调用已经封装好的工具函数&#xff0c;可以获取本地数据库&#xff0c;有记忆功能&#xff1b;但是这样的模型训练好了过后只是就固定了&#xff0c;如果没有获取或更新相应…...

AGI Python入门 保姆级教程

你不需要懂微积分&#xff0c;不需要背设计模式&#xff0c;甚至不需要知道什么是“面向对象”。 我们只做三件事&#xff1a;让大模型听懂人话 → 让它选择用哪个工具 → 让Python真正执行那个工具 不用怕数学&#xff0c;不用怕算法&#xff0c;只要你会“顺序、判断、循环…...