内存管理的功能的分配与回收与分配策略

内存管理

内存管理功能

内存空间的分配与回收:主存空间的分配与管理由操作系统完成,让程序员摆脱内存分配的烦恼,提高编程效率。

地址转换:在多道程序环境下,程序中的逻辑地址不能与内存中的物理地址一致,因此存储管理必须提供地址转换功能,将逻辑地址转换为对应的物理地址。

内存空间扩展:使用虚拟存储技术或自动覆盖技术,逻辑上扩展内存。

存储保护:确保每个作业在自己的存储空间中运行,互不干扰。

内存分配方式持续分配管理方式

连续分配是指为用户程序分配连续的内存空间。比如用户需要1GB的内存空间,它会在内存空间中连续分配1GB的空间给用户。

单次连续分配:内存以这种方式分为系统区和用户区。系统区只提供给操作系统,通常在低地址部分;用户区是除系统区外提供给用户的内存。空间。这样就不需要内存保护了。

固定分区分配:固定分区分配是最简单的多程序存储管理方法。它将用户内存空间划分为若干个固定大小的区域,每个分区只加载一个作业。当有空闲分区时,可以从外存的备份作业队列中选择一个合适大小的作业来加载该分区,以此类推。

动态分区分配:动态分区分配,也称为可变分区分配,是一种动态划分内存的分区方法。这种分区方式并没有预先划分内存,而是在进程加载到内存时根据进程的大小动态建立分区,使分区的大小刚好适合进程的需要。因此系统中分区的大小和数量是可变的。

分配策略算法

First Fit 算法:自由分区按地址递增顺序链接。分配内存时顺序搜索,找到第一个大小满足要求的空闲分区。

Best Fit算法:空闲分区增加容量形成分区链,找到第一个满足要求的空闲分区。

最差拟合(Worst Fit)算法:也称为最大拟合(Largest Fit)算法,空闲分区按容量递减的顺序连接。找到第一个满足要求的空闲分区,即挑出最大的分区。

Next Fit Algorithm:又称循环第一自适应算法,由第一自适应算法演变而来。不同的是,在分配内存时,从上次搜索结束的地方继续搜索。

不连续的分配管理

非连续分配允许程序分散到不连续的内存分区中

分页存储管理方法

将内存空间分成大小相等的分区(例如:每个分区为4KB),每个分区是一个页框(页框、内存块、物理块),每个页框都有一个编号,即,页框号(页框号、内存块号、物理块号),页框号从0开始

用户进程的地址空间也被划分为与页框大小相等的区域,称为“pages”或“pages”,每页也有一个数字,即页码,页码也是从0开始(注意:进程的最后一页可能没有页框那么大,所以页框不能太大,否则会造成内部碎片过多)

操作系统以页框为单位为每个进程分配内存空间。进程的每一页都放入一个页框中,那么进程的页和内存的页框一一对应。

分段存储管理方法

进程的地址空间:根据程序本身的逻辑关系划分为若干段,每个段都有一个段名(在低级语言中,程序员使用段名进行编程),每个段都被寻址从 0

内存分配规则:以段为单位分配,每个段在内存中占用连续空间clock页面置换算法课设,但每个段可以不相邻

优点:由于是按逻辑功能划分,用户编程更方便,程序可读性更强

分页和分段存储管理的区别

页是信息的物理单位,分页是为了实现离散分配,提高内存利用率。分页只是由于系统管理需要而不是用户需要。段是信息的逻辑单元,以便更好地满足用户的需求。

分段比分页更容易保护和共享信息。分段可以在一个段中写入逻辑来保护另一个段,但分页不能。

页面的大小是固定的,由系统决定,而段的长度取决于用户编写的程序。

页面替换算法(追求页面错误率最小)

最优替换算法OPT(unrealizable,作为标准):被淘汰的页面永远不会被使用,或者最长时间不会被使用,因为无法预测哪些页面会被访问,因此,该算法无法实现,只能作为标准使用

例如:需要访问7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,那么访问顺序:

FIFO:先进先出替换算法FIFO:每次淘汰的页是第一个进入内存的页

例如:需要访问3 2 1 0 3 2 4 3 2 1 0 4,那么访问顺序

Last最近未使用的替换算法(LRU):每次淘汰的页面是最近未使用的页面

例如:需要访问 1 8 1 7 8 2 7 2 1 8 3 8 2 1 3 1 7 1 3 7 访问顺序

最近不用的替换算法NRU(Clock algorithm):为每个页面设置一个访问位,然后通过链接指针将内存中的页面链接成一个循环队列。当一个页面被访问时,它的访问位置是1. 当需要淘汰一个页面时,只需要检查该页面的访问位。如果为0,则换出页面,如果为1,则设置为0,暂时不换出。继续查看下一页,如果第一轮扫描后全为1,则扫描完成,将这些设置为0.,然后进行第二轮扫描,所以简单的Clock算法选择一个页面消除最多两轮

文件管理

文件是如何分配的(物理结构)

文件块和磁盘块:类似内存的分页

磁盘块:磁盘中的存储单元将分为“块/磁盘块/物理块”。在许多操作系统中,磁盘块的大小与内存块和页面的大小相同。

文件块:在外存管理中,为了方便文件数据的管理,文件的逻辑地址空间被一一划分为文件块,文件的逻辑地址可以表示为(逻辑块号,块地址)的形式。用户通过逻辑地址操作自己的文件,操作

文件的分发方式

连续分配:要求每个文件在磁盘上占用一组连续的块

优点:支持顺序访问和直接访问(如数组),连续分配的文件是顺序访问中最快的

缺点:文件扩展不方便,存储空间利用率低,会出现磁盘碎片

链接分配:离散分配用于将离散的磁盘块分配给文件。 (类似于链表数据结构)

隐式链接:目录中记录的文件的起始块号和结束块号。除了文件的最后一个磁盘块外,每个磁盘块都会保存一个指向下一个磁盘块的指针,这些指针对用户是透明的,每次访问一个磁盘块都需要从头开始访问

优点:文件扩展方便,无碎片问题,外存利用率高

缺点:只支持顺序访问,不支持随机访问,搜索效率低

图片[1]-内存管理的功能的分配与回收与分配策略-老王博客

索引分配:索引分配允许在每个磁盘块中离散地分配文件。系统将为每个文件创建一个索引表。索引表记录了文件的每个逻辑块对应的物理块(索引表的作用)。类似于内存管理的页表——建立逻辑页到物理页的映射关系)。存储在索引表中的磁盘块称为索引块,存储有文件数据的磁盘块称为数据块

文件存储空间管理

存储空间的划分和初始化

存储空间划分:将物理磁盘划分为文件卷(逻辑卷、逻辑磁盘,如Windows系统下的C、D、E盘等)

有些系统支持非常大的文件,可以由多个物理磁盘组成一个文件卷

存储空间初始化:将每个文件卷划分为目录区、文件区

目录区:目录区主要存放文件的目录信息(FCB),用于管理磁盘存储空间

文件区:文件区用于存放文件数据

如何管理存储空间

空闲列表方法:类似于内存管理中的动态分区分配,它为文件分配连续的存储空间。也可以使用首次拟合、最佳拟合和最差拟合等算法来决定分配给文件的间隔

空闲列表方式:分为——>

空闲磁盘块链:以磁盘块为单位组成空闲链

空闲extent链:以extents为单位形成空闲链

位图法:每个二进制位代表一个磁盘块。例如,“0”可以表示磁盘块空闲,“1”可以表示磁盘块已经分配。

组链方式:UNIX采用的策略,适用于大型文件系统。

IO 管理

磁盘调度算法

一次磁盘读/写操作所需时间:寻道时间+延迟时间+传输时间

寻道时间:读/写前将磁头移动到指定磁道所需的时间(启动磁头臂和移动磁头臂)

延迟时间:通过旋转磁盘将磁头定位到目标扇区所需的时间

传输时间:从磁盘读取或写入数据所需的时间

磁盘调度算法:

先到先服务算法(FIFO):按照进程请求访问磁盘的顺序进行调度

最短寻道时间优先算法(SSTF):优先处理的磁道是离当前磁道最近的磁道,可以保证每次的寻道时间最短,但不能保证总寻道时间最短(贪心算法)

扫描算法(SCAN,电梯调度算法):SSTF算法可能会造成饥饿,磁头可能会在小范围内来回移动,所以扫描算法规定只有当磁头移动到最外层磁道时才可以它向内移动只有最里面的轨道才能向外移动,在此基础上使用SSTF算法

循环扫描算法(C-SCAN):SCAN算法对每个位置磁道的响应频率是不均匀的,C-SCAN算法在SCAN算法的基础上规定:磁道只有在磁头时才能处理朝着特定的方向移动。访问请求,返回时直接移动到起始端,不处理任何请求

死锁

对死锁的理解

如果一组进程中的每个进程都在等待一个事件,而该事件是由该组中的一个进程触发的,这种情况会导致死锁

资源死锁条件:发生死锁时,必须满足以下四个条件

互斥条件:进程需要对分配的资源进行独占控制,即某资源在一段时间内只被一个进程占用。

保持和等待条件:当进程因请求资源而阻塞时,它将保持获取的资源。

非抢占条件:进程获得的资源在用完之前不能被剥夺,只有在用完时才能自行释放。

循环等待条件:发生死锁时,必然存在进程-资源循环链。

避免死锁->银行家算法

当一个进程申请使用资源时,银行家算法首先通过测试为进程分配资源clock页面置换算法课设,然后使用安全算法判断分配的系统是否处于安全状态。继续等待。

安全顺序判断:

解除死锁

资源剥夺法:挂起(暂时放到外部内存)一些死锁进程,抢占他的资源,将这些资源分配给其他死锁进程。但是,它应该可以防止暂停的进程在没有资源的情况下长时间饥饿

撤销进程方法:强制取消部分甚至全部死锁进程,剥夺这些进程的资源。实现虽然简单,但成本可能很高

进程回退方法:让一个或多个死锁进程回退到足以避免死锁

死锁的破坏简单来说就是破坏死锁产生的四个条件,使其中任何一个条件都不满足。

—EOF—

重!程序员交流群已成立

公众号的运营离不开朋友们的支持。

为了给小伙伴们提供一个交流的平台,特地开设了程序员交流群

群里有很多技术高手,不定期分享一些技术点,部分资源收藏者不定期分享一些优质的学习资料。 (群完全免费,无广告,无课程!)

如需入群,可长按扫描下方二维码。

▲长按扫码

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论