嵌入式课程设计报告(范例-含排版要求) 下载本文

嵌入式课程设计报告(范例-含排版要求)

void acceptment2(RECT *head,RECT *back1) ; int backcheck(RECT *head,RECT *back1); void print(RECT *head);

2./*变量声明*/

RECT *head,*back,*assign1,*p; int application1,maxblocknum; char way;

3..实现内存分配功能,选择适应算法(首次适应算法,最佳适应算法)。 基本原理分析:

1)最佳适应算法:将空闲分区按大小从大到小排序,从头找到大小合适的分区。

它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按大小从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。主要函数算法如下:

void acceptment2(RECT *head,RECT *back1) {

RECT *before,*after; int insert ; insert=0; before=head; after=head->next;

if(head->next==NULL) /*如果可利用区表为空*/ {

head->size=back1->size; head->next=back1; maxblocknum++; back1->next=NULL; }

8 / 25

嵌入式课程设计报告(范例-含排版要求)

2)首次适应算法:将空闲分区按大小从小到大排序,从头找到大小合适的分区。

从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。主要函数算法如下: void acceptment1(RECT *head,RECT *back1)/*首先适应*/ {

RECT *before,*after; int insert; before=head; after=head->next; insert=0;

while(!insert) /*将回收区插入空闲区表*/ {

if((after==NULL)||

((back1->address<=after->address)&& (back1->address>=before->address)))

{

before->next=back1; back1->next=after; insert=1;

} else {

before=before->next; after=after->next;

} }

4. typedef struct node /*设置分区描述器*/

9 / 25

嵌入式课程设计报告(范例-含排版要求)

5. RECT *assignment(RECT *head,int application) /*分配函数*/

6. void print(RECT *head) /*输出链表*/

7. int backcheck(RECT *head,RECT *back1) /*检查回收块的合法性,back1为要回收的结点地址*/

8. void print(RECT *head) /*输出链表*/

9. void acceptment2(RECT *head,RECT *back1) /*最佳适应,back1为回收结点的地址*/

10. void acceptment1(RECT *head,RECT *back1)/*首先适应*/

内存作为最重要的系统资源,其分配和释放策略对系统的运行效率起着至关重要的作用。系统内核和所有进程通过共享有限的物理内存来运行,一个系统的高效性与稳定性往往取决于它内存管理机制。因此,一个高效的内存管理系统不仅要能够有效地管理系统内存,减少频繁分配和回收内存而导致的内存碎片,还要尽量提高分配和回收的速度来提高系统的运行效率。此外,内存管理系统还应该保证内存分配和回收的公平性。

10 / 25

嵌入式课程设计报告(范例-含排版要求)

4、系统实现

4.1、总体界面与程序流程分析

在内存初始化完成以后,内存中就常驻有内核映象(内核代码和数据)。以后,随着用户程序的执行和结束,就需要不断地分配和释放物理页面。内核应该为分配一组连续的页面而建立一种稳定、高效的分配策略。为此,必须解决一个比较重要的内存管理问题,即外碎片问题。频繁地请求和释放不同大小的一组连续页面,必然导致在已分配的内存块中分散许多小块的空闲页面。由此带来的问题是,即使这些小块的空闲页面加起来足以满足所请求的页面,但是要分配一个大块的连续页面可能就根本无法满足。Linux采用著名的伙伴(Buddy)系统算法来解决外碎片问题。

但是请注意,在Linux中,CPU不能按物理地址来访问存储空间,而必须使用虚拟地址;因此,对于内存页面的管理,通常是先在虚存空间中分配一个虚存区间,然后才根据需要为此区间分配相应的物理页面并建立起映射,也就是说,虚存区间的分配在前,而物理页面的分配在后,

1、操作流程分析

由于本系统采用动态方式,所以首先确定内存空间分配表;然后采用最佳适应算法或首先适应算法完成主存空间的分配,完成内存空间的回收。内存管理预先不将主存划分成几个

11 / 25