输出/输入(I/O)装备分派与收受接管

1. 装备分派概述

装备分派是指依据用户的I/O恳求分派所需的装备。分派的总准绳是充沛发扬装备的运用效力,尽能够地让装备繁忙,又要防止因为不合理的分派办法形成过程死锁。从装备的特征来看,釆用下述三种运用方法的装备辨别称为独有装备、共享装备和虚拟装备三类。
1) 独有式运用装备。指在请求装备时,假如装备闲暇,就将其独有,不再许可其他过程请求运用,不断比及该装备被释放才许可其他过程请求运用。例如,打印机,在运用它打印时,只能独有式运用,不然在统一张纸上瓜代打印分歧义务的内容,无法正常浏览。
2) 分时式共享运用装备。独有式运用装备时,装备应用率很低,当装备没有独有运用的请求时,可以经过分时共享运用,进步应用率。例如,对磁盘装备的I/O操作,各过程的每次I/O操作恳求可以经过分时来瓜代停止。
3) 以SPOOLing方法运用内部装备。SPOOLing技巧是在批处置操作零碎时期引入的,即假脱机I/O技巧。这种技巧用于对装备的操作,本质上就是对I/O操作停止批处置。

2. 装备分派的数据构造

装备分派根据的次要数据构造有装备掌握表(DCT)、掌握器掌握表(COCT)、通道掌握表(CHCT)和零碎装备表(SDT),各数据构造功用如下:
装备掌握表DCT:零碎为每个装备设置装备摆设一张DCT,如图5-9所示。它用于记载装备的特征以及与I/O掌握器衔接的状况。DCT包含装备标识符、装备类型、装备形态、指向掌握器掌握表COCT的指针等。个中,装备形态指导装备是忙照样闲暇,装备队列指针指向等候运用该装备的过程构成的等候队列,掌握表指针指向与该装备相衔接的装备掌握器。


图5-9装备掌握表

掌握器掌握表COCT:每一个掌握器都配有一张COCT,如图5-10a所示。它反应装备掌握器的运用形态以及和通道的衔接状况等。
通道掌握表CHCT:每一个通道配有一张CHCT,如图5-10b所示。
零碎装备表SDT:全部零碎只要一张SDT,如图5-10c所示。它记载已衔接到零碎中的一切物理装备的状况,每一个物理装备占一个表目。


图 5-10  COCT、CHCT 和 SDT

因为在多道程序零碎中,过程数多于资本数,会惹起资本的竞争。因而,要有一套合理的分派准绳,次要思索的要素有:I/O装备的固有属性,I/O装备的分派算法,装备分派的平安性以及装备自力性。

3. 装备分派的战略

1) 装备分派准绳:装备分派应依据装备特征、用户请求和零碎设置装备摆设状况。分派的总准绳既要充沛发扬装备的运用效力,又要防止形成过程死锁,还要将用户程序和详细装备隔分开。
2) 装备分派方法:装备分派方法有静态分派和静态分派两种。
静态分派次要用于对独有装备的分派,它在用户功课开端履行前,由零碎一次性分派该功课所请求的全体装备、掌握器(和通道)。一旦分派后,这些装备、掌握器(和通道)就不断为该功课所占用,直到该功课被撤销。静态分派方法不会呈现死锁,但装备的运用效力低。因而,静态分派方法弁不契合分派的总准绳。
静态分派是在过程履行进程中依据履行需求停止。当过程需求装备时,经过零碎挪用敕令向零碎提出装备恳求,由零碎依照事前规则的战略给过程分派所需求的装备、I/O掌握器,一旦用完之后,便立刻释放。静态分派方法有利于进步装备的应用率,但假如分派算法运用欠妥,则有能够形成过程死锁。
3) 装备分派算法:常用的静态装备分派算法有先恳求先分派、优先级高者优先等。
关于独有装备,既可以釆用静态分派方法也可以静态分派方法,常常釆用静态分派方法,即在功课履行前,将功课所要用的这一类装备分派给它。共享装备可被多个过程所共享,普通釆用静态分派方法,但在每一个I/O传输的单元工夫内只被一个过程所占领,平日釆用先恳求先分派和优先级高者先分的分派算法。

4. 装备分派的平安性

装备分派的平安性是指装备分派中应避免发作过程死锁。
1) 平安分派方法:每当过程收回I/O恳求后便进入壅塞形态,直到其I/O操作完成时才被叫醒。如许,一旦过程曾经取得某种装备后便壅塞,不克不及再恳求任何资本,并且在它壅塞时也不坚持任何资本。i点是装备分派平安;缺陷是CPU和I/O装备是串行任务的(对统一过程而言)。
2) 不平安分派方法:过程在收回I/O恳求后持续运转,需求时又收回第二个、第三个 I/O恳求等。仅当过程所恳求的装备已被另一过程占用时,才进入壅塞形态。长处是一个过程可同时操作多个装备,从而使过程推动敏捷;缺陷是这种装备分派有能够发生死锁。

5. 逻辑装备名到物理装备名的映射

为了进步装备分派的灵敏性和装备的应用率、便利完成I/O重定向,因而引入了装备自力性。装备自力性是指使用程序自力于详细运用的物理装备。
为了完成装备自力性,在使用程序中运用逻辑装备名来恳求运用某类装备,在零碎中设置一张逻辑装备表(Logical Unit Table, LUT),用于将逻辑装备名映射为物理装备名。LUT 表项包含逻辑装备名、物理装备名和装备驱动程序进口地址;当过程用逻辑装备名来恳求分派装备时,零碎为它分派响应的物理装备,并在LUT中树立一个表项,今后过程再应用逻辑装备名恳求I/0操作时,零碎经过查找LUT来寻觅响应的物理装备和驱动程序。
在零碎中可釆取两种方法树立逻辑装备表:

  • 在全部零碎中只设置一张LUT。如许,一切过程的装备分派状况都记载在这张表中,故不许可有相反的逻辑装备名,次要实用于单用户零碎中。
  • 为每一个用户设置一张LUT。当用户登录时,零碎便为该用户树立一个过程,同时也为之树立一张LUT,并将该表放入过程的PCB中。
时间: 2024-12-10 15:45:53

输出/输入(I/O)装备分派与收受接管的相关文章

while循环操作,输入一个整数放入到变量n中, 如果这个整数大于0,那么计算1+2+3+……+n的结果, 否则输出“输入的数据有错误”。

import java.util.Scanner; /** * @author 蓝色以太 while循环操作,输入一个整数放入到变量n中, 如果这个整数大于0,那么计算1+2+3+--+n的结果, * 否则输出"输入的数据有错误". */ public class While2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("

运算符与格式输出输入4

格式化输入输出:printf("hello world!"):printf("期望薪资:%d\n",salary); //%站位符格式化传分为两种: 1.普通字符,原样输出 2.转换说明:从%开始,%-0m.nl|h+转换说明 % 站位符,转换说明的开始,不能省略 - 左对齐,缺省是右对齐 0 可以是任意字符,表示空位补零 m.n 控制域宽只对应的输出内容在输出设备上所站的位数 n 表示精度,用于输出浮点数,小数点后面的位数 l或者h l 表示整数long %ld

输出/输入(I/O)常识点汇总

1) 分派装备.起首依据I/O恳求中的物理装备名查找零碎装备表(SDT),从中找出该装备的DCT,再依据DCT中的装备形态字段,可知该装备能否正忙.若忙,便将恳求I/O 过程的PCB挂在装备队列上:闲暇则依照必定算法盘算装备分派的平安性,平安则将装备分派给恳求过程,不然仍将其PCB挂到装备队列.2) 分派掌握器.零碎把装备分派给恳求I/O的过程后,再到其DCT中找出与该装备衔接的掌握器的COCT,从COCT中的形态字段中可知该掌握器能否繁忙.若忙,便将恳求I/O 过程的PCB挂在该掌握器的等候队

fmt包的格式化输出输入

  fmt包的格式化输出输入 原文地址:https://www.cnblogs.com/qhdsavoki/p/9457853.html

格式化输出输入一二事

前言 输出输入流可以通过各种方式设置多种多样的格式化操作,给输出输入提供多种选项. 每种格式化将输出将通过两种方式进行描述,一种是操纵符,一种是成员函数.操作符一般在流中插入以进行格式化输出,成员函数则是通过对象调用起作用. 注意,流操纵符一般都在iomanip.h中,而成员函数一般都在iostream.h中. 进制相关 整型数字的显示格式 操纵符 设置进制 int n = 100; cout << dec << n << endl; //十进制 cout <&l

Linux文件编辑器vim输出输入重定向、管道以及进程

合抱之木,生于毫末:九层之台,起于累土:千里之行,始于足下.正因基础的重要性,才又撸起了linux. linux编辑工具: VI VIM EMACS vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面.vim的这些优势主要体现在以下几个方面: 易用性 vi只能运行于unix中,而vim不仅可以运行于unix,windows ,mac等多操作平台. 语法加亮 vim可以用不同的颜色来加亮你的代码. 可视化操作(ESC+V) 就是说vim不仅可以在终端运行,也可以运行于x

C# 语言基础(简单的输出 输入语句 和 加法运算符)

int a, b; Console.Title = "C# 语言基础-第一堂课";// 标题 Console.BackgroundColor = ConsoleColor.DarkRed;//设置控制台的背景颜色 Console.WriteLine("幼儿园大班第一节课"); Console.WriteLine("请输入a的值,按回车");//输出语句,自动换行 Console.Write("a="); //输出语句,自动不换

Python的输出输入和注释

内容: 1:Python的输出 2:Python的输入 3:python的注释 Python的输出和注释 1 print 'hello,world' #hello,world 2 print 'Hello, World', 'Python'# Hello,world Python 3 print 100 + 200 #300 Python的基本输入 >>> name = raw_input("Please input your name: ") Please inpu

MR案例:输出/输入SequenceFile

SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File).在SequenceFile文件中,每一个key-value对被看做是一条记录(Record),基于Record的压缩策略,SequenceFile文件支持三种压缩类型: NONE: 对records不进行压缩; (组合1) RECORD: 仅压缩每一个record中的value值; (组合2) BLOCK: 将一个block中的所有records压缩在一起;(组合3) p