重庆大学操作系统实验Word文档下载推荐.docx

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

重庆大学操作系统实验Word文档下载推荐.docx

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

重庆大学操作系统实验Word文档下载推荐.docx

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

具体怎么设计?

要解释数据结构和函数

代码:

/*

*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;

//

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

当前位置:首页 > 法律文书 > 起诉状

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

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