目录
- 小程一言
- 专栏链接: [link](http://t.csdnimg.cn/6grrU)
- 内存管理
- 无存储器抽象
- 存储器抽象
- 实现以下几方面
- 小结
- 虚拟内存
- 实现以下方面
- 总结
- 页面置换算法
- 概述
- 常见的页面置换算法
- 先进先出(FIFO)算法
- 最近最少使用(LRU)算法
- 总结
小程一言
本操作系统专栏,是小程在学操作系统的过程中的第一步,是在学习操作系统的笔记的前提下,加上自己的心得,以及资料的搜集,共同整合而成。小程在学习过程中,难免疏漏,希望各位前辈批评指正。
最主要参考书籍:现代操作系统
书中内容有些生硬,so小程参考其他书籍内容进行了一些加工
这本书饱受诟病的原因是流传思想有些过时,但是计算机有过时的思想吗?,底层逻辑的稳定是整个计算机的基石。现在的所有思想都是在基石之上。
面向群体:在校大学生,想要补齐基础知识短板的在职人员
专栏链接: link
内存管理
无存储器抽象
在早期简单的操作系统中,可能没有存储器抽象的概念。这意味着程序需要直接操作物理存储器地址,而不是通过虚拟地址空间来访问存储器。这种情况下,程序员需要自行管理存储器的分配和释放,而操作系统不提供存储器管理的功能。
在没有存储器抽象的操作系统中,程序员需要了解存储器的物理结构和地址分配情况,以确保程序正确地访问和操作存储器。程序员需要手动分配存储器空间,并在使用完毕后手动释放这些空间。这种方式需要程序员更加谨慎地管理存储器资源,以避免内存泄漏或存储器冲突等问题。
没有存储器抽象的操作系统通常比较简单,适用于一些资源有限或对存储器管理要求不高的场景。然而,随着计算机系统的发展,大多数现代操作系统都引入了存储器抽象的概念,以提供更好的存储器管理和更高的程序灵活性。存储器抽象使得程序员可以更加方便地使用存储器资源,而操作系统可以更好地管理和优化存储器的使用。
存储器抽象
存储器抽象是操作系统中的一个重要概念,它提供了一种虚拟化的存储器管理机制,使得程序员可以使用虚拟地址空间来访问存储器,而不需要关心物理存储器的具体细节。
实现以下几方面
-
虚拟地址空间:操作系统为每个进程提供了一个独立的虚拟地址空间,使得每个进程可以认为自己拥有整个存储器空间。程序员在编写程序时可以使用虚拟地址来访问存储器,而不需要知道实际的物理地址。
-
地址映射:操作系统通过地址映射机制将程序中的虚拟地址映射到物理存储器的实际地址上。这样,程序在访问虚拟地址时,操作系统会将其转换为对应的物理地址,从而实现对存储器的访问。
-
内存保护:存储器抽象还提供了内存保护机制,可以防止程序越界访问存储器空间或者访问未经授权的存储器区域。操作系统可以通过页表等机制来管理内存保护。
-
虚拟内存:存储器抽象还包括了虚拟内存的概念,即将部分存储器内容暂时存储在硬盘上,以便在需要时进行换入换出操作。这种机制可以有效扩展可用的存储器空间,并提高程序的运行效率。
小结
通过存储器抽象,操作系统可以更好地管理存储器资源,提高存储器的利用率和性能,同时也提供了更高的程序灵活性和安全性。存储器抽象是现代操作系统中的重要特性之一,对于程序员和系统设计者来说都具有重要意义。
虚拟内存
这是一个重要概念,提供了一种抽象的存储器管理机制,使得程序可以访问比实际物理存储器更大的地址空间。
实现以下方面
-
虚拟地址空间:每个进程都有自己的虚拟地址空间,从0开始递增,直到最大虚拟地址。程序员编写程序时使用的地址都是虚拟地址,而不是实际的物理地址。
-
分页机制:虚拟内存通过分页机制来管理存储器。将虚拟地址空间和物理存储器空间划分为固定大小的页(通常为4KB或8KB),并通过页表来映射虚拟地址和物理地址之间的对应关系。
-
页面置换:当物理存储器不足时,操作系统会将部分不常用的页面暂时存储在硬盘上,这个过程称为页面置换。当需要访问这些页面时,操作系统会将其换入物理存储器,同时将其他页面换出到硬盘上。
-
虚拟内存管理:操作系统负责管理虚拟内存的分配、释放和页面置换等操作。通过虚拟内存管理,操作系统可以更好地控制存储器资源的分配和利用,提高系统的性能和稳定性。
-
内存保护:虚拟内存还提供了内存保护机制,可以防止程序越界访问存储器或者访问未经授权的存储器区域。操作系统可以通过页表等机制来管理内存保护。
总结
虚拟内存的引入使得程序可以使用比实际物理存储器更大的地址空间,同时也提高了系统的稳定性和性能。通过虚拟内存,操作系统可以更好地管理存储器资源,提高存储器的利用率,并提供更高的程序灵活性和安全性。虚拟内存是现代操作系统中的一个重要特性,对于系统设计和性能优化都具有重要意义。
页面置换算法
概述
页面置换算法是虚拟内存管理中的重要组成部分,用于在物理存储器不足时选择哪些页面被置换到硬盘上。
常见的页面置换算法
- 先进先出(FIFO):最简单的页面置换算法,按照页面进入物理存储器的顺序进行置换。即最先进入的页面最先被置换出去。但是这种算法可能会导致Belady异常,即在增加物理存储器时,缺页次数反而增加。
- 最近最少使用(LRU):根据页面最近被访问的时间来置换页面,即最长时间未被访问的页面被置换。LRU算法相对较为复杂,需要维护一个访问时间的记录表,但通常具有较好的性能。
- 最不常用(LFU):根据页面被访问的频率来进行置换,即访问次数最少的页面被置换。LFU算法可能存在一些问题,如对于一些周期性访问的页面可能无法得到正确的置换决策。
- 时钟(Clock)算法:采用类似于时钟的方式来维护页面的访问位,当页面被访问时,将访问位设置为1;当需要置换页面时,选择第一个访问位为0的页面进行置换。
- 最佳置换(OPT):理论上最优的页面置换算法,即置换未来访问时间最长的页面。但是由于无法预知未来的访问模式,实际中很难实现。
先进先出(FIFO)算法
该调度算法是页面置换算法中最简单的一种,它的核心思想是按照页面进入物理存储器的顺序进行置换,即最先进入物理存储器的页面最先被置换出去。下面对FIFO算法进行详细的讲解和分析:
-
工作原理:
- 当一个新的页面需要载入物理存储器时,操作系统选择最早进入物理存储器的页面进行置换。
- FIFO算法维护一个页面队列,当需要置换页面时,选择队列中最先进入的页面进行置换。
- 当队列已满时,新页面进入队列时,最先进入的页面被置换出去。
-
优点:
- 实现简单,易于理解和实现。
- 适用于系统资源较为充足的情况下,不需要考虑性能优化。
-
缺点:
- 可能导致Belady异常:Belady异常是指增加物理存储器容量反而增加缺页次数的现象。由于FIFO算法只考虑页面进入的顺序,不考虑页面的使用频率,可能会导致Belady异常的出现。
- 不考虑页面的访问频率:FIFO算法不关心页面的使用频率,可能会导致一些经常被访问的页面被置换出去,影响系统性能。
-
适用场景:
- 适用于对性能要求不高,且系统资源充足的情况下。
- 适用于简单的应用场景,不需要考虑复杂的页面置换策略。
-
改进和优化:
- 可以结合其他算法进行优化:FIFO算法可以和其他页面置换算法结合使用,如LRU算法的近似算法,以提高性能。
- 可以考虑引入缓冲区:引入缓冲区可以减少FIFO算法的缺点,提高系统性能。
-
总结
FIFO算法虽然简单易实现,但由于其可能导致Belady异常等问题,通常在实际应用中并不是最佳选择。在实际应用中,可以根据系统的特点和需求选择更为适合的页面置换算法。
最近最少使用(LRU)算法
最近最少使用(LRU)算法是一种常用的页面置换算法,其核心思想是根据页面的使用历史来进行页面置换。具体来说,LRU算法会置换最近最少被访问的页面,以期望保留那些最近被频繁访问的页面。下面对LRU算法进行详细的讲解和分析:
-
工作原理:
- LRU算法维护一个页面访问历史记录,当一个页面被访问时,将其移动到历史记录的最近位置。
- 当需要置换页面时,选择历史记录中最久未被访问的页面进行置换。
-
实现方式:
- 可以使用一个数据结构(如双向链表)来维护页面的访问历史记录,每次访问一个页面时,将该页面移动到链表头部。
- 当需要置换页面时,选择链表尾部的页面进行置换。
-
优点:
- 考虑了页面的使用频率,更有可能保留那些最近被频繁访问的页面。
- 相对于FIFO算法,LRU算法更能够减少Belady异常的发生,提高系统性能。
-
缺点:
- 实现相对复杂:LRU算法需要维护页面的访问历史记录,实现相对复杂一些。
- 可能存在缓存污染问题:当系统中存在一些周期性访问的页面时,LRU算法可能无法得到正确的置换决策,导致缓存污染问题。
-
适用场景:
- 适用于对性能要求较高的场景,需要尽可能减少缺页次数。
- 适用于系统资源较为充足的情况下,可以承担一定的实现复杂度。
-
改进和优化:
- 近似LRU算法:由于实现LRU算法的代价较高,可以考虑使用近似LRU算法来降低实现复杂度。
- 自适应置换算法:结合LRU算法和其他算法,如FIFO算法,根据系统的实际情况动态选择最适合的置换策略。
-
总结:
LRU算法是一种较为常用且有效的页面置换算法,能够在一定程度上提高系统性能。在实际应用中,可以根据系统的需求和特点选择合适的页面置换算法,或者结合多种算法进行优化。
总结
不同的页面置换算法适用于不同的场景,具有不同的性能特点。在实际应用中,通常会根据系统的特点和需求选择合适的页面置换算法。同时,还可以结合多种算法进行优化,如使用LRU算法的近似算法或者自适应置换算法等。