重庆大学操作系统实验.docx

上传人:b****3 文档编号:5265446 上传时间:2022-12-14 格式:DOCX 页数:25 大小:55.10KB
下载 相关 举报
重庆大学操作系统实验.docx_第1页
第1页 / 共25页
重庆大学操作系统实验.docx_第2页
第2页 / 共25页
重庆大学操作系统实验.docx_第3页
第3页 / 共25页
重庆大学操作系统实验.docx_第4页
第4页 / 共25页
重庆大学操作系统实验.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

重庆大学操作系统实验.docx

《重庆大学操作系统实验.docx》由会员分享,可在线阅读,更多相关《重庆大学操作系统实验.docx(25页珍藏版)》请在冰豆网上搜索。

重庆大学操作系统实验.docx

重庆大学操作系统实验

《操作系统原理》实验报告

年级、专业、班级

2016级软件工程6班

姓名

王诗琦

实验题目

实验2表的基本操作

实验时间

2018.3.22

实验地点

DS1502

实验成绩

实验性质

√验证性□设计性□综合性

教师评价:

□算法/实验过程正确;□源程序/实验内容提交□程序结构/实验步骤合理;

□实验结果正确;□语法、语义正确;□报告规范;

其他:

评价教师签名:

为什么这样设计?

要实现排序过程,就要有排序算法,有画图工具,有三个线程

具体怎么设计?

要解释数据结构和函数

代码:

/*

*vim:

filetype=c:

fenc=utf-8:

ts=4:

et:

sw=4:

sts=4

*/

#include

#include

#include

#include

#include

#include

#include

#include

#include"graphics.h"

#include

externvoid*tlsf_create_with_pool(void*mem,size_tbytes);

externvoid*g_heap;

/**

*GCCinsistson__main

*http:

//gcc.gnu.org/onlinedocs/gccint/Collect2.html

*/

//进入图形模式

//init_graphic(0x143);

void__main()

{

size_theap_size=32*1024*1024;

void*heap_base=mmap(NULL,heap_size,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0);

g_heap=tlsf_create_with_pool(heap_base,heap_size);

}

 

voidswap(intA[],inti,intj){

inttemp;

temp=A[i];

A[i]=A[j];

A[j]=temp;

}

 

/*创建线程退出线程获取线程自己的ID等待线程退出

inttask_create(void*tos,void(*func)(void*pv),void*pv);

inttask_exit(intcode_exit);

inttask_getid();

inttask_wait(inttid,int*pcode_exit);

*/

//划线函数

voiddraw1(inty,intx1,intx2)

{

line(x1,y,x2,y,RGB(87,166,163));

}

voiddraw2(inty,intx1,intx2)

{

line(x1,y,x2,y,RGB(221,237,252));

}

voiddraw3(inty,intx1,intx2)

{

line(x1,y,x2,y,RGB(215,171,196));

}

voiddraw4(inty,intx1,intx2)

{

line(x1,y,x2,y,RGB(184,98,127));

}

//清除划线函数

voidclean(inty,intx1,intx2)

{

line(x1,y,x2,y,RGB(0,0,0));

}

intmsleep(constuint32_tmsec)

{

structtimespects={0,1000000*msec};

returnnanosleep(&ts,NULL);

}

/*排序算法*/

//Insertionsortimplementation插入排序

voidinssort(intA[],intn,intl){//InsertionSort

inti;

intj;

intt=5;

for(i=0;i

//clean(i*t,l,l+A[i]);//清除在线程当中画的线

//Inserti'threcord

for(j=i;(j>0)&&(A[j]

{

clean(j*t,l,l+A[j]);//交换完成之后划线

clean(j*t-t,l,l+A[j-1]);//交换完成之后划线

msleep(100);//减慢过程

//draw(j*t,l,l+A[j-1]);//交换过程划线

swap(A,j,j-1);

draw1(j*t,l,l+A[j]);//交换完成之后划线

draw1(j*t-t,l,l+A[j-1]);//交换完成之后划线

}

}

}

//选择排序

voidselsort(intA[],intn,intl){

//SelectionSort

inti;

intj;

intt=5;

for(i=0;i

//Selecti’threcord

intlowindex=i;//Rememberitsindex

for(j=n-1;j>i;j--)

{//Findtheleastvalue

if(A[j]

lowindex=j;

}

clean(i*t,l,l+A[i]);

clean(lowindex*t,l,l+A[lowindex]);

//Putitinplace

swap(A,i,lowindex);

msleep(900);

draw2(i*t,l,l+A[i]);

draw2(lowindex*t,l,l+A[lowindex]);

}

}

//冒泡排序

voidbubsort(intA[],intn,intl){

//BubbleSort

inti;

intj;

intt=5;

for(i=0;i

for(j=0;j

if(A[j+1]

{

clean(j*t,l,l+A[j]);

clean(j*t+t,l,l+A[j+1]);

swap(A,j,j+1);

msleep(10);

draw3(j*t,l,l+A[j]);

draw3(j*t+t,l,l+A[j+1]);

}

 

}

}

}

 

/*创建线程函数*/

voidtsk_inssort(void*pv)

{

printf("Thisistaskinssortwithtid=%d\r\n",task_getid());

srand(time(NULL));

//intx,y;

inti,m;

intarray[100];

//进入图形模式

//init_graphic(0x143);

/*x=g_graphic_dev.XResolution;

y=g_graphic_dev.YResolution;*/

//生成随机数

for(i=0;i<100;i++)

{

m=rand()%100+1;

if(m<0)

m=0-m;

draw4(i*5,0,0+m);//画出随机线条的长度

array[i]=m;

}

inssort(array,100,0);

//intexit_graphic();//退出图形模式

task_exit(0);//不能直接return,必须调用task_exit

}

 

/*创建线程函数*/

voidtsk_selsort(void*pv)

{

printf("Thisistaskselsortwithtid=%d\r\n",task_getid());

srand(time(NULL));

intx;

inti,m;

intarray[100];

//进入图形模式

//init_graphic(0x143);

x=g_graphic_dev.XResolution;

//y=g_graphic_dev.YResolution;

 

//生成随机数

for(i=0;i<100;i++)

{

m=rand()%100+1;

if(m<0)

m=0-m;

draw1(i*5,x/3,x/3+m);

array[i]=m;

}

selsort(array,100,x/3);

//intexit_graphic();//退出图形模式

task_exit(0);//不能直接return,必须调用task_exit

}

 

/*创建线程函数*/

voidtsk_bubsort(void*pv)

{

printf("Thisistaskbubsortwithtid=%d\r\n",task_getid());

srand(time(NULL));

intx;

inti,m;

intarray[100];

//进入图形模式

//init_graphic(0x143);

x=g_graphic_dev.XResolution;

//生成随机数

for(i=0;i<100;i++)

{

m=rand()%100+1;

if(m<0)

m=0-m;

draw2(i*5,(2*x/3),(2*x/3)+m);

array[i]=m;

}

bubsort(array,100,(2*x/3));

//intexit_graphic();//退出图形模式

task_exit(0);//不能直接return,必须调用task_exit

}

 

/**

*第一个运行在用户模式的线程所执行的函数

*/

voidmain(void*pv)

{

printf("task#%d:

I'mthefirstusertask(pv=0x%08x)!

\r\n",

task_getid(),pv);

//进入图形模式

init_graphic(0x143);

//TODO:

Yourcodegoeshere

unsignedchar*stack_inssort=(unsignedchar*)malloc(1024*1024);

//unsignedintstack_size=1024*1024;

unsignedchar*stack_selsort=(unsignedchar*)malloc(1024*1024);

//unsignedintstack_size=1024*1024;

unsignedchar*stack_bubsort=(unsignedchar*)malloc(1024*1024);

//unsignedintstack_size=1024*1024;

inttid_inssort,tid_selsort,tid_bubsort;

tid_inssort=task_create(stack_inssort+1024*1024,tsk_inssort,(void*)0);

tid_selsort=task_create(stack_selsort+1024*1024,tsk_selsort,(void*)0);

tid_bubsort=task_create(stack_bubsort+1024*1024,tsk_bubsort,(void*)0);

 

task_wait(tid_inssort,0);

free(stack_inssort);

task_wait(tid_selsort,0);

free(stack_selsort);

task_wait(tid_bubsort,0);

free(stack_bubsort);

intexit_graphic();//退出图形模式

time_tt=0;

t=time(NULL);

printf("%ld",t);

while

(1);

task_exit(0);

}

最后结果:

 

#include

#include

#include

#include

#include

#include

#include

#include

#include"graphics.h"

#include

 

externvoid*tlsf_create_with_pool(void*mem,size_tbytes);

externvoid*g_heap;

/**

*GCCinsistson__main

*http:

//gcc.gnu.org/onlinedocs/gccint/Collect2.html

*/

//进入图形模式

//init_graphic(0x143);

void__main()

{

size_theap_size=32*1024*1024;

void*heap_base=mmap(NULL,heap_size,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0);

g_heap=tlsf_create_with_pool(heap_base,heap_size);

}

 

voidswap(intA[],inti,intj){

inttemp;

temp=A[i];

A[i]=A[j];

A[j]=temp;

}

 

/*创建线程退出线程获取线程自己的ID等待线程退出

inttask_create(void*tos,void(*func)(void*pv),void*pv);

inttask_exit(intcode_exit);

inttask_getid();

inttask_wait(inttid,int*pcode_exit);

*/

//划线函数

voiddraw1(inty,intx1,intx2)

{

line(x1,y,x2,y,RGB(87,166,163));

}

voiddraw2(inty,intx1,intx2)

{

line(x1,y,x2,y,RGB(221,237,252));

}

voiddraw3(inty,intx1,intx2)

{

line(x1,y,x2,y,RGB(215,171,196));

}

voiddraw4(inty,intx1,intx2)

{

line(x1,y,x2,y,RGB(184,98,127));

}

voiddraw5(intx,inty1,inty2)

{

line(x,y1,x,y2,RGB(215,171,196));

}

voiddraw6(intx,inty1,inty2)

{

line(x,y1,x,y2,RGB(184,98,127));

}

//清除划线函数

voidclean(inty,intx1,intx2)

{

line(x1,y,x2,y,RGB(0,0,0));

}

intmsleep(constuint32_tmsec)

{

structtimespects={0,1000000*msec};

returnnanosleep(&ts,NULL);

}

/*排序算法*/

 

/*

//Insertionsortimplementation插入排序

voidinssort(intA[],intn,intl){//InsertionSort

inti;

intj;

intt=5;

for(i=0;i

//clean(i*t,l,l+A[i]);//清除在线程当中画的线

//Inserti'threcord

for(j=i;(j>0)&&(A[j]

{

clean(j*t,l,l+A[j]);//交换完成之后划线

clean(j*t-t,l,l+A[j-1]);//交换完成之后划线

msleep(100);//减慢过程

//draw(j*t,l,l+A[j-1]);//交换过程划线

swap(A,j,j-1);

draw1(j*t,l,l+A[j]);//交换完成之后划线

draw1(j*t-t,l,l+A[j-1]);//交换完成之后划线

}

}

}

//选择排序

voidselsort(intA[],intn,intl){

//SelectionSort

inti;

intj;

intt=5;

for(i=0;i

//Selecti’threcord

intlowindex=i;//Rememberitsindex

for(j=n-1;j>i;j--)

{//Findtheleastvalue

if(A[j]

lowindex=j;

}

clean(i*t,l,l+A[i]);

clean(lowindex*t,l,l+A[lowindex]);

//Putitinplace

swap(A,i,lowindex);

msleep(900);

draw2(i*t,l,l+A[i]);

draw2(lowindex*t,l,l+A[lowindex]);

}

}

*/

 

//冒泡排序

voidbubsort(intA[],intn,intl){

//BubbleSort

inti;

intj;

intt=5;

for(i=0;i

for(j=0;j

if(A[j+1]

{

clean(j*t,l,l+A[j]);

clean(j*t+t,l,l+A[j+1]);

swap(A,j,j+1);

msleep(10);

draw3(j*t,l,l+A[j]);

draw3(j*t+t,l,l+A[j+1]);

}

 

}

}

}

 

/*创建线程函数*/

/*

voidtsk_inssort(void*pv)

{

printf("Thisistaskinssortwithtid=%d\r\n",task_getid());

srand(time(NULL));

//intx,y;

inti,m;

intarray[100];

//进入图形模式

//init_graphic(0x143);

//x=g_graphic_dev.XResolution;

//y=g_graphic_dev.YResolution;

//生成随机数

for(i=0;i<100;i++)

{

m=rand()%100+1;

if(m<0)

m=0-m;

draw4(i*5,0,0+m);//画出随机线条的长度

array[i]=m;

}

inssort(array,100,0);

//intexit_graphic();//退出图形模式

task_exit(0);//不能直接return,必须调用task_exit

}

 

voidtsk_selsort(void*pv)

{

printf("Thisistaskselsortwithtid=%d\r\n",task_getid());

srand(time(NULL));

intx;

inti,m;

intarray[100];

//进入图形模式

//init_graphic(0x143);

x=g_graphic_dev.XResolution;

//y=g_graphic_dev.YResolution;

 

//生成随机数

for(i=0;i<100;i++)

{

m=rand()%100+1;

if(m<0)

m=0-m;

draw1(i*5,x/3,x/3+m);

array[i]=m;

}

selsort(array,100,x/3);

//intexit_graphic();//退出图形模式

task_exit(0);//不能直接return,必须调用task_exit

}

*/

/*创建线程函数*/

voidtsk_bubsort(void*pv)

{

printf("Thisistaskbubsortwithtid=%d\r\n",task_getid());

srand(time(NULL));

//intx;

inti,m;

intarray[100];

//进入图形模式

//init_graphic(0x143);

//

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1