多线程内存分配模拟系统
摘要: 内存分配在操作系统中占有重要的地位,是操作系统的核心。因为任何程序的执行,都必须首先获得内存空间,否则,不可执行。然而由于内存分配的抽象性,不能为大多数人所理解。所以,设计了该系统,以便让更多的人了解内存分配的过程。
本系统的设计,就是在windows操作系统之下,利用多线程的方式来模拟操作系统的内存分配。在vc 中有两种线程方式:工作线程和用户接口线程。在使用上,第一种方式较为简单,但不容易理解;第二种方式较为复杂,但比较容易被用户接受。所以,本系统的设计采用了用户接口线程的方式。
本系统的核心在三个类上:主线程类、子线程类和绘图线程类。首先,构造一个主线程,负责对各个子线程的调度,并为它们分配内存空间。其次,构造一个绘图线程,专门在子线程获得内存时,负责内存分配情况的绘制,用图形动态的显示内存的分配。这也正是本系统的特色,把抽象的内存分配过程用图象的形式,动态的显示出来,对于用户的理解是非常有利的。
内存分配的方法有很多种,在本系统中,采用了比较简单的一种---首次拟合的分配算法。即在空闲的内存空间链表中,从表头开始查找空闲的内存块时,在找到第一块大小合适的内存空间,就分配它,并停止查找。
关键字:多线程 内存分配 操作系统 模拟
1.引言
1.1 国内外的发展概况与目前的水平
存储器是计算机的重要组成部分,存储空间是操作系统管理的宝贵资源,虽然其容量在不断扩大,但仍然远远不能满足软件发展的需要。对存储资源进行有效的管理,不仅关系到存储器的利用率,而且还对操作系统的性能和效率有很大的影响。
操作系统的存储管理的基本功能有:存储分配、地址转换和存储保护、存储共享、存储扩充。存储分配指为选中的多道运行的作业分配主存空间;地址转换是把逻辑地址空间中的用户程序通过静态重定位或动态重定位转换和映射到分给的物理地址空间中,以便用户程序的执行;存储保护指各道程序只能访问自己的存储区域,而不能互相干扰,以免其他程序受到有意或无意的破坏;存储共享指主存中的某些程序和数据可供不同用户进程共享。
最简单的单道系统中,一旦一个程序能装入主存,它将一直运行直到结束。如果程序长度超出了主存的实际容量,可以通过覆盖和交换的技术获得解决。更多的操作系统支持多个用户进程在主存同时执行,能满足多道程序设计需要的最简单的存储管理技术是分区方式,有分固定分区和可变分区。可变分区的分配算法包括:最先适应、下次适应、最佳适应、最坏适应和快速适应等分配算法。
采用分区方式管理存储器,每道程序总是要求占用主存的一个或几个连续的存储区域,主存中会产生许多碎片。因此,有时为了接纳一个新的作业而往往要移动已在主存的信息,这不仅不方便,而且开销不小。现代计算机都有某种虚存硬设备支持,简单也是常用的虚存是请求分页式虚存管理,于是允许把一个进程的页面存放到若干不相邻的主存页框中。
虚拟存储器的思路是基于程序的局部性原理,不把一个用户进程的全部信息同时装入主存,而是仅将其中当前使用部分先装入主存,其余暂时不用的部分先存放在作为主存扩充的辅存中,待用到这些信息时,在由系统自动把它们装入到主存中,简而言之,它采用了自动的部分装入、部分对换的技术、主存辅存独立编址但统一使用的技术,使得进程的虚地址空间可以远远大于系统的物理地址空间,为用户编程提供了极大的方便。
分页式虚拟存储器的基本原理,包括:页面、页框、逻辑地址、页表、地址转换等概念,还有用于加快地址映射的相联存储器、页表很大时使用的多级页表、某些系统中使用的反置页表。通过虚拟存储器,所有的用户访问程序和数据都给出逻辑地址,在运行时由系统转换成物理地址,这叫动态地址转换。于是就允许一个进程位于主存的任何地址,它的位置还可以动态改变。已经设计出了许多页面置换算法:Optimal、 LRU、 二次机会、Clock 、LFU 等。
另一种虚拟存储器称段式虚存,它是为满足现代高级语言模块化程序设计所需的二维地址要求和方便用户(程序员)编程和使用而引进的存储管理技术,段的划分的基本原则是按用户应用中逻辑上有完整意义的内容进行分段。为了实现段式存储管理,需要建立每个作业的段表,记录用户逻辑段与主存中物理段的对应关系,段式存储管理主存的分配与去配和可变分区方式十分的类似,可以通过直接分配、移动分配或调出分配来完成。
如果把上述两者结合起来,在分页存储管理的基础上可以实现段式存储管理这就是段页式虚存管理。
1.2毕业设计课题的来源与意义及所欲达到的目标
1.2.1来源及意义
21世纪是一个竞争日益激烈的世纪,为培养出高科技人才,抢占新世纪经济战略的制高点,世界各国都在发展科技力量,我国也不例外。但在教学方面,尤其是操作系统的抽象性,使得这一课程,难教也难学。为了方便教学,也为了学生能更好的理解操作系统中的内存分配算法,我们开发这一系统。使得操作系统中抽象的算法图形化,让更多的人可以理解抽象的算法,为我国计算机的人才培养提供一定的帮助。
本系统采用面向对象的程序设计思想为基本的设计指导思想,以ActiveX技术为编程实现的技术工具基本摆脱了结构化程序设计的束缚,代表了先进的程序设计方案。面向对象方法是基于客观世界的对象模型的软件开发方法,建立与语言无关的对象模型。它是以对象为中心的开发方法,是客观世界中抽象出来的软件开发的新思维方法,促进了软件的开发效率。ActiveX技术是在面向对象设计基础上发展起来的、基于组件对象模型(COM:Component Object
Model)的技术。从发展的势头来看,ActiveX代表着Windows系统软件开发的方向,因而,本系统采用了ActiveX技术,必将成为面向二十一世纪的、易于扩展和维护的优秀支撑系统。
1.2.2我们开发本系统欲达到的目标
在windows平台下用多线程的方式来模拟操作系统的内存分配。一个进程内的所有线程使用同一个地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完后再执行。
当一个线程要想执行,它必须先向主线程提出申请,在提出申请后,若有足够的内存空间,则主线程分配相应的内存空间给它,若内存空间不足,则主线程不分配内存空间给它,该道线程就挂起等待。在适当的时机,再提出申请。
在一道线程获得相应的内存空间执行时,要用图形的形式来表达该道线程获得的内存,在相应的内存单元处标明线程的ID号,表示该内存单元被分配给了该线程使用,不在允许其它的线程使用。
在线程运行结束后,必须归还它所占有的内存,以便在其它的线程提出申请时,可以顺利的获得内存而执行。