操作系统内存分配与回收

合集下载

操作系统中的内存管理与文件系统原理

操作系统中的内存管理与文件系统原理

操作系统中的内存管理与文件系统原理操作系统是计算机系统中的关键组成部分,它负责管理计算机的资源,并提供给应用程序一个方便的运行环境。

其中,内存管理和文件系统原理是操作系统中的重要内容之一。

本文将就这两个方面进行探讨。

一、内存管理内存管理是操作系统中的核心任务之一,主要包括内存的分配、回收和保护。

下面将深入探讨内存管理的原理与实现。

1. 内存分配在操作系统中,内存分配主要分为静态分配和动态分配两种方式。

静态分配是指在程序加载时就确定了内存的分配情况,而动态分配则是动态地根据程序的运行需要进行内存的分配。

静态分配的优点是简单高效,但缺点是浪费内存资源。

动态分配虽然能够更高效地利用内存,但需要考虑内存碎片等问题。

常见的动态分配算法有首次适应算法、最佳适应算法和最坏适应算法等。

2. 内存回收内存回收是指在进程结束或释放内存时,将已经使用的内存空间释放给系统的过程。

在操作系统中,常见的内存回收机制有引用计数和垃圾回收等。

引用计数是一种简单且常用的内存回收机制,通过跟踪对象的引用数量来进行内存的回收。

当引用数量减为0时,表示该对象不再被使用,可以将其回收。

垃圾回收则是一种更复杂的内存回收机制,它通过扫描程序的堆内存,找出不再被使用的对象,并回收其占用的内存空间。

常见的垃圾回收算法有标记-清除算法、标记-整理算法和复制算法等。

3. 内存保护内存保护是指操作系统对内存空间的保护机制,以防止进程之间的干扰和非法访问。

在实现内存保护时,操作系统通常采用分段和分页的方式。

分段是将进程的地址空间划分为若干个段,每个段具有不同的权限,如只读、可写等。

这样可以有效地限制进程对内存空间的访问权限。

分页则是将进程的地址空间划分为固定大小的页,每个页都有相应的访问权限。

通过页表来映射进程的虚拟地址和物理地址,以实现内存的保护和地址转换。

二、文件系统原理文件系统是操作系统中用于管理文件和目录的机制。

文件系统的设计和实现涉及文件的组织、存储和管理等方面。

计算机操作系统内存管理了解内存分配和回收的原理

计算机操作系统内存管理了解内存分配和回收的原理

计算机操作系统内存管理了解内存分配和回收的原理计算机操作系统内存管理是操作系统中极为重要的一部分,它负责管理计算机主存(内存)的分配和回收。

内存分配和回收的原理对于了解计算机系统的运行机制至关重要。

本文将从内存管理的基本概念开始,介绍内存的分配和回收原理。

一、内存管理基本概念内存管理是操作系统中的一个重要功能,其主要任务是将有限的内存资源分配给各个进程,并及时回收不再使用的内存。

内存管理的核心是虚拟内存技术,它将计算机的内存空间划分为若干个固定大小的页或块,每个进程都认为自己拥有整个内存空间。

二、内存分配原理1. 连续分配在早期的操作系统中,内存分配采用的是连续分配原理。

系统将内存分为固定大小的分区,并为每个进程分配连续的内存空间。

这种分配方法简单高效,但会导致内存碎片问题,进而影响系统性能。

2. 非连续分配为解决内存碎片问题,后来的操作系统引入了非连续分配原理。

非连续分配可以分为分页式和分段式两种方式。

- 分页式:将物理内存划分为固定大小的页框,逻辑地址空间也被划分为相同大小的页。

通过页表实现逻辑地址到物理地址的映射。

- 分段式:将逻辑地址空间划分为若干个段,每个段的大小可以不同。

通过段表实现逻辑地址到物理地址的映射。

三、内存回收原理内存回收是指在进程不再使用某块内存时,及时将其释放,使其成为可供其他进程使用的空闲内存。

内存回收涉及到的主要原理有以下几种:1. 清除位图操作系统通过使用一张位图,来记录内存中的空闲块和已分配块的状态。

当一个进程释放内存时,系统会将相应的位图标记为空闲,以便后续进程可以使用。

2. 空闲链表操作系统通过维护一个空闲链表来管理空闲内存块。

当一个进程释放内存时,系统会将该内存块插入空闲链表,使其成为可供其他进程分配的空闲内存。

3. 垃圾回收垃圾回收是指当进程释放内存后,操作系统自动检测并回收无法访问到的对象所占用的内存。

垃圾回收可以通过引用计数和标记清除等算法实现。

四、内存管理策略为了提高内存利用率和系统性能,操作系统采用了一系列内存管理策略:1. 内存分配策略- 最先适应算法:从空闲链表中选择第一个足够大的内存块分配给进程。

实验四操作系统存储管理实验报告

实验四操作系统存储管理实验报告

实验四操作系统存储管理实验报告一、实验目的本次实验的主要目的是深入理解操作系统中存储管理的基本原理和方法,通过实际操作和观察,掌握内存分配与回收、页面置换算法等关键概念,并能够分析和解决存储管理中可能出现的问题。

二、实验环境本次实验在装有 Windows 操作系统的计算机上进行,使用了 Visual Studio 等编程工具和相关的调试环境。

三、实验内容(一)内存分配与回收算法实现1、首次适应算法首次适应算法从内存的起始位置开始查找,找到第一个能够满足需求的空闲分区进行分配。

在实现过程中,我们通过建立一个空闲分区链表来管理内存空间,每次分配时从表头开始查找。

2、最佳适应算法最佳适应算法会选择能够满足需求且大小最小的空闲分区进行分配。

为了实现该算法,在空闲分区链表中,分区按照大小从小到大的顺序排列,这样在查找时能够快速找到最合适的分区。

3、最坏适应算法最坏适应算法则选择最大的空闲分区进行分配。

同样通过对空闲分区链表的排序和查找来实现。

(二)页面置换算法模拟1、先进先出(FIFO)页面置换算法FIFO 算法按照页面进入内存的先后顺序进行置换,即先进入内存的页面先被置换出去。

在模拟过程中,使用一个队列来记录页面的进入顺序。

2、最近最久未使用(LRU)页面置换算法LRU 算法根据页面最近被使用的时间来决定置换顺序,最近最久未使用的页面将被置换。

通过为每个页面设置一个时间戳来记录其最近使用的时间,从而实现置换策略。

3、时钟(Clock)页面置换算法Clock 算法使用一个环形链表来模拟内存中的页面,通过指针的移动和页面的访问标志来决定置换页面。

四、实验步骤(一)内存分配与回收算法的实现步骤1、初始化内存空间,创建空闲分区链表,并为每个分区设置起始地址、大小和状态等信息。

2、对于首次适应算法,从链表表头开始遍历,找到第一个大小满足需求的空闲分区,进行分配,并修改分区的状态和大小。

3、对于最佳适应算法,在遍历链表时,选择大小最接近需求的空闲分区进行分配,并对链表进行相应的调整。

掌握操作系统中的内存分配和回收策略

掌握操作系统中的内存分配和回收策略

掌握操作系统中的内存分配和回收策略内存管理是操作系统中非常重要的一个部分,它负责管理系统的内存资源,以便程序能够正常运行。

内存分配和回收策略是内存管理的核心内容,它们直接影响着系统的性能和可靠性。

本文将就操作系统中的内存分配和回收策略进行详细探讨,希望能够帮助读者更好地理解和掌握这一重要知识点。

一、内存分配1.1静态分配静态分配是最简单的内存分配方式之一,它在程序运行之前就确定程序所需的内存空间大小,并为程序分配固定大小的内存空间。

这种分配方式的优点是简单快捷,但是它的缺点也非常明显,就是浪费内存资源。

因为程序在运行时可能并不需要那么大的内存空间,但是静态分配却无法根据程序的实际需要进行动态调整,因此会导致内存资源的浪费。

1.2动态分配动态分配是一种更加灵活的内存分配方式,它能够根据程序的实际需要来动态分配内存空间。

常见的动态分配方式有:首次适应算法(First Fit)、最佳适应算法(Best Fit)、最坏适应算法(Worst Fit)等。

这些算法都是根据程序的内存需求和系统当前的内存状态来选择合适的内存块进行分配,以充分利用系统的内存资源。

1.3分区分配分区分配是一种常见的动态分配方式,它将内存空间划分为多个固定大小的分区,每个分区大小相同。

当程序需要内存空间时,系统会根据程序的内存需求选择合适大小的分区进行分配。

分区分配能够充分利用内存资源,但是它也存在内部碎片和外部碎片的问题,需要采取相应的策略进行优化。

1.4页面分配页面分配是另一种常见的动态分配方式,它将内存空间划分为大小相同的页面,每个页面大小固定。

当程序需要内存空间时,系统会将程序的内存空间划分成多个页面,并根据程序的实际需求进行页面分配。

页面分配能够充分利用内存资源,同时也能够有效地减少内部碎片和外部碎片的问题,是一种比较理想的动态分配方式。

1.5碎片整理无论是分区分配还是页面分配,都会产生内部碎片和外部碎片的问题。

为了解决这一问题,系统需要进行碎片整理。

理解操作系统中的内存管理和内存保护机制

理解操作系统中的内存管理和内存保护机制

理解操作系统中的内存管理和内存保护机制内存管理是操作系统中重要的一部分,它负责管理计算机系统中的内存资源,包括分配、回收和保护内存。

内存保护机制是一种机制,它采用一系列策略和技术来保护计算机系统的内存资源免受非法访问、损坏或滥用。

内存管理的主要任务是管理计算机系统的内存资源,确保有效地使用和利用内存。

它包括以下几个方面:1.内存分配:内存管理系统负责管理计算机系统中的内存资源,分配和释放内存。

当程序需要内存来存储数据和指令时,内存管理系统会分配适当的内存空间给程序使用。

当程序结束运行或者不再需要内存时,内存管理系统会回收这些内存空间以供其他程序使用。

2.地址映射:内存管理系统负责将程序中的虚拟地址映射到物理内存中的实际地址。

由于每个程序都运行在自己的虚拟地址空间中,内存管理系统需要将虚拟地址映射到物理内存中的实际地址。

这样程序可以通过使用虚拟地址来访问内存,而不需要关心实际的物理地址。

3.内存保护:内存管理系统还负责保护内存资源免受非法访问、损坏或滥用。

它通过一系列的措施和策略来确保只有经过授权的程序才能访问特定的内存区域。

其中一种常见的方式是使用访问权限位,通过在内存中的每个页或段上设置访问权限位来控制程序的访问权限。

4.内存映射文件:内存管理系统还支持内存映射文件的机制。

内存映射文件是一种将文件的内容直接映射到内存中的机制。

当程序需要读取或写入文件时,操作系统可以将文件的内容映射到程序的地址空间中,从而使程序可以像访问内存一样来访问文件的内容。

内存保护机制是内存管理系统中的一个重要组成部分,它的目标是保护计算机系统的内存资源不受非法访问、损坏或滥用。

常见的内存保护机制包括:1.访问权限:内存保护机制使用访问权限位来限制程序对内存的访问。

每个内存页或段都有访问权限位,用来表示对应区域的访问权限。

操作系统可以设置访问权限位,只允许经过授权的程序访问特定的内存区域。

2.地址空间隔离:内存保护机制通过地址空间隔离来保护内存。

计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告DOC.doc

计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告DOC.doc

计算机操作系统实验报告实验二实验题目:存储器管理系别:计算机科学与技术系班级:姓名:学号:2一、实验目的深入理解动态分区存储管理方式下的内存空间的分配与回收。

二、实验内容编写程序完成动态分区存储管理方式下的内存分配和回收的实现。

具体内容包括:确定用来管理内存当前使用情况的数据结构;采用首次适应算法完成内存空间的分配;分情况对作业进行回收;编写主函数对所做工作进行测试。

三、实验原理分配:动态分区存储管理方式把内存除OS占用区域外的空间看作一个大的空闲区。

当作业要求装入内存时,根据作业需要内存空间的大小查询内存中各个空闲区,当从内存中找到一个大于或等于该作业大小的内存空闲区时,选择其中一个空闲区,按作业要求划出一个分区装入该作业。

回收:作业执行完后,它所占用的内存空间被收回,成为一个空闲区。

如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。

四、实验方法实现动态分区的分配与回收,主要考虑三个问题:第一、设计记录内存使用情况的数据表格,用来记录空闲区和作业占用的区域(利用结构体类型数组来保存数据);第二、在设计的数据表格基础上设计内存分配算法(采用首次适应算法找合适的分区(对空闲分区表进行排序),分配时要考虑碎片问题);第三、在设计的数据表格基础上设计内存回收算法(分四种情况进行回收(上邻、下邻、上下邻和无相邻分区)。

五、实验步骤第一,设计记录内存使用情况的数据表格●已分配分区表:起始地址、长度、标志(0表示“空表项”,1表示“已分配”)●空闲分区表:起始地址、长度、标志(0表示“空表项”,1表示“未分配”)struct used_table {float address; //已分分区起始地址float length; //已分分区长度,单位为字节int flag; //已分配表区登记栏标志,用0表示空栏目,char zuoyename;}; //已分配区表Struct free_table[ {float address; //空闲分区起始地址float length; //空闲分区长度,单位为字节int flag; //空闲分区表登记栏目用0表示空栏目,1表示未配}; //空闲分区表第二,在设计的表格上进行内存分配●首次适应算法:为作业分配内存,要求每次找到一个起始地址最小的适合作业的分区(按起始地址递增排序)。

计算机操作系统内存管理系统可变分区存储管理方式的内存分配回收

计算机操作系统内存管理系统可变分区存储管理方式的内存分配回收内存管理是操作系统中非常重要的一个功能,它负责管理计算机内存资源的分配和回收。

内存分配是指在程序运行时,为进程分配适当大小的内存空间;内存回收是指当进程终止或不再需要分配的内存时,将它们释放回系统。

可变分区存储管理方式是一种常用的内存管理方式,它的特点是将内存分为若干个可变大小的分区。

下面将详细介绍可变分区存储管理方式的内存分配和回收。

一、内存分配:1. 首次适应算法(First Fit):从起始地址开始查找第一个满足分配要求的可用分区,分配其中一部分给进程,并将剩余部分作为新的可用分区。

2. 循环首次适应算法(Next Fit):与首次适应算法类似,但是从上一次分配的位置开始查找。

3. 最佳适应算法(Best Fit):在所有可用分区中找到最小且能满足分配要求的分区进行分配。

4. 最坏适应算法(Worst Fit):在所有可用分区中找到最大的空闲分区进行分配。

这种方法可能会造成大量外部碎片,但可以更好地支持大型进程。

二、内存回收:1.碎片整理:在每次回收内存时,可以通过将相邻的空闲分区合并为一个更大的分区来减少外部碎片。

这种方法需要考虑如何高效地查找相邻分区和合并它们。

2.分区分割:当一个进程释放内存时,生成的空闲分区可以进一步划分为更小的分区,并将其中一部分分配给新进程。

这样可以更好地利用内存空间,但会增加内存分配时的开销。

3.最佳合并:在每次回收内存时,可以选择将相邻的空闲分区按照最佳方式合并,以减少外部碎片。

4.分区回收:当一个进程终止时,可以将其所占用的分区标记为可用,以便其他进程使用。

三、优化技术:1.预分配内存池:为了避免频繁的内存分配和回收,可以预分配一定数量的内存作为内存池,由进程从内存池中直接分配和回收内存。

2.内存压缩:当内存不足时,可以通过将一部分进程的内存内容移动到磁盘等外部存储器中,释放出一定的内存空间。

3.页面替换算法:在虚拟内存系统中,当物理内存不足时使用页面替换算法,将不常用的页面淘汰出物理内存,以便为新页面分配内存。

内存分配与回收的实验总结

内存分配与回收的实验总结说到内存分配与回收,嘿,很多人可能会皱起眉头,心里想着:这是什么鬼?难道又是那些看不见摸不着的东西?其实呢,内存分配这事儿,咱们平常用电脑、手机的时候,接触得还挺多的。

你打开一个APP,浏览网页,甚至看视频,其实背后都少不了内存分配的“功劳”。

咱们不妨从生活中最简单的例子说起。

想象一下,你家里有一个大柜子。

你每次要放东西进去,都得先找到合适的空格。

每次用完了,又得把东西收拾回去,腾出空间给新东西。

内存就是这么个大柜子,而“分配”和“回收”就是咱们找空格和腾空格的过程。

听起来挺简单对吧?但要是你不懂这些规则,柜子乱成一锅粥,那可就麻烦了。

首先说说“内存分配”。

内存分配就像咱们去超市挑东西。

你要先确定自己想买啥,再去看超市里有没有合适的商品。

有时,超市里东西摆得乱七八糟,可能得翻翻找找才能找到想要的。

而电脑或手机的内存,也差不多这么个道理,分配的过程就是在“内存空间”里找一个空的地方,把需要用的数据“装”进去。

不过,内存不像你去超市随便乱放,电脑可得讲究一点,得按大小、按需求来分配。

有时候你会发现,刚开始使用的时候,内存还挺宽敞,空间一大块,眼前一片开阔。

但随着程序越来越多,数据越堆越高,嘿,空间也慢慢被挤压。

用久了,没得到及时的清理或者释放,整台机器就会慢得让你怀疑人生,像个吃撑了的胖子,动弹不得。

回到正题,内存回收又是什么?很简单,内存回收就好比咱们清理房间。

你每次用完东西后,得把乱七八糟的东西收拾掉,不然整个空间就只能堆满垃圾。

你得腾出空间,给新的东西留下位置。

而电脑里的内存回收也是一样,当某些数据不再需要时,操作系统会把这些不再使用的内存空间清理出来,给新的任务留下空位。

要是你不清理,内存就会变得越来越满,程序运行起来就会卡,甚至崩溃。

想想看,咱们平常家里堆满了不需要的杂物,可能会把屋子弄得暗无天日,做啥事都不顺心。

电脑的内存不清理,结果也是一样,卡得你心力交瘁,啥都做不成。

操作系统实验报告三存储器管理实验

操作系统实验报告三存储器管理实验操作系统实验报告三:存储器管理实验一、实验目的本次存储器管理实验的主要目的是深入理解操作系统中存储器管理的基本原理和方法,通过实际操作和观察,掌握内存分配与回收的算法,以及页面置换算法的工作过程和性能特点,从而提高对操作系统资源管理的认识和实践能力。

二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C++,开发工具为 Visual Studio 2019。

三、实验内容1、内存分配与回收算法实现首次适应算法(First Fit)最佳适应算法(Best Fit)最坏适应算法(Worst Fit)2、页面置换算法模拟先进先出页面置换算法(FIFO)最近最久未使用页面置换算法(LRU)时钟页面置换算法(Clock)四、实验原理1、内存分配与回收算法首次适应算法:从内存的起始位置开始,依次查找空闲分区,将第一个能够满足需求的空闲分区分配给进程。

最佳适应算法:在所有空闲分区中,选择能够满足需求且大小最小的空闲分区进行分配。

最坏适应算法:选择空闲分区中最大的分区进行分配。

2、页面置换算法先进先出页面置换算法:选择最早进入内存的页面进行置换。

最近最久未使用页面置换算法:选择最近最长时间未被访问的页面进行置换。

时钟页面置换算法:给每个页面设置一个访问位,在页面置换时,从指针指向的页面开始扫描,选择第一个访问位为0 的页面进行置换。

五、实验步骤1、内存分配与回收算法实现定义内存分区结构体,包括分区起始地址、大小、是否已分配等信息。

实现首次适应算法、最佳适应算法和最坏适应算法的函数。

编写测试程序,创建多个进程,并使用不同的算法为其分配内存,观察内存分配情况和空闲分区的变化。

2、页面置换算法模拟定义页面结构体,包括页面号、访问位等信息。

实现先进先出页面置换算法、最近最久未使用页面置换算法和时钟页面置换算法的函数。

编写测试程序,模拟页面的调入和调出过程,计算不同算法下的缺页率,比较算法的性能。

操作系统-内存分配与回收实验报告

操作系统-内存分配与回收实验报告本次实验是关于内存管理的实验,主要涉及内存分配和回收的操作。

本文将对实验过程和结果进行详细介绍。

1. 实验目的本次实验的主要目的是熟悉内存管理的基本原理和机制,掌握内存分配和回收的方法,并且实现一个简单的内存管理器。

2. 实验原理内存管理是操作系统的重要组成部分,主要负责管理计算机的内存资源,并且协调进程对内存的访问。

在计算机工作过程中,内存扮演着重要的角色,因此内存管理的效率和稳定性对计算机的性能和稳定性有着重要影响。

内存管理包括内存分配和回收两个方面。

内存分配是指为进程分配空闲的内存空间,以便程序可以执行;内存回收是指将已经使用完成的内存空间还回给系统,以便其他进程使用。

3. 实验步骤为了实现一个简单的内存管理器,我们需要进行以下步骤:(1)定义内存块结构体首先,我们需要定义一个内存块结构体,用于描述内存块的基本信息。

内存块结构体可以包含以下信息:· 内存块的起始地址· 内存块是否被分配下面是一个内存块结构体定义的示例代码:typedef struct mem_block{void *start_address; // 内存块的起始地址size_t size; // 内存块的大小bool is_allocated; // 内存块是否已经分配}MemBlock;(3)实现内存分配函数现在,我们可以开始实现内存分配函数了。

内存分配函数需要完成以下工作:· 在内存管理器中寻找一个合适的内存块void *mem_alloc(MemManager *manager, size_t size){MemBlock *p = manager->block_list;while(p){if(p->size >= size && !p->is_allocated){p->is_allocated = true;return p->start_address;}p = p->next;}return NULL;}· 找到该内存块所在的位置· 将该内存块标记为未分配状态4. 实验结果本次实验实现了一个简单的内存管理器,通过该内存管理器可以实现内存分配和回收的操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<stdio.h>
#include<malloc.h>
#include<conio.h>
typedef struct area{//区
int startaddress;
int size;
int state; //0表示闲置,1表示已分配
struct area *next;
}block;
typedef struct job{//作业
int startaddress;
char name[20];
struct job *next;
}job;
block *head1;//空闲区头指针
block *current;//每次寻找合适空闲区的起始地址
job *head2;
void outputblock()//输出内存状态
{
block *p=head1;
printf("============================================================= ===============\n");
printf("当前分区说明表(0表示闲置,1表示已分配):\n");
printf("起始地址长度状态\n");
printf(" %d %d %d\n",p->startaddress,p->size,p->state);
p=p->next;
while(p!=head1)
{
printf(" %d %d %d\n",p->startaddress,p->size,p->state);
p=p->next;
}
printf("============================================================= ===============\n");
}
block * search(int m)
{
block *p;
p=current;
if(p->state==0&&p->size>=m)
{
return p;
}
p=p->next;
while(p!=current)
{
if(p->state==0&&p->size>=m)
{
return p;
}
p=p->next;
}
return NULL;
}
int searchjobname(char s[20]){//找作业并删除
job *tempjob;
job *tempjob1;
int address;
tempjob=head2->next;
tempjob1=head2;
while(tempjob!=NULL){
if(*tempjob->name==*s){
address=tempjob->startaddress;
tempjob1->next=tempjob->next;
free(tempjob);
return address;
}
tempjob1=tempjob;
tempjob=tempjob->next;
}
return -1;
}
void deleteblock(int address){//回收地址为address的分配区block * tempblock=head1;
block * aimblock=head1;
block *p;
block *q;
while(aimblock->startaddress!=address){aimblock=aimblock->next;} while(tempblock->next!=aimblock){tempblock=tempblock->next;} q=tempblock->next;
p=q;
if(aimblock!=head1&&tempblock->state==0){
tempblock->size=tempblock->size+aimblock->size;
tempblock->next=p->next;
free(aimblock);
aimblock=tempblock;
tempblock=tempblock->next;
}
else{aimblock->state=0;}
q=aimblock->next;
p=q;
if(q!=head1&&q->state==0){
aimblock->size=aimblock->size+q->size;
aimblock->next=p->next;
free(q);
aimblock->state=0;
}
else{aimblock->state=0;}
}
void main()
{
int applyarea;
int chioc;
char jobname[20];
int address;
job *tempjob;
block *tempblock;
block *h;
head1=new block;
head1->startaddress=0;
head1->size=1000;
head1->state=0;
head1->next=head1;
head2=new job;//作业链表的头结点
head2->next=NULL;
outputblock();
while(1)
{ if(head1==head1->next){current=head1;} printf("申请主存空间按“1”,");
printf("回收主存空间按“2”");
printf("请选择:");
scanf("%d",&chioc);
if(chioc==1)
{
printf("请输入要申请的内存大小:");
scanf("%d",&applyarea);
h=search(applyarea);
if(h!=NULL)
{ if(h->size==applyarea){
h->state=1;
address=h->startaddress;
current=h->next;
}
else{
tempblock=new block;//新的空闲块
tempblock->size=h->size-applyarea;
tempblock->startaddress=h->startaddress+applyarea;
tempblock->state=0;
h->size=applyarea;
h->state=1;
address=h->startaddress;
tempblock->next=h->next;
h->next=tempblock;
current=tempblock;
}
tempjob=new job;
printf("请输入作业名:");
scanf("%s",tempjob->name);
tempjob->startaddress=address;
tempjob->next=head2->next;
head2->next=tempjob;
outputblock();
}
else{printf("无法满足请求!\n");printf("-------------------\n");}
}
if(chioc==2)
{
printf("请输入要回收的作业的作业名:");
scanf("%s",jobname);
address=searchjobname(jobname);
if(address>=0){
deleteblock(address);
outputblock();
}
else{printf("该作业不存在!");}
}
} }。

相关文档
最新文档