操作系统基础45-伙伴系统和slab内存分配
2021-01-25 13:48·重学IT的老猫
当在用户模式下运行进程请求额外内存时,从内核维护的空闲页帧列表上分配页面。这个列表通常使用页面置换算法来填充,如前所述,它很可能包含散布在物理内存中的空闲页面。也要记住,如果用户进程请求单个字节内存,那么就会导致内部碎片,因为进程会得到整个帧。 用于分配内核内存的空闲内存池通常不同于用于普通用户模式进程的列表。这有两个主要原因:
2021-01-25 13:48·重学IT的老猫
当在用户模式下运行进程请求额外内存时,从内核维护的空闲页帧列表上分配页面。这个列表通常使用页面置换算法来填充,如前所述,它很可能包含散布在物理内存中的空闲页面。也要记住,如果用户进程请求单个字节内存,那么就会导致内部碎片,因为进程会得到整个帧。 用于分配内核内存的空闲内存池通常不同于用于普通用户模式进程的列表。这有两个主要原因:
2021-01-23 11:17·重学IT的老猫
假设采用标准系统调用 open()、read() 和 write() 来顺序读取磁盘文件,每个文件访问都需要系统调用和磁盘访问。又或者采用虚拟内存技术,以将文件I/O作为常规内存访问,这种方法称为内存映射文件,允许一部分虚拟内存与文件进行逻辑关联,这会导致显著的性能提高。
2021-01-22 23:00·重学IT的老猫
如何在各个进程之间分配一定的空闲内存? 简单办法是将帧挂在空闲帧链表上,当发生页错误之时即进行分配。进程终止时帧再次放回空闲帧链表。 帧分配策略受到多方面限制。例如, 分配数不能超过可用帧数,也必须分配至少最少数量。保证最少量的原因之一是涉及性能。缺页错误增加会减慢进程的执行。并且,在指令完成前出现缺页错误,该指令必须重新执行。所以有足够的帧至关重要。 每个进程最少帧数由体系结构决定,而最大帧数是由可用物理内存的数量决定。
2021-01-21 21:14·重学IT的老猫
如果低优先级进程所分配的帧数低于计算机体系结构所需的最小数量,那么必须暂停该进程执行。然后,应调出它的所有剩余页面,以便释放所有分配的帧。这个规定引入了中级CPU调度的换进换出层。 事实上,需要研究一下没有“足够”帧的进程。如果进程没有需要支持活动使用页面的帧数,那么它会很快产生缺页错误。此时,必须置换某个页面。然而,由于它的所有页面都在使用中,所以必须立即置换需要再次使用的页面。因此,它会再次快速产生缺页错误,再一次置换必须立即返回的页面,如此快速进行。 这种高度的页面调度活动称为抖动。如果一个进程的调页时间多于它的执行时间,那么这个进程就在抖动。
2021-01-06 11:53·重学IT的老猫
如果最优算法不可行,那么最优算法的近似或许成为可能。FIFO和最优页面置换(OPT)算法的关键区别在于,除了在时间上向后或向前看之外,FIFO算法使用的是页面调入内存的时间,OPT算法使用的是页面将来使用的时间。 如果我们使用最近的过去作为不远将来的近似,那么可以置换最长时间没有使用的页。这种方法称为最近最少使用(LRU)算法。 LRU置换将每个页面与它的上次使用的时间关联起来。当需要置换页面时,LRU选择最长时间没有使用的页面。这种策略可当作在时间上向后看而不是向前看的最优页面置换算法。
2021-01-06 01:28·重学IT的老猫
发现 Belady 异常的一个结果是寻找最优页面置换算法,这个算法具有所有算法的最低的缺页错误率,并且不会遭受Belady异常。这种算法确实存在,它被称为OPT或MIN。该算法的思想是:置换最长时间不会使用的页面。 这种页面置换算法确保对于给定数量的帧会产生最低的可能的缺页错误率。
2021-01-04 01:25·重学IT的老猫
进程运行时,若其访问的页面不在内存而需将其调入,但内存已无空闲空间时,就需要从内存中调出一页程序或数据,送入磁盘的对换区,其中选择调出页面的算法就称为页面置换算法。
2021-01-03 17:04·重学IT的老猫
前面学习一个进程如何采用请求调页,仅调入包括第一条指令的页面,从而能够很 快开始执行。然而,通过系统调用 fork() 的进程创建最初可以通过使用类似于页面共享的技术,绕过请求调页的需要。这种技术提供了快速的进程创建,并最小化必须分配给新创建进程的新页面的数量