重庆大学操作系统实验Word文档下载推荐.docx
- 文档编号:18245610
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:25
- 大小:55.10KB
重庆大学操作系统实验Word文档下载推荐.docx
《重庆大学操作系统实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《重庆大学操作系统实验Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
要实现排序过程,就要有排序算法,有画图工具,有三个线程
具体怎么设计?
要解释数据结构和函数
代码:
/*
*vim:
filetype=c:
fenc=utf-8:
ts=4:
et:
sw=4:
sts=4
*/
#include<
inttypes.h>
stddef.h>
math.h>
stdio.h>
sys/mman.h>
syscall.h>
netinet/in.h>
stdlib.h>
#include"
graphics.h"
time.h>
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<
n;
i++){
//clean(i*t,l,l+A[i]);
//清除在线程当中画的线
//Inserti'
threcord
for(j=i;
(j>
0)&
&
(A[j]<
A[j-1]);
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
n-1;
i++){
//Selecti’threcord
intlowindex=i;
//Rememberitsindex
for(j=n-1;
j>
i;
{//Findtheleastvalue
if(A[j]<
A[lowindex])
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
i++){//Bubbleupi’threcord
for(j=0;
j<
n-1-i;
j++){
if(A[j+1]<
A[j])
{
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;
//生成随机数
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)
Thisistaskselsortwithtid=%d\r\n"
intx;
x=g_graphic_dev.XResolution;
//y=g_graphic_dev.YResolution;
draw1(i*5,x/3,x/3+m);
selsort(array,100,x/3);
//intexit_graphic();
voidtsk_bubsort(void*pv)
Thisistaskbubsortwithtid=%d\r\n"
draw2(i*5,(2*x/3),(2*x/3)+m);
bubsort(array,100,(2*x/3));
*第一个运行在用户模式的线程所执行的函数
voidmain(void*pv)
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);
unsignedchar*stack_bubsort=(unsignedchar*)malloc(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);
%ld"
t);
while
(1);
最后结果:
voiddraw4(inty,intx1,intx2)
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));
//x=g_graphic_dev.XResolution;
//intx;
//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 重庆大学 操作系统 实验