精华内容
下载资源
问答
  • 第4章 子程序设计DOS功能调用 4.1 子程序设计 4.1.1 过程调用和返回指令 4.1.2 过程定义语句 4.1.3 子程序举例 4.1.4 子程序说明信息 4.1.5 寄存器的保护与恢复 4.2 主程序与子程序间的参数传递 4.2.1 利用寄存器...
  • 第4章 子程序设计DOS功能调用 4.1 子程序设计 4.1.1 过程调用和返回指令 4.1.2 过程定义语句 4.1.3 子程序举例 4.1.4 子程序说明信息 4.1.5 寄存器的保护与恢复 4.2 主程序与子程序间的参数传递 4.2.1 利用寄存器...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  • 汇编语言程序设计 第二版

    热门讨论 2012-08-12 14:23:02
    8.2.4 中断和子程序调用 8.3 中断功能的分类 8.3.1 键盘输入的中断功能 8.3.2 屏幕显示的中断功能 8.3.3 打印输出的中断功能 8.3.4 串行通信口的中断功能 8.3.5 鼠标的中断功能 8.3.6 目录和文件的中断功能 8.3.7 ...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  • 8086/8088汇编语言程序设计教程

    热门讨论 2008-10-22 22:52:54
    第4章 子程序设计DOS功能调用 4.1 子程序设计 4.1.1 过程调用和返回指令 4.1.2 过程定义语句 4.1.3 子程序举例 4.1.4 子程序说明信息 4.1.5 寄存器的保护与恢复 4.2 主程序与子程序间的参数传递 4.2.1 利用寄存器...
  •  8.1 输入输出的基本概念  1 I/O端口地址  2 I/O指令  8.2 中断  1 中断的基本概念  2 中断指令  3 中断返回指令  4 中断和子程序  8.3 中断的分类  1 键盘输入的...
  • 文章目录前言第一章:概述第一章命题重点:并行性与并发性操作系统的特征操作系统的功能操作系统的接口用户态与核心态中断、异常中断处理和子程序调用区别系统调用什么时候需要进行系统调用?系统调用的过程?第二章...

    前言

    本文主要记录了操作系统在考研408科目的考试重点考察内容,作为自己的一个笔记也是备忘录。供读者参考阅读,也可用于作为后端工程师职位求职的操作系统的复习材料。确定不点赞收藏一波嘛?

    在这里插入图片描述

    文章目录

    第一章:概述

    第一章命题重点:

    1.操作系统的概念、基本特征和功能,并行性与并发性

    2.操作系统提供的接口,命令接口和程序接口。

    3.用户态和核心态,中断和异常,系统调用。

    并行性与并发性

    并行性和并发性是既相似又有区别的两个概念。并行性是指两个或多个事件在同一时刻发生。并发性是指两个或多个事件在同一时间间隔内发生。

    在多道程序环境下,==一段时间内,宏观上有多道程序在同时执行,而在每一时刻,单处理机环境下实际仅能有一道程序执行,故微观上这些程序还是在分时地交替执行。==操作系统的并发性是通过分时得以实现的。

    操作系统的特征

    在这里插入图片描述

    操作系统的功能

    负责进程控制、存储管理、设备管理和文件管理、进程通信,以及向上层用户和应用程序提供一些可调用的系统接口(命令接口、程序接口和GUI)。

    操作系统的接口

    在这里插入图片描述

    用户态与核心态

    在计算机系统中,通常运行着两类程序:系统内核程序和应用程序,为了保证内核程序不被应用程序破坏,为计算机设置了两种状态:核心态(也称为管态)和用户态(也称为目态),内核程序在核心态运行,而应用程序只能在用户态运行。

    在这里插入图片描述

    系统调用如图所示:

    在这里插入图片描述

    中断、异常

    在这里插入图片描述

    中断的本质作用:将CPU的控制权交给操作系统,因此中断发生后CPU状态需要转为核心态。

    中断处理和子程序调用的区别

    子程序调用是程序设计者事先在主程序中安排一条调用指令CALL,子程序的调用时间是固定的。主程序调用子程序的过程完全属于软件处理过程,不需要专门的硬件电路

    在这里插入图片描述

    有中断请求时,先由中断隐指令完成中断前程序的状态保存,主要工作有: 1.关中断; 2.保存PC, PSW(由硬件完成,注:子程序调用是不需要保存程序状态字PSW的。);3.根中据断向量引出对应的中断服务程序(即中断处理程序,属于操作系统内核) ,通用寄存器的保护由中断务程序完成。当中断服务程序运行结束后再开中断

    若系统支持“多重中断”,则多中断系统在保护被中断进程现场时关中断,执行中断处理程序时开中断。

    系统调用

    重点掌握:①什么时候需要进行系统调用?②系统调用的过程?

    什么时候需要进行系统调用?

    系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作"(如存储分配、进行I/0传输以及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。系统调用按功能大致可分为如下几类:

    •设备管理。完成设备的请求或释放,以及设备启动等功能。

    •文件管理。完成文件的读、写、创建及删除等功能。

    •进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。

    •进程通信。完成进程之间的消息传递或信号传递等功能。

    •内存管理。完成内存的分配、回收以及获取作业占用内存区大小及始址等功能。

    理解:可能会影响到其他进程的操作,必然需要通过系统调用请求操作系统代为完成

    系统调用的过程?

    在这里插入图片描述

    第二章 进程控制

    第二章命题重点

    1,进程和线程的比较,内校支持线程和用户级线程。

    2,进程的状态变化,进程的创建与终止,进程的阻塞与唤醒。

    3,作业运行的顺序与甘特图,处理机调度的时机,各种调度算法的特点,特别是高响应比优先调度和多级反馈队列调度算法的原理。

    4,进程的并发执行,临界区互斥软件实现方法,信号量机制的原理,掌握掌握经典的同步互斥问题并能灵活应用。

    5.死锁的判断、安全序列,银行家算法。

    进程与线程

    进程与线程之间的比较

    在这里插入图片描述

    用户级线程VS内核级线程

    用户级线程

    在这里插入图片描述

    用户级线程由应用程序通过线程库实现

    所有的线程管理工作都由应用程序负责(包括线程切换)

    用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。

    在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。(用户级线程对用户不透明,对操作系统透明,操作系统对线程进行调度时仍然以进程为单位调度)

    内核级线程

    在这里插入图片描述

    内核级线程的管理工作操作系统内核完成。线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。

    同时支持用户级线程和内核级线程:

    在同时支持用户级线程和内核级线程的系统中,可采用二者组合的方式:将n个用户级线程映射到m个内核级线程上(n>=m)

    在这里插入图片描述

    注意:操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位!

    例如:左边这个模型中,该进程由两个内核级线程,三个用户级线程,在用户看来,这个进程中,有三个线程。但即使该进程在一个4核处理机的计算机上运行,也最多只能被分配到两个核,最多只能有两个用户线程并行执行

    用户级线程VS内核级线程的总结:

    在这里插入图片描述

    进程状态与进程控制

    进程状态转换

    在这里插入图片描述

    进程的创建与终止

    在这里插入图片描述

    在这里插入图片描述

    进程的阻塞与唤醒

    在这里插入图片描述

    处理机的调度

    调度的基本概念

    调度从作业提交到完成可以分为:作业调度、中级调度和进程调度三个层次:

    在这里插入图片描述

    调度的原则

    在这里插入图片描述

    进程调度的优先级

    根据进程创建后其优先级是否可以改变,可以将进程优先级分为以下两种:

    (1)静态优先级。在进程投入运行前就确定一个优先级,并且之后一直不变。(通常:系统进程优先级高于用户进程;前台进程优先级高于后台进程I/0型进程(或称I/O繁忙型进程)优先级高于计算型进程(CPU繁忙型进程) 。 )

    (2)动态优先级。在进程运行过程中,根据进程情况的变化动态调整优先级

    不能进行处理机调度的情况

    在操作系统内核程序运行时,如果某时发生了引起进程调度的因素,并不一定能够马上进行调度与切换。不能进行进程的调度与切换的情况有以下几种:

    1)在处理中断的过程中:中断处理过程复杂,在实现上很难做到进程切换,而且中断处理是系统工作的一部分,逻辑上不属于某一进程,不应被剥夺处理机资源

    2)进程在操作系统内核程序临界区(内核临界区用于访问关键区域的数据结构,并非普通的临界区)中:进入临界区后,需要独占式地访问共享数据,理论上必须加锁,以防止其他并行程序进入,在解锁前不应切换到其他进程运行。

    3)其他需要完全屏蔽中断的原子操作过程中:如加锁、解锁、中断现场保护、恢复等原子操作。在原子过程中,连中断都要屏蔽,更不应该进行进程调度与切换。

    如果在上述过程中发生了引起调度的条件,并不能马上进行调度和切换,应置系统的请求标志,直到上述过程结束后才进行相应的调度与切换

    典型作业/进程调度算法

    在这里插入图片描述

    在这里插入图片描述

    进程同步与互斥

    为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则:

    1,空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区;

    2,忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待;

    3,有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿) ;

    4,让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。

    互斥的四种软件实现方式–单标志法、双标志先检查法、双标志后检查法、Peterson算法。

    临界区互斥的软件实现方法

    对于两个进程P0,P1互斥访问临界区的软件实现方法:

    在这里插入图片描述

    备注:单标志法违背了“空闲让进”原则。

    在这里插入图片描述

    备注:双标志先检查法违背了“忙则等待”原则。(先检查后上锁

    在这里插入图片描述

    备注:双标志后检查法违背了“空闲让进”和“有限等待”原则。(先上锁后检查

    在这里插入图片描述

    turn变量的设置-单标志的思想

    flag数组的设置-双标志的思想

    备注:皮特森算法违背了“让权等待”原则,暂时不能进入临界区的进程还会占用处理机。(轮询

    信号量机制

    整型信号量被定义为一个用于表示资源个数的整型量S。当进程发现S≤0时,就会不断测试。因此进程处于忙等状态,未遵循“让权等待”原则

    void wait (int S) { 
        //wait原语,相当于"进入区": 
        while (5 <=0); //如果资源数不够,就一直循环等待
        S=S-1;//如果资源数够,则占用一个资源
    }
    void signal (int s) { 
         //signal 原语,相当于“退出区"
         S=S+1;//使用完资源后,在退出区群放资源
    }
    

    记录型信号量遵循了“让权等待”原则,其数据结构描述:

    typedef struct{
     	int value;//代表资源数目
        struct process *L; //链接等待该资源的进程   
    }semaphore;
    

    记录型信号量的过程:信号量的P,V操作的实质是“加减”操作, P. V操作又是原语操作,所以, P操作是对信号量(只能对信号量,不可以对普通变量)进行减“1”操作,然后判断是否小于零, “是”则阻塞等待(将该进程挂到阻塞队列process *L的后面), “否”则什么都不做,而V操作是对信号量加"1”操作,然后判断是否小于等于零,“是”则唤醒进程(“是”表示当前有进程在等待该资源), “否”则什么也不做(“否”代表当前没有进程在等待该资源)。

    录型信号量s中value值意义:

    S.value的初值表示系统中某类资源的总数

    •S.value<0表示当前系统中已经没有可用的该类资源

    •S.value<0时,其绝对值表示S.L中因等待该资源而阻塞的进程个数

    经典的同步问题

    生产者-消费者问题

    生产者、消费者共享一个初始为空、大小为n的缓冲区。

    只有缓冲区没满时,生产者才能把产品入缓冲区,否则必须等待

    只有缓冲区不空时,消费者才能从中取出产品,否则必须等待

    缓冲区是临界资源,各进程必须互斥地访问

    semaphore mutex = 1;//互斥信号量,实现对缓冲区的互斥访问
    semaphore empty =n;//同步信号量,表示空闲缓冲区的数量
    semaphore full = 0;//同步信号量,表示产品的数量,也即非空缓冲区的数量
    
    //生产者
    producer () {
        while(1) {
            生产一个产品;
            P(empty);//消耗一个空闲缓冲区
            
            P(mutex);//这里的 P(mutex)放在 P(empty) 的后面是为了防止死锁(1.缓冲区为空,消费者需要拿产品 2.缓冲区为满,生产者需要放产品)
            把产品放入缓冲区;
            V(mutex);
            
            V(full);//增加一个产品
        }
    }
    
    //消费者
    consumer () { 
        while (1) {
            P(mutex);
            p(full);//消耗一个产品
            从缓冲区取出一个产品;
            V(mutex);
            
            V(empty);//增加一个空闲缓冲区
            使用产品;
        }
    }
    
    读者-写者问题

    有读者和写者两组并发进程,共享一个文件,当两个或两个以上的读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时则可能导致数据不一致的错误

    因此要求: ①允许多个读者可以同时对文件执行读操作; ②只允许一个写者往文件中写信息; ③任一写者在完成写操作之前不允许其他读者或写者工作; ④写者执行写操作前,应让己有的读者和写者全部退出。

    关键:写者与写者需要互斥,写者与读者也需要互斥,但读者与读者不互斥

    解决“读者与写者互斥,但读者与读者不互斥”的核心在于设置了一个计数器count用来记录当前正在访问共享文件的读进程数,我们可以用count的值来判断当前进入的程是否是第一个/最后一个读进程,从而做出不同的处理

    semaphore rw =1;//用于实现对文件的互斥访问。表示当前是否有进程在访问共享文件
    int count =0;//记录当前有几个读进程在访问文件
    semaphore mutex = 1; //用于保证对count变量的互斥访问
    semaphore w=1; //用于实现"写优先"
    
    writer (){ 
        while (1) {
           P(w);
           P(rw); //之前"加锁
           写文件….
           V(rw);//写之后“解锁"
           V(w);
        }
    }
    
    reader (){ 
        while (1) {
            P(w);
            P(mutex);
            if(count==0)
                P(rw);
            count++;
            V(mutex);
            V(w);
            读文件...
            P(mutex);
            count--;
            if(count==0)
                V(rw);
            V(mutex);
        }
    }
    

    备注:这里的P(w)和V(w)是为了防止writer饥饿。

    哲学家进餐问题

    问题描述:

    在这里插入图片描述

    一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆一根筷子,桌子的中间是一碗米饭。哲学家们倾注毕生的精力用于思考和进餐,哲学家在思考时,并不影响他人。只有当哲学家饥饿时,才试图拿起左、右两根筷子(一根一根地拿起) 。如果筷子已在他人手上,则需等待。饥饿的哲学家只有同时拿起两根筷子才可以开始进餐,当进餐完毕后,放下筷子继续思考。

    semaphore chopstick[5]={1,1,1,1,1};
    semaphore mutex=1;//互斥地取筷子
    Pi(){
        while(1){
            P(mutex);
            P(chopstick[i]);//拿左
            P(chopstick[(i+1)%5]);//拿右
            V(mutex);
            吃饭.....
            V(chopstick[i]);//放左
            V(chopstick[(i+1)%5]);//放右
            思考.....
        }
    }
    

    死锁

    死锁条件

    产生死锁必须同时满足以下四个条件,只要其中任一个条件不成立,死锁就不会发生

    •互斥条件:在一段时间内某资源仅为一个进程所占有(互斥资源)。此时若有其他进程请求该资源,则请求进程只能等待。

    •不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放。

    •请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己己获得的资源保持不放。

    •循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链下一个进程所请求

    预防死锁:破坏死锁产生的四个必要条件中的一个或几个

    避免死锁:用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法) 。

    死锁的检测和解除:允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施来解除死锁。(Key:资源分配图--两种结点?两种边分表代表什么?什么是“可完全简化”?

    系统安全状态

    安全状态,是指系统能按某种进程推进顺序( P, P2,.., Pn),为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺序地完成。此时称P1, P2, …, Pn为安全序列。如果系统无法找到一个安全序列,则称系统处于不安全状态。==并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状态;==反之,只要系统处于安全状态,系统便可以避免进入死锁状态。

    银行家算法的数据结构

    在这里插入图片描述

    银行家算法的执行过程

    数据结构:

    长度为m的一维数组Available表示还有多少可用资源

    n*m矩阵Max表示各进资源的最大需求数

    n*m矩阵Allocation表示已经给各进程分配了多少资源

    Max-Allocation = Need矩阵表示各进程最多还需要多少资源

    用长度为m的一位数组Request表示进程此次申请的各种资源数

    在这里插入图片描述

    银行家算法步骤

    ①检查此次申请是否超过了之前声明的最大需求数(需确保Need[i]≥Request i

    ②检查此时系统剩余的可用资源是否还能满是这次请求(需确保Available ≥ Request i) 。

    ③试探着分配,更改各数据结构(Available -= Request i ; Allocation[i] += Request i ; Need = Max-Allocation)

    ④用安全性算法检查此次分配是否会导致系统进入不安全状态。

    安全性算法步骤

    ①检查当前可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收。

    ②不断重复上述过程,看最终是否能让所有进程都加入安全序列。

    第三章 内存管理

    第三章命题重点

    1,程序装入的过程与原理,编译与链接,逻辑地址与物理地址。

    2,连续分配方式的原理与特点,动态分区分配算法的原理。

    3,分页存储管理的页表机制,分段存储管理的段表机制,分页与分段的比较

    4,虚拟存储器的原理、特征,缺页中断的处理过程和特点,虚拟地址和物理地址的变换引入快表后的页式虚拟存储器的地址变换过程,各种页面置换算法的原理,页面分配策略,工作集的定义,抖动产生的原因和解决办法。

    内存管理的概念

    程序运行的基本原理

    将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤:

    •编译,由编译程序将用户源代码编译成若干个目标模块,每个模块具有各自的逻辑地址空间。

    •链接,由链接程序将上述目标模块,以及所需库函数链接,形成具有完整的逻辑地址空间的装入模块。

    •装入,由装入程序将装入模块装入内存

    而程序执行的过程中,在指令寻址与数据寻址时, CPU不断地进行从逻辑地址到物理地址的转换。图3-1展示了从源程序(C程序为例)变为在内存中执行的程序的过程。

    在这里插入图片描述

    连续分配管理方式

    在这里插入图片描述

    非连续分配管理方式
    分页存储管理方式

    在这里插入图片描述

    分段存储管理方式

    在这里插入图片描述

    在这里插入图片描述

    分页式存储与分段式的对比

    在这里插入图片描述

    虚拟页式存储管理
    虚拟存储器的定义和特征

    基于局部性原理,在程序装入时,可以将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存。另一方面,操作系统将内存中暂时不使用的内容换出到外存上。这样,系统好像,为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。

    虚拟存储器有以下三种实现方式:请求分页;请求分段;请求段页式。

    虚拟存储器有以下三个主要特征:多次性;对换性;虚拟性

    虚拟存储器的容量取决于地址空间(指令的逻辑地址空间)的大小,而不是由实际的内存容量决定。

    缺页中断机构

    产生缺页中断的目的要将位于外存上的代码或数据装入内存,此时应将缺页的进程阻塞(调页完成唤醒),如果内存中有空闲块,则分配一个块,将要调入的页装入该块,并修改页表中相应页表项,若此时内存中没有空闲块,则需要淘汰某页

    缺页中断作为中断同样要经历,诸如保护CPU环境、分析中断原因、转入缺页中断处理程序、恢复CPU环境等几个步骤。但与一般的中断相比,它有以下两个明显的区别:

    在指令执行期间产生和处理中断信号,而非一条指令执行完后

    一条指令(多地址指令)在执行期间,可能产生多次缺页中断

    快表

    在这里插入图片描述

    时钟置换算法

    系统为每一帧关联一个附加位,称为使用位。

    置换原则:

    ①将候选帧集合看做一个循环缓冲区。

    ②当需要替换一页时,从当前指针位置开始查找首个使用位为0的帧。查找过程重复以下操作直至找到为止:

    若帧的使用位为0,则该帧中的页被替换,其使用位被置为1,并将指针指向缓冲区中的下一帧

    若帧的使用位为1,操作系统就将该位重新置为0,并查找缓冲区的下一帧

    改进型的时钟置换算法

    简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过,就不需要执行I/0操作写回外存;只有被淘汰的页面被修改过时,才需要写回外存。

    因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。在其他条件都相同时,应优先淘汰没有修改过的页面,避免I/0操作。这就是改进型的时钟置换算法的思想。修改位=0,表示页面没有被修改过;修改位=1,表示页面被修改过。为方便讨论,用(访问位,修改位)的形式表示各页面状态。如(1, 1)表示一个页面近期被访问过,且被修改过。

    算法规则:

    算法规则:将所有可能被置换的页面排成一个循环队列。

    第一轮:从当前位置开始扫描到第一个(0,0)的帧用于替换。本轮扫描不修改任何标志位。(第一优先级:最近没访问,且没修改的页面。

    第二轮:若第一轮扫描失败,则重新扫描,查找第一个(0,1)的帧用于·替换。本轮将所有扫描过的帧访问位设为0。(第二优先级:最近没访问,但修改过的页面。

    第三轮:若第二轮扫描失败,则重新扫描,查找第一个(0,0)的帧用于、替换。本轮扫描不修改任何标志位。(第三优先级:最近访问过,但没修改的页面。

    第四轮:若第三轮扫描失败,则重新扫描,查找第一个(0,1)的帧用于、替换。 (第四优先级:最近访问过,且修改过的页面。

    页面置换策略

    固定分配局部置换。它为每个进程分配一定数量的物理块,在整个运行期间都不改变。若进程在运行中发现缺页,则只能从该进程在内存的页面中选出一个换出,然后再调入需要的页面。

    可变分配全局置换。这是最易于实现的物理块分配和置换策略,为系统中的每个进程分配一定数量的物理块,操作系统自身也保持一个空闲物理块队列。当某进程发现缺页时,系统从空闲物理块队列中取出物理块分配给该进程,并将欲调入的页装入其中。

    可变分配局部置换。它为每个进程分配一定数目的物理块,当某进程发现缺页时,只允许从该进程在内存的页面中选出一页换出,这样就不会影响其他进程的运行。如果进程在运行中频繁地缺页,系统需再为该进程分配若干附加物理块,直至该进程缺页率趋于适当程度为止; 反之,若一个进程在运行过程中缺页率特别低,则此时可适当减少分配给该进程的物理块

    工作集(驻留集)

    =某段时间间隔内,进程要访问的页面集合。经常被使用的页面需要在驻留集中,而长期不被使用的页面要从驻留集中被丢弃。驻留集模型使用较为简单:操作系统跟踪每个进程的驻留集,并为进程分配大于其工作集的空间,如果还有空闲,那么可启动另一个进程。如果所有驻留集之和增加以至于超过了可用物理块的总数,那么系统会暂停一个进程,将其页面调出并且将其物理块分配给其他进程。

    正确选择驻留集的大小,对存储器的有效利用和系统吞吐量的提高,都将产生重要的影响

    抖动
    抖动现象

    在进程的页面置换过程中,频繁的页面调度行为称为抖动或颠簸

    如果一个进程在换页上用的时间多于执行时间,那么这个进程就在颠簸。

    使用虚拟内存技术,操作系统中进程通常只有一部分块位于主存中,从而可以在内存中保留更多的进程以提高系统效率。产生抖动后,使得系统吞吐量下降,缺页中断率迅速增长,由于处理机差不多花费所有时间在进行内外存页面管换,因此几乎不能做任何工作。

    引起系统抖动的原因是对换的信息量过大、内存容量不足、置换算法选择不当,所以解决的办法就是降低交换页面的数量、加大内存容量、改变置换选择算法。但是降低交换页面数量和改变置换选择算法对于一个应用系统来讲是不可能的,只能增加内存容量,或者降低进程数量(相对地增加内存),而增加交换区容量并不能解决物理内存不足的问题

    第四章 文件管理

    第四章 命题重点

    1,绝对目录与相对目录,文件控制块,文件共享的两种方法,文件的打开与关闭。

    2,文件的几种物理结构及特点, FCB的存储方式及原因,混合索引分配方式。

    3,各种磁盘调度算法的原理,特别是SCAN和CSCAN

    目录结构

    绝对路径与相对路径

    用户要访问某个文件时用文件路径名标识文件,文件路径名是个字符串,由从根目录出发到所找文件的通路上的所有目录名与数据文件名用分隔符"/"链接起来而成。

    绝对路径:从根目录出发的路径

    相对路径:==从用户(进程)的当前目录出发到所找文件通路上所有目录名与数据文件名用分隔符“/"链接而成。==进程对各文件的访问都是相对于当前目录进行的,设置当前目录有利于加快文件的检索速度

    文件控制块

    文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取"。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,成为目录项

    FCB主要包含以下信息:

    基本信息,如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等。

    存取控制信息,如文件存取权限等。

    使用信息,如文件建立时间、修改时间等。

    文件共享和文件保护

    文件共享

    (1)硬链接

    文件共享硬链接共享采用索引结点方式。在树形结构的目录中只设置文件名及指向相应索引结点的指针。共享文件的用户目录中都设置指向该文件索引结点的指针。在索引结点中还应有一个链接计数count,用于表示链接到本索引结点(亦即文件)上的用户目录项的数目,当count >1时,文件拥有者不能将文件删除,如图4-1所示。

    在这里插入图片描述

    优点:实现了异名共享

    缺点:文件拥有者不能删除与他人共享的文件。

    (2)符号链(软链接)

    在利用符号链实现文件共享时,只有文件的拥有者才拥有指向其索引结点的指针。当用户B要共享用户A的一个文件F时,可以由系统在用户B的目录下创建一个只包含被共享文件F的路径名的LINK类型的新文件。称这样的链接方法为符号链接。

    优点:文件拥有着可以删除被他人共享的文件

    缺点:当其他用户读共享文件时,需要根据路径名的各个分量逐个查找,访问开销大。"

    文件的操作

    文件的创建和删除

    1)创建文件:创建文件有两个必要步骤,一是在文件系统中为文件找到空间;二是在目录中为新文件创建条目,该条目记录文件名称、在文件系统中的位置及其他可能信息。

    2)删除文件:先从目录中找到要删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间(包括文件控制块、缓冲区等)

    文件的打开

    许多系统要求在首次使用文件时,使用系统调用open.操作系统维护打开文件表(open-file table),当需要一个文件操作时,可通过该表的一个索引指定文件,就省略了搜索环节。当文件不再使用时,进程可以关闭它,操作系统从打开文件表中删除这一条目。

    如果调用open的请求(创建、只读、读写、添加等)得到允许,进程就可以打开文件,而open通常返回一个指向打开文件表中的一个条目的指针。通过使用该指针(而非文件名)进行所有I/0操作,以简化步骤并节省资源。

    常用系统调用

    在这里插入图片描述

    文件实现

    文件分配方式

    在这里插入图片描述

    在这里插入图片描述

    混合索引分配方式

    混合索引分配把所有的地址项分成两类,即直接地址和间接地址。如图4-2所示。

    直接地址

    每项中所存放的是该文件数据所在盘块的盘块号。

    一次间接地址

    每项一次间接地址指向一个一次间址块(索引块),一次间址块存放着文件的多个盘块号。

    二次间接地址

    每项二次间址地址指向一个二次间址块,二次间址块中记入所有一次间址块的盘号。

    在这里插入图片描述

    磁盘组织与管理

    一次磁盘读写操作的时间由寻找(寻道)时间、延迟时间和传输时间决定:

    在这里插入图片描述

    常见的磁盘调度算法:

    在这里插入图片描述

    第五章 设备管理

    第五章 命题重点

    1,各种I/0控制方式、特点及适用情况。

    2,I/0软件的层次结构,设备无关性的原理。

    3.I/0调度,单缓冲和双缓冲的原理及性能分析。

    I/O软件的层次结构

    在这里插入图片描述

    I/O调度与缓冲区

    I/O调度的概念

    I/0调度就是确定一个好的顺序来执行这些I/O请求。应用程序所发布的系统调用的顺序不一定总是最佳选择,所以需要I/O调度来改善系统整体性能,使进程之间公平地共享设备访问,减少I/O完成所需要的平均等待时间

    单缓冲与双缓冲

    单缓冲。在设备和处理器之间设置一个缓冲区。设备和处理器交换数据时,先把被交换数据写入缓冲区,然后需要数据的设备或处理器从缓冲区取走数据,能够实现预读和滞后写。(缓冲区满->取数据;缓冲区空->写数据

    在这里插入图片描述

    双缓冲,在设备与处理器之间设置两个缓冲区。I/O设备输入数据时,两个缓冲区交替使用。双缓冲的使用提高了处理器和输入设备的并行操作的程度

    在这里插入图片描述

    设备的分配与回收

    逻辑设备与物理设备

    为了提高设备分配的灵活性和设备的利用率、方便实现I/0重定向,引入了设备独立性。设备独立性是指应用程序独立于具体使用的物理设备。而为了实现设备独立性引入了逻辑设备和物,理设备这两个概念。在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,则使用物理设备名称逻辑设备名与物理设备名通过系统中设置的一张逻辑设备表(LUT)进行映射

    展开全文
  • 文章目录I/O系统概述I/O系统组成I/O 设备分类常见IO设备输入设备输出设备外存储器(辅助存储器)I/O接口设备控制...程序中断和调用子程序有何区别?系统调用和函数调用和进程切换有什么区别?(宏观上分析)一点探究I/O

    I/O系统概述

    I/O系统组成

    • I/O软件

      • 包括驱动程序、用户程序、管理程序、升级补丁等
      • 采用I/O指令和通道指令实现CPU和I/O设备的信息交换
    • I/O硬件

      • I/O设备、设备控制器、接口和I/O总线

    I/O 设备分类

    IO设备被当做一种特殊的文件

    根据使用特性分类

    • 人机交互式设备:鼠标,打印机
    • 网络通信设备:网络接口,调制解调器
    • 存储设备:外存,辅存

    根据传输速率分类

    • 低速设备:键盘,鼠标

    • 中速设备:行式打印机,激光打印机

    • 高速设备:磁盘机,磁带机

    根据信息交换单位分类

    • 块设备

      • 传输速率较高,可寻址(即可随机读/写任一块)

      • 常采用DMA方式

      • 数据传输的基本单位是“块”,如磁盘

    • 字符设备

      • 传输速率较慢,不可寻址
      • 常采用中断驱动方式
      • 数据传输的基本单位是字符,如鼠标、键盘

    根据共享属性/设备分配方式分类

    • 共享设备

      • 在一段时间内允许多个进程同时访问的设备(并发访问)

      • 一般采用动态分配

      • 分配共享设备不会引起进程死锁

      • 共享设备必须是可随机访问和可寻址的设备【我想这个要求是从效率考虑的。假设磁盘只能顺序访问,那么同时打开磁盘上的两个文件,这切换的代价也太大了】

    • 独占设备(属于临界资源)

      • 一段时间内只允许一个用户(进程)访问的设备
      • 可采用动态分配和静态分配,一般采用静态分配
      • 分配独占设备可能引起进程死锁(动态分配)
    • 虚拟设备

      • 以SPOOLing方式使用外部设备,通过虚拟技术将一台独占设备变换为若干台逻辑设备,供若干个用户(进程)同时使用

    常见IO设备

    在这里插入图片描述

    输入设备

    • 键盘

    • 鼠标

      • 光电式
      • 机械式

    输出设备

    显示器

    • 种类

      • 阴极射线管(CRT)显示器

        • 字符显示器

          • 将字符的点阵存入由 ROM 构成的字符发生器中,在 CRT 进行光栅扫描的过程中,从字符发生器中依次读出某个字符的点阵,按照点阵中 0 和 1 代码的不同控制扫描电子東的开或关,从而在屏幕上显示字符
          • 对应于每个字符窗口,所需显示字符的 ASCI 代码被存放在视频存储器 VRAM 中,以备刷新
        • 图形显示器

          • 将所显示图形的一组坐标点和绘图命令组成显示文件存放在缓冲存储器中,缓存中的显示文件传送给矢量(线段)产生器,产生相应的模拟电压,直接控制电子束在屏幕上的移动。为在屏幕上保留持久稳定的图像,需按一定的频率对屏幕反复刷新。
      • LCD 显示器

        • 由液态晶体组成的显示屏
      • LED

        • 由发光二极管组成的显示屏
        • LED在亮度、功耗、刷新速率等方面都比LCD更具优势
    • 参数

      • 屏幕大小

        • 对角线长度表示,单位英寸
      • 分辨率

        • 所能显示的像素点个数
      • 灰度级

        • 在黑白显示器中表示所显示的像素点的亮暗差别
        • 在彩色显示器中则表现为颜色的不同
        • 典型的RGB,就是256级灰度
      • 刷新

        • 光点只能保持极短的时间便会消失
      • 刷新频率

      • 显示存储器(VRAM)

        • 也叫刷新存储器
        • 为了刷新图像,需要把一帧图像存储在刷新存储器中。分辨率越高,灰度级越多,需要的容量就越大
        • VRAM容量=分辨率*灰度级位数

    打印机

    • 工作原理(印字原理、打字方式)

      • 按打印元件对纸是否有击打动作

        • 击打式打印

          • 利用机械动作使印字机构与色带和纸张相撞而打印字符
        • 非击打式打印

          • 用各种物理或化学的方法印刷字符的
      • 按打印字符结构

        • 点阵式打印
        • 全形字打印机
    • 针式打印机

      • 针式打印机擅长多层复写打印,银行中出票据的那个嘟嘟嘟 嘟嘟嘟的就是
      • 工作原理简单,造价低廉,耗材(色带)便宜,但是打印分辨率低,打印速度慢
    • 喷墨式打印机与激光打印机

      • 打印清晰度

        • 喷墨打印机的分辨率相对更高一些,但是清晰度还是激光打印机更高一些
      • 适用纸张

        • 喷墨打印机可使用的纸张种类非常多
        • 激光打印机只适用普通的纸张
      • 耗材

        • 对于经济性打印机来说,墨盒的价格甚至可能比打印机本身还要高,普遍的理论打印页数(A4纸5%覆盖率)只有200-300页;而激光打印机虽然其硒鼓墨粉价格稍高,但是打印页数比喷墨打印机要高出数倍,因此激光打印机具有打印成本上的绝对优势。
      • 打印速度

        • 喷墨打印机的打印方式是逐个
        • 激光打印机是逐页
      • 价格

        • 喷墨打印机的价格较为低廉

    外存储器(辅助存储器)

    • 磁盘存储器

      • 见 OS 第六章 文件管理
    • 磁盘阵列

      • RAID 指将多个独立的物理磁盘组成一个逻辑盘,数据在多个物理盘上分割交叉存储、并行访问,具有更好的存储性能、可靠性和安全性
      • 通过同时使用多个磁盘,提高了传输率
      • 通过在多个磁盘上并行存取来大幅提高存储系统的数据吞吐量
      • 通过镜像功能,提高安全可靠性
      • 通过数据校验,提供容错能力
    • 光盘存储器

    • 固态硬盘

      • 基于 Flash Memory

    I/O接口

    设备控制器(I/O控制器)

    设备控制器是计算机中的一个实体, 其主要职责是控制一个或多个 I/O 设备, 以实现 I/O 设备和计算机之间的数据交换。 它是 CPU 与 I/O 设备之间的接口, 它接收从 CPU 发来的命令,并去控制 I/O 设备工作。

    设备控制器的(组成)基本功能

    在这里插入图片描述

    • 控制寄存器:接收和识别 CPU 或通道发出的命令

      磁盘控制器可以接收 CPU 发来的 Read、 Write、 Format 等 15 条不同的命令

    • 数据寄存器:实现主机和外设的数据交换

      **CPU 与控制器之间:**通过数据总线,由 CPU 并行地把数据写入控制器,或从控制器中并行地读出数据(如果是 DMA 或通道方式的话,那就是“主存”与控制器)

      **控制器与设备之间:**设备将数据输入到控制器,或从控制器传送给设备

    • 状态寄存器:标识和报告设备的状态

      记录 IO 设备的状态,例如,仅当该设备处于发送就绪状态时,CPU才能启动控制器从设备中读出数据

    • 地址译码器:地址识别和设备选择

      每个设备控制器的寄存器都有唯一的地址,详见计组

      **内存映象I/O:**控制器中的寄存器与内存地址统编址,可以采用对内存进行操作的指令来对控制器进行操作

      **寄存器独立编址:**控制器中的寄存器使用单独的地址,需要设置专门的指令来操作控制器

    • 数据缓冲,使用缓冲器缓和CPU与IO设备的速度差异

    • 信号格式的转换,实现电平转换、串/并转换、模/数转换等

    • 差错控制,若传送中出现了错误,向 CPU 报告,CPU 将重新进行一次传送

    I/O 接口的类型

    按数据传送方式

    • 并行接口
    • 串行接口

    按I/O控制方式

    • 程序查询接口
    • ……

    按功能选择的灵活性

    • 可编程接口
    • 不可编程接口

    I/O端口

    概念与组成

    I/O端口指设备控制器中可被CPU直接访问的寄存器

    在这里插入图片描述

    • 数据端口(数据缓冲寄存器)
    • 状态端口(状态寄存器)
    • 控制端口(控制寄存器)

    编址方式

    • 统一编址

      • 又称存储器映射方式,即把 I/O 端口当作存储器的单元进行地址分配

      • 不需要特殊的 I/O 指令,使用访存的指令即可

      • 优点

        • 端口拥有较大的编址空间
        • 访问 I/O 的操作更加灵活、方便
      • 缺点

        • 端口占用了存储器地址,内存容量变小

        • 执行速度教慢

          这个应该是访存指令比较慢的问题

    • 独立编址

      • 又称IO映射方式,IO端口的地址空间与主存地址空间是两个独立的地址空间

      • 需要设置专门的IO指令来访问IO端口

      • 优点

        • IO指令与存储器指令区别明显,程序编制清晰
      • 缺点

        • I/O指令少
        • 需要 CPU 提供存储器读/写、I/O 设备读/写两组控制信号,增加了控制的复杂性

    中断

    基本概念

    程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求, CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。

    这里给的定义是外中断,是狭义上的中断,也是我们通常指的中断,因为内中断并不一定能够回到程序的断点处继续执行。

    中断的分类

    中断请求一般来自于CPU以外的事件,异常一般发生在CPU内部

    • 内中断(异常)

      • 陷入 trap

        • 由陷入指令(又叫trap指令、自陷指令、访管指令)引起的
      • 故障 fault

        • 硬件故障(优先级最高的中断),可能被修复,修复故障后,内核会把CPU使用权还给应用程序。例如:缺页故障
      • 终止 abort

        • 软件中断,一般由致命错误引起,不可恢复,内核会终止改程序,例如:除数为0,非法使用特权指令,浮点数上溢(注意下溢做机器零处理,不需要中断来处理)
    • 外中断(中断)

      通常说中断,仅指狭义上的中断,也就是硬中断,(2017年统考题也是这样认为的)

      • 人工干预强制停止一个进程
      • 时钟中断
      • I/O中断请求

    可屏蔽中断与不可屏蔽中断

    • 可屏蔽和不可屏蔽中断都属于外中断,因为内中断是无法控制的,也就不存在能否屏蔽一说

    • INTR Interrupt Require

      • 对于可屏蔽中断,除了受本身的屏蔽位的控制外,还都要受一个总的控制,即CPU标志寄存器中的中断允许标志位IF(Interrupt Flag)的控制,IF位为1,可以得到CPU的响应,否则,得不到响应。
    • NMI Nonmaskable Interrupt

      • 不可屏蔽中断就是CPU必须响应的外中断,它的中断类型码固定为 2 ,所以由它引发的中断过程中没有取得中断类型码的那一步。不过后面三步还是一样的。

    开中断与关中断

    • 关中断是为了保护一些不能中途停止执行的程序而设计的,例如中断处理时CPU恢复现场的过程是不允许被其他的程序打扰的,此时就要启动关中断,不再相应其他的请求。当现场恢复完毕后,CPU启动开中断。
    • 关中断期间,不响应可屏蔽中断

    中断请求/响应过程

    • 中断请求

      • 中断源向 CPU 发送中断信号
    • 中断判优

      • 多个 IO 设备在下一个总线周期到来之前,发出了中断请求,则需要进行判优,使用硬件排队器或中断查询程序

      • 一般是有中断固定级别的

        • 硬件故障优先级最高
        • DMA 请求高于一般总线请求
        • 高速设备优于低速设备
        • 输入设备优于输出设备
        • 实时设备优于普通设备
        • ……
    • 响应中断的条件

      • CPU 允许中断及开中断
      • 一条指令执行完毕,且没有更紧迫的任务

    中断处理过程

    在这里插入图片描述

    • 中断隐指令

      • 关中断

        • 在保护现场的过程中,CPU 不应响应更高级中断源的中断请求
      • 保存断点

        • 保存原来程序的断点【PC的内容】
        • 可以保存在堆栈中,也可以保存在指定单元
      • 引出中断服务程序

        • 取出中断服务程序的入口地址并传送给 PC

        • 中断向量

          • 中断向量是中断服务程序的入口地址
          • 系统中的全部中断向量集中存放到存储器的某个区域内,称为中断向量表
          • 中断向量地址是指中断服务程序的入口地址的地址
    • 保存现场和屏蔽字

      • 中断处理程序一定会保存的只有PC和PSWR两个寄存器

        关于是否需要保存通用寄存器,和调用子程序一样,只有当子程序/中断处理程序中覆盖掉了某个通用寄存器,才会进行保存。
        与进程切换不同的是,进程切换属于CPU上下文的切换,一定会保存所有的通用寄存器

    • 开中断

      • 为了实现多重中断
    • 执行中断服务程序

      • 这才是中断请求的最终目的
    • 关中断

      • 保证在恢复现场和屏蔽字时不被中断
    • 恢复现场和屏蔽字

      • 将现场和屏蔽字恢复到原来的状态
    • 开中断、中断返回

      • 返回到原程序的断点处,继续执行原程序

    I/O 控制方式

    程序直接控制方式

    从外存读取数据,CPU需要对外设状态进行循环检査,直到确定该字已经在O控制器的数据寄存器中。

    存在问题

    I/O 设备无法向 CPU 报告自己完成了 I/O 操作,所以只能处理机不断循环询问 I/O 设备是否完成,别的啥也不干了,CPU 和 I/O 设备只能串行工作,CPU 利用率极低,属于忙等方式

    中断驱动 I/O 控制方式

    CPU 与 I/O 设备并行工作,仅当输完一个数据时,才需 CPU 花费极短的时间去做些中断处理

    以字(节)为单位进行 I/O 的,每当完成一个字(节)的 I/O 时,控制器便要向 CPU 请求一次中断,所以 I/O 中断方式主要用在键盘、键盘等中速设备

    存在问题

    不适用于高速设备,如果用于磁盘就太低效了,1KB 的数据需要中断 1K 次

    直接存储器访问(DMA)方式

    中断驱动 I/O 控制方式中,I/O 设备与内存之间的数据交换需要经过CPU中转,DMA 的基本思想是,在 I/O 设备和内存之间开辟一条**“直接的数据通路”**,彻底解放 CPU

    “直接的数据通路”:DMA 的这条数据通路是逻辑上的,其实就是总线,不过 DMA 请求具有更高的响应性,CPU 需要礼让 DMA 请求

    数据传输的基本单位是数据块,从设备直接送入内存(或者相反),仅在传送一个或多个(连续的)数据块的开始和结束时,才需 CPU 干预,整块数据的传送是在控制器的控制下完成的

    周期窃取

    又叫周期挪用,是指利用CPU不访问 存储器的那些周期来实现DMA操作

    存在问题

    CPU 每发出一次 I/O 指令,只能读/写一个或多个连续的数据块(别管是几个,必须是连续的),希望进一步减少 CPU 的干预,于是有了通道控制方式

    DMA与中断控制方式对比

    在这里插入图片描述

    I/O 通道控制方式

    DMA 方式的进一步发展:

    • 把对一个数据块的读(或写)为单位的干预减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预
    • DMA 方式需要 CPU 来控制传输数据块的大小,传输的内存地址,而通道方式中,这些信息是由通道决定的
    • 一个 DMA 控制器对应一台设备,而一个通道可以对应多个 I/O 控制器(一个 I/O 控制器又可以控制多台同类型设备)

    I/O 通道

    一种硬件,可以视为“弱鸡版”CPU

    I/O 处理机

    用一个功能较弱的计算机管理 I/O,彻底解放 CPU,硬件结构最复杂。这个方式下,IO 操作几乎全部由外围处理机来完成,此时外围处理机类似一个小型 PC,很多时候也把通道称为IO处理机,OS中很多概念本来就是人为定义的,一般情况认为通道就是一种IO处理机

    通道程序

    由一系列通道指令(或称为通道命令)所构成的,不属于机器指令,属于通道自己的指令,存放在主存中,由通道从主存中取出并由通道来执行

    工作过程

    CPU 向通道发送一条 I/O 指令(指明操作的设备、通道程序的地址)。通道在收到该指令后,从内存中取出本次要执行的通道程序,然后执行该通道程序,当通道完成了规定的 I/O 任务后(全部放入内存),向 CPU 发中断信号(实现了 CPU、通道和 I/O 设备三者的并行操作)

    四种方式工作过程概述

    程序控制方式(程序查询方式)

    程序在执行到 IO 操作时,会以一定周期查询 IO 设备的状态标志位,如果处于”忙状态“程序会等待一个周期后,再次进行查询,直到 IO 设备变为“闲状态”。

    直接程序控制方式虽然简单,不需要多少硬件的支持,但由于高速的 CPU 和低速的 I/O 设备之间的速度上不匹配,因此,CPU 与外围设备只能串行工作,使 CPU 的绝大部分时间都处于等待是否完成 I/O 操作的循环测试中,造成 CPU 的极大浪费,外围设备也不能得到合理的使用,整个系统的效率很低。因此,这种 I/O 控制方式只适合于 CPU 执行速度较慢,且外围设备较少的系统。


    程序中断方式

    在现代计算机系统中,对I/O设备的控制,广泛地采用中断驱动方式,即当某进程要启动某个I/O设备时,便由CPU向相应的设备控制器的控制寄存器发出一条I/O命令,然后立即返回继续执行原来的任务。设备控制器便按照该命令的要求去控制I/O设备。若I/O设备忙,则由驱动程序将请求插入设备等待队列。此时, CPU与I/O设备处于并行工作状态。例如,在输入时,当设备控制器收到 CPU发来的读命令后,便准备接收从相应输入设备送来的数据。一旦数据进入数据寄存器,控制器便通过中断请求线INT向CPU发送一中断信号,由CPU读取状态寄存器测试输入过程中是否出错,若无错,便从数据寄存器中读出数据,写入指定内存单元。

    中断驱动方式在I/O设备输入数据的过程中,无需 CPU干预,可以使CPU与I/O设备并行工作。仅当输完一个数据时,才需 CPU花费极短的时间去进行中断处理。从而大大地提高了整个系统的资源利用率及吞吐量,特别是CPU的利用率。


    DMA 方式

    首先明确一点,主存和IO设备中并没有一条直接的物理通路,所谓的“直接数据通路”是指系统总线,所以也就存在当DMA控制器发出总线请求时,CPU要在本次存储周期结束时让出总线,CPU响应DMA请求在每次机器周期执行完。

    只有DMA方式是依靠硬件电路实现的,其余三种(程序查询,中断,通道)都需要程序的干预。

    中断驱动I/O方式虽然大大提高了主机的利用率,但是它以字(节)为单位进行数据传送,每完成一个字(节)的传送,控制器便要向CPU请求一次中断(做保存现场信息,恢复现场等工作),仍然占用了CPU的许多时间。这种方式对于高速的块设备的I/O控制显然是不适合。为了进一步减少CPU对I/O的干预,引入了直接存储器访问DMA(Direct Memory Access)控制方式。

    • 预处理

    ​ 由CPU完成一些必要的准备工作。然后,CPU继续执行原来的程序,直到IO设备准备好发送的数据(输入情况)或接收的数据(输出情况)时,I/O设备向DMA控制器发送DMA请求,再由DMA控制器向CPU发送总线请求(有时将这两个过程统称为DMA请求),用以传输数据。

    • 数据传送

    ​ DMA的数据传输可以以单字节(或字)为基本单位,也可以以数据块为基本单位。对于以数据块为单位的传送(如硬盘),DMA占用总线后的数据输入和输出操作都是通过循环来实现的。需要指出的是,这一循环也是由DMA控制器(而非通过CPU 执行程序)实现的,即数据传送阶段完全由DMA(硬件)控制

    • 后处理

    ​ DMA控制器向CPU发送中断请求,CPU执行中断服务程序做DMA结束处理, 包括校验送入主存的数据是否正确、测试传送过程中是否出错(错误则转入诊断程序) 及决定是否继续使用DMA传送其他数据块等。

    DMA方式起到代理cpu的功能,较之中断驱动方式,又是成百倍地减少了CPU对 I/O控制的干预,进一步提高了CPU与I/O设备的并行操作程度。


    通道(CH)方式

    通道,独立于 CPU 的专门负责输入输出控制的处理机,它控制设备与内存直接进行数据交换。有自己的通道指令,这些指令由 CPU 启动,并在操作结束时向 CPU 发出中断信号。

    通道控制方式,实现了 CPU、通道和 I/O 设备三者的并行操作,从而更加有效地提高整个系统的资源利用率。例如,当 CPU 要完成一组相关的读(或写)操作时,只需要向 I/O 通道发出一条 I/O 指令,指出其所要执行的通道程序和数据在内存中的地址和要访问的 I/O 设备,通道接收到该指令后,通过执行通道程序便可完成 CPU 指定的 I/O 任务。可见,通道只是在 I/O 操作的起始和结束时向 CPU 发出 I/O 中断申请,相对于之前的控制方式进一步减少了 CPU 的干预程度。

    但是通道方式也有自己的不足,它虽然有自己的指令系统,但是通道指令功能简单,使用面窄,与 CPU 共用一个主存,还不是独立的 I/O 处理机。

    CPU 向通道发送一条 I/O 指令(指明操作的设备、通道程序的地址)。通道在收到该指令后,从内存中取出本次要执行的通道程序,然后执行该通道程序,当通道完成了规定的 I/O 任务后(全部放入内存),向 CPU 发中断信号

    一些问题

    为什么中断隐指令要由硬件完成?

    • 主要是保证系统运行的可靠性,相比于硬件,软件更容易出错
    • 也能提高处理器的速度

    中断响应优先级和中断处理优先级分别指什么?

    • 中断响应优先级是由硬件排队线路或中断査询程序的查询顺序决定的,不可动态改变
    • 中断处理优先级可以由中断屏蔽字来改变,反映的是正在处理的中断与新发生的中断的处理优先级

    程序中断和调用子程序有何区别?

    • 调用子程序过程发生的时间是已知的和固定的,而中断过程发生的时间一般是随机的
    • 子程序为主程序服务,两者属于主从关系。而中断服务程序与主程序两者是平行关系
    • 调用子程序的过程完全属于软件处理过程;而中断处理系统是一个软硬件结合的系统
    • 子程序嵌套受堆栈大小限制;而中断嵌套级数主要由中断优先级来决定,一般优先级数不会很大
    • 中断处理一定会保存PSWR的内容,而子程序调用不会

    系统调用和函数调用和进程切换有什么区别?(宏观上分析)

    • 无论是系统调用程序还是中断服务程序,都处于当前进程的上下文中,并没有发生进程上下文切换(所以它们不一定需要保存通用数据寄存器和通用地址寄存器的内容,子程序/中断处理程序中用到了,才会进行保存)
    • 当系统调用或中断处理程序返回时,CPU要从内核模式切换回用户模式,此时会执行操作系统的调用程序。如果发现就需队列中有比当前进程更高的优先级的进程,则会发生进程切换:当前进程信息被保存,切换到就绪队列中的那个高优先级进程;否则,直接返回当前进程的用户模式,不会发生上下文切换

    一点探究

    I/O接口和设备控制器的关系是什么?

    在这里插入图片描述

    我的所有疑惑都来源于唐书上的这张图,让我以为IO接口和设备控制器是完全分离的两个东西,总结理解如下:

    设备控制器就是 I/O 接口,只不过在不同学科中的叫法不同,在操作系统中称之为设备控制器,而计算机组成原理中称之为接口。

    一个设备控制器可以控制多台 I/O 设备,而每台 I/O 设备与 CPU 的连接都对应着一个 I/O 接口。 ,也就是说 IO 接口是一个偏概念的东西,是 CPU 和 某个外设 的数据交换接口,而设备控制器是实际存在的芯片,是实现 IO 接口的东西,可以连接多台 I/O 设备

    展开全文
  • 疯狂内核之——进程管理系统

    热门讨论 2011-05-30 23:31:24
    2.5 中断处理 106 2.5.1 中断向量 107 2.5.2 IRQ数据结构 108 2.5.3 do_IRQ()函数 113 2.5.4 中断服务例程 115 2.5.5 IRQ线的动态分配 116 2.6 下半部分 117 2.6.1 软中断 118 2.6.2 tasklet 121 2.6.3 工作队列 122...
  • 汇编语言教程

    2015-12-29 14:44:50
     4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  • 汇编语言学习大全

    2011-10-08 22:56:17
     4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  • 80x86汇编语言教程

    2011-01-26 21:36:37
     4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8 ...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  • 汇编语言教程.chm

    2010-02-09 22:55:51
     4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...
  •  4 中断和子程序  8.3 中断的分类  1 键盘输入的中断功能  2 屏幕显示的中断功能  3 打印输出的中断功能  4 串行通信口的中断功能  5 鼠标的中断功能  6 目录和文件的中断功能  7 内存管理的中断功能  8...

空空如也

空空如也

1 2 3 4 5
收藏数 88
精华内容 35
关键字:

中断处理和子程序调用区别