第二章 网络操作系统基本功能

第一节 网络操作系统的用户接口

  • 用户接口是方便用户使用计算机系统而建立的用户和计算机的联系,也称为人机界面
  • 用户接口可分为两个部分:命令接口系统调用

一,命令接口

  • 命令接口提供了用户直接或间接控制计算机的方式。
  • 一般是在命令输入界面上输入命令行,由系统在后台执行,将结果反映到前台界面或特定的文件内。
  • 命令接口可分为联机用户接口脱机用户接口

1,联机用户接口

  • 用户通过终端设备输入操作命令,向系统提出各种要求。分为
    • 命令行输入
    • 图形用户接口(Graphical User Interface,GUI)

2,脱机用户接口

  • 系统为脱机用户提供了命令控制语言。
  • 用户利用此语言将事先考虑到的对程序的各种可能要求写成一个批处理的文件,连同相应的程序等一并交给系统。系统运行该程序时,边解释控制命令边执行,直到运行结束。

二,系统调用

  • 系统调用就是用户在程序中调用操作系统所提供的相关功能,用户可以通过系统调用使用操作系统提供的各种功能。
  • 系统调用机制的优势
    • 减轻用户负担
    • 保护系统
    • 提高系统资源利用率
  • 系统调用与机器指令不同的是系统调用是由操作系统核心解释执行的,即软件实现,而机器指令是由机器硬件或微程序(固件)解释执行。
  • 系统调用分类
    1. 进程控制类系统调用
      • 用于对进程的控制,如创建和终止进程的系统调用,获得和设置进程属性的系统调用等。
    2. 文件操作类系统调用
      • 对文件进行操纵的系统调用数量较多,有创建文件,打开文件,关闭文件,读文件,写文件,创建文件,读写文件,移动文件的读/写指针,改变文件的属性等。
    3. 进程通信类系统调用
      • 该类系统调用被用在进程之间传递消息和信号。
    4. 设备管理类系统调用
      • 该类系统调用被用来请求和释放有关设备,以及启动设备操作等。
    5. 信息维护类系统调用
      • 该类系统调用用来获得当前时间和日期,设置文件访问和修改时间,了解系统当前的用户数,操作系统版本号,空闲内存和磁盘空间的大小等等。

第二节 进程(线程)管理

一,进程的概念

  • 进程是具有一定独立功能的程序在某个数据集合上的一次运行活动,是系统进行资源分配的一个独立单位。
  • 从系统角度,可将进程分为系统进程用户进程,系统进程的优先级通常高于一般用户进程的优先级。
    • 系统进程执行操作系统程序,完成操作系统的某些功能。
    • 用户进程运行用户程序,直接为用户服务。

1,进程与程序的联系和区别

  1. 进程和程序的联系
    1. 程序是构成进程的组成部分之一。
    2. 进程运行目标是执行它所对应的程序,如果没有程序,进程就失去了其存在的意义。
    3. 从静态的角度看,进程是由程序,数据和进程控制块(Process Control Block,PCB)三部分组成的。
  2. 进程和程序的区别
    1. 程序是静态的,进程是动态的。
    2. 进程是程序的一个执行过程,程序的存在是永久的;进程是为了程序的一次执行而暂时存在的。进程有生命周期。
    3. 一个进程可以包括若干个程序的执行,而一个程序亦可以产生多个进程。
    4. 进程具有创建其他进程的功能。被创建的进程称为子进程。

2,可再入程序

  • 一个能够被多个用户同时调用的程序称作是“可再入”的程序。可再入的程序必须是“纯”代码的程序,程序在执行中不会修改自身的代码。
  • 可再入程序必须和有关的数据库分离。可再入程序的操作对象,即数据,是与程序相分离的。

3,进程的特性

  • 并发性。一个进程可以同其他进程一道向前推进,即一个进程的第一个动作可以在另一个进程的最后一个动作结束之前就开始。
  • 动态性。进程的动态性体现在两个方面
    • 进程有其生命周期,有产生,也有消亡。
    • 在进程的生命周期内,进程的状态是不断变化的。
  • 独立性。一个进程是一个相对完整的资源分配单位。
  • 交互性。一个进程在运行过程中可能会与其他进程发生直接的或间接的相互作用。
  • 异步性。每个进程按照各自独立的,不可预知的速度向前推进。
  • 结构性。一个进程由程序,数据和进程控制块三部分组成。

二,进程的状态与转换

  • 在任何时刻,任何一个进程都处于且仅处于三种基本状态之一。

1,运行状态

  • 指一个进程已获得CPU,并且正在CPU上执行。在单核心CPU中,任何时刻最多只有一个进程能够处于运行状态。

2,就绪状态

  • 指一个进程已经具备运行条件,但没有获得CPU,所以尚不能运行。

3,等待状态

  • 也称为阻塞状态或封锁状态。
  • 指一个进程处于因等待某种事件发生而暂时不能运行的状态。
  • 引起等待的原因一旦消失,进程便转为就绪状态,以便在适当的时候投入运行。系统中处于等待状态的进程可以有多个。

三,进程的组织与控制

  • 为了便于系统控制和描述进程的活动过程,在系统核心中定义了一个专门的数据结构,称为进程控制块(PCB)
  • PCB是进程存在的唯一标识,当系统创建一个进程时,为进程设置一个PCB,再利用PCB对进程进行控制和管理,撤销进程时,系统回收它的PCB,进程也随之消亡。

1,进程控制块的内容

  • 进程控制块分为两大部分调度信息现场信息
    • 调度信息供进程调度时使用,描述了进程当前所处的状况,包括
      • 进程名和进程号。在调度信息中,进程名和进程号的作用是标识一个进程,进程的进程号必须是唯一的,用于说明进程的存在并区分各个进程。
      • 存储信息。给出了进程本身的优先级别,供调度时使用。
      • 优先级。确定了进程本身的优先级别,供调度时使用。
      • 当前状态。指明该进程处于进程基本状态中的哪一种。
      • 资源清单。列出该进程运行所需的各种资源。
      • “家族”关系。指明该进程是一个父进程,还是被别的进程所创建的子进程。
      • 消息队列指针。指明进程所属的消息队列所在的地址。
      • 进程队列指针。指出进程在队列中的位置。
      • 当前打开文件。记录了进程正在使用的文件的情况。
    • 现场信息刻画了进程的运行情况。PCB中的现场信息只记录那些可能会被其他进程改变的寄存器,如程序状态字,时钟,界地址寄存器等的内容。
    • PCB的内容和大小随系统不同而异,它不仅和具体系统的管理及控制方法有关,也和系统规模的大小有关。

2,进程的组成

  • 进程由程序数据进程控制块三部分组成。
    • PCB是进程的“灵魂”,由于进程控制块中保存有进程的地址信息,通过“PCB”可以得到进程程序的存储位置,也可以找到整个进程。
    • 程序和数据是进程的“躯体”,程序部分描述了进程要实现的功能,而数据则是程序操作的对象。

3,进程的队列

  • 系统中进程的队列分为3类
    1. 就绪队列。所有处于就绪状态的进程都按照某种原则排在一个就绪队列中。在有些系统中,就绪队列可能有若干个。
    2. 等待队列。对每一种等待事件组织一个队列。当队列等待某一事件时,进入与该事件相应的等待队列。
    3. 运行队列。在单CPU系统中,运行队列中只有一个进程,可用一个指针指向该进程。
      1. 处理机中运行的进程,组成了运行队列,该运行队列中只有一个进程。
      2. 运行的进程时间片用完之后,如果进程还没有执行完成,就转入就绪队列。
      3. 如果运行的进程等待某一事件的发生,则转入等待队列。
      4. 如果在等待队列中的进程中,有一个等待的事件发生了,那么对应的进程就转入就绪队列,准备调度进入运行队列。

4,进程队列的组成

  • 进程队列可以用进程控制块的链接来形成。有两种:单向链接双向链接
  • 单向链接中,同一队列中的进程,通过进程控制块中的队列指针联系起来,前一进程的进程控制块中的指针值为它的下一个进程的进程控制块的地址,队列中最后一个进程的进程控制块中的指针值置为“0”。
  • 双向链接中,设置两个指针,称为前向指针后向指针,分别指出它的前一个或后一个进程的进程控制块地址。另外,系统还为每个队列设置一个队首指针,指出该队列的第一个和最后一个进程的进程控制块地址,便于双向搜索。
  • 一个进程从所在的队列中退出称为“出队”;一个进程排入到指定的队列中称为“入队”;系统中负责进程入队和出队的工作称“队列管理”。

5,进程控制

  • 对进程在整个生命周期中各种状态之间的转换进行有效的控制,即:进程控制。

  • 进程控制是通过进程控制原语来实现的。

    原语:是由若干条指令所组成的一个指令序列,用来实现某个特定的操作功能。这个指令序列的执行是连续的,具有不可分割性,在执行时也不可间断,直至该指令序列执行结束

  • 原语是操作系统核心的一个组成部分。

  • 原语必须在系统态下执行,并且常驻内存。

  • 进程控制的原语一般有:创建原语,撤销原语,挂起原语,激活原语,阻塞原语,唤醒原语以及改变进程优先级等。

    • 创建原语
      • 一个进程可以使用创建原语创建一个新的进程,前者称为父进程,后者称为子进程。子进程又可以创建新的子进程,构成新的父子关系。
      • 创建进程的具体操作过程是:先申请一空闲PCB区域,然后将有关信息填入PCB,置该进程为就绪状态,最后把它插入就绪队列中。
    • 撤销原语
      • 进程完成任务后,就应当用撤销原语撤销它,以便及时释放它所占用的资源。撤销进程的实质是撤销PCB。
      • 撤销进程的具体操作过程是:找到要被撤销进程的PCB,将它从所在队列中消去,撤销属于该进程的一切“子孙进程”,释放要被撤销进程所占用的全部资源,并消去被撤销进程的PCB。
    • 阻塞原语
      • 若某个进程的执行过程中,需要执行I/O操作,则由该进程调用阻塞原语把进程从运行状态转换为阻塞状态。
      • 阻塞进程的具体操作过程是:由于进程正处于运行状态,因此首先应中断CPU的执行,把CPU的当前状态保存在PCB的现场信息中,然后把进程的当前状态置为等待状态,并把它插入到该事件的等待队列中去。
    • 唤醒原语
      • 一个进程因为等待某事件的发生而处于等待状态,当该事件发生后,就用唤醒原语将其唤醒,转换为就绪状态。
      • 唤醒进程的具体操作过程为:在等待队列中找到该进程,将进程的当前状态置为就绪状态,然后将它从等待队列中撤出并插入到就绪队列中排队,等待调度执行。

四,进程同步

  • 同步是并发进程之间在执行时序上的一种相互制约的关系。
  • 进程互斥的实质也是同步,可把进程互斥看作是一种特殊的进程同步。

1,进程的同步

  • 进程的同步是指进程之间一种直接的协同工作关系,一些进程相互合作,共同完成一项任务。
  • 进程之间的同步也是进程间的一种直接制约关系,一个进程的执行依赖另一个进程的消息,当一个进程执行到某一点时,必须得到另一个进程发来的消息,在没有得到另一个进程的消息时该进程应该等待,直到消息到达才被唤醒,继续进程的执行。
  • 实现进程的同步必须提供一种机制,该机制不仅能把其他进程需要的消息发送出去,也能测试进程自己需要的消息是否到达,这种能实现进程同步的机制称为“同步机制”。

2,进程的互斥

  • 许多进程常常需要共享资源,这些资源往往要求排他性使用,即一次只能为一个进程服务,各进程间只能互斥使用这些资源,进程间的这种关系就是进程的互斥

3,临界区

  • 系统中的某些资源一次只允许一个进程使用,这类资源被称为临界资源或共享变量,而在进程中访问临界资源的程序称为临界区

  • 如果有若干进程共享某一临界区,则该临界区称为相关临界区

  • 系统对相关临界区使用的调度原则归纳为:

    1. 当临界区为空时,若有一个进程要求进入临界区,应允许它立即进入临界区——有空让进
    2. 若有一个进程已在临界区时,其他要求进入临界区的进程必须等待——无空等待
    3. 当没有进程在临界区,而同时有多个进程要求进入临界区,只能让其中之一进入临界区,其他进程必须等待——多中择一
    4. 任一进程进入临界区的要求应在有限时间满足——有限等待
    5. 处于等待进入临界区的进程应放弃占用CPU——让权等待

4,信号量及P,V操作

1,信号量

  • 信号量是一种特殊的变量,它的表面形式是一个整型变量附加一个队列。
  • 它只能被特殊的操作(即P操作和V操作)使用。P,V操作都是原语。
  • 荷兰计算机科学家Dijkstra把进程互斥的关键含义抽象成为信号量(Semaphore)概念,并引入了在信号量上的P,V操作作为同步原语(P和V分别是荷兰文的“等待”和“发信号”两词的首字母)。此处,信号量是个被保护的量,只有P,V操作和信号量初始化操作才能访问和改变它的值。
  • 设信号量为S,S可以取不同的整数值。可以利用信号量S的取值表示共享资源的使用情况,或用它来指示协作进程之间交换的信息。在具体使用时,把信号量S放在进程运行的环境中,赋予其不同的初值,并在其上实施P操作和V操作,从而实现进程间的同步与互斥。对信号量S实施的P操作和V操作,可分别用P(S)和V(S)表示。

2,P,V操作

  • P操作和V操作定义如下。

  • P(S)的意义

  • {
          
          	S := S - 1;
    	if(S < 0)
    		置该进程为等待态,然后将该进程的PCB插入相应的S信号量等待队列末尾;
    	else
        	离开;
    }
    
  • V(S)的意义

  • {
          
          	S := S + 1;
    	if(S ≤ 0)
    		将在S信号量等待队首的进程唤醒,变为就绪,并将其插入就绪队列;
    	else
        	离开;
    }
    

3,信号量与P,V操作的物理含义

  • 信号量S表示某类可用的临界资源。对于不同的临界资源,则用不同的信号量表示。
  • 当S > 0时,S值的大小表示某类可用的资源的数量,即表示有该类资源可以分配;当S < 0时,表示没有可分配的资源数量,其S的绝对值表示排在S信号量的等待队列中进程的数目。
  • 每执行一次P操作,意味着对请求的进程分配到一个资源;每执行一次V操作,意味着进程释放了一个资源。

4,用P,V操作实现进程之间的互斥

  • 假设有进程A,B竞争进入临界区,用P,V操作实现进程之间的互斥的程序如下:

    • 进程A								进程B
      P(S);							 P(S);
      临界区操作;						 临界区操作;
      V(S);							 V(S);
      
    • S的初值为1。

5,用P,V操作实现进程间的同步

  • 考虑一种同步关系,其中有两个信号量S1和S2,赋予它们大的初值均为0,S1表示在一个缓冲区中是否装满信息,S2表示该缓冲区中信息是否取走。程序如下:

    • 进程A								进程B
        .									.
        .                                 .
        .                                 .
      Repeat							 Repeat
        .									.
        .	             					.
        .									.
      把信息送入缓冲区;					P(S1);	  
      V(S1);         					把信息从缓冲区取走;
      P(S2);                           V(S2);
        .									.
        .									.
        .									.
      Until false;					Until false;
        .									.
        .									.
        .									.
      

6,信号量及P,V操作小结

  • 由于P或V操作每次只做加1或减1运算,即每次执行一次P操作只能请求分配一个单位的资源,每执行一次V操作只释放一个单位的资源,因此,如果一个进程需要一次使用多个资源,就需要连续执行多次P操作,释放这些资源时也需多次执行V操作。这不仅增加了程序的复杂性,也降低了通信效率,致使进程之间需要相互等待很长的时间,甚至有可能导致死锁的发生。
  • P,V操作在使用时必须成对出现,有一个P操作就一定有一个V操作。
    • 当为互斥操作时,它们同处于同一进程。
    • 当为同步操作时,则不在同一进程中出现。
  • 用P,V操作可解决任何进程同步互斥问题。但P,V操作使用时不够安全,特别是P,V操作使用不当会出现死锁。

五,线程概念及多线程模型

1,什么是线程

  • 在引入线程的系统中,线程是进程中的一个实体,是CPU调度和分派的基本单位。
  • 线程自己基本上不拥有系统资源,只拥有少量在运行中必不可少的资源(如程序计数器,一组寄存器和栈等),但它可与同属一个进程的其他线程共享进程所拥有的全部资源。
  • 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。
  • 由于线程之间的相互制约,致使线程在运行中呈现出间断性,相应的,线程也同样有就绪等待运行三种基本状态。有的系统中线程还有终止状态等。

2,线程的属性

  • 每个线程有一个唯一的标识符和一张线程描述表,线程描述表记录了线程执行的寄存器以及栈等现场状态。
  • 不同的线程可以执行相同的程序。即同一个服务程序被不同用户调用时操作系统为他们创建不同的线程。
  • 同一个进程中的各个线程共享该进程的内存空间地址。
  • 线程是处理机的独立调度单位,多个线程是可以并发执行的。在单处理机的计算机系统中,各线程可交替地占用处理机;在多处理机的计算机系统中,各线程可同时占用不同的处理机;若各个处理机同时为一个进程内的各线程服务,则可缩短进程的处理时间。
  • 一个线程在被创建后便开始了它的生命周期,直至终止。线程在生命周期内会经历等待状态,就绪态和运行态等各种状态变化。

3,线程的好处

  • 创建线程不需要另行分配资源,创建线程的速度比创建进程的速度快,系统开销也少。
  • 线程之间的切换花费时间少。
  • 同一个进程内的线程共享内存和文件,所以线程之间相互通信无须调用内核,不需要额外的通信机制,使通信更简便,信息传送速度也快。
  • 线程能独立执行,能充分利用和发挥处理机与外部设备并行工作能力。

六,死锁

  • 指在多道程序系统中,一组进程中的每一个进程均无限期地等待被该组进程中的另一个进程所占有永远不会释放的资源,这种现象称系统处于死锁状态,简称死锁DeadLock)。处于死锁状态的进程称为死锁进程
  • 当死锁发生后,死锁进程将一直等待下去,除非有来自死锁进程之外的某种干预。
  • 系统发生死锁时,死锁进程的个数至少为两个。

第三节 处理机调度

一,调度的基本概念

  • 处理机调度也称进程(线程)调度低级调度,其任务是记录系统中所有进程的执行状况,根据一定的调度算法,从就绪队列中选出一个进程来,准备把CPU分配给它。
  • 进程调度实际上完成了将一台物理的CPU转变成多台虚拟的(或逻辑的)CPU的工作。

二,调度时机,切换与过程

  • 不可抢占式处理机方式
    • 一旦把处理机分配给一个进程,它就一直占用处理机,直到该进程自己因调用原语操作或等待I/O等原因而进入阻塞状态,或时间片用完时才让出处理机。
  • 抢占式处理机方式
    • 就绪队列中一旦有优先级高于当前运行进程优先级的进程存在时,便立即进行进程调度,把处理机转让给优先级高的进程。
  • 需要进程调度的情况
    1. 正在执行的进程运行完毕。
    2. 正在执行的进程调用阻塞原语将自己阻塞起来进入等待状态。
    3. 正在执行的进程调用了P原语操作,因资源不足而被阻塞;或调用了V原语操作激活了等待资源的进程队列。
    4. 执行中的进程提出I/O请求后被阻塞。
    5. 在分时系统中,正在执行进程的时间片已经用完。
    6. 就绪队列中的某个进程的优先级变得高于当前运行进程的优先级,从而也将引起进程调度。
      • 1-5为不可抢占和可抢占方式下引起进程调度的原因,6为可抢占方式下特有的。
  • 进程切换
    • 进程的状态经常在变化,进程调度程序就要随着进程的状态不断进行调度。一个进程让出处理机,由另一个进程占用处理机的过程称为“进程切换”。
  • 引起进程调度的情况
    1. 某个进程从运行状态变成了等待状态。
    2. 某个进程从运行状态变成了就绪状态。
    3. 某个进程从等待状态变成了就绪状态。
    4. 某个进程完成工作后被撤销。
      • 在1,4的情况下,当前进程不使用处理机,进程调度会从就绪队列中另选一个进程占用处理机,产生了“进程切换”。在2,3的情况,进程调度的结果有两种可能,一种是仍选中原来运行的进程继续进行,另一种可能是换成另一个进程去运行。

三,调度的基本准则

  1. 处理机利用率:应尽可能地使处理机处于忙碌状态,提高使用效率。
  2. 吞吐量:在单位时间内让更多的进程能完成工作,提高单位时间的处理能力。
  3. 等待时间:指一段时间内进程在就绪队列中等待的总时间,应尽量减少在就绪队列中的等待时间。
  4. 响应时间:在交互式系统中对用户的请求应尽快的给出应答。

四,调度算法

1,先进先出算法(First In First Out,FIFO)

  • 按照进程进入就绪队列的先后次序来选择。当有进程就绪时,总是把该进程链入就绪队列的末尾。每当进入进程调度,总是把就绪队列的队首进程投入运行。

2,时间片轮转算法(Round Robin,RR)

  • 将CPU的处理时间划分成一个个时间片,就绪队列中的每个进程轮流运行一个时间片。当时间片结束时,就强迫运行进程让出CPU,进入就绪队列,等待下一次调度。同时,进程调度又去选择就绪队列中的一个进程,分配给他一个时间片,以投入运行。
  • 在轮转法中,时间片长度的选取非常重要。时间片长度将直接影响系统开销和响应时间。
  • 假设时间片的长度值为Q,影响时间片值设置的主要因素有:
    1. 系统响应时间:当进程数目一定时,时间片Q值的大小正比于系统响应时间的要求。在进程数目为N,要求的响应时间为T时,则 Q = T / N Q=T/N Q=T/N。在进程数目N不变的前提下,Q值与T值的大小成正比。
    2. 就绪数目的数量:当系统响应时间T一定时,时间片Q值的大小反比于就绪进程数。
    3. 处理机的处理能力:在处理速度高的系统中,时间片值就可设置得小些。

3,基于优先级的调度算法(Highest Priority First,HPF)

  • 在基于优先级的调度算法中,最基本的是最高优先级算法。
  • 最高优先级算法:每一次均将处理机分配给就绪进程队列中具有最高优先级的就绪进程。通常采用一个数字来表示进程优先级的高低,称为优先数。有的系统中,优先数字0代表最高优先级;有的系统中,优先数字0代表最低优先级。对进程优先级的设置有静态的和动态的两类不同方法。
  • 静态优先级是在进程创建时根据进程初始特性或用户要求而确定的,进程被创建时系统为其确定一个优先级,进程的优先数固定,即不随进程的执行而改变。
  • 动态优先级是指在进程创建时先确定一个初始优先数,以后这个初始的优先数在进程运行中随着进程特性的改变,不断修改优先数。

4,多级队列反馈法

  • 多级队列反馈法是综合了FIFORR和可抢占方式HPF的一种进程调度算法。

第四节 存储管理

一,存储管理概述

1,存储体系

  • 对于内存速度和容量的要求是,内存的直接存取速度尽量快到与CPU取值速度相匹配,其容量大到能装下当前运行的程序与数据,否则CPU执行速度就会受到内存速度和容量的影响而得不到充分发挥。各种速度和容量的存储器硬件,在操作系统协调之下形成了一种存储器层次结构,或称存储体系

2,存储管理的任务

  • 存储器由内存和外存组成。

  • 内存空间,是由存储单元(字节或字)组成的一堆连续的地址空间,简称内存空间。用来存放当前正在运行程序的代码及数据,是程序中指令本身地址所指的,亦即程序计数器所指的存储器。

  • 内存空间一般分为两部分:

    • 一是系统区,用以存放操作系统常驻内存部分,用户不能占用这部分内容。
    • 二是用户区,分配给用户使用,用于装入并存放用户程序和数据,这部分的信息随时都在发生变换。
  • 内存管理问题主要包括:内存管理方法,内存的分配和释放算法,虚拟存储器的管理,控制内存和外存之间的数据流动方法,地址变换技术和内存数据保护与共享技术等。

  • 用户对内存管理的要求

    1. 充分利用内存,为多道程序并发执行提供存储基础。
    2. 尽可能方便用户使用,操作系统自动转入用户程序,用户程序中不必考虑硬件细节。
    3. 系统能够解决程序空间比实际内存空间大的问题。
    4. 程序的长度在执行时可以动态伸缩。
    5. 内存存储速度快。
    6. 存储保护与安全。
    7. 共享与通信。
    8. 及时了解有关资源的使用状况。
    9. 实现的性能和代价合理。
  • 存储管理的主要任务

  1. 内存的分配和回收

    1. 记住每个存储区域的状态。内存空间那些是分配了的,那些是空闲的?这就需要设置相应的分配表格,记录内存空间使用状态。

    2. 实施分配。当用户提出申请时,按需要进行分配,并修改相应的分配表格。分配方式有静态分配和动态分配两种。

    3. 回收。接收用户释放的表格,并修改相应的分配表格。

      分配表格,统称为内存分配表,其组织方式有

      1. 位视图表示法
      2. 空闲页框法
      3. 空闲块表

      内存分配的方式

      1. 静态分配
      2. 动态分配
  2. 共享存储

    • 指两个或多个进程共用内存中相同区域,使多道程序动态地共享内存,提高内存利用率,共享内存中某个区域的信息。
    • 共享的目的是通过代码共享节省内存空间,提高内存利用率,通过共享实现进程通信。
  3. 存储保护

    1. 存储保护目的在于为多个程序共享内存提供保障,使在内存中的各道程序,只能访问它自己的区域,避免各道程序间相互干扰。特别是当一道程序发生错误时,不至于影响其他程序的运行,更要防止破坏系统程序。存储保护通常需要有硬件支持,并由软件配合实现。
    2. 存储保护的主要方式
      1. 地址越界保护:每个进程都具有其相对独立的进程空间,如进程在运行时所产生的地址超出其地址空间,则发生地址越界。因此,对进程所产生的地址必须加以检查,发生越界时产生中断,由系统进行相应处理。
    3. 权限保护:对于允许多个进程共享的公共区域,每个进程都有自己的访问权限,必须对公共区域的访问加以限制和检查。
  4. “扩充”内存容量

    • 在硬件支持下,软件,硬件相互协作,将内存和外存结合起来统一使用。通过这种方式扩充内存,使用户在编制程序时不受内存限制。

3,地址转换

  • 假定存储器的容量为n个字节,其地址编号顺序为0,1,2,…,n-1。这些地址称为内存的“物理地址”,由物理地址对应的主存空间称为“物理地址空间”或“绝对地址”。
  • 用户程序中使用的地址称为“逻辑地址”或“相对地址”,由逻辑地址对应的存储空间称为“逻辑地址空间”。
  • 将逻辑地址转换为物理地址称为“地址重定向”或“地址转换”,又称为“地址映射”。重定向的方式可以有“静态重定向”和“动态重定向”。
    • 静态重定向
      • 在装入一个程序时,把程序中的指令地址和数据地址全部转换成物理地址。由于地址转换工作是在程序开始执行前集中完成的,所以在程序执行过程中就无须再进行地址转换工作,这种地址转换方式称“静态重定向”。
    • 动态重定向
      • 在装入程序时,不进行地址转换,而是直接把程序装入到分配的主存区域中。在程序执行过程中,每当执行一条指令时都由硬件的地址转换机构将指令中的逻辑地址转换成物理地址。这种方式的地址转换是在程序执行时动态完成的,故称为“动态重定向”。

二,虚拟存储管理

  • 利用大容量的外存来扩充内存,产生一个比有限的实际内存空间大得多的,逻辑的虚拟内存空间,简称“虚存”。
  • 虚拟内存需要以下的硬件支持
    1. 系统有容量足够大的外存。
    2. 系统有一定容量的内存。
    3. 硬件提供实现虚/实地址映射的机制。
  • 工作原理
    • 当进程开始运行时,先将一部分程序装入内存,另一部分暂时留在外存。
    • 当要执行的指令不在内存时,由系统自动将它们从外存调入内存。
    • 当没有足够的内存空间时,系统自动选择部分内存空间,将其中原有的内容交换到磁盘上,并释放这些内存空间供其他进程使用。

三,页式存储管理

1,基本思想

  • 支持页式存储管理的硬件部件通常称为“存储管理部件”(Memory Management Unit,MMU)。

  • 存储管理部件首先把内存分成大小相等的许多块,称为页框。页框是进行主存空间分配的物理单位。同时,要求程序中的逻辑地址也进行分页,页的大小与页框的大小一致。这样,就可以将程序信息按页存放到页框中。页式存储器提供编程使用的逻辑地址由两部分组成:页号页内地址。格式为:

在这里插入图片描述

2, 存储空间的分配与回收

  • 页式存储管理分配内存空间以物理页框为单位,由于物理页框的大小是固定的,所以只要在内存分配表中具有可以指出哪些页框已经分配哪些页框尚未分配以及当前剩余的空闲页框数等三种不同的标识即可。

  • 简单的内存分配表可以用一张“位示图”构成。假设内存的可分配区域被分成256个页框,则可用字长为32位的8个字作为“位示图”。位示图中的每一位与一个页框对应,每一位的值可以是0或1,0表示对应的页框为空闲,1表示已占用。在位示图中再增加一个字节记录当前剩余的总空闲页框数。初始化时系统在位示图中把操作系统占用的页框所对应的位置成1,其余位均置0,剩余空闲页框数为可分配的空闲内存页框总数。

  • 在进行内存分配时,先查看空闲页框数是否能满足程序要求。若不满足,则不进行分配,程序就不能装入内存;若能满足,则根据需求从位示图中找出一些为0的位,把这些位置成1,并从空闲页框数中减去本次分配的块数,然后按照找到的位计算出对应的页框号。

  • 当找到一个为0的位后,根据它所在的字号,位号,就可以计算出对应的页框号:

    页框号=字号×字长+位号

  • 把程序装入到这些内存页框中,并为该程序建立一张进程的逻辑页面到内存页框的映射表,称为页表页表是存储管理中最重要的数据结构。

  • 当程序执行结束时,则应收回它所占用的内存页框。根据归还的页框号计算出该页框在位示图中对应的位置,将占用标志修改成0,再把回收的页框数加入到空闲页框数中。

  • 假定归还页框的页框号为i,则在位示图中对应的位置为:

    ​ 字号=[i/字长 ],位号=i mod 字长

  • 其中[]表示下取整。

四,请求分页存储管理

1,基本思想

  • 在进程开始运行之前,不是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其他页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。这就是请求分页存储管理
  • 在使用虚拟页式存储管理时需要在原来的页表中增加以下的表项
    1. 驻留位:又称中断位表示该页是在内存还是在外存,也称存在位在位位
    2. 内存块号:页面在内存中时,所对应的内存块号。
    3. 外存地址:页面在外存中时,所在的外存地址。
    4. 访问位:访问位表示该页在内存期间是否被访问过,也称引用位参考位
    5. 修改位:修改位表示该页在内存中是否被修改过。
    6. 其他信息

2,缺页中断

  • 若在页表中发现所要访问的页面不在内存,则产生缺页中断。

  • 当发生缺页中断时,操作系统必须在内存中选择一个页面将其移出内存,以便为即将调入的页面让出空间。

  • 如果要移走的页面在内存期间已经被修改过,就必须把它写回磁盘以更新该页在磁盘上的副本。

  • 如果该页没有被修改过,那么它在磁盘上的副本仍然是最新的,则不需要写回,调入的页直接覆盖被淘汰的页。

  • 缺页处理过程

    1. 根据当前执行指令中的逻辑地址查页表的驻留位,判断该页是否在内存。
    2. 该页标志为“0”,形成缺页中断。保留现场。中断装置通过交换PSW让操作系统的中断处理程序占用处理机。
    3. 操作系统处理缺页中断,寻找一个空闲的页面。
    4. 若有空闲页,则把磁盘上读出的信息装入该页面中。
    5. 修改页表及内存分配表,表示该页已在内存。
    6. 如果内存中无空闲页,则按某种算法选择一个已在内存的页面,把它暂时调出内存。若在执行中该页面已被修改过,则要把该页信息重新写回到磁盘上,否则不必重新写回磁盘。当一页被暂时调出内存后,让出的内存空间用来存放当前需要使用的页面。页面被调出或装入之后都要对页面及内存分配表作修改。
    7. 恢复现场,重新执行被中断的指令。当重新执行该指令时,由于要访问的页面已被装入内存,所以可正常执行下去。

五,页面分配和置换策略

  • 每次发生缺页时,可以随机选择一个页面置换。但是如果一个经常使用的页被置换出去,很有可能它很快又要被调入内存,带来不必要的额外开销。
  • 如果刚被调出的页面又立即要用,因而又要把它装入,而装入不久又被选中调出,调出不久又被装入,使调度非常频繁。这种现象称为“抖动”或“颠簸”。
  • 页面置换算法将会影响虚拟存储系统的性能,进而影响整个系统的性能。常用的页面置换算法如下
    1. 先进先出页面置换算法First-In First-OutFIFO
      1. 先进先出页面置换算法总是选择最先装入内存的一页调出。
      2. 把装入内存的哪些页面的页号按进入的先后次序排好队列,每次总是调出队首的页,当装入一个新页后,把新页的页号排入队尾。由操作系统维护新的页面在表尾。当发生缺页时,淘汰表头的页面并把新调入的页面加到表尾。
      3. FIFO存在的问题:因为最先装入内存的一页,不等于说这一页是不常使用的。由于这一原因,很少使用纯FIFO算法。
    2. 最近最少使用页面置换算法Least Recently UsedLRU
      1. 在缺页发生时,首先淘汰掉最长时间未被使用过的页面。这个策略称为LRU页面置换算法
      2. 最近最少使用页面置换算法总是选择距离现在最长时间内没有被访问过的页面先调出。实现这种算法的一种方法是在页表中为每一页增加一个“计时”标志,记录该页面自上次被访问以来所经历的时间,当访问页面时,如果该页未被访问,则计时值继续增加,如果该页被访问,则从“0”开始重新计时。当要装入新页时,检查页表中各页的计时标志,从中选出计时值最大的那一页调出(即最近一段时间里最长时间没有被使用过的页)。当再一次产生缺页中断时,又可找到最近最久未使用过的页,将其调出。
      3. 此方法必须对每一页的访问情况时时刻刻加以记录和更新,实现麻烦且开销大。
    3. 理想页面置换算法Optimal Page Replacement AlgorithmOPT
      1. 该算法淘汰以后不再需要的,或者在最长时间以后才会用到的页面。
      2. OPT算法需要预先知道当前时刻以后的页面使用情况,因此,这一算法一般不可能实现,但他可以作为衡量其他页面淘汰算法优劣的标准。

第五节 文件管理

一,文件,目录和文件系统

1,文件的定义

  • 文件可以被解释为一组带标识的,在逻辑上有完整意义的信息项的序列。这个标识称为文件名

    信息项是构成文件内容的基本单位,这些信息项是一组有序序列,它们之间具有一定的顺序关系。

  • 文件是一个抽象机制,提供了一种把信息保存在存储介质上而且便于以后存取的方法。

2,文件目录

  • 便于对文件进行管理,设置了文件目录,用于检索系统中的所有文件。

3,文件系统

  • 操作系统中统一管理资源的一种软件。它管理文件的存储,检索,更新,提供安全可靠的共享和保护手段,并且方便用户使用。

二,文件结构和存取方法

1,文件的逻辑结构

  • 文件的逻辑结构就是用户看到的文件的组织形式。
  • 设计文件的逻辑结构时应遵守的设计原则
    1. 易于操作
    2. 查找快捷
    3. 修改方便
    4. 空间紧凑
  • 文件可以分为三类逻辑结构:无结构的字符流式文件定长记录文件不定长记录文件构成的记录树。定长记录文件不定长记录文件统称为记录式文件
    1. 流式文件
      1. 流式文件是有序字符的集合,其长度为该文件所包含的字符个数,又称为字符流文件。在流式文件中,构成文件的基本单位是字符
      2. 在这串字符中,不存在任何可以视为结构的组织形式,可以说,流式文件无结构
      3. 源程序,目标代码等文件属于流式文件,UNIX类系统采用的是流式文件结构。
    2. 记录式文件
      1. 记录式文件是一组有序记录的集合。在记录式文件中,构成文件的基本单位是记录
      2. 记录是一个具有特定意义的信息单位,由该记录在文件中的逻辑地址(相对位置)与记录名所对应的一组键,属性及其属性值所组成,可按键值进行查找。
      3. 记录式文件分为定长记录文件不定长记录文件
        1. 定长记录中,各个记录长度相等。在检索时,可以根据记录号i及记录长度L就可以确定该记录的逻辑地址。
        2. 不定长记录中,各个记录长度不等。在查找时,必须从第一个记录起一个记录一个记录查找,直到找到所需的记录。

2,文件的物理结构

  • 为便于文件的存放,通常将文件划分为若干个大小相同的数据块,称为文件的逻辑块,将其按一维线性编号,称为逻辑块号;物理结构中也划分为与数据块相同大小的存储块,正好能将一个逻辑块存放进其中,存储块也按物理设备的结构一维线性编号,称为物理块号。

  • 文件的物理结构有顺序结构链接结构索引结构

    • 顺序结构

      • 顺序结构又称连续结构,是最简单的文件物理结构,把逻辑上连续的文件信息依次存放在连续编号的物理块中。如果一个文件长n块,并从物理块号b开始存放,则该文件占据物理块号b,b+1,b+2,…,b+n-1。
      • 顺序结构中,一个文件的目录项中只要指出该文件占据的总块数起始块号即可。
      • 优点:一旦知道文件在文件存储设备上的起始块号和文件长度,就能很快地进行存取。
      • 缺点:文件不能动态增长。解决方案链接结构索引结构
      • 顺序结构支持顺序存取随机存取
    • 链接结构

      • 链接结构的实质就是为每个文件构造所使用磁盘块的链表。使用这种链接结构的文件,将逻辑上连续的文件分散存放在若干不连续的物理块中。在每个物理块中都设有一个指针,该指针指向其后续的物理块。
      • 优点:有利于文件动态扩充,有利于文件插入和删除,提高磁盘空间利用率。
      • 缺点:存取速度慢,不适于随机存取文件,磁盘的磁头移动多,效率相对低;存在文件的可靠性问题,如指针出错,文件也就出错了;此外,链接指针需要占用一定的空间。
      • 链接结构的动态扩充:从空闲空间信息中得到一个空闲块亦即第一个空闲块,然后将该块链接到文件尾部,并改变文件的长度值即可。只要还能申请到空闲块,文件一直动态地扩充增长。
    • 索引结构

      • 索引结构的文件把每个物理盘块的指针,集中存放在称为索引表的数据结构中。在每个文件相应的目录条目中包含了该文件的索引表地址,而索引表中的第 i i i个条目指向文件的第 i i i块。这样,要读取某个文件的第 i i i块,只需从该文件索引表的第 i i i个条目中得到该文件块的地址就行了。

      • 开始建立索引结构的文件时,把索引表中的所有指针置为空。当第一次需要在文件的第 i i i块写入信息时,从空闲块信息中任意申请一个空闲块,然后将该地址写入索引表的第 i i i个条目。

      • 优点:既适用于顺序存取,也适用于随机存取。可以满足文件动态增长的要求,满足了文件插入,删除的要求。索引文件还能充分利用外存空间。

      • 缺点:会引起较多的寻道次数和寻道时间;索引表本身增加了存储空间的开销。

      • 在索引结构文件中要查找文件,要顺着链进行查找,但是整个索引表都可以存放在内存中,不需要访问磁盘,不管文件多大,在目录项中只需要记录一个起始块号,按照它就可以找到文件的全部块。

      • 在索引结构文件中要存取文件时,需要至少访问存储设备二次以上。

        • 第一次是访问索引表。
        • 第二次是根据索引表访问在存储设备上的文件信息。
        • 改进方法:当对某个文件进行操作之前,系统预先把索引表放入内存。

3,文件的存取方式

  • 文件的存取方式是一种文件的逻辑结构与物理结构之间的映射或变换机制。

  • 常用的存取方法有:顺序存取随机存取两种方式。

    • 顺序存取

      • 顺序存取就是按从前到后的次序依次访问文件的各个信息项。
      • 顺序存取只要把当前记录的逻辑地址加上记录的长度,就可以得到下一个记录的逻辑地址。若要直接存取第 n n n个记录,其逻辑地址为 ( n − 1 ) ∗ 记 录 长 度 (n-1)*记录长度 (n1)
      • 对流式文件,顺序存取反映当前读写指针的变换,在存取完一段信息后,读写指针自动指出下次存取时的位置。
    • 随机存取

      • 随机存取又称直接存取,允许用户按任意的次序,直接存取文件中的任意一个记录,或者根据存取命令把读写指针移到文件中的指定记录处读写。
      • 下图文件结构及文件存取方式与文件存储介质的关系。

      在这里插入图片描述

三,文件系统实现

1,存储空间的分配与回收

  • 对于只读的存储设备,无所谓回收,也无所谓动态分配,这种存储设备在物理上是不可重用的。

  • 在外存储设备上设置有空闲空间登记表,该表动态跟踪该外存储设备上所有还没有分配给任何文件的空闲块的数目和块号。

    从方便,高效和安全的角度考虑,通常把空闲空间登记表放在存储介质上。

  • 空闲空间登记表的数据结构,主要有以下三种

    1. 位示图

      1. 位示图的基本思想是:利用一串二进制位(bit)的值来反映磁盘空间的分配使用情况。在位示图中,每一个磁盘中物理块用一个二进制位对应,如果某个物理块为空闲,则相应的二进制位为0;如果该物理块已分配,则相应的二进位为1

      在这里插入图片描述

         2.  在申请磁盘物理块时,可在位示图中从头查找为0的字位,如果发现了为0的字位,则将其改为1,同时返回该二进制位对应的物理块号。在归还不再使用的物理块时,则在位示图中将该物理块所对应的二进制字位改为0,表示这块物理块恢复为空闲状态。
      
    2. 空闲块表

      1. 空闲块表是专门为空闲块建立的一张表,该表记录外存储器全部空闲的物理块:包括每个空闲块的第一个空闲物理块号和该空闲块中空闲物理块的个数。空闲块表方式特别适合于文件物理结构为顺序结构的文件系统。

        在这里插入图片描述

      2. 在建立新文件时,应该寻找一组连续的空闲物理块,其空闲块个数恰好等于所申请值,或接近于所申请值。系统首先查找空闲块表,主要查看该空闲表项中是否有符合上述申请值的对应表项,如果有,就将该表项从空闲块表中删去,并且把所对应得一组连续的空闲物理块分配给申请者。

      3. 当删除文件时,系统收回它所占用的物理块,并且考虑所收回的物理块是否可以与原有空闲块相邻接,以便合并成更大的空闲区域,最后修改有关空闲块表项。

    3. 空闲块链表

      1. 将外存储器中所有的空闲物理块连成一个链表,用一个空闲块首指针指向第一个空闲块,随后的每个空闲块中都含有指向下一个空闲块的指针,最后一块的指针为空,表示链尾,这样就构成一个空闲块链表。

        在这里插入图片描述

      2. 在空闲块链表模式中对空间的申请和释放是以块为单位的。申请空间时从链首取空闲块。空间释放时将物理块接入链尾。空闲块链表法节省空间,但申请空间和回收空间的速度较慢,实现效率低。

2,实现文件系统的表目

  • 当用户申请打开一个文件时,系统要在内存中为该用户保存一些必要的信息,这些信息以表格栏目中内容的形式出现,被称为表目,也称为表项。在内存中需要的重要表目如下。
  1. 系统打开文件表

    • 系统打开文件表,专门用于保存已打开文件的文件控制块。该系统打开文件表放在内存。除了保存已打开文件的文件控制块之外,在该表格中还保存有已打开文件的文件号,共享计数,修改标志等等。

      文件控制块,即FCB,是操作系统为了管理大量的文件而为每个文件都设置的一个描述性的数据结构。

      FCB通常包括以下内容:文件名,文件识别号,用户名,文件长度,类型,属性,各种操作的日期时间,口令等。

      FCB主要作用是记录文件内信息,并为操作系统所使用,通常,FCB是在创建文件时由操作系统来填写的。关闭文件时FCB会保存在磁盘上,打开文件时操作系统会将其读入内存。

  2. 用户打开文件表

    • 每个进程中都有一个“用户打开文件表”。该表内容有文件描述符,打开方式,读写指针,系统打开文件表入口等等。
      • 在进程的进程控制块PCB中,记录了“用户打开文件表”的位置。
  3. 系统打开文件表与用户打开文件表之间的关系

    • 用户打开文件表指向了系统打开文件表。如果多个进程共享同一个文件,则一定有多个用户打开文件表对应着系统打开文件表的同一入口。

3,文件的操作

1,建立文件

  • 建立文件的实质是建立文件的文件控制块FCB,并建立必要的存储空间,分配空的FCB,从而建立起系统与文件的联系。
  • 建立文件系统调用的一般格式为:create(文件名,访问权限,文件长度)
  • 访问权限一般分为读,写和既读又写。

2,打开文件

  • 即把文件控制块FCB送到内存。
  • 打开文件系统调用的一般格式为:open(文件名,打开方式)
  • 打开方式一般分为读,写和既读又写。

3,读文件

  • 打开文件,就可以读取文件中的信息。
  • 读文件系统调用的一般格式为:read(文件名,文件内位置,读取的长度,内存目的地址)

4,写文件

  • 写文件系统调用的一般格式为:write(文件名,内存源地址,文件长度)

5,关闭文件

  • 关闭文件系统调用的一般格式为:close(文件名)

6,删除文件

  • 删除文件系统调用的一般格式为:delete(文件名)

7,指针定位

  • 指针定位的一般格式为:seek(文件名,新指针的位置)

四,文件的保护与共享

1,文件的保护

  1. 建立副本
  2. 定期转储
  3. 规定文件的存取权限

2,文件的共享

  • 在允许文件共享的系统中,必须对共享文件进行管理。从共享的时间段上看,共享文件的使用有两种情况。
    1. 文件可以同时使用
    2. 文件不允许同时使用

第六节 输入/输出管理

一,输入/输出管理概述

1,输入/输出设备管理的重要性

  1. 输入/输出设备的性能常常成为系统性能的瓶颈,CPU性能越高,输入输出设备运行速度同CPU运行速度不匹配问题尤为突出。
  2. 输入输出设备多种多样,如何对它们实现统一的管理。
  3. 在实时处理和控制系统应用中,输入设备能否及时将各种信息传送给计算机系统,计算机发出的各种命令能否通过输出设备及时传送给执行机制。

2,输入/输出设备分类

1,按设备的使用特征分类

  • 输入/输出设备可分为输入设备输出设备交互式设备存储设备等等。
    • 输入设备如:键盘,鼠标。
    • 输出设备如:打印机,绘图仪,显示器等等。
    • 交互式设备的特点是,用户命令信息通过各种输入设备进入计算机系统,系统同步地在显示器上显示用户的命令信息以及执行命令后所得到的处理结果。交互式设备如:显示器,键盘,鼠标,手写输入设备等装置。

2,按设备的信息组织方式分类

  • 把输入输出设备划分为字符设备(Character Device)和块设备(Block Device)。
  • 键盘,终端,打印机等以字符为单位组织和处理信息的设备被称为字符设备
  • 磁盘,磁带等以字符块为单位组织和处理信息的设备被称为块设备
  • 通常,输入输出类的设备都可以看作是字符设备,而存储类设备都可以看作是块设备

3,按设备使用的可共享性分类

  • 分为独占设备共享设备虚拟设备等。
  • 独占设备:在一个程序的整个运行期间都必须由单个程序独占直至该程序完成的设备。如:打印机。
  • 共享设备:能够同时让许多程序使用的设备。如:磁盘。共享设备分为两种。
    • 广义的共享:指非并发共享,几乎所有的设备都是广义的共享设备。
    • 狭义的共享:指并发共享
  • 虚拟设备在一类设备上模拟另一类设备,被模拟的设备称为虚拟设备。通常用共享设备模拟独占设备,用高速设备模拟低速设备。虚拟设备的目的是提高设备利用率

3,输入/输出设备的组成

  • 输入输出设备由物理设备接口部件两部分组成。

1,物理设备

  • 指输入输出设备中为执行所规定的操作所必须有的物理装置。

2,接口部件

  • 指和计算机系统发生直接联系的那部分电子部件。
  • 接口部件在功能上可以划分为两个部分:
    • 输入/输出设备控制器
    • 设备接口

二,设备分配与回收

1,设备分配原则

  • 设备分配的原则是:要充分发挥设备的使用效率,尽可能地让设备忙碌,但又要避免由于不合理的分配方法造成进程死锁。
  • 设备分配有两种方式:静态分配动态分配
    • 静态分配是在用户作业开始执行前,由系统一次分配该作业所要求的全部设备,控制器。一旦分配之后,这些设备,控制器就一直为该作业所占用,直到该作业被撤销。静态分配方式不会出现死锁,但设备的使用效率低。静态分配不符合分配的总原则。
    • 动态分配在进程执行过程中根据执行需要进行。当进程需要设备时,通过系统调用命令向系统提出设备请求,由系统按照事先规定的策略给进程分配所需要的设备,一旦用完之后便立即释放。动态分配有利于提高设备的利用率,但如果分配不当,有可能造成进程死锁。

2,设备分配策略

  • 独占设备的分配有两种方式
    • 静态分配
    • 动态分配
  • 共享设备分配要考虑多个访问请求到达时服务的顺序,使平均服务时间越短越好。共享设备是基于一定的分配策略的。常用的有先请求先分配优先级高者先分配等策略。

三,缓冲和SPOOLing技术

1,缓冲技术

  • 解决的问题
    • 输入/输出设备与处理机速度不匹配的问题可以采用缓冲区的方法解决。在设置了缓冲区之后,计算进程可把数据首先输出到缓冲区,然后继续执行后面的工作。
  • 根据系统设备的缓冲区的个数,可把缓冲技术分为单缓冲双缓冲多缓冲以及缓冲池几种。

2,虚设备技术

  • 虚设备技术,又称为SPOOLing技术,是多道程序设计系统中处理独占I/O设备的一种方法,可以提高设备利用率并缩短单个程序的响应时间。
  • SPOOLing全称为Simultaneous Peripheral Operations On-Line,其含义是同时的外部设备联机操作,也称假脱机技术

四,磁盘调度

  • 使用磁盘时,驱动器的马达带动磁盘高速均匀旋转,磁头一直停留在盘面表面上方并可以在半径方向上不同磁道间移动。当磁头移动到目标磁道后就静止不动,该磁道的内容就从磁头下顺序经过,磁头就可以读写从磁头下经过的该磁道的内容和位置。通过磁头的读写装置,分别对磁盘片的上下两面进行读写。

  • 在磁盘中,磁头臂只能沿半径方向移动。在访问磁盘时,首先要把磁头臂移动到相应柱面的磁道上,称为寻道。然后等待磁盘旋转,使指定的扇区转到磁头之下,实现了对磁道和扇区的定位。最后控制磁头对扇区中的数据进行读写。

  • 一次访问磁盘的时间由寻道时间旋转定位时间数据传输时间组成,其中,寻道时间是机械动作的时间,花费时间最长。

  • 由于盘片正反两面都使用,或若干个磁盘片组合固定在一起,因此需要标定盘面的代号或磁头号。

  • 将所有盘面中处于同一磁道号上的所有磁道组成一个柱面,就形成了柱面号。读写同一柱面内的数据不需移动磁头。

  • 磁盘的物理地址具有如下形式,可以唯一确定存储块的位置。

    • 柱面号(磁道号),磁头号(盘面号),扇区号
  • 磁盘执行一次输入/输出所花的时间有

    • 寻道时间:磁头在磁头臂带动下移动到指定柱面所花的时间。
    • 延迟时间:指定扇区旋转到磁头下所需的时间。
    • 传送时间:由磁头进行读写完成信息传送的时间。
  • 为了减少磁头臂进行移动花费的时间,每个文件的信息不是按盘面上的磁道顺序存放满一个盘面后,再放到下一个盘面上,而是按柱面存放,同一柱面上的各磁道被放满信息后,再放到下一个柱面上。所以各磁盘的编号按柱面顺序(从0开始),每个柱面按磁道顺序,每个磁道又按扇区顺序进行排序。

    • 假定用 t t t表示每个柱面上的磁道数,用 s s s表示每个盘面上的扇区数,则第 i i i柱面, j j j磁头, k k k扇区所对应的块 b b b由如下公式确定。

      b = k + s ∗ ( j + i ∗ t ) b=k+s*(j+i*t) b=k+s(j+it)

    • 根据块号也可以确定该块在磁盘上的位置,在上述的假定下,每个柱面上有 s ∗ t s*t st个磁盘块,为了计算第 p p p块在磁盘上的位置,可以令

      d = s ∗ t d=s*t d=st

      m = [ p / d ] m=[p/d] m=[p/d]

      n = p m o d    d n=p \mod d n=pmodd

    • 其中[]表示向下取整。于是,第p块在磁盘上位置为:

      柱 面 号 = m 柱面号 = m =m

      磁 头 号 = [ n / s ] 磁头号 = [n/s] =[n/s]

      扇 区 号 = [ n m o d    s ] 扇区号 = [n \mod s] =[nmods]

  • 磁盘的调度策略称为“驱动调度”。磁盘驱动调度由“移臂调度”和“旋转调度”组成。

  • 移臂调度

    • 根据访问者指定的柱面位置来决定执行次序的调度,称为“移臂调度”,移臂调度的目的是尽可能地减少操作中的寻道时间。
    • 在磁盘盘面上,0磁道在盘面的外部;号数越大,磁道越靠近盘片的中心。
    • 常用的移臂调度算法有“先来先服务算法”,“最短寻找时间优先算法”,“电梯调度算法”和“单向扫描算法”。
    • 先来先服务算法
      • 不考虑访问者要求访问的物理位置,只是考虑访问者提出访问请求的先后次序。
    • 最短寻找时间优先算法
      • 从等待访问者中挑选寻找时间最短的那个请求先执行,而不管访问者到来的先后次序。
    • 电梯调度算法
      • 从移动臂当前位置开始沿着臂的移动方向去选择离当前移动臂最近的哪个柱面,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。
    • 单向扫描算法
      • 不考虑访问者等待的先后次序,总是从0号柱面开始向里道扫描,按照各自所要访问的柱面位置的次序去选择访问者。在移动臂到达最后一个柱面后,立即快速返回到0号柱面,返回时不为任何的访问者等待服务。在返回到0号柱面后,再次进行扫描。
  • 旋转调度

    • 对在同一个柱面中多个访问者的读写请求,用来确定为这些访问等待者服务的次序。

    • 进行旋转调度时应该分析下列问题

      • 若干访问等待者请求访问同一磁道上的不同扇区。
      • 若干访问等待者请求访问不同磁道上的不同编号的扇区。
      • 若干访问等待者请求访问不同磁道上的,具有相同编号的扇区。
        表示向下取整。于是,第p块在磁盘上位置为:

      柱 面 号 = m 柱面号 = m =m

      磁 头 号 = [ n / s ] 磁头号 = [n/s] =[n/s]

      扇 区 号 = [ n m o d    s ] 扇区号 = [n \mod s] =[nmods]

  • 磁盘的调度策略称为“驱动调度”。磁盘驱动调度由“移臂调度”和“旋转调度”组成。

  • 移臂调度

    • 根据访问者指定的柱面位置来决定执行次序的调度,称为“移臂调度”,移臂调度的目的是尽可能地减少操作中的寻道时间。
    • 在磁盘盘面上,0磁道在盘面的外部;号数越大,磁道越靠近盘片的中心。
    • 常用的移臂调度算法有“先来先服务算法”,“最短寻找时间优先算法”,“电梯调度算法”和“单向扫描算法”。
    • 先来先服务算法
      • 不考虑访问者要求访问的物理位置,只是考虑访问者提出访问请求的先后次序。
    • 最短寻找时间优先算法
      • 从等待访问者中挑选寻找时间最短的那个请求先执行,而不管访问者到来的先后次序。
    • 电梯调度算法
      • 从移动臂当前位置开始沿着臂的移动方向去选择离当前移动臂最近的哪个柱面,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。
    • 单向扫描算法
      • 不考虑访问者等待的先后次序,总是从0号柱面开始向里道扫描,按照各自所要访问的柱面位置的次序去选择访问者。在移动臂到达最后一个柱面后,立即快速返回到0号柱面,返回时不为任何的访问者等待服务。在返回到0号柱面后,再次进行扫描。
  • 旋转调度

    • 对在同一个柱面中多个访问者的读写请求,用来确定为这些访问等待者服务的次序。
    • 进行旋转调度时应该分析下列问题
      • 若干访问等待者请求访问同一磁道上的不同扇区。
      • 若干访问等待者请求访问不同磁道上的不同编号的扇区。
      • 若干访问等待者请求访问不同磁道上的,具有相同编号的扇区。

猜你喜欢

转载自blog.csdn.net/JAVAYmm/article/details/120741424
今日推荐