




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HUBEI NORMAL UNIVERSITY作业题目操作系统实验报告学生学号2010115010aaa学生姓名胖丁小小所在院系计算机科学与技术学院专业名称计算机科学与技术完成时间20121228一、 实验报告题目:自制时钟二、 问题描述 编制和调试一个自制时钟,在屏幕右上角当时的时间;按:形式显示,并且能正确进位,24小时应消零。系统每隔55ms就自动调用新的中断,在主程序中取系统时间,并驻留程序。在新的1Ch号中断中显示时间。 编制一个汇编程序,它应包括两个部分: 1) 新的1CH中断处理程序,其功能是,首先执行原1CH中断处理,然后取当 时系统时间,处理进位,正确显示当时的时间。 2) 初始化程序:其功能是,首先取原1CH中断向量,然后设置新1CH中断向 量,最后驻留新1CH中断处理程序三、 数据结构及符号说明CLOCK: 设置新的1CH中断处理程序并常驻内存。DISPLAY:利用宏定义及宏调用保存光标位置,并写入字符。SHOW: 在在屏幕右上角显示正确变化的当时时间 TRNS: 利用宏定义及宏调用将时间的二进制转换成ASCII字符显示出来。 CURSOR: 在屏幕右上角显示当时的系统时钟,如20:05:33。 DEAL: 对时间的进位进行处理控制。四、 流程图YCount=0?入口执行原1ch中断保存各寄存器Count计数减1int-1ch中断返回Count恢复初值Sec2+1进行一系列计数、进位处理恢复各寄存器取光标位置并保存置新光标位置依次显示hour1等开始的8个字节内容显示回车恢复光标位置1ch中断处理程序入口取1ch中断向量并保存设置新的1ch中断向量取系统时间将时、分、秒转换为可显示的形式,存入相应变量单元程序驻留退出init初始化程序YCount=0?入口执行原1ch中断保存各寄存器Count计数减1int-1ch中断返回Count恢复初值Sec2+1进行一系列计数、进位处理恢复各寄存器取光标位置并保存置新光标位置依次显示hour1等开始的8个字节内容显示回车恢复光标位置1ch中断处理程序入口取1ch中断向量并保存设置新的1ch中断向量取系统时间将时、分、秒转换为可显示的形式,存入相应变量单元程序驻留退出init初始化程序 N五、 源程序及说明 28 .286DATAS SEGMENT h1 db 0 h2 db 0 m1 db 0 m2 db 0 s1 db 0 s2 db 0DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AXmainprocfar;保存原有1ch中断mov al,1chmov ah,35hint 21hpush espush bxpush ds;设置新的1ch中断mov ax,seg clockmov ds,axmov dx,offset clockmov al,1chmov ah,25hint 21h;常驻内存mov ax,3100hint 21h;恢复原有1ch中断pop dspop dxpop dsmov al,1chmov ah,25hint 21h;退出mov ax,4c00hint 21hmain endpclockprocfarcall gettimeiretclockendp;获取系统时间gettime procnearpushamov ah,2chint 21h;将除数10保存在bl中mov bl,10d;处理小时 mov al,chcbwdiv blmov h1,almov h2,ah;处理分钟mov al,clcbwdiv blmov m1,almov m2,ah;处理秒mov al,dhcbwdiv blmov s1,almov s2,ah;显示时间call showtimepoparetgettimeendp;显示时间showtime proc nearpusha;获取当前光标位置mov bh,0hmov ah,03hint 10hpush dxpush cx;重置光标mov bh,0dmov dh,0dmov dl,72dmov ah,02hint 10h;显示时间add h1,30hmov al,h1mov ah,0ehint 10hadd h2,30hmov al,h2mov ah,0ehint 10h;显示:mov al,3ahmov ah,0ehint 10h;显示分钟add m1,30hmov al,m1mov ah,0ehint 10hadd m2,30hmov al,m2mov ah,0ehint 10h;显示:mov al,3ahmov ah,0ehint 10h;显示秒add s1,30hmov al,s1mov ah,0ehint 10hadd s2,30hmov al,s2mov ah,0ehint 10h;恢复原来光标位置pop cxpop dxmov bh,0hmov ah,02hint 10hpoparetshowtime endpCODES ENDS END START六、 运行结果七、 实验说明1.实验过程中应该定义保存原1CH中断的向量单元。2.实验中用到以下的功能调用:25H(置中断向量),35H(取中断向量),2CH(取系统时间)以及“int 10h“中的02H(置光标位置)、03(读光标位置)、0E(写字符),我们应熟悉上述功能调用的实现,否则在实现过程中将会出现麻烦。3.实验过程中,不仅仅需要能在DOS中显示时间,并且应保证其他程序能使用DOS。4.在具体的实践过程中要注意显示时间时光标位置的重置问题。5.掌握宏定义以及宏调用的相关规范,实验过程中,要先进行宏的定义后进行宏的调用一、 实验报告题目处理器调度二、 问题描述 (1) 假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为:进程名指针要求运行时间优先数状态其中,进程名作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4,P5。指针按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。要求运行时间假设进程需要运行的单位时间数。优先数赋予进程的优先数,调度时总是选取优先数大的进程先执行。状态可假设有两种状态,“就绪”状态和“结束”状态。五个进程的初始状态都为“就绪”,用“R”表示,当一个进程运行结束后,它的状态为“结束”,用“E”表示。(2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”。(3) 为了调度方便,把五个进程按给定的优先数从大到小连成队列。用一单元指出队首进程,用指针指出队列的连接情况。例: 队首标志 K2 K1P1 K2P2 K3P3 K4P4 K5P50K4K5K3K12312415342RRRRRPCB1PCB2PCB3PCB4PCB5(4) 处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先数就减“1”。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行:优先数-1要求运行时间-1来模拟进程的一次运行。提醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行结束。在这里省去了这些工作。(5) 进程运行一次后,若要求运行时间0,则再将它加入队列(按优先数大小插入,且置队首标志);若要求运行时间=0,则把它的状态修改成“结束”(E),且退出队列。(6) 若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。(7) 在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化。(8) 为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。三、 数据结构及符号说明 进程控制块PCB的结构#define num 3 /假定系统中进程个数为3struct PCB char ID;/进程名 int runtime;/要求运行时间 int pri;/优先数 char state; /状态,R-就绪,F-结束;struct PCB pcblistnum;/定义进程控制块数组四、 流程图 开始输入进程信息显示进程信息设置结束标记end=0进程已运行时间加上进程片转时间进程状态改为1End+1End进程要求运行时间结束显示进程状态信息五、 源程序及说明1、 设置进程和CPU单位运行时间 #includeProcPCB.h#includestdio.h#includestdlib.hextern int unitTime;int procInit(procPCB *pcbHead)int procNum;procPCB *head=NULL,*pcb1=NULL,*pcb2=NULL;printf(请输入进程个数:n);scanf(%d,&procNum);for(int i=0;iname,&pcb2-requiredTime);pcb2-status=Ready;pcb2-runTime=0;if(pcb1=NULL)head=pcb2;elsepcb1-next=pcb2;pcb1=pcb2;/如果进程个数不为0if(procNum!=0)pcb2-next=head;printf(请输入CPU单位时间:n);scanf(%d,&unitTime);*pcbHead=head;return procNum;2、 显示进程 #includeProcPCB.h#includewindows.h#includestdio.hCOORD whereXY()HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbi;GetConsoleScreenBufferInfo(handle,&csbi);return csbi.dwCursorPosition;void gotoXY(COORD pos)HANDLE handle=:GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(handle,pos);void SetCursorVisible(bool bVisible)HANDLE handle=:GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO cci;cci.bVisible=bVisible;cci.dwSize=10;:SetConsoleCursorInfo(handle,&cci);void ProcShow(procPCB *head,bool bVisible)bool flag=true;procPCB *p=head;Sleep(500);SetCursorVisible(bVisible);printf(进程名 需要时间 运行时间 运行状态n);while(head!=p|flag)flag=false;printf(%-8s %-10d %-10d %-8sn,p-name,p-requiredTime,p-runTime,p-status);p=p-next;六、 运行结果1. 设置进程 2. 设置CPU时间并运行 七、 实验说明 通过本次实验,我对时间片轮转的调度思想有了进一步的了解,通过动手实现其调度算法,更加深刻的理解了时间片轮转调度算法与其他几种算法的不同和优点。同时,在实验过程中,回顾书本上的理论知识,巩固了我的知识一、 实验报告题目 内存的分配和回收二、 问题描述 本实验主要是模拟基于多道程序设计系统在可变分区式和分页式两种存储管理方式下的主存分配和回收。在程序中采用链表方式来管理作业和页表项,采用队列来管理等待作业。在模拟可变分区式存储管理时,采用最先适应算法实现主存的分配与回收,建立了已分配区表和未分配区表,等待队列。在模拟分页式存储管理时,采用位示图来表示主存,建立了作业表和页表,在主存中的作业队列和等待队列。需要说明的是,我们没有考虑系统可容纳作业的道数和作业对除主存以外的其它资源的要求,认为只要系统主存可以满足要求作业就加载到主存。同时等待队列是采用先进先出的管理方式三、 数据结构和符号说明 可变分区式存储管理的已分配区表和未分配区表的结构用记录描述如下:/*全局变量*/int bitMapNN=0;int freeBlock=N*N;/*/建立页表并初始化*pt=(PageTable *)malloc(sizeof(PageTable)*p-pageCount);PageTable *ptcopy=*pt;for(int k=0;kpageCount;k+)(*pt+k)-pageNum=k;(*pt+k)-blockNum=-1;PageTable *pageTableN*N=NULL;/指向进程页表的指针数组void ShowMenu()printf(1.申请内存n);printf(2.回收内存n);printf(3.显示内存n);printf(4.显示页表n);printf(5.退出n); 页表的结构用记录描述:/作业的页表结构体typedef struct int pagenum;/页号 int blocknum;/块号PageTable;四、 流程图 五、 源程序及说明 1、 内存的分配#includeProcess.h#includePageTable.h#includeMemoryManager.h#includestdio.h#includestdlib.hbool MemoryAllocation(Process* &p,PageTable *pt)if(p-pageCountfreeBlock)printf(内存不足n);free(p);/释放申请的进程空间p=NULL;return false;/建立页表并初始化*pt=(PageTable *)malloc(sizeof(PageTable)*p-pageCount);PageTable *ptcopy=*pt;for(int k=0;kpageCount;k+)(*pt+k)-pageNum=k;(*pt+k)-blockNum=-1;for(int i=0;iN;i+)for(int j=0;jpageCount)return true;if(bitMapij=0)bitMapij=1;freeBlock-;ptcopy-blockNum=i*8+j;ptcopy+;2、 内存的回收 #includeMemoryManager.h#includePageTable.h#includeProcess.h#includestdio.h#includestdlib.hvoid MemoryRecory(Process* &p,PageTable* &pt)int x,y;for(int i=0;ipageCount;i+)x=(pt+i)-blockNum/N;y=(pt+i)-blockNum%N;bitMapxy=0;freeBlock+;free(p);p=NULL;free(pt);pt=NULL;3、主程序调用#includeProcess.h#includestdio.h#includeMemoryAllocation.h#includeMemoryRecory.h#includeShowBitMap.h#includestdlib.h#includestring.h#includewindows.h#define N 8/*全局变量*/int bitMapNN=0;int freeBlock=N*N;/*/PageTable *pageTableN*N=NULL;/指向进程页表的指针数组Process *processN*N=NULL;int processCount=0;int index=0;int NextIndex()for(int i=0;iname,&p-pageCount);bool IsProcessEmpty()if(processCount=0)printf(当前没有进程运行n);return true;return false;int SearchProcess()if(IsProcessEmpty()return -1;char processName10;printf(请输入进程名:n);scanf(%s,processName);for(int i=0;iname)=0)return i;printf(没有名为%s的进程n,processName);return -1;void ShowPageTable()int tempCount;if(IsProcessEmpty()return;for(int i=0;iname,processi-pageCount);printf(页号:);for(int j=0;jpageCount;j+)printf(%d ,(pageTablei+j)-pageNum);print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 说课课件搭配中的学问
- 红酒原料知识培训内容课件
- 2025品牌代理授权合同
- 2025《合同法》主要内容解析
- 建筑装饰工程合同书细节说明
- 标准化合同评审管理工具
- 企业行政采购需求与计划申报模板
- 个人数字生活服务平台运营合作协议
- 影视版权交易免责合同书
- 商务合作协议之电子产品联合推广计划
- 市热电厂清洁生产审核报告
- GB/T 239.2-2023金属材料线材第2部分:双向扭转试验方法
- 四年级大庆精神铁人精神教案
- GB/T 3505-2009产品几何技术规范(GPS)表面结构轮廓法术语、定义及表面结构参数
- 《廉洁从业》企业文化培训课件
- 《教育魅力-青年教师成长钥匙》
- 《生物多样性公约》及国际组织课件
- 绪论(遗传学)课件
- 滴定管使用课件
- 单片机应用技术项目教程C语言版ppt课件(完整版)
- 公司金融课件(完整版)
评论
0/150
提交评论