操作系统基础学习笔记

之前看了现代操作系统这本书,但是没有好好的总结,看过很快就忘了,现在总结为了加深印象,对一些知识点了解的也更加透彻了。

操作系统的四个特性

并发:在一段时间内,运行多个程序,执行多个任务。从宏观上来说的。操作系统中引入进程的目的就是为了使程序能并发执行。

共享:资源共享,即系统中的资源可供多个并发执行的进程共同使用。由于资源的属性不同,多个进程对资源的共享方式也不同,可分为:互斥共享方式 和同时访问方式。

(1)互斥共享方式:一段时间内只允许一个进程访问该资源,如磁带机、打印机等,虽然可供多个进程使用,但为了打印或记录的结果不造成混淆,应规定一段时间内只允许一个进程访问该资源。

(2)同时共享方式:某些资源,一段时间内允许多个进程“同时”对他们进行访问,这个“同时”是宏观上,在微观上可能是分时共享,典型的例子:磁盘设备。

虚拟:把物理上的一台设备变成逻辑上的多台设备。虚,可以理解为是用户感觉上的。操作系统使用虚拟技术可以扩充内存空间。

异步:在多道程序环境下,允许多个程序并发执行。但由于资源有限,进程的执行不是一贯到底,而是走走停停,已不可预知的速度向前推进,这就是进程的异步性。异步性使得操作系统运行在一种随机的环境下,可能导致进程产生与时间有关的错误。

CPU管态和目态

CPU状态分为管态和目态,CPU的状态属于程序状态字PSW的一位,管态又称特权状态、系统态或核心态。通常,操作系统在管态下运行,CPU在管态下可以执行指令系统的全集。目态又称常态或用户态。机器处于目态时,程序只能执行非特权指令。用户程序只能在目态下运行。

操作系统的主要功能

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

进程和线程

进程的状态与转换

 操作系统基础学习笔记_第1张图片

运行状态:进程正在处理机上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。

就绪状态:进程已处于准备运行的状态,即进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行。

阻塞状态,又称等待状态:进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。

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

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

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

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

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

进程与线程

进程:进程是程序的一个运行过程,进程是系统资源分配和调度的基本单位。操作系统引入进程可以让程序并发执行,提高系统的并发效率来提高系统资源利用率和吞吐量。

线程:是比进程更小的可独立运行的基本单位,可以看做是轻量级的进程。线程是CPU调度的基本单位,操作系统在进程的基础上引入线程是为了进一步提高并发效率,同时减少并发的开销。

进程与线程的区别

  1. 调度方面:进程是资分配和调度的基本单位,线程是CPU调度的基本单位。
  2. 并发性:引入了线程的OS中,进程间可以并发,而且一个进程内部的多个线程之间也是可以并发的,这就使OS具有更好的并发性,有效的提高了系统资源利用率和吞吐量。
  3. 拥有资源:无论OS是否支持线程,进程都是基本的资源拥有单位,线程只拥有很少的基本的资源,但是线程可以访问所隶属的进程的资源(进程的代码段,数据段和所拥有的系统资源如fd
  4. 内存空间:系统运行时,不同的进程的占有独立的地址空间,而一个进程内的多个线程可以共享进程的地址空间。
  5. 系统开销:创建或者撤销进程的时候,系统要为之创建或回收PCB,系统资源等,切换时也需要保存和恢复CPU环境。而线程的切换只需要保存和恢复少量的寄存器,不涉及存储器管理方面的工作。
  6. 通信:同一个进程中的多个线程共享地址空间,所以通信同步等都比进程要更为方便。

进程通信

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

(1)共享存储

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

需要注意的是,用户进程空间一般都是独立的,要想让两个用户进程共享空间必须通过特殊的系统调用实现,而进程内的线程是自然共享进程空间的。

(2)消息传递

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

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

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

(3)管道通信

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

进程同步

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

进程同步机制需要遵循的原则

1. 空闲让进:当没有进程处于临界区的时候,应该许可其他进程进入临界区的申请

2. 忙则等待:当前如果有进程处于临界区,如果有其他进程申请进入,则必须等待,保证对临界区的互斥访问

3. 有限等待:对要求访问临界资源的进程,需要在有限时间内进入临界区,防止出现死等

4. 让权等待:当进程因为无法及时获得临界资源而无法进入临界区的时候,需要释放处理机,暂时退让。

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

进程同步:信号量、管程、互斥

线程同步的方式

临界区、互斥量、事件、信号量四种方式

(1)临界区:通过对多线程串行化访问公共资源或一段代码,适合控制数据的访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。

(2)互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享 .互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

(3)信号量:信号量对象对线程的同步方式与前面几种方法不同,它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目 .信号允许多个线程同时使用共享资源,这与操作系统中的PV操作相同。PV操作及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的。信号量S是一个整数,S大于等于零时代表可供并发进程/线程使用的资源实体数,但S小于零时则表示正在等待使用共享资源的进程数。
P操作申请资源:
1S1
2)若S1后仍大于等于零,则进程继续执行;
3)若S1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转入进程调度。

V操作 释放资源:
1S1
2)若相加结果大于零,则进程继续执行;
3)若相加结果小于等于零,则从该信号的等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转入进程调度。

(4)事件 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作

总结互斥量与临界区的作用非常相似,但互斥量是可以命名的,也就是说它可以跨越进程使用。所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。

信号量可以控制共享同一资源的并发线程数目,这是临界区和互斥量不能做到的。

用户态和核心态

 操作系统基础学习笔记_第2张图片

用户态核心态是操作系统的不同运行级别。如上图所所示,运行在Ring3级特权级上时的为用户态,里面的就是内核态(核心态,系统态)。用户态和内核态的最大差别是权限不同,用户态下不能访问操作系统内核数据结构和程序。

用户态切到核心态的3种方式

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

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

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

上面的3种方式本质都是通过中断机制实现的。

死锁

死锁是指多个进程在运行过程中,因为争夺资源而造成的一种僵局,如果没有外力推进,处于僵局中的进程就无法继续执行。

死锁原因:

(1)竞争资源:请求同一有限资源的进程数多于可用资源数

(2)进程推进顺序非法:进程执行中,请求和释放资源顺序不合理,如资源等待链

死锁产生的必要条件

1互斥条件:进程对所分配的资源进行排他性的使用

2请求和保持条件:进程被阻塞的时候并不释放锁申请到的资源

3不可剥夺条件:进程对于已经申请到的资源在使用完成之前不可以被剥夺

4环路等待条件:发生死锁的时候存在的一个 进程-资源 环形等待链

死锁处理

预防死锁:破坏产生死锁的4个必要条件中的一个或者多个;实现起来比较简单,但是如果限制过于严格会降低系统资源利用率以及吞吐量

避免死锁:在资源的动态分配中,防止系统进入不安全状态(可能产生死锁的状态)-如银行家算法。也可以通过对资源进行编号,进程按编号从小到大对资源去进行申请,这样也可以避免死锁。

检测死锁:允许系统运行过程中产生死锁,在死锁发生之后,采用一定的算法进行检测,并确定与死锁相关的资源和进程,采取相关方法清除检测到的死锁。实现难度大

解除死锁:与死锁检测配合,将系统从死锁中解脱出来(撤销进程或者剥夺资源)。对检测到的和死锁相关的进程以及资源,通过撤销或者挂起的方式,释放一些资源并将其分配给处于阻塞状态的进程,使其转变为就绪态。实现难度大,不是很实用。

进程调度算法

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

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

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

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

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

内存管理

内管管理的概念

操作系统对内存的划分和动态分配,就是内存管理的概念。

内存管理主要功能

  1. 内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理,使程序员摆脱储分配的麻烦,提高编程效率。
  2. 地址转换:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,把逻辑地址转换成相应的物理地址。
  3. 内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。
  4. 内存保护用户空间和系统空间、用户进程之间互不干扰。

从内存调度看进程运行的基本原理

 操作系统基础学习笔记_第3张图片

编译(第一步):由编译程序将用户源代码编译成若干个目标模块。

链接(第二步):由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块。

装入(第三步):由装入程序将装入模块装入内存运行。

链接三种方式:程序运行前静态链接、装入时动态链接,运行时动态链接。

程序装入内存三种方式:绝对装入(程序编译时)、静态可重定位装入(程序运行前)、动态可重定位装入(程序运行时)。

内存保护

内存保护的概念内存分配的时候,要保证系统内存空间不收用户进程影响,用户进程之间的内存也互不影响。

内存保护使用的方法:

通过釆用重定位寄存器和界地址寄存器来实现这种保护。重定位寄存器含最小的物理地址值,界地址寄存器含逻辑地址值。每个逻辑地址值必须小于界地址寄存器;内存管理机构动态地将逻辑地址与界地址寄存器进行比较,如果未发生地址越界,则加上重定位寄存器的值后映射成物理地址,再送交内存单元

 操作系统基础学习笔记_第4张图片

CPU调度程序选择进程执行时,派遣程序会初始化重定位寄存器和界地址寄存器。每一个逻辑地址都需要与这两个寄存器进行核对,以保证操作系统和其他用户程序及数据不被该进程的运行所影响。

内存扩充

内存扩充的方法:覆盖、交换、虚拟存储技术。

覆盖:把用户空间分成一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,其余部分按调用关系分段。首先将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统再将其调入覆盖区,替换覆盖区中原有的段(现在已经不流行了)

交换:交换包括还如和换出。

(1)换出:将不占用CPU的处于等待状态的进程从内存中去除到辅存,为内存腾出空间。

(2)换入:将准备好竞争CPU的进程从赋存移动到内存中去。

覆盖与交换区别:覆盖是在进程内部发生的内存扩充方式,交换发生在不同的进程间的内存扩充方式。

内存分配和管理

1、内存连续分配方方式:单一连续分配、固定分区分配、动态分区分配。

1.1单一连续分配方式:低地址系统区,高地址用户区,使用与单用户单任务操作系统。优点是简单、无外部碎片。缺点是有内部碎片、内存利用率低。

1.2固定分区分配

1)分区大小都相等的固定分区

2分区大小不等的分区方式(较多的小分区,数量中等的种分区,较少的大分区)。

优点:可用于多道程序的操作系统,提高系统并发性能。缺点是有内部碎片,程序过大时需要使用覆盖技术开扩充内存,内存利用率较低。

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

优点:可用于多道程序设计,无内部碎片。缺点:有外部碎片(可通过紧凑方法消除外部碎片,但是开销大)

动态分区分配策略

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

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

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

(4)邻近适应(Next Fit)算法:又称循环首次适应算法,由首次适应算法演变而成。不同之处是分配内存时从上次查找结束的位置开始继续查找。

实际效果就好的是首次适应算法。

 2、内存非连续分配方式:分页存储管理,分段存储管理,段页式存储管理。

2.1分页存储管理:固定分区会产生内部碎片,动态分区会产生外部碎片,这两种技术对内存的利用率都比较低。我们希望内存的使用能尽量避免碎片的产生,这就引入了分页的思想用户程序的地址空间被划分成若干固定大小的区域,称为,相应地,内存空间分成若干个物理块(页框),页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配。

分页存储管理的地址结构:

 

页面不能太小,不然页表的页表项会太多,占用内存大,地址转换开销大。页面而不能太大,太大会导致内部碎片过多,降低内存利用率。

分页存储管理使用到的数据结构:页表,实现页号到物理块的地址映射

 操作系统基础学习笔记_第5张图片

分页存储管理使用的地址转换机构:基本地址变换机构

地址变换机构的任务是将逻辑地址转换为内存中物理地址,地址变换是借助于页表实现的

操作系统基础学习笔记_第6张图片 

CPU逻辑地址到物理地址计算过程:
在系统中通常设置一个页表寄存器(PTR),存放页表在内存的始址F和页表长度M。进程未执行时,页表的始址和长度存放在进程控制块PCB中,当进程执行时,才将页表始址和长度存入页表寄存器。设页面大小为L,逻辑地址A到物理地址E的变换过程如下:

1计算页号P(P=A/L)和页内偏移量W (W=A%L)。比较页号P和页表长度M,若P >= M,则产生越界中断,否则继续执行。

2页表中页号P对应的页表项地址 = 页表起始地址F + 页号P * 页表项长度,取出该页表项内容b,即为物理块号。

3计算E=b*L+W,用得到的物理地址E去访问内存。
以上整个地址变换过程均是由硬件自动完成的。

例如,若页面大小L1K字节,页号2对应的物理块为b=8,计算逻辑地址A=2500 的物理地址E的过程如下:P=2500/1K=2W=2500%1K=452,查找得到页号2对应的物理块的块号为 8E=8*1024+452=8644

分页管理方式存在的两个主要问题:

每次访存操作都需要进行逻辑地址到物理地址的转换,地址转换过程必须足够快,否则访存速度会降低;每个进程引入了页表,用于存储映射机制,页表不能太大,否则内存利用率会降低。

具有快表的地址变换机构

由上面介绍的地址变换过程可知,若页表全部放在内存中,则存取一个数据或一条指令至少要访问两次内存:一次是访问页表,确定所存取的数据或指令的物理地址,第二次才根据该地址存取数据或指令。显然,这种方法比通常执行指令的速度慢了一半。为此,在地址变换机构中增设了一个具有并行查找能力的高速缓冲存储器——快表,又称联想寄存器(TLB),用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,主存中的页表也常称为慢表

 操作系统基础学习笔记_第7张图片

在具有快表的分页机制中,地址的变换过程:

1CPU给出逻辑地址后,由硬件进行地址转换并将页号送入高速缓存寄存器,并将此页号与快表中的所有页号进行比较。

2如果找到匹配的页号,说明所要访问的页表项在快表中,则直接从中取出该页对应的页框号,与页内偏移量拼接形成物理地址。这样,存取数据仅一次访存便可实现。

3如果没有找到,则需要访问主存中的页表,在读出页表项后,应同时将其存入快表,以便后面可能的再次访问。但若快表已满,则必须按照一定的算法对旧的页表项进行替换。
一般快表的命中率可以达到90%以上,这样,分页带来的速度损失就降低到10%以下。快表的有效性是基于著名的局部性原理

2.2分段存储管理方式

段式管理方式按照用户进程中的自然段划分逻辑空间。例如,用户进程由主程序、两个子程序、栈和一段数据组成,于是可以把这个用户进程划分为5个段,每段从0 开始编址,并分配一段连续的地址空间(段内要求连续,段间不要求连续,因此整个作业的地址空间是二维的)。

分段存储管理使用的地址结构:

 

分段存储管理使用的数据结构:段表,实现逻辑地址到物理地址映射

 

每个进程都有一张逻辑空间与内存空间映射的段表,其中每一个段表项对应进程的一个段,段表项记录该段在内存中的起始地址和段的长度。

 操作系统基础学习笔记_第8张图片

分段存储管理的地址转换机构

 操作系统基础学习笔记_第9张图片

分段存储管理地址转换流程:

在系统中设置了段表寄存器,用于存放段表始址F和段表长度M。其从逻辑地址A到物理地址E之间的地址变换过程如下:

1)、从逻辑地址A中取出前几位为段号S,后几位为段内偏移量W。比较段号S和段表长度M,若S>=M,则产生越界中断,否则继续执行。

2)、段表中段号S对应的段表项地址 = 段表起始地址F + [段号S * 段表项长度],取出该段表项的前几位得到段长C。若段内偏移量>=C,则产生越界中断,否则继续执行。

取出段表项中该段的起始地址b,计算 E = b + W,用得到的物理地址E去访问内存。

段的共享和保护:

分段系统中,段的共享是通过两个作业的段表中相应表项指向被共享的段。当一个作业正从共享段中读取数据时,必须防止另一个作业修改此共享段中的数据。不能修改的代码称为纯代码或可重入代码(它不属于临界资源),这样的代码和不能修改的数据是可以共享的,而可修改的代码和数据则不能共享。

2.3段页式管理方式

页式存储管理能有效地提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于段的共享。如果将这两种存储管理方法结合起来,就形成了段页式存储管理方式。

在段页式系统中,作业的地址空间首先被分成若干个逻辑段,每段都有自己的段号,然后再将每一段分成若干个大小固定的页。对内存空间的管理仍然和分页存储管理一样,将其分成若干个和页面大小相同的存储块,对内存的分配以存储块为单位

段页式存储管理结构

操作系统基础学习笔记_第10张图片 


段页式存储管理的逻辑地址结构

 

段页式存储管理的数据结构

为了实现地址变换,系统为每个进程建立一张段表,而每个分段有一张页表。段表表项中至少包括段号、页表长度和页表起始地址,页表表项中至少包括页号和块号。此外,系统中还应有一个段表寄存器,指出作业的段表起始地址和段表长度。

段页式存储管理地址转换

 操作系统基础学习笔记_第11张图片

段页式存储管理地址计算流程:
在进行地址变换时,首先通过段表查到页表起始地址,然后通过页表找到页帧号,最后形成物理地址。进行一次访问实际需要三次访问主存,这里同样可以使用快表以加快查找速度

分页与分段的比较

目的性:页是信息物理单位,分页是处于系统管理的需要,将内存划分为大小固定的页,以减少内部碎片,提高内存利用率。段是信息的逻辑单位,根据程序的逻辑结构将程序划分为不同的段(主程序段、子程序段、数据段),满足用户的需要

长度:页的长度固定且由系统确定,段的长度不固定,由编译程序编译时决定

地址空间:页的地址空间是一维的,是单一的线性地址空间。段的地址空间是二维的,要给出段号和段内偏移。

内存碎片:分页方式有内部碎片无外部碎片,分段方式有外部碎片无内部碎片。

共享和动态链表:分页方式不好实现共享和动态链表,分段方式好实现。

页面置换算法

进程运行时,若其访问的页面不在内存而需将其调入,但内存已无空闲空间时,就需要从内存中调出一页程序或数据,送入磁盘的对换区。选择调出页面的算法就称为页面置换算法。

(1)最佳置换算法OPT):选择在未来最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。是一种理论上的算法,无法实现。但是可以作为其评判他置换算法的标准。

(2)先进先出页面置换算法FIFO):淘汰在内存中驻留最久的页面出去。该算法实现简单,只需把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面。

(3)最近最少使用算法LRU):选择最近最长时间未访问过的页面予以淘汰,它认为过去一段时间内未访问过的页面,在最近的将来可能也不会被访问。该算法为每个页面设置一个访问字段,来记录页面自上次被访问以来所经历的时间,淘汰页面时选择现有页面中值最大的予以淘汰。

文件管理

磁盘调度算法

(1)先来先服务算法FCFS):FCFS算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单、公平的调度算法,再进程较多的时候会变为随机调度算法。

 操作系统基础学习笔记_第12张图片

(2)最短寻道时间算法STTF):选择距离当前磁头最近的磁道,每次的寻到时间最短。改算法比FCFS的寻道性能要好,但是可能出现饥饿现象。

 

(3)扫描算法(SCAN,也叫电梯算法):在当前磁头的运动方向上选择最近的磁道作为服务对象,改算法对最近访问的磁道不公平,在访问局部性方面性能比FCFS还差。SCAN偏向于处理那些处于磁道最里面或最外面的请求。(如当磁头向磁道增大的方向移动时,总是先处理位于磁道大的请求)

 

(4)循环扫描算法C-SCAN)规定磁头只向一个方向移动时提供服务,回返时候不提供任何服务直到回到请求起始端。为了解决SCAN算法偏向处理磁道最里面或最外面的请求的弊端。C-SCAN做了平衡处理。


总结:FCFS算法简单,性能较差,SSTF性能较好。SCANC-SCAN适合磁盘负载较大时。

参考文献

操作系统重点总结:https://www.jianshu.com/p/d254b138de03

C语言中文网操作系统总结:http://c.biancheng.net/cpp/u/xitong_1/

《现代操作系统》


你可能感兴趣的:(操作系统)