计算机操作系统大作业

发布 2022-10-21 15:27:28 阅读 2617

“计算机操作系统”课程设计大作业。

实验报告。年级: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 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高...