好文档 - 专业文书写作范文服务资料分享网站

操作系统实验一

天下 分享 时间: 加入收藏 我要投稿 点赞

华 南 师 范 大 学 实 验 报 告

学生姓名 张俊发 学 号 20082101032 专 业 计算机科学与技术(师范) 年级班级 08本2班 课程名称 操作系统实验 实验项目 进程调度的设计与实现 实验类型 □验证 □设计 □综合 实验时间 2010年6月1日

实验指导老师 伊传勇 实验评分

int id;

srand(clock()); id=rand()0; while(pcbid[id]) {

i++;

id=rand()0; if(i>1000) {

MessageBox(NULL,\进程空间已满!\警告!\ return; } }

pcbid[id]=true; tmp->pid=id;

tmp ->priority = rand()P; tmp->next=NULL;

tmp->status=\

tmp ->life = rand()%5 +1;

InsertPcb(tmp); /*按照优先级从高到低,插入到就绪队列*/ }

//将进程PCB插入对应优先级的就绪队列尾部 void InsertLast(PCB *in) {

PCB *fst; int k;

k=in->priority; fst=ready[k];

if(ready[k]==NULL) {

in->next=ready[k]; ready[k]=in; } else {

while(fst->next!=NULL) {

6

华 南 师 范 大 学 实 验 报 告

学生姓名 张俊发 学 号 20082101032 专 业 计算机科学与技术(师范) 年级班级 08本2班 课程名称 操作系统实验 实验项目 进程调度的设计与实现 实验类型 □验证 □设计 □综合 实验时间 2010年6月1日

实验指导老师 伊传勇 实验评分

fst=fst->next; }

in->next = fst->next; fst->next = in; } }

//进程调度函数,(利用多线程编程,是线程函数) DWORD WINAPI MultiDispatch(LPVOID lpParameter) {

HWND hwnd=(HWND)lpParameter; int k = 49; PCB* run; while(IsRun) {

while(ready[k]==NULL && k>=0) k--;

run=ready[k];

while(run != NULL) {

run->status=\

::PostMessage(hwnd,WM_OUTDATA,0,0); Sleep(500); run->life--;

run->priority=run->priority/2; if(run->life == 0) {

ready[k]=run->next; pcbid[run->pid]=false; delete run; } else {

run->status=\ ready[k]=run->next; InsertLast(run); } k=49;

7

华 南 师 范 大 学 实 验 报 告

学生姓名 张俊发 学 号 20082101032 专 业 计算机科学与技术(师范) 年级班级 08本2班 课程名称 操作系统实验 实验项目 进程调度的设计与实现 实验类型 □验证 □设计 □综合 实验时间 2010年6月1日

实验指导老师 伊传勇 实验评分

while(ready[k]== NULL && k>=0) k--;

run=ready[k]; }

if(run==NULL) {

::PostMessage(hwnd,WM_OUTDATA,0,0); IsRun=false; } }

return 0; }

//进程信息输出函数

void CProcessDlg::Output(WPARAM wParam,LPARAM lParam) {

int k=49; PCB *p; CString str; m_edit1=_T(\ while(k>=0) {

if(ready[k] != NULL) {

p=ready[k]; while(p!=NULL) {

str.Format(\ m_edit1+=str+\ p = p->next; } } k--; }

UpdateData(FALSE); }

//控件响应函数,按键添加进程

8

华 南 师 范 大 学 实 验 报 告

学生姓名 张俊发 学 号 20082101032 专 业 计算机科学与技术(师范) 年级班级 08本2班 课程名称 操作系统实验 实验项目 进程调度的设计与实现 实验类型 □验证 □设计 □综合 实验时间 2010年6月1日

实验指导老师 伊传勇 实验评分

void CProcessDlg::OnAddprocess() {

// TODO: Add your control notification handler code here UpdateData(); int i=0;

int num=m_edit2; for(i=0;i

::PostMessage(m_hWnd,WM_OUTDATA,0,0); if(!IsRun) {

if(hThread!=NULL)

CloseHandle(hThread); IsRun=true;

hThread=CreateThread(NULL,0,MultiDispatch,(LPVOID)m_hWnd,0,NULL); //创建线程 } }

//键盘消息响应函数,按ctrl+f添加进程

BOOL CProcessDlg::PreTranslateMessage(MSG* pMsg) {

// TODO: Add your specialized code here and/or call the base class UINT nKeyCode =pMsg->wParam; if(pMsg->message==WM_KEYDOWN) {

if(nKeyCode==_T('F')&&(::GetKeyState(VK_CONTROL)&0x8000)) {

PcbCreate();

::PostMessage(m_hWnd,WM_OUTDATA,0,0); if(!IsRun) {

if(hThread!=NULL)

CloseHandle(hThread);//关闭线程 IsRun=true;

hThread=CreateThread(NULL,0,MultiDispatch,(LPVOID)m_hWnd,0,NULL);//创

9

华 南 师 范 大 学 实 验 报 告

学生姓名 张俊发 学 号 20082101032 专 业 计算机科学与技术(师范) 年级班级 08本2班 课程名称 操作系统实验 实验项目 进程调度的设计与实现 实验类型 □验证 □设计 □综合 实验时间 2010年6月1日

实验指导老师 伊传勇 实验评分

建线程

} } }

return CDialog::PreTranslateMessage(pMsg); }

//暂停进程调度

void CProcessDlg::OnButstop() {

// TODO: Add your control notification handler code here if(IsRun && hThread!=NULL)

SuspendThread(hThread);//挂起线程

GetDlgItem(IDC_BUTSTOP)->EnableWindow(FALSE);//禁用控件 GetDlgItem(IDC_BUTSTART)->EnableWindow(TRUE);//启用控件 }

//开始进程调度

void CProcessDlg::OnButstart() {

// TODO: Add your control notification handler code here if(IsRun && hThread!=NULL)

ResumeThread(hThread);//唤醒线程

GetDlgItem(IDC_BUTSTART)->EnableWindow(FALSE); GetDlgItem(IDC_BUTSTOP)->EnableWindow(TRUE); }

10

操作系统实验一

华南师范大学实验报告学生姓名张俊发学号20082101032专业计算机科学与技术(师范)年级班级08本2班课程名称操作系统实验实验项目进程调度的设计与
推荐度:
点击下载文档文档为doc格式
9bgmm23kp07916095eiv3gyk618jli007x2
领取福利

微信扫码领取福利

微信扫码分享