操作系统——知识点总结

用于总结操作系统相关的知识点,会参考很多人的,也会加入自己的理解,在未来不断更新。

概述

1.操作系统的四个特性

  • 并发:同一段时间内多个程序执行(注意区别并行和并发,前者是同一时刻的多个事件,后者是同一时间段内的多个事件)。
  • 共享:系统中的资源可以被内存中多个并发执行的进线程共同使用。
  • 虚拟:通过时分复用(如分时系统)以及空分复用(如虚拟内存)技术实现把一个物理实体虚拟为多个。
  • 异步:异步是指在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。

2.操作系统的主要功能

操作系统是控制应用程序执行的程序,并充当应用程序和计算机硬件之间的接口,具体就是对各种硬件或者抽象的功能进行管理,细分为五个主要功能:

  • 处理机管理:处理机分配都是以进程为单位,所以处理机管理也被看做是进程管理。包括进程控制,进程同步,进程通信和进程调度。
  • 存储器管理(或者内存管理):内存分配,内存保护,地址映射,内存扩充。
  • 设备管理:管理所有外围设备,包括完成用户的IO请求;为用户进程分配IO设备;提高IO设备利用率;提高IO速度;方便IO的使用。
  • 文件管理:管理用户文件和系统文件,方便使用同时保证安全性。包括:磁盘存储空间管理,目录管理,文件读写管理以及文件共享和保护。
  • 提供用户接口:程序接口(如API)和用户接口(如GUI)。

3.用户态和内核态

用户态:运行用户程序。
内核态:运行操作系统程序,操作硬件。

二者区别

  • 处于用户态执行时,进程所能访问的内存空间和对象受到限制,其所处于占有的处理器是可被抢占的

  • 处于内核态执行时,则能访问所有的内存空间和对象,且所占有的处理器是不允许被抢占的。

  • 当程序运行在3级特权级上时,就可以称之为运行在用户态,因为这是最低特权级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态;

  • 反之,当程序运行在0级特权级上时,就可以称之为运行在内核态

  • 运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态(比如操作硬件)。

  • 虽然用户态下和内核态下工作的程序有很多差别,但最重要的差别就在于特权级的不同,即权力的不同。运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。

  • 当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态。

用户态切换到内核态的3种方式

  1. 系统调用:这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。

  2. 异常:当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。

  3. 外围设备的中断:当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

进程线程

1.进程的状态转换

  • 新建态:刚刚创建的进程,操作系统还没有把它放到可执行进程组种。
  • 运行状态:进程正在处理机上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。
  • 就绪状态:进程已处于准备运行的状态,即进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行。
  • 阻塞状态:又称等待状态:进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。
  • 退出态:操作系统可从执行进程组重释放出的进程,或者是自身停止,或者因为某种原因被取消的。

注意区别就绪状态和等待状态:就绪状态是指进程仅缺少处理机,只要获得处理机资源就立即执行;而等待状态是指进程需要其他资源(除了处理机)或等待某一事件。

  1. 就绪状态 -> 运行状态:处于就绪状态的进程被调度后,获得处理机资源(分派处理机时间片),于是进程由就绪状态转换为运行状态。

  2. 运行状态 -> 就绪状态:处于运行状态的进程在时间片用完后,不得不让出处理机,从而进程由运行状态转换为就绪状态。此外,在可剥夺的操作系统中,当有更高优先级的进程就 、 绪时,调度程度将正执行的进程转换为就绪状态,让更高优先级的进程执行。

  3. 运行状态 -> 阻塞状态:当进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(如I/O操作的完成)时,它就从运行状态转换为阻塞状态。进程以系统调用的形式请求操作系统提供服务,这是一种特殊的、由运行用户态程序调用操作系统内核过程的形式。

  4. 阻塞状态 -> 就绪状态:当进程等待的事件到来时,如I/O操作结束或中断结束时,中断处理程序必须把相应进程的状态由阻塞状态转换为就绪状态。

  5. 空 -> 新建态:创建执行一个程序的新进程。

  6. 新建态-> 就绪态:操作系统准备好再接纳一个进程的时候,就把进程从新建态转换到就绪态。

  7. 运行态 -> 退出:如果当前再运行的进程已经完成或者被取消了,就退出了。

  8. 就绪态 -> 退出:父进程可以在任何时刻终止子进程。

  9. 阻塞态 -> 退出:同上。

五状态进程模型

2.进程和线程的区别

进程是程序的一次执行,是系统进行资源分配和调度的独立单位,他的作用是是程序能够并发执行提高资源利用率和吞吐率。
由于进程是资源分配和调度的基本单位,因为进程的创建、销毁、切换产生大量的时间和空间的开销,进程的数量不能太多,而线程是比进程更小的能独立运行的基本单位,他是进程的一个实体,可以减少程序并发执行时的时间和空间开销,使得操作系统具有更好的并发性。
线程基本不拥有系统资源,只有一些运行时必不可少的资源,比如程序计数器、寄存器和栈,进程则占有堆、栈。

进程:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位(具有动态、并发、独立、异步的特性);引入进程是为了使多个程序可以并发的执行,以提高系统的资源利用率和吞吐量。

线程:是比进程更小的可独立运行的基本单位,可以看做是轻量级的进程(具有轻型实体,独立调度分派单位,可并发执行,共享进程资源等属性);进程是资源分配的基本单位、线程是调度的基本单位,引入目的是为了减少程序在并发执行过程中的开销,使系统的并发效率更高。

二者区别:

  • 调度方面:在引入线程的系统中,线程是独立的调度和分派单位,而进程作为资源的拥有单位。由于线程不拥有资源,因此可以显著的提高并发度以及减少切换开销。

  • 并发性:引入了线程的系统中,进程间可以并发,而且一个进程内部的多个线程之间也是可以并发的,这就使操作系统具有更好的并发性,有效的提高了系统资源利用率和吞吐量。

  • 拥有资源:无论系统是否支持线程,进程都是基本的资源拥有单位,线程只拥有很少的基本的资源,但是线程可以访问所隶属的进程的资源(进程的代码段,数据段和所拥有的系统资源)。

  • 系统开销:创建或者撤销进程的时候,系统要为之创建或回收PCB(进程控制块),系统资源等,切换时也需要保存和恢复CPU环境。而线程的切换只需要保存和恢复少量的寄存器,不涉及存储器管理方面的工作,所以开销较小。此外,统一进程中的多个线程由于共享地址空间,所以通信同步等都比较方便。

3.进程、线程通信

进程通信
进程通信是指进程之间的信息交换。PV操作(实现进程互斥与同步的有效方法)是低级通信方式,髙级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方法主要有以下三个类。

  1. 共享存储
    在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。在对共享空间进行写/读操作时,需要使用同步互斥工具(如 P操作、V操作),对共享空间的写/读进行控制。共享存储又分为两种:低级方式的共享是基于数据结构的共享;高级方式则是基于存储区的共享。操作系统只负责为通信进程提供可共享使用的存储空间和同步互斥工具,而数据交换则由用户自己安排读/写指令完成。
    需要注意的是,用户进程空间一般都是独立的,要想让两个用户进程共享空间必须通过特殊的系统调用实现,而进程内的线程是自然共享进程空间的。

  2. 消息队列
    在消息传递系统中,进程间的数据交换是以格式化的消息(Message)为单位的。若通信的进程之间不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程通信。进程通过系统提供的发送消息和接收消息两个原语进行数据交换。

    1. 直接通信方式:发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。

    2. 间接通信方式:发送进程把消息发送到某个中间实体中,接收进程从中间实体中取得消息。这种中间实体一般称为信箱,这种通信方式又称为信箱通信方式。该通信方式广泛应用于计算机网络中,相应的通信系统称为电子邮件系统。

  3. 管道通信
    管道通信是消息传递的一种特殊方式。所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入(写)管道;而接收管道输出的接收进程(即读进程),则从管道中接收(读)数据。为了协调双方的通信,管道机制必须提供以下三方面的协调能力:互斥、同步和确定对方的存在。

  4. 信号量

  5. 匿名管道

  6. 套接字


线程通信

  1. 主要就是通过一些线程同步的行为进行通信,例如semaphore、countDownLatch、synchronizied之类的,或者通过volatile实现变量的可见性。
  2. 通过套接字也可以,不过就是有点脱裤子放屁的感觉。

4.进程同步

多进程虽然提高了系统资源利用率和吞吐量,但是由于进程的异步性可能造成系统的混乱。进程同步的任务就是对多个相关进程在执行顺序上进行协调,使并发执行的多个进程之间可以有效的共享资源和相互合作,保证程序执行的可再现性。

同步机制需要遵循的原则:

  1. 空闲让进:当没有进程处于临界区的时候,应该许可其他进程进入临界区的申请。
  2. 忙则等待:当前如果有进程处于临界区,如果有其他进程申请进入,则必须等待,保证对临界区的互斥访问。
  3. 有限等待:对要求访问临界资源的进程,需要在有限时间内进入临界区,防止出现死锁等。
  4. 让权等待:当进程无法进入临界区的时候,需要释放处理机,边陷入忙等。

经典的进程同步问题:生产者-消费者问题;哲学家进餐问题;读者-写者问题

同步的解决方案:管程,信号量,或者更多资源。

5.进程调度算法

先来先服务调度算法FCFS:既可以作为作业调度算法也可以作为进程调度算法;按作业或者进程到达的先后顺序依次调度;因此对于长作业比较有利;

短作业优先调度算法SJF:作业调度算法,算法从就绪队列中选择估计时间最短的作业进行处理,直到得出结果或者无法继续执行;缺点:不利于长作业;未考虑作业的重要性;运行时间是预估的,并不靠谱 ;

高响应比算法HRN:响应比=(等待时间+要求服务时间)/要求服务时间;

时间片轮转调度RR:按到达的先后对进程放入队列中,然后给队首进程分配CPU时间片,时间片用完之后计时器发出中断,暂停当前进程并将其放到队列尾部,循环 ;

多级反馈队列调度算法:目前公认较好的调度算法;设置多个就绪队列并为每个队列设置不同的优先级,第一个队列优先级最高,其余依次递减。优先级越高的队列分配的时间片越短,进程到达之后按FCFS放入第一个队列,如果调度执行后没有完成,那么放到第二个队列尾部等待调度,如果第二次调度仍然没有完成,放入第三队列尾部…。只有当前一个队列为空的时候才会去调度下一个队列的进程。

6.进程切换

参考博客

7.死锁

可以把死锁定义为一组相互竞争系统资源或进行通信的进程间的永久阻塞。

死锁原因:

  1. 竞争资源:请求同一有限资源的进程数多于可用资源数。
  2. 进程推进顺序非法:进程执行中,请求和释放资源顺序不合理,如资源等待链。

死锁产生的必要条件:

  1. 互斥条件:进程对所分配的资源进行排他性的使用。
  2. 占有且等待条件:进程被阻塞的时候并不释放之前申请到的资源。
  3. 不可剥夺条件:进程对于已经申请到的资源在使用完成之前不可以被剥夺。
  4. 循环等待条件:发生死锁的时候存在的一个 进程-资源 环形等待链。

避免这几个条件的办法:

  1. 第一个条件不能避免。
  2. 占有且等待条件:可以要求进程一次性地请求所以所需地资源,并且阻塞这个进程直到所有请求都同时满足。低效。
  3. 不可剥夺条件:当一个进程进行进一步的资源请求时被拒绝,则它必须释放最初占有的的资源。当一个进程请求一个被占有的资源时,操作系统要求原有进程释放资源,二者进行抢占资源。
    后者才能预防死锁。
  4. 循环等待条件:可以定义资源类型的线性顺序来预防。低效。

死锁处理:

  1. 预防死锁:破坏产生死锁的4个必要条件中的一个或者多个,就是上面讲的四种情况,实现起来比较简单,但是如果限制过于严格会降低系统资源利用率以及吞吐量。
  2. 避免死锁:在资源的动态分配中,通过明智的选择,确保永远不会到达死锁点。如银行家算法。
  3. 死锁检测:允许系统运行过程中产生死锁,在死锁发生之后,采用一定的算法进行检测,并确定与死锁相关的资源和进程,采取相关方法清除检测到的死锁。实现难度大。
  4. 死锁恢复:与死锁检测配合,将系统从死锁中解脱出来(撤销进程或者剥夺资源)。对检测到的和死锁相关的进程以及资源,通过撤销或者挂起的方式,释放一些资源并将其分配给处于阻塞状态的进程,使其转变为就绪态。实现难度大。

死锁检测算法

算法的策略是查找一个进程,使得可用资源可以满足该进程的资源请求,然后假设同意这些资源,让该进程运行直到结束,在释放他的所有资源,然后算法再寻找一个可以满足资源请求的进程。没有被标记的进程就是死锁进程。

死锁恢复

  1. 取消所有死锁进程,最常用;
  2. 死锁进程回滚到上一个检查点,并重新启动所有进程;
  3. 连续取消死锁进程,直到不在存在死锁,取消顺序基于最小代价原则;
  4. 连续抢占资源直到不再存在死锁。

内存管理

1.内存连续分配

主要是指动态分区分配时所采用的几种算法。

动态分区分配又称为可变分区分配,是一种动态划分内存的分区方法。这种分区方法不预先将内存划分,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统中分区的大小和数目是可变的。

首次适应(First Fit)算法:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。

最佳适应(Best Fit)算法:空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。

最坏适应(Worst Fit)算法:又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑选出最大的分区。

下次适应(Next Fit)算法:下次适配从上次放置的位置开始扫面,选择下一个大小足够的可用块。

首次适配算法最简单,而且通常也时最好和最快的。最佳适配性能最差。但是首次适配容易产生内存碎片。

2.基本分页储存的内存管理方式

将进程划分成同样大小的块,将内存划分为大小固定相等的块,进程中称为页的块可以指定到内存中称为页框的可用块。就是分页技术。

操作系统需要为每个进程需要维护一个页表。页表给出了该进程每一页对应的页框的位置。每个逻辑地址包括一个页号和在该页的偏移量或者说是映射。在分页中,由处理器硬件完成逻辑地址到物理地址的转换,处理器知道如何访问页表。
为了使分页的方案更加方便,页和页框的大小必须是2的幂,以便容易地表示出相对地址。
总之,简单的分页技术,内存被分为许多大小相等的页框,每个进程被划分为同样大小的页;较小的进程需要较少的页,较大的需要较多;当一个进程被装入时,它的所有页都被装入到可用页框中,并建立一个页表。
浪费的空间仅仅是最后一页的小部分内部碎片,没有外部碎片。

分页的两次访问及其优化

由于页表也是存储在内存中的,因此和不适用分页管理的存储方式相比,访问分页系统中内存数据需要两次的内存访问(一次是从内存中访问页表,从中找到指定的物理块号,加上页内偏移得到实际物理地址;第二次就是根据第一次得到的物理地址访问内存取出数据)。

为了减少两次访问内存导致的效率影响,分页管理中引入了快表机制,包含快表机制的内存管理中,当要访问内存数据的时候,首先将页号在快表中查询,如果查找到说明要访问的页表项在快表中,那么直接从快表中读取相应的物理块号;如果没有找到,那么访问内存中的页表,从页表中得到物理地址,同时将页表中的该映射表项添加到快表中(可能存在快表换出算法)。

在某些计算机中如果内存的逻辑地址很大,将会导致程序的页表项会很多,而页表在内存中是连续存放的,所以相应的就需要较大的连续内存空间。为了解决这个问题,可以采用两级页表或者多级页表的方法,其中外层页表一次性调入内存且连续存放,内层页表离散存放。相应的访问内存页表的时候需要一次地址变换,访问逻辑地址对应的物理地址的时候也需要一次地址变换,而且一共需要访问内存3次才可以读取一次数据。

3.基本分段存储的内存管理方式

分页是为了提高内存利用率,而分段是为了满足程序员在编写代码的时候的一些逻辑需求(比如数据共享,数据保护,动态链接等)。

分段技术的逻辑地址分为段号和偏移量。
编译器会把程序和数据指定到不同的段,每个进程都有一个段表,系统也会维护一个内存中的空间块列表。没有内部碎片,有外部碎片。
总之,简单分段技术,进程被划分成许多段,段的大小不需要相等,而内存没有被划分,当进程被调入时,多有段都被装入内存,并建立一个段表。段表可以放在内存中也可以放在寄存器中。

访问内存的时候根据段号和段表项的长度计算当前访问段在段表中的位置,然后访问段表,得到该段的物理地址,根据该物理地址以及段内偏移量就可以得到需要访问的内存。由于也是两次内存访问,所以分段管理中同样引入了联想寄存器。

分段分页方式的比较

  1. 页是信息的物理单位,是出于系统内存利用率的角度提出的离散分配机制;段是信息的逻辑单位,每 个段含有一组意义完整的信息,是出于用户角度提出的内存管理机制。
  2. 页的大小是固定的,由系统决定;段的大小是不确定的,由用户决定。
  3. 分页会产生内部碎片,不会产生外部碎片;分段则相反。
  4. 分页中的地址作业的地址空间是一维的;分段中的地址空间式二维的。因为段长度不定,还需要一个维度来表示段的长度嘛。

内部碎片和外部碎片
①内部碎片:指的是已经被分配出去的,但是却没有被使用的内存空间。 因为基本存储单位的限制。
②外部碎片:指的是还没有被分配的,但是由于太小或者是不连续,而导致不满足要求,所以没办法被分配的内存空间。

4.虚拟内存

如果存在一个程序,所需内存空间超过了计算机可以提供的实际内存,那么由于该程序无法装入内存所以也就无法运行。单纯的增加物理内存只能解决一部分问题,但是仍然会出现无法装入单个或者无法同时装入多个程序的问题。但是可以从逻辑的角度扩充内存容量,即可解决上述两种问题。

为了更加有效地管理内存并减少出错,现代操作系统提供了一种对主存的抽象概念,即是虚拟内存(Virtual Memory)。虚拟内存为每个进程提供了一个一致的、私有的地址空间,它让每个进程产生了一种自己在独享主存的错觉(每个进程拥有一片连续完整的内存空间)。

理解不深刻的人会认为虚拟内存只是“使用硬盘空间来扩展内存“的技术,这是不对的。虚拟内存的重要意义是它定义了一个连续的虚拟地址空间,使得程序的编写难度降低。并且,把内存扩展到硬盘空间只是使用虚拟内存的必然结果,虚拟内存空间会存在硬盘中,并且会被内存缓存(按需),有的操作系统还会在内存不够的情况下,将某一进程的内存全部放入硬盘空间中,并在切换到该进程时再从硬盘读取

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

虚拟内存主要提供了如下三个重要的能力:

  • 它把主存看作为一个存储在硬盘上的虚拟地址空间的高速缓存,并且只在主存中缓存活动区域(按需缓存)。

  • 它为每个进程提供了一个一致的地址空间,从而降低了程序员对内存管理的复杂性。

  • 它还保护了每个进程的地址空间不会被其他进程破坏。

虚拟存储器的特征:

  1. 多次性:一个作业可以分多次被调入内存。多次性是虚拟存储特有的属性。

  2. 对换性:作业运行过程中存在换进换出的过程(换出暂时不用的数据换入需要的数据)。

  3. 虚拟性:虚拟性体现在其从逻辑上扩充了内存的容量(可以运行实际内存需求比物理内存大的应用程序)。虚拟性是虚拟存储器的最重要特征也是其最终目标。虚拟性建立在多次性和对换性的基础上行,多次性和对换性又建立在离散分配的基础上。

虚拟内存系统简化了内存管理、链接、加载、代码和数据的共享以及访问权限的保护:

  • 简化链接,独立的地址空间允许每个进程的内存映像使用相同的基本格式,而不管代码和数据实际存放在物理内存的何处。

  • 简化加载,虚拟内存使向内存中加载可执行文件和共享对象文件变得更加容易。

  • 简化共享,独立的地址空间为操作系统提供了一个管理用户进程和内核之间共享的一致机制。

  • 访问权限保护,每个虚拟地址都要经过查询PTE的过程,在PTE中设定访问权限的标记位从而简化内存的权限保护。

操作系统通过将虚拟内存与文件系统结合的方式,来初始化虚拟内存区域,这个过程称为内存映射。应用程序显式分配内存的区域叫做堆,通过动态内存分配器来直接操作堆内存。

5.页面置换算法

地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。

最佳置换算法:只具有理论意义的算法,用来评价其他页面置换算法。置换策略是将当前页面中在未来最长时间内不会被访问的页置换出去。

先进先出置换算法:简单粗暴的一种置换算法,没有考虑页面访问频率信息。每次淘汰最早调入的页面。

最久未使用算法LRU:算法赋予每个页面一个访问字段,用来记录上次页面被访问到现在所经历的时间t,每次置换的时候把t值最大的页面置换出去(实现方面可以采用寄存器或者栈的方式实现)。

最少使用算法LFU:设置寄存器记录页面被访问次数,每次置换的时候置换当前访问次数最少的。

时钟算法clock(也被称为是最近未使用算法NRU):一个类似钟面的环形链表中,一个表指针指向最老的页面。当发生缺页中断时,首先检查表指针指向的页面,如果它的R位是0就淘汰该页面,并把新的页面插入这个位置,然后把表指针前移一个位置。如果R位是1就清除R位并把表指针前移一个位置;重复这个过程一直到找到一个R位为0的页面为止。

改进型Clock算法:在Clock算法的基础上添加一个修改位,替换时根究访问位和修改位综合判断。优先替换访问位和修改位都是0的页面,其次是访问位为0修改位为1的页面。

算法比较:

LRU算法的性能接近于OPT,但是实现起来比较困难,且开销大;FIFO算法实现简单,但性能差。所以操作系统的设计者尝试了很多算法,试图用比较小的开销接近LRU的性能,这类算法都是CLOCK算法的变体。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值