==IO==核心子系统

image-20260523150501162

用户层软件

假脱机技术Spooling

image-20260523150903605

脱机技术

批处理阶段引入了脱机技术(用磁带完成)

image-20260523151215414

==假脱机技术==(SPOOLing技术)

==以高速磁盘为缓冲,用软件模拟脱机技术。==

  • 需要使用磁盘空间(输入井和输出井),内存空间(输入和输出缓冲区)。

  • 不需要外围计算机的支持!

==“假”==:以多道程序技术和磁盘空间替代外围机。【以空间换时间】

将一台物理独占设备,**==虚拟成多台逻辑设备==,实现设备共享**。

image-20260523151533140

具体应用:假脱机技术实现共享打印机

把一台物理设备 虚拟成逻辑上的多台设备。

image-20260523152006683

image-20260523152049019

回顾

image-20260523152145433

设备独立性软件

IO调度

用某种算法确定一个好的顺序来处理各个IO请求。

image-20260523150640877

设备保护

把设备看成一种特殊的文件。

image-20260523150754312

回顾

image-20260523150837864

设备的分配与回收

image-20260523152232168

设备分配时应考虑的因素
  • 设备的固有属性:独占设备,共享设备,虚拟设备。
    • image-20260523152349752
  • 设备分配算法(常用):先来先服务。最高优先级优先。
  • 设备分配中的安全性:
    • ①安全分配方式:进程分配给一个设备后,就将进程阻塞,本次IO完成后才将进程唤醒。【不会有死锁,此时CPU和IO设备只能串行工作】
    • ②不安全分配方式:进程分配给一个设备后,进程可继续执行,之后还可以发出新的IO请求。只有某一个IO请求得不到满足才将进程阻塞。【可能有死锁,不过进程的计算任务和IO任务可以并行处理】
  • 设备分配方式:
    • 静态分配:进程运行前就为其分配全部所需资源,运行结束后归还资源。【破坏了“请求和保存”条件,不会发送死锁】
    • 动态分配: 进程运行过程中动态申请设备资源。
设备分配管理中的数据结构

image-20260523153030765

设备控制表(DCT)

系统为每个设备都配置一张DCT,用于记录设备使用情况

image-20260523153315327

控制器控制表(COCT)

每个设备都对应一张COCT。OS根据COCT的信息对控制器进行操作和管理。

image-20260523153416200

通道控制表(CHCT)

每个通道都对应一张CHCT。OS根据CHCT的信息对通道进行操作和管理。

image-20260523153519548

系统设备表(SDT)

记录系统中全部设备的情况,每个设备对于一个表目。

image-20260523153619400

设备分配的具体步骤
  • 分配设备 → 分配控制器 → 分配通道。

image-20260523153826573

设备分配步骤的改进

建立逻辑设备名与物理设备名的映射机制,==用户编程只需提供逻辑设备名。==

image-20260523154018265

image-20260523154128491

逻辑设备表LUT

image-20260523154220301

回顾

image-20260523154451928

缓冲区管理

image-20260523154509475

缓冲区

==一般在内存中开辟缓冲区==。(硬件做缓冲区成本高,容量小)

(缓冲区根本上是一种临界资源,所以也要考虑进程访问缓冲区的同步问题的)

缓冲区 VS 高速缓存

  • 高速缓存:for提高重复访问的效率。

  • 缓冲区:for提高数据传输的效率和并行性。

Q:单用户计算机上的操作,需要使用缓冲技术的是ABCD

A:图形界面下使用鼠标

B:多任务操作系统下的磁盘驱动器

C:包含用户文件的磁盘驱动器

D:使用存储器映射IO,直接和总线相连的图形卡

缓冲区的作用
  • ①缓和CPU和IO设备之间速度不匹配的矛盾(IO比CPU慢太多了!)
  • ②减少对CPU的中断频率,放宽对CPU中断相应时间的限制
  • ③解决数据粒度不匹配的问题(如输出进程每次可以生成一块数据,但是IO设备每次只能输出一个字符)
  • ④提高CPU和IO设备之间的并行性

image-20260523191447348

==缓冲区一个小特点==:

image-20260523154947416

单缓冲

IF用户进程请求某种块设备读入若干块的数据,若采用单缓冲的策略:

OS在主存为其分配一个缓冲区(缓冲区大小等于一个块)

CPU处理一块数据时间C,数据从缓冲区送到用户工作区的时间M,IO设备将一块数据送到缓冲区时间T。

==结论:单缓冲处理每块数据所需时间是 Max(T,C)+ M==

image-20260523155300290

image-20260523155508593

image-20260523155546678

image-20260523155606015

双缓冲

假设用户进程请求某种块设备读入若干块的数据,采用双缓冲的策略。

OS在主存分配两个缓冲区

==结论:双缓冲处理每块数据所需时间是 Max(T,C+M)==

Note:如果是少数个数据块(不是多数取均值),时间得自己画图,会有出入的!

image-20260523155732277

image-20260523155924212

单 / 双缓冲在通信时的区别

image-20260523160111962

image-20260523160145712

(实现双工通信)

循环缓冲

将多个大小相等的缓冲区链接成一个循环队列

image-20260523160302476

缓冲池

由一系列缓冲区组成。

支持多进程==共享使用==。

image-20260523160603771

image-20260523160446794

image-20260524155137628

image-20260523160538595

回顾

image-20260523160635542

IO操作实例

微信图片_20260523193647_1320_2

中断服务历程执行结束后,所输入的数据的存放位置是:**==内核缓冲区==** 【前者由设备驱动程序完成】

当系统调用结束时,所输入的数据才被送到:**==用户缓冲区==** 【后者由与设备无关的IO软件层完成】

Other

单机系统中,最关键的是CPU资源,而不是内存和IO设备的问题

  • 所以提高单机资源利用率最关键是:多道程序设计技术。而不是SPOOLing技术。