• 计算机操作系统(持续学习中)


    第四-五章-存储器管理与虚拟存储器

    程序地装入和链接

    存储器地层次结构

    在这里插入图片描述

    1,存储器的多层结构
    存储层次至少应具有三级:最高为cpu寄存器,中间为主存,最底层是辅存。再较高档的计算机中,还可以根据具体的功能细分为cpu寄存器(寄存器),主存(高速缓存,主存储器,磁盘缓存),辅存(固定磁盘,可移动存储介质)等六层。速度从前到后越来越慢。
    2,可执行存储器
    计算机系统的存储层次中,寄存器和主存储器又被称为可执行存储器。
    3,主存储器
    主存储器简称内存或主存,是计算机系统中的主要部件,用于保存进程运行时的程序和数据,也可称为执行存储器。通常处理机都是从主存储器中取得指令和数据的,并将其所取得的指令放入指令寄存器中,而将其所读取的数据装入到数据寄存器中;或者反之
    4,寄存器
    寄存器是具有与处理机相同的速度,故对寄存器的访问速度最快,完全能与cpu协调工作,单价格却十分昂贵,因此容量不可能做得很大。
    5,高速缓存
    高速缓存是现代计算机结构中的一个重要部件,它是介于基础年起和存储器之间的存储器,主要用于备份主存中较常用的数据,以减少处理机对主存储器的访问次数,这样可大幅度地提高程序执行速度。
    6,磁盘缓存
    由于目前磁盘I/O速度远低于对主存地访问速度,为了缓和两者之间在速度上地不匹配,而设置了磁盘缓存,主要用于暂时存放频繁使用地一部分磁盘数据和信息,以减少访问磁盘地次数。

    程序地装入

    一,在多道程序环境下,要使程序运行,必须为之先建立进程。创建进程的第一件事是将程序和数据装入内存。
    将用户源程序变为可在内存中执行的程序的步骤:
    1、编译:由编译程序将用户源代码编译成若干个目标模块。
    2、链接:由链接程序将编译后形成的一组目标模块,以及它们所需要的库函数链接在一起,形成一个完整的装入模块。
    3、装入:由装入程序将装入模块装入内存。
    二,将一个装入模块装入内存时,有三种方式:
    绝对装入方式
    重定位装入方式
    动态运行时装入方式
    三,绝对装入方式
    在编译时,如果知道程序要驻留在内存的什么位置,那么编译程序将产生绝对地址(物理地址,内存中的实际地址) 的目标代码。
    装入模块装入内存后,程序中的逻辑地址与实际内存地址完全相同,不须对程序和数据的地址进行修改
    程序中所使用的绝对地址,可在编译或汇编时给出,也可由程序员赋予。
    只适合于单道程序环境
    四, 可重定位装入方式
    在多道程序环境下,目标模块的起始地址通常从0开始,程序中的其他地址都是相对于起始地址计算的,内存有空闲就可放置。因此应采用可重定位装入方式,根据内存的当前情况,将装入模块装入到内存的适当位置。
    注意:在采用可重定位装入方式将装入模块装入内存后,会使装入模块中的所有逻辑地址与实际装入内存的物理地址不同
    五, 动态运行时装入方式
    动态运行时的装入程序,在把装入模块装入内存后,并不立即把装入模块中的相对地址(逻辑地址)转换为绝对地址(物理地址) ,而是把这种地址转换推迟到程序真正要执行时才进行。
    装入内存后的所有地址都仍是相对地址。
    为使地址转换不影响指令的执行速度,应设置一个重定位寄存器实行动态定位。
    六,程序的链接
    程序经过编译后得到一组目标模块,再利用链接程序将目标模块链接,形成装入模块。根据链接时间的不同,把链接分成三种:
    1,静态链接(Static Linking)方式
    在程序运行之前,先将各目标模块及它们所需要地库函数链接成一个完整地装配模块,以后不再拆开。我们把这种事先进行链接地方式称为静态链接方式。
    ②将目标模块装配成装入模块时需解决的两个问题:
    (1) 对相对地址进行修改 (2) 变换外部调用符号
    2,装入时动态链接(Load-time Dunamic Linking)
    这是指将用户源程序编译后所得到地一组目标模块,在装入内存时采用边装入边链接的链接方式。即在装入一个目标模块时若发生一个外部模块调用事件,将引起装入层序去找出相应的外部目标模块,并将它装入内存
    (1)便于修改和更新
    (2)便于实现对目标模块的共享
    3,运行时动态链接(Run-time Dynamic Linking)
    在执行过程中,当发现一个被调用模块尚未装入内存时,立即由os去找到该模块,并将之装入内存,将其连接到调用者模块上。凡在执行过程中未被用到目标模块,都不会被调入内存被链接到装入模块上,这样不仅能加快层序的的装入过程,而且可节省大量的内存空间

    连续分配存储管理方式

    1,单一连续分配
    把内存分为系统区用户区两部分,系统区仅提供给OS使用,通常放在内存低址部分,用户区是指除系统区以外的全部内存空间,提供给用户使用。但只能用于单用户、单任务的操作系统中。
    适合单用户使用但是会造成空间浪费。
    2,固定分区分配
    将整个用户空间划分为若干个固定大小区域,在每个分区中只装入一道作业,便可以有多道作业并发执行。当有一空闲分区时,便可以再从外存的后备作业队列中,选择一个适当大小的作业装入该分区,当该作业结束时释放该分区,可再从后备作业队列中找出另一作业调入该分区
    (1)划分分区的方式
    ①分区大小相等(指所有内存分区大小相等)其缺点式缺乏灵活性即当程序太小时,会造成内存空间的浪费。当程序太大时,一个分区又不足以装入该程序致使该程序无法运行。
    ②分区大小不等。将存储器分区划分为若干个大小不等的分区,把内存区划分成含有多个较小的分区、适量的中等分区及少量的大分区
    (2)内存分配
    为了便于内存分配,通常将分区按照大小进行排队,并为之建立一张分区使用表,其中各表项包括每个分区的起始地址,大小及状态(是否已分配),当有一用户需要装入时,由内存分配程序依据用户程序的大小检索该表,从中找出一个能满足要求的,尚未分配的分区,将之分配给该程序,然后将该表项中的状态置为已分配中。若未找到大小足够的分区,就拒绝该用户程序分配内存。
    3,动态分区分配
    根据进程的实际需要,动态地位置分配内存空间。在实现动态分区分配时,将涉及到分区分配中所用的数据结构,分区分配算法和分区的分配与回收操作这样三方面的问题。
    (1)动态分区分配中的数据结构
    ①空闲分区表
    ②空闲分区链
    (2)把一个新作业装入内存,须按照一定的分配算法,从空闲分区表或空闲分区链中选出一分区分配给该作业。
    (3)分区分配操作
    在动态分区存储管理方式中,主要的操作是分配内存和回收内存。
    ①分配内存:系统利用某种分配算法,从空闲分区链表中找到所需大小的分区
    ②回收内存:当程序运行完毕释放内存时,系统根据回收区的首址,从空闲分区表中找到相应的插入点
    在这里插入图片描述
    4,基于顺序搜索的动态分区匹配算法
    (1)首次适应(first fit,FF)算法
    在分配内存时,从链首开始顺序查找,知道找到一个大小能满足要求的空闲分区为之。然后再按照作业的大小,从该分区中划出一块内存空间,分配给请求者,余下的空闲分区任留在空闲链中
    (2)循环首次适应(next fit,NF)算法
    在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。
    (3)最佳适应算法(best fit,BF)算法
    每次作业分配内存时,总能把能满足要求,又是最小的空闲分区分配给作业。为了加速寻找,该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链.这样第一次找到的能满足要求的空闲区必然是最佳的。
    (4)最坏适应(worst fit,WF)算法
    和最佳相反,挑选最大的空闲区,从中分割一部分存储空间给作业使用,以至于存储器中缺乏大的空闲区域。
    5,基于索引搜索的动态分区分配算法
    (1),快速适应(quick fit)算法
    该算法又称为分类搜索法,是将空闲分区根据其容量大小进行分类,对每一类具有相同容量的所有空闲分区,单独设立一个空闲分区链表,这样系统中存在多个空闲分区链表。同时,在内存中设立一张管理索引表,其中的每一个索引表项对应了一中空闲分区类型,并记录了该类型空闲分区链表表头的指针。
    (2),伙伴系统(buddy system)
    该算法规定,无论已分配分区或空闲区域,其大小均为2的k次幂(k为整数,1《=k《=m)通常2^m是整个可分配内存的大小也是最大分区的大小
    (3),哈希算法
    利用哈希快速查找的优点,以及空闲分区在可利用空闲分区表中的分布规律,建立哈希函数,构造一张以空闲分区大小为关键字的哈希表,该表的每一个表项记录了一个对应的空闲分区链表表头指针。
    6,动态可重定位分区分配
    (1)紧凑
    连续分配的一个重要特点是:一个系统或用户必须被装入一篇连续的内存空间中。当一台计算机运行了一段时间以后,它的内存空间会被分割成许多小的分区,而缺乏大的空闲空间,即使这些分散的许多小分区的容量总和大于要装入的程序,但由于这些分区不想连接,也无法把该程序装入。
    (2)若想把大作业装入,可采用的方法是:将内存中的所有作业进行移动,使他们全部都相邻接。这样就可把原来分散的多个空闲小分区拼接成一个大分区,可将一个作业装入该分区。
    7,动态重定位
    程序在执行时真正访问的内存地址使相对地址与寄存器中的地址相加而形成的,地址变换过程是在程序执行期间,随着对每条指令或数据的访问动态的进行。
    8,动态重定位分区分配算法
    动态重定位分区分配算法与动态分配算法基本相同,差别仅在于:在这种分配算法中,增加了紧凑的功能。
    在这里插入图片描述

    对换(Swapping)

    要实现内,外存值之间的对换,系统中必须有一台I/O速度较高的外存,而且其容量也必须足够大,能容纳正在分时运行的所有用户作业

    多道程序环境下的对换技术

    1,对换解决的问题
    对换是把内存中暂时不能运行的进程或者暂时不用的程序和数据换出到外存上,以便腾出足够的内存空间,再把已具有运行条件的进程或进程所需的程序和数据换入内存。对换是改善内存利用率的有效措施,它可以直接提高处理机的利用率和系统的吞吐量。
    2,对换类型
    内次对换时都是将一定数量的程序或数据换入或换出内存。
    (1)整体对换
    处理机中级调度就是存储器的对换功能,其目的是用来解决内存紧张的问题,并可进一步提高内存利用率和系统吞吐量。又称为进程对换
    (2)页面分段对换
    对换是以进程的一个页面或分段为单位进行的,称为页面分段对换

    对换空间的管理

    在具有对换功能的os中,通常把磁盘空间分为文件区和对换区两部分。
    1,对换空间的主要目标
    (1),对文件区管理的主要目标
    文件区占用磁盘空间的大部分,用于存放各类文件。由于通常的文件都是较长时间的驻留在外存上,对它访问的频率是较低的,故对文件区2管理的主要目标就是塔高文件存储空间的利用率。因此对文件区空间的管理采用离散分配方式
    (2),对换空间管理的主要目标
    对换空间只占磁盘空间的小部分,用于存放从内存换出的进程。对换空间管理的主要目标是提高进程换入和换出的速度,为此对换空间采取连续分配方式
    2,对换空间的分配和回收
    由于对换分区的分配采用的是连续分配方式,因而对换空间的分配与回收与动态分区方式时的内存分配与回收方法相同。其分配算法可以是首次适应算法,循环首次适应算法,或最佳适应算法等
    3,进程的换出
    对换进程在实现进程换出时,是将内存中的某些进程调出至对换区,以便腾出内存空间。

    分页存储管理方式

    1. 页面
      分页式存储管理的方法:将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,叫页号。同时把内存空间分成与页面相同大小的若干个存储块,称为块或页框或页帧或内存块或物理块,并也为其进行编号,称为块号或页框号。
      特点:进程的最后一页经常装不满一块而形成“页内碎片”
      2,基本分页式存储管理(简单页式存储管理)分配的原理
      系统若能满足一个作业所要求的全部块数,此作业才能被装入内存,否则不为它分配任何内存。
      请求分页式存储管理的原理
      运行一个作业时,并不要求把该作业的全部程序和数据都装入内存,可以只把目前要执行的几页调入内存的空闲块中,其余的仍保存在外存中,以后根据作业运行的需要再调入内存。
      3,页面大小的选择
      页面大小:每个页所包含的字节数。
      由机器的地址结构所决定的,即由硬件所决定
      某一种机器只能采用一种大小的页面。
      :内碎片小,内存利用率高,但页面数目多,一个页面会使用一个页表项,将会导致页表过长,占大量内存,管理开销大
      :页表短,管理开销小,内碎片大,内存利用率低,浪费内存空间
      页面大小应适中,是2的幂,通常是1KB-8KB
      4,页号 = int[逻辑地址 / 页面长度](取除法的整数部分)
      例:页号 = 80 / 50 = 1
      页内偏移量 = 逻辑地址 % 页面长度(取除法的余数部分)
      例:页内偏移量 = 80 % 50 = 30
      页面在内存中的起始位置:操作系统需要用某种数据结构记录进程各个页面的起始位置。

      页内偏移量,页号:如果每个页面大小为2^k B,用二进制数表示逻辑地址,则末尾K位即为页内偏移量,其余部分就是页号.
      因此,如果让每个页面的大小为2的整数幂,计算机就可以很方便地得出一个逻辑地址对应的页号和页内偏移量。
      5,地址结构(逻辑地址结构)
      在这里插入图片描述

    地址长度32位:
    0-11位为页内偏移量(页内地址),即每页的大小为4KB
    12 -31位为页号,地址空间最多允许有1M页

    对于某特定的机器,其地址结构是一定的。
    如果有 K 位表示“页内偏移量”,则说明该系统中一个页面的大小是2^k个内存单元
    如果有 M 位表示“页号”,则说明在该系统中,一个进程最多允许有2^M个页面

    5,总结计算步骤:

    1. 要算出逻辑地址对应的页号
    2. 要知道该页号对应页面在内存中的起始地址
    3. 要算出逻辑地址在页面内的“偏移量”
    4. 物理地址=页面始址+页内偏移量
      注:如果题目中是用十进制数表示逻辑地址,则
      页号P=int[逻辑地址/页面长度](取除法的整数部分)
      页内偏移量d=逻辑地址%页面长度(取除法的余数部分)
      例如:系统页面大小L为1KB,设逻辑地址A=2170B,则
      P=2,d=122
      6,基本分页式存储管理的实现
      进程的每一页离散地存储在内存的任一存储块中,为能知道进程的每个页面在内存中存放的位置,系统为每一进程建立一张页面映像表,简称页表。
      页表实现了从页号到物理块号的地址映射。
      ①一个进程对应一张页表
      ②进程的每一页对应一个页表项
      ③每个页表项由“页号”和“块号”组成
      ④页表记录进程页面和实际存放的内存块之间的对应关系
      7,地址变换机构
      为了能将用户地址空间的逻辑地址变换为内存空间的物理地址,在系统中必须设置地址变换机构。
      地址变换机构实现从逻辑地址到物理地址的转换,由于页内地址与物理地址是一 一对应的,因此,地址变换机构的任务是借助于页表,将逻辑地址中的页号转换为内存中的物理块号。
      ①逻辑地址-物理地址
      1、通过页表将页号转换成内存的块号
      2、因为 一页大小 = 一块大小 ,所以逻辑地址中的页内地址是可以直接拿来作为物理地址中的块内地址的
      8, 基本的地址变换机构
      页表的功能可以由一组专门的寄存器来实现,一个页表项用一个寄存器。但寄存器成本高,系统页表可能很大,所以页表大多常驻内存。
      页表放置内存中时,在系统中只设置一个页表寄存器PTR,在其中存放页表在内存中的始址和页表的长度。平时,进程没有执行时,页表的始址和页表长度存放在进程的PCB中,当调度到进程时,才将这两个数据装入到页表寄存器中。
      9,地址变换机构的组成:页表、页表寄存器PTR
      页表的存放
      页表大多驻留在内存中。
      进程未执行时,页表的始址和页表长度存放在本进程的PCB中。
      进程执行时,将页表的始址和页表长度装入页表寄存器。
      页表寄存器(PTR)
      在系统中设置的一个寄存器,用来存放页表在内存中的始址和页表长度。
      PTR中保存页表在内存中的始址和页表长度,当进程被调度进入执行时,其页表信息才从PCB中装入PTR。

    页面置换算法

    1,缺页中断率

    缺页中断率:访问失败的次数与总访问次数之比。
    假定作业Ji共有m页,系统分配给它的内存块为n块,这里m>n。开始时,内存没有装入任何一页的信息。如果作业Ji在运行中成功访问的次数为S,不成功访问的次数为F(产生缺页中断的次数),作业执行过程中总的访问次数为A。
    A=S+F
    现定义作业Ji执行过程中缺页中断率为:
    f = F/A

    2,最佳置换算法

    其所选择的被淘汰页面,将是以后永不再用的,或许是在未来最长时间内不再被访问的页面。
    优点:保证获得最低的缺页率。
    缺点:无法预知一个进程在内存的若干个页面,哪个在未来最长时间内不再被访问。
    算法很难实现,但可以作为评价其他算法的标尺。

    3,先进先出置换算法

    算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
    算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针(替换指针),使它总是指向最老的页面。
    算法与进程的实际运行规律不相适应,因为进程中的某些页面经常被访问,但先进先出置换算法不能保证这些页面不被淘汰。

    4,LRU置换算法的描述(又叫最近最久未使用算法)

    算法根据页面调入内存后的使用情况进行决策。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。
    该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当需淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。
    1,LRU置换算法的硬件支持(实现)
    LRU置换算法虽然较好,但需较多的硬件支持,为了了解一个进程在内存中的各个页面各有多少时间未被进程访问,以及如何快速地知道哪一页是最近最久未使用的页面,需有以下两类硬件之一的支持:
    寄存器:每个位于内存中的页面都要配置一个移位寄存器用来标识进入内存的时间。
    栈:每当引用一个已在栈的页时,都将该页从栈中弹出并压入顶部。
    (1)寄存器
    为在内存中的每个页面配置一个移位寄存器,用来记录某进程各页在内存中的使用情况。移位寄存器表示为:
    R = R_n−1 R_n−2 R_n−3 …R_2 R_1 R_0
    当进程访问某物理块时,要将相应寄存器的最高位R_n−1位置成1。此时,定时信号将每隔一定时间(如100ms)将寄存器右移一位。如果把n位寄存器的数看作一个整数,那么具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。
    特点:该算法需要搜索页表以查找计数值最小的页面,系统的时空开销需要考虑。
    (2)栈(后进先出)
    利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号。

    5,简单的Clock置换算法(又称最近未使用算法(NRU))

    原理:NRU算法是根据访问位来确定谁是最近一个时期内未被访问的页,采用循环扫描方式,若遇到的访问位为0,则选中置换,若遇到的访问位为1,则将其改为0,让其继续驻留内存,继续循环扫描下一个。该算法是LRU和FIFO的折衷。
    每页有一个使用访问标志位(use bit),若该页被访问则置user bit=1。 置换时采用一个指针,从当前指针位置开始按地址先后检查各页,寻找use bit=0的页面作为被置换页。指针经过的user bit=1的页都修改user bit=0,若检查到队列的最后一个页面时,访问位仍为1,则再返回到队首去检查第一个页面。

    抖动与工作集

    1,多道程序度与处理机的利用率

    由于虚拟存储器系统能从逻辑上扩大内存,人们希望在系统中能运行更多的进程,即增加多道程序度,以提高处理机的利用率。
    在虚存中,页面在内存与外存之间频繁调度,以至于调度页面所需时间比进程实际运行的时间还多,此时系统效率急剧下降,甚至导致系统崩溃。这种现象称为颠簸或抖动。
    1,产生“抖动”的原因
    页面淘汰算法不合理
    分配给进程的物理页面数太少(不合理)
    2,工作集的基本概念
    进程发生缺页率的时间间隔,与进程所获得的物理块数有关。
    右图示出了缺页率与物理块数之间的关系。
    3,工作集的定义
    在某段时间间隔Δ里,进程实际上要访问页面的集合。
    具体地说,是把某进程在时间t的工作集记为w(t,Δ), 其中的变量Δ称为工作集的“窗口尺寸”。下图示出了某进程访问页面的序列和窗口大小分别为3,4、5时的工作集。由此可将工作集定义为:进程在时间间隔(t-Δ,t)中引用页面的集合。 工作集w(t,Δ)是二元函数,即在不同时间t的工作集大小不同,所含的页面数也不同;与窗口尺寸Δ有关。
    4,抖动的预防方法
    ⑴采取局部置换策略
    在页面分配和置换策略中,如果采取的是可变分配方式时,为了预防发生“抖动”,可采取局部置换策略。
    ⑵把工作集算法融入到处理机调度中
    在调度中融入了工作集算法,则在调度程序从外存调入作业之前,必须先检查每个进程在内存的驻留页面是否足够多。
    ⑶利用“L=S”准则调节缺页率
    于1980年Denning提出了“L=S”的准则,来调节多道程序度。
    L是缺页之间的平均时间
    S是平均缺页服务时间,即用于置换一个页面所需的时间。
    (利用“L=S”准则,对于调节缺页率是十分有效的。)
    ⑷选择暂停的进程
    当多道程序度偏高时,已影响到处理机的利用率,为了防止发生“抖动”,系统必须减少多道程序的数目。

    2,虚拟存储器的定义

    虚拟存储器:是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却接近于外存。
    实现虚拟存储器,只能基于非连续分配技术。需要有地址变换机构和页面调度策略两个方面的支持。
    1,虚拟存储器的定义
    多次性:一个作业被分成多次调入内存运行。
    对换性:允许在作业的运行过程中进行换进、换出。
    虚拟性:能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。
    请求分页系统是建立在基本分页基础上的,增加了请求调页功能和页面置换功能。换入和换出的基本单位都是长度固定的页面,因而在实现上比请求分段系统简单。
    2,请求分页中的硬件支持如下:
    (1)1. 页表机制
    在请求分页系统中所需要的主要数据结构是页表。基本作用仍是将用户地址空间中的逻辑地址变换为内存空间中的物理地址。由于只将程序的一部分装入内存,还有一部分在外存中,因此须在页表中增加若干项,供程序或数据在换进、换出时参考。
    2. 缺页中断机构
    3. 地址变换机构

    常用

    逻辑地址如何转化为物理地址:
    1.要算出逻辑地址对应的页号
    2.要算出逻辑地址在页面内的“偏移量”
    3.要知道该页号对应页面在内存中的起始地址
    4.物理地址=页面内存始址+页内偏移量
    页号P=int[逻辑地址/页面长度]
    页内偏移量d=逻辑地址%页面长度
    页面内存起始地址=块号×块大

    第六章 输入输出系统

    1,I/O系统

    1,i/0的引入

    I/O通道设备的引入:其主要目的是为了建立独立的I/O操作,去解放CPU。在设置通道后,CPU只需向通道发送一条I/O指令,通道完成任务后向CPU发中断信号。
    I/O通道是一种特殊的处理机,它的主要功能是实现CPU与I/O设备及控制器的通信。

    2,缓冲的引入

    为了缓和CPU和I/O设备速度不匹配的矛盾,提高CPU和I/O设备的并行性,在现代OS中,几乎所有的I/O设备与处理机交换数据时,都用了缓冲区。
    引入缓冲区的主要原因归结为以下几点:
    缓和CPU与I/O设备间速度不匹配的矛盾。
    减少对CPU的中断频率,放宽对CPU中断响应时间的限制。
    解决数据粒度不匹配的问题。
    提高CPU和I/O设备之间的并行性。

    3,缓冲区的分类

    单缓冲(Single Buffer)
    双缓冲(Double Buffer)
    循环缓冲
    缓冲池

    4,SPOOLing技术

    SPOOLing技术是将独占设备改造为共享设备的技术。
    SPOOLing系统的有四大部分组成:
    输入井和输出井。是磁盘上开辟的两个大存储空间。
    输入缓冲区和输出缓冲区。在内存中开辟两个缓冲区,输入缓冲区暂存由输入设备送来的数据,后送输入井;输出缓冲区暂存从输出井送来的数据,后传送到输出设备。
    输入进程和输出进程。利用两个进程模拟脱机I/O时的外围处理机。
    井管理程序:控制作业与磁盘#之间信息的交换
    1,spooling技术特点
    提高了I/O的速度。利用输入输出井模拟成脱机输入输出,缓和了CPU和I/O设备速度不匹配的矛盾。
    将独占设备改造为共享设备。
    实现了虚拟设备功能。多个进程同时使用一台独占设备,虚拟成了多台设备。

    第七,八,九章

    1,文件逻辑结构的类型

    可以分为两大类:
    有结构文件
    无结构文件
    为了解决不同用户文件的命名冲突问题,通常会在文件系统中采用多级目录。
    1,有结构文件
    根据记录的组织方式分为下列文件:
    顺序文件:由一系列记录按某种顺序排列所形成的文件,通常是定长记录。
    索引文件:当记录可变长时,通常为之建立一张索引表,并为每个记录设置一个表项以加快对记录检索的速度。
    索引顺序文件:上述两种方式的结合。为文件建立一张索引表,为每一组记录中的第一个记录设置一个表项。
    用户对文件执行删除操作前,不需要先打开文件。
    2,外存分配方式
    由于磁盘具有可直接访问的特性,故当利用磁盘来存放文件时,具有很大的灵活性。
    常用的外存分配方法有:连续分配、链接分配和索引分配三种。在一个系统通常只采用一种方法。
    一个事务在对一批数据执行修改操作时,应该是要么全部完成,要么一个也不修改。
    3,操作系统接口
    目前常用的操作系统接口为图形化用户接口,用户可以通过图形化的操作界面,完成对作业和文件的各种控制与操作。

    2,题

    1.若P、V操作的信号量初值为2,当前值为-1,则表示(B)等待进程。
    A、0个 B、1个 C、2个 D、3个
    2.如果信号量的当前值为-4,则表示系统中在该信号量上有(A)个进程等待。
    A、4 B、3 C、5 D、0

    3.下列关于虚拟存储的叙述中,正确的是(B)
    A.虚拟存储只能基于连续分配技术
    B.虚拟存储只能基于离散分配技术
    C.虚拟存储容量只受外存容量的限制
    D.虚拟存储容量只受内存容量的限制
    4.下列页面置换算法中,可能出现Belady异常现象的是( B)
    A.LRU页面置换算法 B.FIFO页面置换算法 C.OPT页面置换算法
    5.在请求分页存储管理中,缺页率与进程所分得的内存页面数、( B)、进程页面流的走向等因素有关。
    A.页表的位置 B.页面置换算法
    C.外存管理算法 D.进程调度算法
    6.在回收内存时,可能出现以下几种情况:
    (1)释放区与插入点前一分区F1相邻接,此时应__C__
    (2)释放区与插入点后一分区F2相邻接,此时应__D___
    (3)释放区不与F1和F2相邻接,此时应__A___
    A.为回收区建立一分区表项,填上分区的大小和始址
    B.以F1分区的表项作为新表项且不做任何改变
    C.以F1分区的表项作为新表项,修改新表项的大小
    D.以F2分区的表项作为新表项,同时修改新表项的大小和始址
    E.以F2分区的表项作为新表项,同时修改新表项的始址

  • 相关阅读:
    【TypeScript】为什么要选择 TypeScript?
    python垃圾自动清理机制
    timezone 时区
    刚工作菜鸟的小总结1
    【亲测有效】申请wx.getLocation接口多次审核不通过解决方案,申请原因范文
    spring boot 集成EasyExcel
    (LdAiChat、Ai Loading、不墨AI助手、360AI搜索、TIG AI)分析好用的ChatGPT
    通过位运算进行两个变量值的交换功能
    springboot系列(十四):如何实现发送图片、doc文档等附件邮件?你一定得会|超级详细,建议收藏
    LeetCode 0174. 地下城游戏
  • 原文地址:https://blog.csdn.net/yfq_29/article/details/127712392