当前位置:首页 > 嵌入式课程设计报告(范例-含排版要求)
嵌入式课程设计报告(范例-含排版要求)
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
共分享92篇相关文档