“计算机操作系统”课程设计大作业。
实验报告。年级:09年秋专业 : 计算机科学与技术姓名:陈德富学号:200915553013004
一、目的要求
用高级语言编写和调试一个内存连续分配模拟程序,以加深对进程的概念及进程调度算法的理解.
二、相关内容
内存连续分配动态分区分配流程图。
三、实验要求:
设计程序模拟内存动态分区分配流程,要求如下
1、 实现三项功能:分配内存、**内存、显示内存使用情况
2、 内存分配表建议使用顺序表或者单链表实现,逻辑结构如下图(a)
3、 分区分配算法建议使用最佳分配算法
4、假设内存大小为1024k,起始地址为0,都可以被用户程序使用,size数值设为2k
参考程序:#include""
#include""
#include""
#definesize_min2
#definememsize_max1024
#definefalse0
#definetrue!false
typedefintbool;
typedefstruct_mem_link
char cname; /作业名*/
int istartaddr; /分区起始地址*/
int imemsize; /分区大小*/
bool istate; /分区状态,1表示已分配,0表示未分配*/
struct_mem_link*next;
mem_link,*pmem_link;
pmem_linkg_pslnkhead;
*初始化内存使用情况*/
voidinit()
g_pslnkhead=(pmem_link)malloc(sizeof(mem_link));
memset(g_pslnkhead,0,sizeof(mem_link));
g_pslnkhead->imemsize=memsize_max;
intmenu()
inti;
printf("1.分配内存");
printf("2.**内存");
printf("3.显示内存使用情况");
printf("4.退出");
printf("请输入选择:")
scanf("%d",&i);
getchar();
return(i);
*分配内存函数,c为作业名,usize是要分配的大小*/
intmy_malloc(charc,intusize)
pmem_linkpsnewmem=null,
plnktmp=null;
bool brepeatname=false;
intitmp=g_pslnkhead->imemsize-usize*size_min;
if(itmp<=0)/*如果没有足够的空间分配*/
returnfalse;
plnktmp =g_pslnkhead;
while(plnktmp!=null)
if(plnktmp->cname==c)
brepeatname=true;
break;
plnktmp=plnktmp->next;
if(brepeatname)/*如果作业名重复*/
returnfalse;
*创建新的节点*/
psnewmem=(pmem_link)malloc(sizeof(mem_link));
*结构体设零*/
memset(psnewmem,0,sizeof(mem_link));
*设置节点内容*/
psnewmem->cname =c;
psnewmem->imemsize =usize*size_min;
psnewmem->istartaddr=memsize_max-g_pslnkhead->imemsize;
psnewmem->istate =true;
plnktmp =g_pslnkhead;
*查找链表最尾节点*/
while(plnktmp->next!=null)plnktmp=plnktmp->next;
*把新创建的节点加入到链表中*/
plnktmp->next =psnewmem;
*在整体内存中去掉以分配的部分*/
g_pslnkhead->imemsize-=usize*size_min;
returntrue;
***内存函数,c是撤销的进程的作业名;*/
intmy_free(charc)
pmem_linkplnkbk=g_pslnkhead, /保留上次搜索的节点*/
plnktmp=g_pslnkhead->next;
bool bfind=false;
int ifreesize=0;
*搜索链表*/
while(plnktmp!=null)
if(plnktmp->cname==c)
*如果找到节点,退出循环*/
bfind=true;
break;
plnkbk=plnktmp;
plnktmp=plnktmp->next;
if(bfind)
*把找到的节点从链表中摘除并释放*/
g_pslnkhead->imemsize+=plnktmp->imemsize;
plnkbk->next=plnktmp->next;
*保留要释放内存的大小*/
ifreesize=plnktmp->imemsize;
*释放*/
free(plnktmp);
*把未释放内存的开始地址提前,防止内存碎片*/
plnktmp=plnkbk->next;
while(plnktmp!=null)
plnktmp->istartaddr-=ifreesize;
plnktmp=plnktmp->next;
returnbfind;
voiddisp()
pmem_linkptmp;
inti=0;
ptmp=g_pslnkhead;
printf("分区号作业名起始地址分区大小状态");
while(ptmp)
printf("%4d%c%4d%4d%4d",
i,ptmp->cname,ptmp->istartaddr,ptmp->imemsize,ptmp->istate);
ptmp=ptmp->next; i++;
voidmain()
inti;
charc;
init();
i=menu();
while(i!=4)
if(i==1)
printf("作业名(一个字符):"
scanf("%c",&c);
printf("作业占内存大小:")
scanf("%d",&i);
if(my_malloc(c,i))printf("分配成功!!!
elseprintf("分配失败!!!
elseif(i==2)
printf("输入要**分区的作业名(一个字符):"
scanf("%c",&c);
if(my_free)printf("**成功!!!
elseprintf("**失败!!!
elseif(i==3)disp();
i=menu();
计算机操作系统作业
一 选择题。1 响应比高者优先作业调度算法是以计算时间和 d 来考虑的。a 输入时间 b 完成时间 c 周转时间 d 等待时间。2 最适合于分时系统的进程调度算法是 d a 先来先服务 fcfs b 最短作业优先 ssjf c 优先数法d 轮转法 rr 3 在优先级调度中,c 类进程可能被 饿死 即...
计算机操作系统复习
4次平时书面作业请好好看看,此外重点看一下知识点 1 批处理操作系统的目的。2 各种作业调度算法的特点。3 作业调度的关键。4 作业的响应比如何计算?5 进程和程序的本质区别。6 进程的三个基本状态间转换。7 pv操作概念。8 进程调度。9 信号量。10 进程和线程。11 系统的安全状态的概念。12...
计算机操作系统复习
综合大题 9分 3个。1 请求分页系统中有哪些算法?分页,分段的区别?答 a。最佳置换算法。b.先进先出算法。c。最近最久未使用 lru 置换算法。d。clock置换算法。分页和分段存储管理有何区别?p138 答 主要表现在 1 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高...