当前位置: 首页 > 后端技术 > PHP

计算机操作系统基础(8)---存储管理之内存分配与回收

时间:2023-03-30 01:46:00 PHP

引言随着程序越来越复杂,存储管理成为必要。本文主要是了解内存分配的过程和内存回收过程存储管理的意义,保证计算机有足够的内存来处理数据,保证程序可以从可用内存中获取一部分内存使用,保证进程内存分配,单次连续分配,单次连续分配是最简单的内存分配方式,只能用于单用户、单进程的操作系统。分配的过程就是将内存划分为系统区和用户区。系统区是指系统。该区的所有内存都被操作系统区使用,而用户区是指用户区的所有内存都被用户区的程序使用(这是一种过时的方法)。固定分区分配是支持多程序的最佳方式简单存储分配方式的内存空间被划分为若干个固定大小的区域,每个分区只为一个程序提供,互不干扰。主存分为几个分区,每个分区都提供给某个进程使用。这是固定分区分配方法动态分区分配根据进程的实际需要,内存空间的动态分配涉及到相关的数据结构和一些具体的算法动态分区空闲列表数据结构假设主存中有几个分区,有的是使用过的,有的没有使用过,所以需要一个数据结构来存储某个分区是否被使用过。这时候就要求freetable数据结构在表中有几个分区,每个分区都有一个标记,0或者1,0表示没用过,1表示用过。这是动态分区空闲链表的数据结构和动态分区空闲链的数据结构。这是使用双向链表来保存动态分区中的空闲区域。通过链表将所有分散的空闲区域首尾相连,形成一个空闲链表。但是会出现下图中空闲区2和3是连续的,所以可以将节点2和3合并,这样就可以减少空闲链表的节点数。因此,每个节点的大小是不同的,所以需要在每个节点中存储和记录这个节点的存储容量。这就是动态分区自由链数据结构动态分区分配算法第一适应算法(FF算法)最佳适应算法(BF算法)快速适应算法(QF算法)这些算法是在实际动态内存分配中使用的算法第一适应算法(FF算法)算法)每次进行内存分配时,从头开始按顺序寻找合适的内存区域(主要使用freechain的数据结构)。如果没有合适的空闲区域,分配就会失败。如果找到,空闲区域将被划分为Thisprocessuses。每次都是从头部开始,这样头部地址空间就被不断划分。BestAdaptiveAlgorithm(BFAlgorithm)BestAdaptiveAlgorithm要求自由区链表按照容量排序。遍历空闲区链表,找到最好的空闲区。按大小排序,当需要内存时,从节点头部开始遍历,找到最好的空闲区域节点。这个算法的好处是可以避免大材小用的情况,因为它是从小到大遍历空闲链表的,所以它匹配到的第一个合适的空闲区一定是最好的。快速自适应算法(QF算法)快速自适应算法需要多个空闲区域链表,每个空闲区域链表存储一个空闲区域,其容量为。一个有一个空闲区域节点的一个和一个有两个空闲区域节点的被分成两个链表。当需要分配内存时,可以快速找到适合某个进程的内存区域。内存回收过程内存回收过程可能有以下几种情况:回收区与空闲区相邻,回收区与空闲区相邻,空闲区在回收区之下。两个空闲区中间一个单独的回收区各个case的回收过程回收区使用空闲区下面freelist的数据结构来保存空闲区,不需要新建freelist节点,只需要增加freearea1的容量到freearea就够了(也就是包括recyclearea)。回收区在自由区之上。将回收区与自由区合并,创建一个新的自由区。使用回收区的地址。回收区位于两个自由区的中间。2与恢复区合并创建一个新的空闲区使用空闲区的地址1分离恢复区为恢复区创建一个新的空闲节点插入到对应的空闲区链表中查找相同的科技日新月异,它是科技人的核心竞争力。知行合一,理论与实践相结合