操作系统中的算法总结2

操作系统中的各种算法总结2

连续分配存储管理方式
单一连续分配

在单道程序环境下,当时的存储器管理方式是把2内存分为系统区和用户区两部分。系统区仅提供给OS使用,它通常放在内存的低址部分。而在用户区内存中,仅存装有一道用户程序。

固定分区分配

在单一连续分配的基础上,将整个用户空间划分为若干固定大小的区域,在每个分区中只装入一道作业。
划分分区可划分为分区大小相等和分区大小不等两种情况。
分区使用表来记录分区使用的情况。

动态分区分配
  • 数据结构:用空闲分区表或空闲分区链(双向链表)来记录空闲分区。
  • 动态分区分配算法:
    1. 顺序式搜索算法
      • 首次适应算法(FF)
        费时,会留下许多碎片
      • 循环首次适应算法(NF)
        首次适应的改进,每次查找从上次找到的空闲分区下一个空闲分区开始查找。
        大分区减少,该算法能使内存的空闲分区变得更均匀
      • 最佳适应算法(BF)
        算法要求将所有的空闲分区按其容量从小到大的顺序形成咦空闲分区链
        会产生难以使用的碎片
      • 最坏适应算法(WF)
        未必是最坏的算法。
        产生碎片几率小,但是缺少大空间
    2. 索引式搜索算法
      • 快适应算法
      • 伙伴算法
      • 哈希算法
  • 分区分配操作
    1. 分配内存
      用一个变量size来表示规定的不能切割的剩余分区的大小。
    2. 回收内存
      • 回收区与插入点的前一个分区相邻接
      • 回收分区与插入点的后一空闲分区相邻接
      • 回收区同时与插入点的前、后两个分区邻接
      • 回收区前后均无分区
动态可重定位分区分配
  • 紧凑
    将内存中的所有作业进行移动,使它们全都相邻接。这样,即可把原来分散的多个空闲小分区拼接成一个大分区,可将一个作业装入该区中,通过这种移动内存中作业的位置,把原来多个分散的小分区拼接成一个打分去的方法,成为“拼接”或“紧凑”。
  • 动态重定位
    解决程序位置移动后重定位效率低的问题。
    真正访问的内存地址是相对地址与重定位寄存器中的地址相加而成的。
  • 动态重定位分区分配算法
    动态重定位分区分配算法与动态分区分配算法基本上相同,差别在于增加了紧凑的功能。
页面置换算法

在进程运行过程中,若其所要访问的页面不在内存,而需把它们调入内存,蛋内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存总调出一页程序或数据送到磁盘的交换区中。

  • 最佳置换算法
    这是一种理论上的算法。其所选择的被淘汰页面将是以后永不适用的,或许是在最长时间内不再被访问的页面。
    一个进程在内存的若干页面中,哪一个页面是未来最长时间内不会再被访问的,人类是不能预知的,因而该算法是无法实现的。
  • 先进先出算法(FIFO)
    这是最早出现的算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
  • 最近最久未使用算法(LRU)
    LRU置换算法是选择最近最久未使用的页面予以淘汰。
  • 最少使用置换算法(LFU)
    该置换算法选择在最近十期使用最少的页面作为淘汰页。
  • 简单的Clock置换算法
    为每页设置一位访问位,,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位置被置1,置换算法在选择一页淘汰时,只需要检查页的访问为。如果是0,就选择该页换出,如果是1,则置0,继续检查下一个,并循环进行。
  • 改进型Clock算法
    增加了修改位,根据访问位和修改为的情况,分为4种类型的页面来判断是否将页面换出
    1. 访问位为0,修改位为0,是最佳淘汰页
    2. 访问位为0,修改位为1,不是很好的淘汰页
    3. 访问位为1,修改位为0,可能再被访问
    4. 访问位为1,修改位为1,可能再次被访问
磁盘调度算法

为了减少对文件的访问时间,应采用一种最佳的磁盘调度算法,以使各进程对磁盘的平均访问时间最小。由于在访问磁盘的时间中最主要是寻道时间,因此,磁盘调度的目标是使磁盘的平均寻道时间最少。

  • 先来先服务算法(FCFS)
    它根据进程请求访问磁盘的先后次序进行调度。
    此算法的优点是公平、简单,且每个进程的请求都能以此地得到处理,不会出现某一进程的请求长期得不到满足的情况。
  • 最短寻道时间优先(SSTF)
    其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但这种算法不能保证平均寻道时间最短。
  • 扫描算法(SCAN)
    SSTF算法的实质是基于优先级的调度算法,因此就可能导致优先级低的进程发生“饥饿”现象。
    扫描算法(SCAN)算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。
    例如:当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问时,才将磁臂换向为自外向里移动。
    SCAN算法既能获得较好的寻道性能,又能防止“饥饿”现象,但也存在问题。
    当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,此时,该进程必须等待,知道磁臂切换方向后在访问。
  • 循环扫描算法(CSCAN)算法
    为了弥补SCAN的不足,CSCAN规定磁头单项移动,例如只能自里向外移动,当磁头移到最外的磁道并访问后,磁头立即返回到最里的欲访问磁道。
文件存储空间的管理
  • 空闲表法和空闲链表法
  • 位示图
    位示图是利用二进制的一位来表示磁盘中一个盘块的使用情况。
    当其值为“0”时,表示对应的盘块空闲;为“1”时,表示已分配。磁盘上的所有盘块都有一个二进制位与之对应,这样,由所有盘块所对应的位构成一个集合,称为位示图。
    1. 盘块的分配
      顺序扫描位示图,从中找出一个或一组其值为“0”的二进制位
      将所找到的一个或一组二进制位转换成与之对应的盘块号。
      修改位示图
    2. 盘块的回收
      将回收盘块的盘块号转换为位示图中的行号和列号。
      修改位示图
  • 成组链接法

猜你喜欢

转载自blog.csdn.net/lyn_00/article/details/80891363
今日推荐