操作系统理论的学习跟实际应用还是很大的。我学了进程线程同步互斥之后对于编程中的多线程等加锁的还是云里雾里,总是把操作系统和编程串不起来,也把计算机几门专业课串不起来,感觉计算机这个专业书读十遍以下是不可能把四门专业课书连贯的自己串起来。人的智商和逻辑性还是差异很大的。。
壹:进程管理
(一) 进程与线程
1. 进程概念:就是一个具有独立功能的程序的一次动态执行。
2. 进程的状态与转换:
进程的三个基本状态是就绪、执行、阻塞。就绪态到执行态的转换只需要cpu调度即可,阻塞态只能转为就绪态不能直接转为执行态。执行态如果时间片用完就 转成了就绪态如果等待某事件发生就转成阻塞态。如果在这三个基本状态下进程发生挂起行为则从就绪态转为挂起或称静态就绪,从执行态转也转为静止就绪,从 阻塞态转为静止阻塞。
3. 进程控制:
进程控制就是对系统中所有进程从产生到消亡实施管理,由OS的内核实现,内核是通过调用各种原语来实现的。有进程创建原语,进程撤销原语,阻塞原语,唤醒原语等。
4. 进程组织:
一个进程是由三部分组成的,程序、数据、进程控制块(PCB)。这三个合起来也称为进程实体。其中进程控制块是进程动态特性的集中反映,创建进程则产生pcb撤销进程就要收回pcb,pcb表项的个数是确定的,所以一个系统中的进程不是无限多的。。
进程控制块很重要所以详细写点,它包含的内容很多,有
(1)进程描述信息:进程标示符(每个进程有一个唯一的号)和用户标示符(每个进程属于某个用户)
(2)进程控制信息:进程当前状态,如果是阻塞的要再pcb中说明阻塞原因,进程优先级、代码执行入口地址、程序外存地址、各种计时信息(程序执行时间,页面调度情况)
(3)资源管理信息:用于说明有关虚拟地址空间的现状,打开文件的列表,和使用的输入输出的信息。
(4)CPU现场保护结构:保存各种寄存器的值。
系统中pcb数目众多,他们是怎么组织起来的有链接方式和索引方式两种:链接方式就是形成就绪队列,阻塞队列等,还要对就绪队列按进程优先权排列。索引方式是建立几种状态的索引表,索引表记录pcb的地址。
5. 进程通信
进程的互斥与同步交换的信息量较少,所以称为低级通信方式。进程之间以较高的效率传送大量数据的通信方式叫高级通信方式分为三大类:
(1) 共享存储系统:就是共享内存。。其实编程没编过我对这些都理解不深刻。
(2) 消息传递系统:直接通信(send和receive通信命令直接发给接收进程)间接通信(信箱通信就是把消息放信息里让另一个进程取)。
(3) 管道通信。相当于一个队列形式的一个进程在管道尾写,另一个进程在管道头取,管道分为无名管道和有名管道。无名管道是用pipe函数创建的,只能用于子进程之间的通信,有名管道用mkfifo函数创建用于任意两个进程之间通信,对管道的操作相当于对文件的操作比如open函数打开管道close函数关闭管道等。
6. 线程概念与多线程模型
有了线程之后,处理机调度的单位就成了线程。而资源的分配还是以进程为单位。一个进程的多个线程是公用代码数据和文件资源的,但是不同的线程有不同的寄存器和栈。线程之间的通信比进程通信方便因为有好多资源共用,线程的切换也比进程的切换简化的多。
(二)处理机调度
1. 调度的基本概念
调度分为作业调度,进程调度,和中级调度。作业调度就是将外存上选中的作用分配内存,创建进程等批处理中几分钟调度一次,其他系统基本不需要作业调度,进程调度就是决定就绪队列中哪个进程获得处理机。中级调度主要功能是对换,即将内存中某些就绪或阻塞的进程交换到外存对换区,主要用来进行内存管理和扩充。
2. 调度的基本准则:
CPU使用率要高,周转时间,等待时间等要小等等。周转时间等于等待时间加响应时间,平均周转时间就是各个作业的周转时间取平均值。带权周转时间等于周转时间除以响应时间,平均带权周转时间就是各个作业的带权周转时间的求平均。
3. 调度方式:
非剥夺式和剥夺式两种。剥夺式是有抢占原则的,一般是按优先权原则,短作业优先原则和时间片原则这三种之一进行抢占的。
4. 典型调度算法
先来先服务调度算法;短作业(短任务、短进程、短线程)优先调度算法;时间片轮转调度算法;优先级调度算法;高响应比优先调度算法(是FCFS和SJF的折中 响应比=等待时间+要求执行时间的和然后除以要求执行的时间);多级反馈队列调度算法(多个就绪队列赋予不同的优先级优先级越高时间片越短,新进程加入后 先放第一个队列一个时间片完成不了就往下一个优先级的队列末尾放以此类推)。
(三)进程同步
1. 进程同步的基本概念
多个进程中发生的事件存在某种时序关系,必须协同工作,相互配合,以共同完成某一项任务。同一种进程是互斥关系,不同的进程是同步关系。
2. 实现临界区互斥的基本方法
软件实现方法;硬件实现方法。这时候还不是信号量的那种软件实现而是程序员自己定义的,比如设置一个turn让他等于进程编号,从而使进程轮流进入临界区。还有设置一个标志位flag为0表示其他进程未进入临界区等。硬件实现方法不懂。同步机制只要实现四大准则就可以实现互斥,这四大原则就是:空闲让进、忙则等待、有限等待,让权等待。
3. 信号量
信号量是操作系统提供的管理公有资源的手段,即PV操作。对于独享设备有驱动程序做PV操作。
p操作的过程是:s=s-1;if(s<0){进入等待队列,自己阻塞进程}
v操作的过程是:s=s+1;if(s<0){从等待队列取一个进程;取出的进程进入就绪队列,当前进程该干嘛干嘛}
pv原语不能次序错误,而且必须成对出现。信号量的定义是semaphore mutex;经典同步问题有生产者-消费者问题;读者-写者问题;哲学家进餐问题。
(四) 死锁
1.死锁的概念
多个进程并发执行共享资源时,由于独占资源被其他进程占用,且其他进程遇到同样的问题,于是导致出现环形等待资源的情况,所有每个进程都在等待无法执行这就是死锁。
2. 死锁处理策略:有四种方法预防死锁、死锁避免、死锁检测、解除死锁。
3. 死锁预防:就是破坏产生死锁的任何四个必要条件之一。死锁的四个必要条件是互斥、请求和保持、不剥夺、和环路等待。
4. 死锁避免:
就是系统在给某进程分资源时要保证一个安全顺序,系统安全状态一般用银行家算法。银行家算法即系统试探着把资源分配给进程pi后修改可用资源的数目,还有每个进程已分配的资源数目跟每个进程还需的资源数目,然后执行安全性算法,如果此次资源分配后,系统处于安全状态才正式分配给进程资源。否则试探分配作废,让进程pi等待。注安全性算法即设置两个向量。一个work向量一个finish向量,开始时work=available,然后找到一个need小于work的进程,给该进程分配资源后使work=work+allocation ,finish=true。然后循环直到所有进程的finish状态都为true则系统处于安全状态。
5. 死锁检测和解除:
就是检测到发生死锁之后,再采取手段解除死锁,有剥夺法,回退法和杀死进程这三种解除法。
贰:内存管理
(一) 内存管理基础
1.内存管理概念
程序装入与链接;逻辑地址与物理地址空间;内存保护。内存管理的任务是记录内存的使用和空闲状态,在进程需要时为进程分配内存,用完后释放内存,已被进程使用的内存区域如何保护,如何在内存不足支持进程运行的情况下进行内外存交换。
2. 程序的装入:指从外存装载在内存
在读入内存时需要对地址部分做调整,即重定位装入,该工作有OS专门的装载程序负责。重定位分为静态与动态重定位,静态重定位指在程序装入内存时由OS进行浮动项的定位,以后不再变化,每个可执行程序的头上有浮动项说明表,表示地址的浮动项。动态重定位是指在装入内存时不进行装配,直接将程序装入内存,定位问题由系统提供的硬件解决,需要借助硬件支持。
3.交换与覆盖
交换是指进程或作业在内存与外存之间的动态调度,当内存紧张时系统按某种策略将某些进程暂时移到外存,把外存某些进程换进内存占据前者的内存区域,外存分为文件区和交换区中其对换区是连续的。
覆盖是把程序划分为若干个功能相对独立的程序段。这些程序段是不会同时执行的因此可以共享同一块内存区域,若干独立的程序段叫覆盖段。当有关程序段的前一部分执行结束,把后面属于同一覆盖段的程序段调入内存,覆盖前面的程序段,相当于内存扩大了。但是增加了程序员的负担。因为程序员要向系统指明覆盖结构而且要求作业各模块之间有明确的调用结构。
4.连续分配管理方式
单一连续分配;分区分配。单一连续分配是指内存分为两个区域:系统区和用户区,应用程序装入到用户区可使用用户区的全部空间,这种只适合单用户单任务的OS。分区分配时把内存划分为若干个连续分区。分区分配又分为固定分区分配和动态分区分配,固定分区分配就是分区的大小是固定的,可以相等也可以不等。采用分区表记录分区的大小和使用情况。分区表的数据项有分区号,大小,起止,和状态。动态分区分配说白了就是用多少分多少。一般分区都是从地址低端开始的,动态分区按寻找空闲分区的方法的不同又分为1、首次适应法2、下次适应法3、最佳适应法。
首次适应算法是按分区的先后次序(即从低地址开始),从头查找,找到符合要求的第一个分区,特点:较大的空闲分区被保留在内存高端,每次分配时查找时间的开销会增大。
下次适应算法是从上次分配的分区开始查找,按分区的先后次序找,特点空闲分区分布的更均匀,但较大的空闲分区不易保留。
最佳适应算法是每次找与其容量最接近的空闲分区,为了方便将按空闲区大小链接起来递增排列利用了好多外碎片。
动态分区还有动态重定位分区分配就是在动态分区的情况下,当剩余零头分区的和超过新任务要求的分区但是连续的空闲区容量却达不到新任务要求时进行紧凑的行为。就是将各个占用分区向内存一端移动,在另一端将空闲分区合并成一个空闲分区。
5. 非连续分配管理方式
包括分页管理方式;分段管理方式;段页式管理方式。当然一个操作系统只使用其中一种管理方式。
页式管理中将逻辑地址空间分成页,物理内存划分为固定的同样大小的(硬件设计时也框的大小已经确定)页框(块),程序可加载在不连续的块中。程序中逻辑页号和内存中物理页号的对应表叫页表,每个进程一张。系统中有一张页框使用表。系统中还有一张请求表里面存的是进程id和该进程页表地址的对应关系。逻辑地址像物理地址转换的过程:逻辑地址由两部分组成:页号和页内地址。以该页号在页表中查找对应的物理页号,然后和页内地址拼起来就是物理地址。
分段存储的段表是由段号,段长,段基址组成。由逻辑地址转换为物理地址的过程:逻辑地址由段号段内位移组成,根据段号在段表中查找段基址然后加上位移量就是在内存中的位置。
段页式存储管理的逻辑地址由段号,段内页号,页内偏移地址组成。每个进程一张段表。段表由段号,页表大小(包含几个页表),页表首址组成。逻辑地址到物理地址的转换过程:由段号在段表中查找到对应的页表首址再与逻辑地址的页号相加,即是对应页表中该页号的对应项,将块号和页内地址拼接即求的物理地址。
分页中控制寄存器中存的是页表地址和长度,分段中控制寄存器中存的是段表使址和段表长度,段页式中控制寄存器中存的是段表始址和段表长度,根据寄存器里的值才能得到页表,段表。
(二) 虚拟内存管理
1. 虚拟内存基本概念
借助于硬盘,一个进程部分调入内存即可运行的情况下,用到哪个程序段将外存的调入内存,对用户来说是透明的任务内存足够大到可以执行自己的程序这个思想便是虚拟内存的思想,在虚拟存储管理下,用户的逻辑地址空间可远远大于物理空间。
2. 请求分页管理方式
即在简单页式存储管理的基础上,增加了请求调页和页面置换功能。在请求分页中的页表比简单页式存储的页表要多一些字段,包括页号、物理块号、状态位,访问字段、修改位、保护位、外存地址。状态位用来区分该页是否在内存,修改位用来表示该页在调入内存后有没有被修改,保护位表示该页是否可以修改,外存地址表示它在磁盘上现在存的位置,还有一个访问字段表示最后一次访问到现在的时间间隔用于页面置换算法的。
3. 页面置换算法
包括最佳置换算法(OPT);先进先出置换算法(FIFO);最近最少使用置换算法(LRU);时钟置换算法(CLOCK)。
最佳置换算法:选择未来最常时间里不使用的页,不能实现,因为系统不会预估未来。
先进先出:选择建立最早的页面置换,但是如果这个页经常使用,那就会被反复调入和调出,会出现随着页框增多而中断次数反而增加的现场也称为Belady异常。
最近最久未使用LRU算法:最近最久没有使用的页面,相当于访问到一个把他排队尾最后出,慢慢的队头就是最近没使用的页面淘汰队头即可。
CLOCK置换算法:是LRU和FIFO的折中。也叫二次机会算法,
4. 页面分配策略
保证进程能运行的最小页框,固定分配:给每个进程分配固定数目的页框;可变分配是预分配给进程一定数目的页框,OS控制一定数量的空闲页框,在进程执行过程中,发生缺页时os就分配给该进程一个空闲的页框。
5. 抖动
抖动现象和工作集。工作集指进程在执行过程中所访问页面的集合。驻留集指虚拟页式管理中给进程分配的物理块数。引入工作集目的是依据进程在过去的一段时间内访问的页面来调整常驻集大小。抖动是指内存和外存进行频繁的调入调出,产生这种情况一是因为系统进程数越来越多。每个的驻留集越来越少,因此缺页中断越来越多,这样就会使cpu使用率越来越低,二是因为不合适的调页算法。
6. 请求分段管理方式
此时的段表比简单分段式管理的段表多了几项包括:段名,段长,段基址,存取方式,访问字段,修改字段,存在位,增补位,外存地址。存取方式指的是:执行、只读、读/写;存在位跟分页管理中的状态位是一样的,增补位指示运行过程中是否进行过动态增长。
叁:文件管理
(一) 文件系统基础
1. 文件概念
文件是具有文件名的一组相关元素的集合.可分为有结构文件和无结构文件,有结构的文件被看成事由一组记录组成(学过数据库都知道记录是有若干相关的数据项 组成),无结构的文件即流式文件,无格式.
2. 文件结构
文件结构分为逻辑结构和物理结构:
文件的逻辑结构有三种: 顺序文件;索引文件;索引顺序文件。
(1)顺序文件,其记录是按某种顺序排列所形成的,比如按存入时间的先后或关键字排列.对定长记录方便直接存取,但对变长的记录,就得从第一条的长度一直加到第 n条才能知道记录的首址.
(2)索引文件,记录在文件中的位置由索引表来指向,其实是按某个记录键来确定位置的,而索引表本身是定长的顺序文件.所以给定关键字后就可以在索引表中折半 查找相应的记录在哪.索引项是由记录的首址和长度构成的.
(3)索引顺序文件, 将顺序文件中的记录先分为组,为顺序文件建立一张索引表,在索引表里为每组中的第一个记录建立索引项,记录在文件中的位置由索引表和顺 序来决定.
文件的物理结构也有三种:连续分配方式,链接分配方式,和索引分配方式.
(1)连续分配:使得访问速度快但它要求存储空间是连续的而且必须事先知道文件的大小才能将文件存储到外存.
(2)链接分配方式:将属于一个文件的多个离散盘块链接成一个链表这样所形成的一个物理文件称为链接文件.而链接分配又分为隐式链接和显示链接.隐式链接就是在该文件的离散物理块中,下一个物理块的地址由前一个物理块给出.而每个文件的第一个物理块和最后一个物理块是存储在文件目录项中的…显示链接是把用于链接文件的各个物理块指针全存放到一张链接表中,每个FAT表项存的是本物理号对应的下一个物理号是什么,一个磁盘只有一张这个表.叫做FAT文件分配表. 凡是属于某一文件的第一个盘块号,均作为文件地址被填入相应文件的FCB的物理地址字段中.
(3)索引分配方式:链接分配方式需要把FAT都调入内存才能保证一个文件完整的被找到,而且一个个像下查找效率不高,索引方式为每个文件分配一个索引块,把分配给该文件的所有盘块号都记录在该索引表中,将指向该索引块的指针存入FCB中.索引分配还分为单级多级和混合索引分配方式.
至于逻辑结构和物理结构的区别. 逻辑结构是指每个记录在文件中的位置,而物理结构为逻辑结构服务,指文件在外存上存储时,分配方式要保证文件在逻辑上一致而且检索效率还有达到最高的结构.
3.目录管理
(1)从文件管理的角度看,文件时由文件控制块FCB和文件体组成的,文件控制块保存文件的属性信息基本包括文件名,文件结构,文件物理位置,控制信息(存取权限),管理信息(建立/修改日期等等).
(2)目录是由文件说明即FCB的集合构成的.还有一种目录的组成由于每次检索文件是按名检索的,索引把整个由文件说明构成的目录调入内存是一种浪费,因此索引结点方式就诞生了,即将文件名和文件描述信息分开,将文件描述信息单独形成一个称为索引结点的数据结构,在文件目录的目录项中仅存放文件名和对应的指向索引结点的指针..
(3)目录结构的形式有单级目录结构,两级目录结构和多级目录结构(也成为树形目录结构)。单级目录结构下文件不能重名查找速度也慢,两级目录是按用户建立的,即 第一级目录中存放用户名和该用户目录的指针,虽然提高了检索速度在不同用户目录中可以重名,但是不同用户文件之间的共享不方便,于是多级目录就出现了..根目录还是按用户分的,但下面有多重目录.当两个或多个用户共享文件时,不再是树形而是有向非循环图.
(二) 文件系统实现
1. 文件系统层次结构
文件系统由三部分组成:与文件管理有关的软件,被管理的文件,实施文件管理所需的数据结构.文件系统由四层构成:最低层是基本输入输出层又叫设备驱动层,下来依次是基本文件系统层,又称物理I/O层.基本I/O管理程序层,逻辑文件系统层.
(1)基本I/O层:负责启动设备I/O以及对设备发来的中断信号进行处理.
(2)物理I/O层:负责处理内存和外存之间的数据块交换.
(3)基本I/O管理程序层:选择文件所在设备,进行逻辑块号到物理块号的转换,对文件空闲存储空间的管理,指定I/O缓冲区等作用.
(4)逻辑文件系统层:负责处理文件及记录的相关操作.
这个名字起得不好,一般物理都是最底层,结果这是是第二层不好记..
2. 文件存储空间的管理
(1) 空闲表法和空闲链表法
空闲表法适用于连续分配方式.系统为外存上的所有空闲区建立一张空闲表,每个空闲区对应于一个空闲表项,其中包括表项序号,该空闲区的第一个盘块号,该区的空闲盘块数等信息,再将所有空闲区按其起始盘块号递增的次序排列.(对换区常用).空闲链表法.将空闲空间,以盘块为单位拉成一条链.
(2) 位示图法
二进制的每一位表示磁盘中的一个盘块,当该位为1时表示已经分配,为0表示空闲.注意给出的字号和位号是从0开始还是从1开始.书上是从1开始的.
(3) 成组链接法
成组链接法将一个文件的所有空闲块按每组100块分成若干组,把每组的盘块数目和该组的所有盘块号计入到前一组的第一个盘块中,第一组的盘块数目和第一组的所有盘块号计入到超级块中.这样每组的第一个盘块就连接成了一个链表,而组内的多个盘块形成了堆栈.
成组链接法的分配和回收空闲块都是所谓的头取头插,即分配从第一组开始分配,如果第一组只剩那个保存有下一组地址的块,就把该块存入超级块,下一组变成第一组.回收的时候,如果第一组满100个,那么将第一组的盘块数和盘块号写入该空闲块中,然后将盘块数等于1及栈顶块号=该空闲块号写入超级块中所以原来的第一组就变成了第二组…
(三) 磁盘组织与管理
1. 磁盘的结构
磁盘由若干盘片组成,每个盘片有两面.都可以记录信息.每个盘面由若干磁道组成,不同半径的同心圆叫磁道.每条磁道又分为若干个扇区.每个扇区的大小相当于一个盘块.每个盘面的每一面都有一个磁头.柱面指的是不同盘面相同半径的磁道组成的圆柱..
磁盘的类型可分为固定磁头磁盘和移动磁盘磁头.磁盘的访问时间由寻道时间,旋转延迟时间和传输时间构成.(1)寻道时间:指的是把磁头移到指定磁道上所经历的时间.移动一条磁道的时间是常数.为0.2ms…
(1)寻道时间等于启动磁臂的时间(常数2ms)+移动n个磁道的时间..即0.2 * n + 2
(2)旋转延迟时间为转半转所需的时间..一看都是平均数..
(3)传输时间为所读/写的字节数b除以一条磁道上的字节数(除下来即表示b个字节需要转几转)再乘以一转需要的时间..
2. 磁盘调度算法
(1) 先来先服务
没有对寻到进行优化,导致平均寻道时间可能较长.
(2) 最短寻道优先
只要有新的进程要访问的磁道与当前磁头所在磁道距离较近.就会满足此进程而可能导致某些离得远的一直得不到满足.
(3) 扫描算法
又称电梯调度算法,scan算法所考虑的下一个访问对象是按电梯一样的磁头移动方向下,距离正访问磁道最近的对象.容易使距离两端的进程等待将近一来一回的扫描..
(4) 循环扫描算法
CSCAN算法规定了磁头必须单向移动.例如只允许磁头由内向外移动.移动到最外磁道立即返回最里面又重新开始.
3.磁盘的存储
可以按并行交叉存储.即连续的物理块分在不同的盘面上.一次就可以取多个,也可以在一个盘面上按顺序号存储这种效率低.容易读完1号处理完磁盘刚好旋转的把2号错过去,所以还有一种是将物理号连续的间隔起来排列.
肆:输入输出(I/O)管理
(一) I/O管理概述
1. I/O设备的分类
(1) 按传输速率分可分为低速设备(键盘鼠标等),中速设备(激光打印机等),高速设备(磁盘机等)。
(2) 按信息交换的单位分可分为块设备(有结构例如磁盘)和字符设备(常采用中断驱动方式)
(3) 按设备的共享方式可分为独占设备(一段时间内只允许一个进程访问:例如打印机),共享设备(一段时间内允许多个进程同时访问:例如磁盘),虚拟设备(通过虚拟技术将独占设备变为若干台逻辑设备。)
2. I/O管理目标
合理分配设备、提高设备与CPU,各外部设备之间的并行性,提供使用方便且独立与设备的界面。
3. I/O管理功能
(1) 动态的纪录各种设备的状态
(2) 设备分配与回收
(3) 实施设备驱动和中段处理的工作
4. I/O应用接口
(1) 设备和设备控制器的接口:设备和cpu之间不是直接通信的而是夹着一个设备控制器,设备与设备控制器是靠三根线相连的,数据信号线,控制信号线和状态信号线,数据信号线用于在设备和设备控制器之间传送数据信号,控制信号线传送由设备控制器向I/O设备发送控制信号,状态信号线用于传送设备当前状态的信号。
(2) 设备控制器:控制一个或多个I/O设备,其基本功能有接收和识别(cpu发的)命令,数据交换(与cpu或与设备数据交换),标示和报告设备的状态(给cpu发)地址识别,数据缓冲,差错控制。
(3) 设备控制器由三部分组成:设备控制器与处理器的接口(由数据线连接DMR和控制状态寄存器,控制线,和地址线组成),设备控制器与设备的接口(多个设备接口,每个设备接口由数据控制和状态三种信号),I/O逻辑(当cpu启动一个设备时,将启动命令发给I/O逻辑同时通过地址线给I/O逻辑由它进行译码。。译出命令后对所选设备进行控制。所以地址线和控制线是直接跟I/O逻辑相连的。
5. I/O通道
I/O通道是特殊的处理机。它具有执行I/O指令的能力,并通过执行通道程序来控制I/O操作,它的指令单一主要与I/O操作相关的指令,通道没有自己的内存,它和CPU共享内存。通道又分为字节多路通道,数组选择通道,和数组多路通道。
(1) 数组选择通道:又称告诉通道,在物理上可以连接多个设备,但某一段时间内通道只能选择一个设备进行工作
(2) 数组多路通道:当某设备进行数据传送时,通道只为该设备服务,当设备在执行寻址等控制性动作时,通道挂起该设备的通道程序,去为其他设备服务。
(3) 字节多路通道:用于大量低速设备,与设备之间数据传送的基本单位是字节,为一个设备传送一个字节后,又可以为另个设备传送一个字节。数组多路通道传输的基本单位是块。而且一次只能有一个设备在传输数据。
6. I/O控制方式
(1) 程序I/O方式:忙等方式。
(2) 中段驱动I/O方式:当某进程要启动某个I/O设备工作时,便由cpu向相应的设备控制器发出一条I/O命令,然后立即返回继续执行原来的任务,此时,CPU和 I/O设备并行操作。以字节为单位进行I/O。
(3) DMA I/O方式:直接存储器访问方式数据传输的单位是块,数据之间在设备和内存中进行交换,仅块传输的开始和结束时才需要CPU干预。(替代了设备控制 器)。DMA控制器中有四类寄存器:命令寄存器(存cpu发的控制命令或设备的状态),内存地址寄存器,数据寄存器(缓冲数据作用),数据计数器(存本次要读的字节数)。
(4) I/O通道控制方式:通道是通过执行通道程序,并与设备控制器共同实现对I/O设备的控制的。通道指令格式为命令
1)操作码:规定了指令所执行的操作。
2)内存地址:标明读操作和写操作时的内存首址
3)计数:表示本条占领所要读或写数据的字节数
4)通道程序结束位P:用于表示通道程序是否结束
5)记录结束标志R。
(二) I/O核心子系统
1. 高速缓存与缓冲区
引入缓冲区的目的:改善CPU与外围设备之间的速度不匹配矛盾;减少对CPU的中断次数(一个位做缓冲和块做缓冲的差距),提高CPU和I/O设备的并行性。
缓冲分为:单缓冲、双缓冲、循环缓冲、和缓冲池
单缓冲属于临界资源,而且cpu与设备无法进行并行操作。单缓冲只允许各自进程独占。双缓冲一般就有发送缓冲区和接收缓冲区。循环缓冲链成一个环形,不过 需要四个指针,比如分别指向用于读进程和写进程的已用和正在访问的单元,循环缓冲进程属于专用缓冲区。不是所有的进程都能用的。所以系统会有多个这种缓冲区。开销比较大。其实单缓冲和多缓冲也是得设置多个。因为多道程序要是设一个缓冲区岂不是没有并行性了。
缓冲池是个好想法:里面有多个进程可以共享的缓冲区。不过既然要使多个进程共享肯定结构比较复杂。有空闲缓冲区,装满输入数据的缓冲区,装满输出数据的缓冲区还有用于收容输入输出数据的缓冲区。
2. 设备分配
设备分配中设计到4张表的数据结构,设备控制表DCT,控制器控制表COCT,通道控制表CHCT,系统设备表SDT,DCT主要包括设备标示、设备类型(块设备还是字符设备)、设备状态、等待该设备的进程、指向控制器表的指针。COCT同理,包括控制器标示符,控制器状态,与控制器连接的通道指针,等待控制器的进程队列。CHCT同上,不过它包含与该通道相连的控制器表的首地址。SDT表里包含设备控制表,还包含驱动程序入口地址等。
设备管理软件具有层次结构,细分为四级,设备中断处理程序,设备驱动程序,与设备无关的操作系统软件,用户级软件。
逻辑设备名与物理设备是有个映射表的叫逻辑设备表,基本上一个系统一个。或者一个用户一个, 数据项有逻辑设备名,物理设备名和驱动程序入口地址。
3.假脱机技术(SPOOLing)
假脱机技术用辅存的输入输出井替代了以前脱机技术的外围设备机的作用,使对I/O设备的操作变成对输入输出井的操作。多个进程可以同时独享设备实现了虚拟设备的功能,其实设备并没有分给某个进程,而是进程将要处理的数据放到输入输出井中,每个进程在输入输出井中分配的是一个存储区和一张I/O请求表。