




免费预览已结束,剩余7页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告2012 2013 学年第 一 学期课程操作系统原理实验名称设计一个按优先数调度算法实现处理器调度的进程小组成员阮广杰、陈智磊、高天翔、董云鹏专业班级10级计本三班指导教师屠 菁2012 年 11 月29号操作系统实验报告实验目的:在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪状态进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下处理器调度,设计一个按优先数调度算法实现处理器调度的进程,通过运行程序,能够清楚的表述优先数调度的过程,进一步掌握优先数调度算法的实现。实验内容:设计一个按优先数调度算法实现处理器调度的进程。实验步骤:概要设计:(1)假定系统有5个进程,每个进程用一个PCB来代表。PCB的格式为:进程名、指针、要求运行时间、优先数、状态。进程名P1P5。指针按优先数的大小把5个进程连成队列,用指针指出下一个进程PCB的首地址。要求运行时间假设进程需要运行的单位时间数。优先数赋予进程的优先数,调度时总是选取优先数大的进程先执行。状态假设两种状态,就绪,用R表示,和结束,用E表示。初始状态都为就绪状态。(2) 每次运行之前,为每个进程任意确定它的“优先数”和“要求运行时间”。(3) 处理器总是选队首进程运行。采用动态改变优先数的办法,进程每运行1次,优先数减1,要求运行时间减1。(4) 进程运行一次后,若要求运行时间不等于0,则将它加入队列,否则,将状态改为“结束”,退出队列。(5) 若就绪队列为空,结束,否则,重复(3)。详细设计:1、程序中使用的数据结构及符号说明:typedef struct PCB char name50;/ 进程名 以序号代替 LPVOID lp;/ 指向进程的长指针,模拟的,所以没用到。 int tm;/ 需要运行的时间 int prior;/ 初始的优先数 char state;/ 状态 struct PCB *next; / 指向下一个PCB块PCB;开始2、程序主要部分流程图: 输入P初始化P个进程。由链表形式存PCB,返回head指向头指针P=head;t=headT=NULL?调用output();P=head;结束P=NULL?p-stae!=E&p-priort-priorP=p-nextT=pOutput(head,t)t-prior-;t-tm-;t=NULL;p=head;P=NULL?P-stat!=ET=pP=p-next; 3、源程序清单:/Main.cpp/ prior.cpp : Defines the entry point for the application./#include stdafx.h#include resource.h#include MainDlg.h#include int APIENTRY WinMain(HINSTANCE hInstance,/当前进程句柄 HINSTANCE hPrevInstance,/ 前次进程句柄 LPSTR lpCmdLine,/ 启动信息 int nCmdShow)/Enable IPAddress、Calendar.etcInitCommonControls();/系统调用函数DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, Main_Proc);return 0;/MainDlg.cpp#include stdafx.h#include #include #include resource.h#include MainDlg.h#include cross.h#include time.hint MAX_NUM;/ 用户输入进程数char *pst1=-rn;char *pst2=rn;typedef struct PCB char name50;/ 进程名 以序号代替 LPVOID lp;/ 指向进程的长指针,模拟的,所以没用到。 int tm;/ 需要运行的时间 int prior;/ 初始的优先数 char state;/ 状态 struct PCB *next; / 指向下一个PCB块PCB;int begin(int p,HWND hwnd); / 开始模拟PCB *initialize();/ 初始化PCB块,建立PCB链表void run(PCB *head,HWND hwnd);/模拟运行优先数调度void output(PCB *head,PCB *select,HWND hwnd);/输出全部PCB块信息void addText(HWND hwnd,char *pstr);/处理输出细节BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) switch(uMsg) HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);/ 处理 按钮的消息HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); return FALSE;BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) return TRUE;void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) switch(id) case IDC_SURE: TCHAR strin256; unsigned int i=0; int p=0; SetDlgItemText(hwnd,IDC_EDITOUT,);/ 输出文本框设置空 GetDlgItemText(hwnd,IDC_EDITIN,strin,sizeof(strin);/获取文本内容 if (strlen(strin)=0) MessageBox(hwnd,TEXT(请输入数字),TEXT(警告),MB_OK); while(i!=strlen(strin) if(isdigit(strini) p=p*10+(int)strini-48;/ 字符串变数字else MessageBox(hwnd,TEXT(请输入数字),TEXT(警告),MB_OK); return;i+; if(0=p) MessageBox(hwnd,TEXT(请输入大于0的数字),TEXT(警告),MB_OK); return; begin(p,hwnd); break;case IDC_CLEAR:SetDlgItemText(hwnd,IDC_EDITIN,);SetDlgItemText(hwnd,IDC_EDITOUT,);break; default:break; void Main_OnClose(HWND hwnd) EndDialog(hwnd, 0);int begin(int p,HWND hwnd) MAX_NUM=p; PCB *head; char *pstr=TEXT( 序号 时间 优化数 状态 rn);/ 定义字符串指针,指向 里的内容 head=(PCB *)malloc(sizeof(PCB); head=initialize();/ 初始化 PCB块 addText(hwnd,pstr);/ 输出 pstr内容 run(head,hwnd);/ 模拟运行 return 0;PCB *initialize() int i=0,temp; PCB *head; PCB *ptemp,*qtemp; srand(unsigned)time(NULL);/ 初始化随机数种子 while (i!=MAX_NUM) ptemp=(PCB *)malloc(sizeof(PCB); itoa(i,ptemp-name,10); temp=rand()%11+1; / 获取随机数 ptemp-tm=temp; temp=rand()%11+1; ptemp-prior=temp; temp=rand()%11+1; ptemp-state=R; if(i=0) head=ptemp; qtemp=ptemp; else qtemp-next=ptemp; qtemp=ptemp; i+; qtemp-next=NULL; return head;void run(PCB *head,HWND hwnd) PCB *h=head;/ 头指针 PCB *t=head;/ 最大优先数 PCB *p=h;/ 遍历链表 PCB *temp; /int flag=0; while(t!=NULL) p=h; while(p!=NULL) if(p-state!=E)&(p-priort-prior) t=p; p=p-next; / 找最大的优先数进程 output(head,t,hwnd);/ 输出所有进程信息 t-prior-;/ 优先数减一 t-tm-;/ 运行时间减一 if(t-tm=0) t-state=E; / 当进程运行时间为0,标志为 E temp=t; t=NULL; p=h;/ p指向头 while(p!=NULL) if(p-state=R) t=p; break; else p=p-next; /找到第一个就绪状态的进程 output(head,temp,hwnd);void output(PCB *head,PCB *select,HWND hwnd) PCB *h=head; addText(hwnd,pst1); while(h!=NULL) char ch256; wsprintf(ch, %-13s%-13d%-13d%c,h-name,h-tm,h-prior,h-state); addText(hwnd,ch); if(h=select) addText(hwnd, *); addText(hwnd,rn); h=h-next; addText(hwnd,pst2);void addText(HWND hwnd,char *pstr)/ 向文本框添加 pstr 内容 HWND hEdit = GetDlgItem (hwnd, IDC_EDITOUT);/ 获取文本框句柄 int ndx = GetWindowTextLength (hEdit); /获取文本框内容长度 SetFocus (hEdit);/ 设置文本框焦点 SendMessage (hEdit, EM_SETSEL, (WPARAM)ndx, (LPARAM)ndx); / 设置文本框选定内容 选定末尾 SendMessage (hEdit, EM_REPLACESEL, 0, (LPARAM) (LPSTR) pstr); / 以pstr替代上述
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年人护理知识培训简报课件
- 实验与设计(有解析)-高考生物学一轮复习单元测试卷
- 统编版八年级语文上册同步练 《短文二篇》(学生版)
- 外研版八年级英语下册Module1单元测试试卷及答案01
- 碳硅及其化合物(讲义)原卷版-高考化学一轮复习提升讲义(夯基础·再突破)
- CN120203101A 3d食品打印预处理系统及打印装置
- 配镜人专业知识培训内容课件
- 配网专业知识培训目的课件
- 老人防诈骗普法课件
- 《连铸坯表面质量在线检测系统技术要求》行业标准
- DL∕T 1396-2014 水电建设项目文件收集与档案整 理规范
- 《泵系统节能》课件
- 精神科诊疗指南及操作规范
- 北师大版四年级数学上册全单元测试题【带答案】
- 雷雨-剧本原文-高中语文雷雨剧本原文
- 注射用甲苯磺酸瑞马唑仑-临床用药解读
- 消化内科入科培训
- 建筑工地施工现场标准化建设课件
- 胶质细胞在神经炎症中的免疫调控机制
- 气管切开套管脱出应急预案及处理流程
- 2023年佛山三水区辅警真题
评论
0/150
提交评论