操作系统课程设计Word文档格式.docx

上传人:b****6 文档编号:16620421 上传时间:2022-11-24 格式:DOCX 页数:35 大小:184.77KB
下载 相关 举报
操作系统课程设计Word文档格式.docx_第1页
第1页 / 共35页
操作系统课程设计Word文档格式.docx_第2页
第2页 / 共35页
操作系统课程设计Word文档格式.docx_第3页
第3页 / 共35页
操作系统课程设计Word文档格式.docx_第4页
第4页 / 共35页
操作系统课程设计Word文档格式.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

操作系统课程设计Word文档格式.docx

《操作系统课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计Word文档格式.docx(35页珍藏版)》请在冰豆网上搜索。

操作系统课程设计Word文档格式.docx

WPARAMwParam,

LPARAMlParam

{

HDChdc;

staticPCSTRoutPut="

"

;

PAINTSTRUCTps;

switch(uMsg)

{

caseWM_PAINT:

hdc=BeginPaint(hwnd,&

ps);

TextOut(hdc,0,0,"

这是一个win32程序"

strlen("

));

EndPaint(hwnd,&

break;

caseWM_LBUTTONDOWN:

MessageBox(hwnd,"

mouse"

"

张晓磊"

MB_OK);

hdc=GetDC(hwnd);

TextOut(hdc,0,40,"

您单击了鼠标"

ReleaseDC(hwnd,hdc);

break;

caseWM_COMMAND:

switch(LOWORD(wParam))

{

caseFILE_MENU1:

hdc=GetDC(hwnd);

outPut=fun1(hInst);

//从dll文件里获得字符串

TextOut(hdc,0,80,outPut,strlen(outPut));

TextOut(hdc,0,60,"

点击了menu1"

caseFILE_MENU2:

hdc=GetDC(hwnd);

outPut=fun2(hInst);

TextOut(hdc,0,100,outPut,strlen(outPut));

TextOut(hdc,0,120,"

点击了menu2"

caseHELP_ABOUT:

MessageBox(hwnd,"

这是一个win32测试程序"

帮助"

break;

caseFILE_EXIT:

if(IDYES==MessageBox(hwnd,"

是否真的要退出?

"

!

MB_YESNO))

DestroyWindow(hwnd);

}

caseWM_CLOSE:

if(IDYES==MessageBox(hwnd,"

caseWM_DESTROY:

PostQuitMessage(0);

default:

returnDefWindowProc(hwnd,uMsg,wParam,lParam);

}

return0;

}

2、intWINAPIDllMain(HINSTANCEhinstance,DWORDfdwreason,PVOIDpvreserved)

switch(fdwreason)

caseDLL_PROCESS_ATTACH:

caseDLL_THREAD_ATTACH:

caseDLL_PROCESS_DETACH:

caseDLL_THREAD_DETACH:

returnTRUE;

EXPORTPCSTRfun1(HINSTANCEhinstance)

PCSTRptr="

从fun1中得到dll.位置:

strcpy(lpszname,ptr);

intsize=101-strlen(ptr);

char*temp=&

lpszname[strlen(ptr)];

GetModuleFileName(hinstance,temp,size);

infor=lpszname;

returninfor;

EXPORTPCSTRfun2(HINSTANCEhinstance)

{PCSTRptr="

从fun2中得到dll.位置:

设计2读者写着问题

1、熟悉用信号量机制,实现读者优先与写者优先。

理解写者优先、读者优先算法

在Windows2000环境下,创建一个控制台进程,此进程包含n个线程。

用这n个线程来表示n个读者或写者。

每个线程按相应测试数据文件的要求进行读写操作。

用信号量机制分别实现读者优先和写者优先的读者-写者问题。

1、读者优先-读者线程的流程图:

2、读者优先-写者线程的流程图

3、写者优先-读者线程:

4、写者优先—写者线程:

 

1、建立文件thread.dat,在文件中写入:

1R35

2W45

3R52

4R65

5W5.13

2、程序运行的之后出现一个选择菜单(1:

ReaderPriority2:

WriterPriority3:

ExittoWindows)。

选择读者优先,结果:

选择写者优先,结果:

1、学会了互斥对象和临界区对象的使用方法。

2、当一个线程进入临界区后,其它线程若想进入必须等待。

读者优先:

除非有写者在写文件,否则读者不需要等待。

写者优先:

与读者优先类似。

不同之处在于一旦一个写者到来,它应该尽快对文件进行写操作,如果有一个写者在等待,则新到来的读者不允许进行读操作。

1、//读者优先发展——读者线程

//P:

读者线程信息

voidRP_ReaderThread(void*p)

//互斥变量

HANDLEh_Mutex;

h_Mutex=OpenMutex(MUTEX_ALL_ACCESS,false,"

metux_for_readcount"

);

DWORDwait_for_mutex;

//等待互斥变量所有权

DWORDm_delay;

//延迟时间

DWORDm_persist;

//读文件持续时间

intm_serial;

//线程序号

//从参数中获得信息

m_serial=((ThreadInfo*)(p))->

serial;

m_delay=(DWORD)(((ThreadInfo*)(p))->

delay*INTE_PER_SEC);

m_persist=(DWORD)(((ThreadInfo*)(p))->

persist*INTE_PER_SEC);

Sleep(m_delay);

//延迟等待

printf("

Readerthread%dsentsthereadingrequire.\n"

m_serial);

//等待互斥信号,保证对readcount的访问,修改和互斥

wait_for_mutex=WaitForSingleObject(h_Mutex,-1);

//读者数目增多

readcount++;

if(readcount==1)

//第一个读者,等待资源

EnterCriticalSection(&

RP_Write);

ReleaseMutex(h_Mutex);

//释放互斥信号

//读文件

Readerthread%dbeginstoreadfile.\n"

Sleep(m_persist);

//退出进程

Readerthread%dfinishedreadingfile.\n"

//等待互斥信号,保证对readcount的访问,修改和互斥

//读者数目减少

readcount--;

if(readcount==0)

//如果所有读者读完,唤醒写者

LeaveCriticalSection(&

//释放互斥信号

//读者优先--写者线程

//p:

写者线程信息

voidRP_WriterThread(void*p)

//写文件持续时间

Writerthread%dsentsthewritingrequire.\n"

//等待资源

EnterCriticalSection(&

//写文件

Writerthread%dbeginstowritetothefile.\n"

Writerthread%dfinishedwritingtothefile.\n"

//释放资源

LeaveCriticalSection(&

2、//写者优先--读者线程

voidWP_ReaderThread(void*p)

//互斥变量

HANDLEh_Mutex1;

h_Mutex1=OpenMutex(MUTEX_ALL_ACCESS,false,"

metux1"

HANDLEh_Mutex2;

h_Mutex2=OpenMutex(MUTEX_ALL_ACCESS,false,"

metux2"

DWORDwait_for_mutex1;

//等待互斥变量所有权

DWORDwait_for_mutex2;

//延迟时间

//读文件持续时间

//线程序号

//延迟等待

wait_for_mutex1=WaitForSingleObject(h_Mutex1,-1);

//进入读者临界区

cs_read);

//阻塞互斥对象mutex2,保证对mutex1的访问、修改互斥

wait_for_mutex2=WaitForSingleObject(h_Mutex2,-1);

//修改读者数目

//如果是第一个读者,等待写者写完

cs_Write);

ReleaseMutex(h_Mutex2);

//释放互斥信号Mutex2

//让其他读者进入临界区

ReleaseMutex(h_Mutex1);

//读文件

//阻塞互斥对象mutex2,保证对readcount的访问,修改和互斥

//最后一个读者,唤醒写者

//写者优先--写者线程

voidWP_WriterThread(void*p)

//写文件持续时间

DWORDwait_for_mutex3;

//互斥对象

HANDLEh_Mutex3;

h_Mutex3=OpenMutex(MUTEX_ALL_ACCESS,false,"

metux3"

//阻塞互斥对象mutex3,保证对writecount的访问,修改和互斥

wait_for_mutex3=WaitForSingleObject(h_Mutex3,-1);

writecount++;

if(writecount==1)

//第一个写者,等待读者读完

ReleaseMutex(h_Mutex3);

//释放互斥信号Mutex3

//进入写者临界区

//离开临界区

writecount--;

if(writecount==0)

//写者写完,读者可以读

设计3内存管理

1、从不同侧面了解Windows2000/xp对用户进程的虚拟内存空间的管理、分配方法。

同时需要了解跟踪程序的编写方法。

2、对Windows分配虚拟内存、改变内存状态,以及对物理内存和页面文件状态查询的API函数的功能、参数限制、使用规则要进一步了解。

使用Windows2000/xp的API函数,编写一个包含连个线程的进程,一个线程用于模拟内存分配活动,一个线程用于跟踪第一个线程的内存行为,而且要求两个线程之间通过信号量实现同步。

模拟内存活动的线程可以从一个文件中读出妖精性的内存操作,每个内存操作包括如下内容:

1、时间:

操作等待时间。

2、块数:

分配内存的粒度。

3、操作:

包括保留一个区域和加锁与解锁一个区域,可以将这些操作编写存放于文件。

4、大小:

块的大小。

5、访问权限:

可以将权限编号存放于文件中跟踪县城将页面大小、已使用的地址范围、以及内存总量等新型显示出来。

1、先编译memory1.cpp生成memory.exe,运行memory1.exe程序,生成openfile文件。

将penfile文件拷贝到memory2.cpp的目录中,编译并运行,可以出现如下结果:

1、通过内存分配活动模拟和跟踪的编程实现,从不同侧面了解Windows2000/XP对用户进程虚拟内存的管理,分配方法。

也使自己对课本上所讲的内存管理的知识有了更时刻的理解与认识,从试验结果中更直观的体会到内存的分配方法。

2、对页面文件状态查询的API函数的功能、参数限制、使用规则有了更多地了解。

3、通过本次实验了解了Windows操作系统对虚拟内存的管理与分配方法。

1、//生成openfile文件

#include<

fstream.h>

stdio.h>

stdlib.h>

time.h>

structoperation

inttime;

//起始时间

intblock;

//内存页数

intoper;

//操作

intprotection;

//权限

};

intmain()

FILE*file;

file=fopen("

opfile"

wb"

//"

为二进制用以确定内存操作

operationop;

for(intj=0;

j<

6;

j++)//0-保留;

1-提交;

2-锁;

3-解锁;

4-回收;

5-释放

for(inti=0;

i<

5;

i++)

//0-PAGE_READONLY;

//1-PAGE_READWRITE;

//2-PAGE_EXECUTE;

//3-PAGE_EXECUTE_READ;

//4-PAGE_EXECUTE_READWRITE;

op.time=rand()%1000;

//随即生成等待时间

op.block=rand()%5+1;

//随即生成块大小

op.oper=j;

op.protection=i;

fwrite(&

op,sizeof(operation),1,file);

//将生成的结构写入文件

return0;

2、#include<

windows.h>

iostream.h>

structtrace//跟踪每一次分配活动的数据结构

LPVOIDstart;

//起始地址

longsize;

//分配的大小

HANDLEallo,trac;

//信号量句柄

DWOR

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

当前位置:首页 > 高等教育 > 其它

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

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