操作系统课程设计报告模板

合集下载

操作系统课程设计(小型的操作系统)

操作系统课程设计(小型的操作系统)

操作系统课程设计报告题目:一个小型的操作系统班级:计122(杏)学号:1213023075姓名:贾苏日期:2014/06/231.实验平台(1)软件平台:开发系统平台:Windows 7 (64)Microsoft visual c++ 6.0测试系统平台:Windows 7 (64)(2)硬件平台:cpu:AMD A6-3420 APU内存:4GB硬盘:500G2.所需实现的功能及相应的阐述:(1)进程调度管理为了贴切现实中的os,采用RR(轮转调度算法),且不提供用户显式的选择调度算法,即对用户是透明的。

现实中的处理器主频为1Ghz~3Ghz,选取中间点为1.5Ghz,得时间片大小为0.7ns ,为方便计算*10,则时间片大小定为7ns。

假设进程之间的调度和切换不耗费cpu时间。

(2)死锁的检测与处理检测当然采用的是银行家算法处理:让用户选择kill一个进程,释放他所占有的所有资源。

(3)虚拟分页调度管理虚拟分页:给出的是逻辑值访问磁盘将那个数据块放入到内存中内存中的地址采用一定的算法相对应于磁盘的地址。

特规定访存采用的是按字节寻址内存的大小128KB外存的大小1MB即整个系统可以提供1MB的逻辑地址空间供进程进行访问(在地址总线足够扫描内存的情况下)。

虚拟地址映射采用:直接映射法规定的8kB为一个页面,故内存有16个页面,外存有128个页面。

如果产生了内存已满,便会产生缺页中断,淘汰采用FIFO算法,利用一个队列来做。

部分内外存的对应表0 0,128,2*128+0.......1 1,129,2*128+1.......2 2,130,2*128+2.......16 127,128+16,2*128+16.........(4)I/O中断处理设中断来自两个方面:1.DMA输送开始和结束时的中断设定一个宏定义为DMA一次传输的数据量的大小->DmaNum 假定为10kb每次DMA开始:耗费1ns cpu时间进行中断处理DMA 结束:耗费2ns cpu 时间进行中断处理由操作系统课程知,DMA 传输数据时不需要CPU 的干预。

操作系统课程设计实验报告(以Linux为例)

操作系统课程设计实验报告(以Linux为例)

目录目录 0一、实验环境 (1)二、实验报告总体要求 (1)实验一编译L INUX内核 (2)实验二观察L INUX行为 (6)实验三进程间通信 (13)一、实验环境Linux平台◆硬件平台:普通PC机硬件环境。

◆操作系统:Linux环境,例如,红旗Linux或Red Hat Linux;启动管理器使用GRUB。

◆编译环境:伴随着操作系统的默认gcc环境。

◆工作源码环境:一个调试的内核源码,版本不低于2.4.20。

二、实验报告总体要求在2013年11月25日前提交实验报告。

实验报告至少要求包含以下内容:1.引言:概述本次实验所讨论的问题,工作步骤,结果,以及发现的意义。

2.问题提出:叙述本篇报告要解决什么问题。

注意不可以抄写实验要求中的表述,要用自己的话重新组织我们这里所提出的问题。

3.解决方案:叙述如何解决自己上面提出的问题,可以用小标题 3.1,3.2…等分开。

这是实验报告的关键部分,请尽量展开来写。

注意,这部分是最终课程设计的基本分的部分。

这部分不完成,本课程设计不会及格。

4.实验结果:按照自己的解决方案,有哪些结果。

结果有异常吗?能解释一下这些结果吗?同别人的结果比较过吗?注意,这部分是实验报告出彩的地方。

本课程设计要得高分,应该在这部分下功夫。

5.结束语:小结并叙述本次课程设计的经验、教训、体会、难点、收获、为解决的问题、新的疑惑等。

6.附录:加了注释的程序清单,注释行数目至少同源程序行数目比1:2,即10行源程序,至少要给出5行注释。

操作系统课程设计实验报告实验一编译Linux内核实验时间6小时实验目的认识Linux内核的组成,掌握配置、编译、安装Linux内核的步骤。

实验目标下载2.6.19或更新的Linux内核,配置该内核使其支持NTFS,并在新的内核中修改其版本为Linux NameTestKernel x.x.x,其中,Name是你的名字(汉语拼音);x.x.x是新内核的版本号,最后在你的机器上编译安装这个新内核。

操作系统实验报告3篇

操作系统实验报告3篇

课程设计说明书设计题目:操作系统课程设计班级:信息管理与信息系统2011级学号:姓名:山东科技大学2013年12 月25 日课程设计任务书学院信息科学与工程专业信息学管理与信息系统班级2011-1姓名一、课程设计题目:操作系统课程设计二、课程设计主要参考资料(1)Abraham Silberschatz & Peter Baer Galvin & Greg Gagne. Operating System Concepts(第七版影印版). 高等教育出版社. 2007.3.(2)计算机操作系统(第三版)西安电子科技大学出版社(3)三、课程设计应解决的主要问题:(1)CPU调度算法的模拟实现(2)死锁相关算法的实现(3)磁盘调度算法的实现四、课程设计相关附件(如:图纸、软件等):(1)程序源代码(2)五、任务发出日期:2013-10-1 课程设计完成日期:2014-1-1指导教师签字:指导教师对课程设计的评语成绩:指导教师签字:年月日设计1 CPU调度算法的模拟实现一、设计目的1、根据系统的资源分配策略所规定的资源分配算法2、利用编程语言,模拟实现先来先服务(FCFS)、最短作业优先(非抢占SJF)、非抢占优先调度算法、时间片轮转调度算法(RR)3、针对模拟进程,利用CPU调度算法进行调度4、进行算法评价,计算平均周转时间和平均等待时间二、设计要求1、调度所需的进程参数由输入产生(手工输入或者随机数产生)2、输出调度结果3、输出算法评价指标三、设计说明1、定义public类:class program{public:char name;//进程名int atime;//进程到达的时间int stime;//进程服务的时间int btime;//进程开始执行的时间int ftime;//进程完成的时间int rtime;//进程的周转时间float qrtime;//进程的带权周转时间};2、冒泡排序:class program t;for( i=1;i<m;i++)for(int j=0;j<m-i;j++)if(p[j].atime>p[j+1].atime){t=p[j];p[j]=p[j+1];p[j+1]=t;}3、流程图:(1)①先来先服务调度流程图:②主要程序p[0].btime=p[0].atime;p[0].ftime=p[0].atime+p[0].stime;p[0].rtime=p[0].ftime-p[0].atime;p[0].qrtime=(float)p[0].rtime/p[0].stime;for(i=1;i<m;i++){if(p[i].atime>p[i-1].ftime){p[i].btime=p[i].atime;}else{p[i].btime=p[i-1].ftime;}p[i].ftime=p[i].btime+p[i].stime;p[i].rtime=p[i].ftime-p[i].atime;p[i].qrtime=(float)p[i].rtime/p[i].stime;}①短作业优先进程(非抢占优先权)调度流程图:②(SJF)主要代码int k=0,x=0;for(i=k+1;i<m;i++){for(j=k+1;j<m;j++){if(p[j].atime<p[k].ftime){x++;}elsebreak;}int min=k+1;if(x>1){for(j=k+2;j<=x+k;j++){if(p[j].stime<p[min].stime){min=j;}}t=p[min];p[min]=p[k+1];p[k+1]=t;p[k+1].ftime=p[k].stime+p[k+1].stime;}k++;x=0;}③优先权调度算法(非抢占):int k=0,x=0;for(i=k+1;i<m;i++){for(j=k+1;j<m;j++){if(p[j].atime<p[k].ftime){x++;}elsebreak;}int min=k+1;if(x>1){for(j=k+2;j<=x+k;j++){if(p[j].youxianquan<p[min].youxianquan){min=j;}}t=p[min];p[min]=p[k+1];p[k+1]=t;p[k+1].ftime=p[k].stime+p[k+1].stime;}k++;x=0;}①时间片轮转调度算法:②主要算法int time=p[0].atime;int Max=p[0].stime1;for(i=0; i<m; i++){p[i].stime2=p[i].stime1;if(p[i].stime1>Max)Max=p[i].stime1; }for(int j=0; j<Max; j++){for(i=0; i<m; i++){if(p[i].stime2==0)continue;if(p[i].atime<=time){p[i].stime2-=1;time+=1;}elsei=-1;if(p[i].stime2==0)p[i].ftime=time;}}4、输出p[0].btime=p[0].atime;p[0].ftime=p[0].atime+p[0].stime;p[0].rtime=p[0].ftime-p[0].atime;p[0].qrtime=(double)p[0].rtime/p[0].stime;for(i=1;i<m;i++){if(p[i].atime>p[i-1].ftime){p[i].btime=p[i].atime;}else{p[i].btime=p[i-1].ftime;}p[i].ftime=p[i].btime+p[i].stime;p[i].rtime=p[i].ftime-p[i].atime;p[i].qrtime=(float)p[i].rtime/p[i].stime;}cout<<"进程******到达时间**服务时间**开始执行时间*完成时间**周转时间**带权周转时间"<<endl;for(i=0;i<m;i++){cout<<setiosflags(ios::left)<<setw(10)<<p[i].name<<setw(10)<< p[i].atime<<setw(10)<<p[i].stime<<setw(13)<<p[i].btime<<setw(10) <<p[i].ftime<<setw(10)<<p[i].rtime<<setw(13)<<p[i].qrtime<<endl;}}四、运行结果及分析1、先来先服务(FCFS)测试数据2、短作业优先(SJF)测试数据3、优先权(非抢占)测试数据4、时间片轮转(RR)测试数据五、总结通过这次试验,我进一步的理解了冒泡排序的算法,而且,对进程作业先来先服务、短进程优先、非抢占优先、按时间片轮转调度算法以及进程调度的概念和算法,有了更深入的认识!初步理解了操作系统对于作业处理的基本思想!了解到算法很重要,又更加明白算法本身可以节约时间。

《操作系统课程设计》报告范本(doc 10页)

《操作系统课程设计》报告范本(doc 10页)

《操作系统课程设计》报告学号:姓名:班级:指导教师:报告日期:一、课设目的通过对操作系统课程的学习,熟悉进程的概念、进程的管理与存储、进程的调度,通过实践深入理解进程的调度算法。

二、课设任务要求编写一个程序,可以创建若干个虚拟进程,并对若干个虚拟进程进行调度,调度策略为时间片轮转法,主要任务包括:①进程的个数,进程的内容(即进程的功能序列)来源于一个进程序列描述文件,另外调度运行结果输出到一个运行日志文件;②设计PCB适用于时间片轮转法;③建立进程队列;④实现时间片轮转调度算法,尽量可视化的展示调度的动态过程。

○5总结程序设计的开发过程:需求分析、系统设计、系统实现及文档的收集和整理。

三、实验方法与设计分析每个进程有一个进程控制块( PCB)表示。

进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。

据需要设计调查计划调查、收集数据,能按要求整理数据,在统计表进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。

进程的到达时间为输入进程的时间。

,计算机,千千万万中小创业者渴望成功高中语文,语文试卷,计算机摇篮课进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。

式,因此上开店成为了一种潮流,并且越来越多高中语文,语文试卷,计算机就绪进程获得 CPU后都只能运行一个时间片。

用已占用CPU时间加1来表示。

卷,计算机络购物高中语文,语文试卷,计算机市场潜力还远未被释放课件同如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

语文,语文试卷,计算机,第5代速度达自动软件,不用东奔西走高中语文,语文每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。

操作系统课程设计报告 (11)

操作系统课程设计报告 (11)

哈尔滨理工大学课程设计(计算机操作系统)题目:文件系统存储空间管理班级:姓名:指导教师:系主任:2014年03月01日1目录1文件系统存储空间管理............................................... 错误!未定义书签。

1.1 题目分析 (1)1.2 实验原理............................................................................ 错误!未定义书签。

1.3 实现技术 (1)2 Linux代码分析 (3)2.1 功能说明 (13)2.4 流程图 (14)3题目分析根据提出的文件分配和释放请求,动态显示磁盘空闲空间的态以及文件目录的变化,以位示图和索引分配为例:每次执行请求后要求显示或打印位示图的修改位置、分配和回收磁盘的物理块地址、更新的位示图、目录1.2实验原理用数组表示位示图,其中的每一位对应磁盘一个物理块的状态,0表示、空闲,1表示分配;当请求分配一个磁盘块时,寻找到数组中为0的位,计算相对磁盘块号,并计算其在磁盘中的物理地址(柱面号、磁道号、物理块号),并将其状态由0变到1。

当释放某一物理块时,已知其在磁盘中的物理地址,计算其相对磁盘块号,再找到位示图数组中的相应位,将其状态由1变为01.3实现技术为实现上述设计,采用C++语言,VS2008开发环境。

具体采用的技术如下::1. 模拟文件空间分配、释放过程,可选择连续分配、链式分配、索引分配方法;2. 文件空闲空间管理,可采用空白块链、空白目录、位示图方法;步骤如下:1. 输入磁盘基本信息参数,计算位示图大小,并随机初始化位示图;(1)磁盘基本信息:磁盘柱面数m, 每柱面磁道数p, 每磁道物理块数q;(2)假设采用整数数组存放位示图,则数组大小为:Size= ceil((柱面数*每柱面磁道数*每磁道物理块数)/(sizeof(int)*8))(3)申请大小为size的整数数组map,并对其进行随机初始化。

操作系统课程设计报告

操作系统课程设计报告

实践课设计报告课程名称操作系统课程设计模拟设计内存管理中的地址题目转换(动态分区、页式十进制)学院班级学号姓名指导教师年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 模拟设计内存管理中的地址转换(动态分区、页式十进制)初始条件:1.预备内容:阅读操作系统的内存管理章节内容,理解动态分区、页式、段式和段页式存储管理的思想及相应的分配主存的过程。

2.实践准备:掌握一种计算机高级语言的使用。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.下列内部存储器管理中地址转换,在完成指定存储管理技术中的地址转换基础上还可以选择其它内部存储器管理中的地址转换进行模拟设计并实现:⑴动态分区方案,用最先适用算法对作业实施内存分配,然后把作业地址空间的某一逻辑地址转换成相应的物理地址。

能够处理以下的情形:输入某一逻辑地址,程序能判断地址的合法性,如果合法,计算并输出相应的物理地址。

如果不能计算出相应的物理地址,说明原因。

⑵页式存储管理中逻辑地址到物理地址的转换(十进制)。

能够处理以下的情形:输入某一十进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用十进制表示。

⑶页式存储管理中逻辑地址到物理地址的转换(八进制)。

能够处理以下的情形:输入某一八进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用八进制表示。

⑷页式存储管理中逻辑地址到物理地址的转换(十六进制)。

能够处理以下的情形:输入某一十六进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用十六进制表示。

⑸段式存储管理中逻辑地址到物理地址的转换。

能够处理以下的情形:指定内存的大小,进程的个数,每个进程的段数及段大小;能检查地址的合法性,如果合法进行转换,否则显示地址非法的原因。

⑹段页式存储管理中逻辑地址到物理地址的转换。

计算机操作系统课设操作系统课程设计报告

计算机操作系统课设操作系统课程设计报告

课程实验报告题目:操作系统原理专业班级:信息安全1302 班学号:姓名:指导教师:报告日期:2016 年2 月29 日计算机科学与技术学院目录1. 初探Linux 编程环境 (1)1.1. 实验目的 (1)1.2. 实验内容 (1)1.2.1. 实验一 (1)1.2.2. 实验二 (1)1.3. 实验设计 (1)1.3.1. 实验一 (1)1.3.2. 实验二 (2)1.4. 实验环境 (3)1.5. 实验步骤 (3)1.5.1. 实验一 (3)1.5.2. 实验二 (3)1.6. 调试记录 (4)1.6.1. 实验一 (4)1.6.2. 实验二 (4)1.7. 实验结果 (5)1.7.1. 实验一 (5)1.7.2. 实验二 (6)2. 通过编译内核的方式为Linux 增加系统调用 (8)2.1. 实验目的 (8)2.2. 实验内容 (8)2.3. 实验设计 (8)2.4. 实验环境 (8)2.5. 实验步骤 (8)2.6. 调试记录 (10)2.7. 实验结果 (11)3. 编写设备驱动程序 (13)3.1. 实验目的 (13)3.2. 实验内容 (13)3.3. 实验设计 (13)3.4. 实验环境 (14)3.5. 实验步骤 (14)3.6. 调试记录 (15)3.7. 实验结果 (15)4. 实现系统监控程序 (17)4.1. 实验目的 (17)4.2. 实验内容 (17)4.3. 实验设计 (18)4.4. 实验环境 (22)4.5. 实验步骤 (22)4.6. 调试记录 (22)4.7. 实验结果 (23)5. 设计模拟文件系统 (28)5.1. 实验目的 (28)5.2. 实验内容 (28)5.3. 实验设计 (28)5.4. 实验环境 (33)5.5. 实验步骤 (34)5.6. 调试记录 (34)5.7. 实验结果 (34)6. 附注:程序清单 (39)6.1. 文件拷贝程序 (39)6.2. 多进程多窗口实验 (40)6.3. 编译内核添加系统调用 (41)6.4. 编写模块 (43)6.5. 任务监视器 (49)6.6. 模拟文件系统 (64)1. 初探Linux 编程环境1.1. 实验目的掌握Linux 操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux 下的编程环境,了解在Linux 如何进行多线程编程以及图形编程。

《操作系统》课程实验报告

《操作系统》课程实验报告

《操作系统》课程实验报告一、实验目的本次《操作系统》课程实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理、进程管理、内存管理、文件系统等核心概念,并掌握相关的操作技能和分析方法。

二、实验环境1、操作系统:Windows 10 专业版2、开发工具:Visual Studio Code3、编程语言:C/C++三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新进程,并观察进程的创建过程和资源分配情况。

同时,实现进程的正常终止和异常终止,并分析其对系统的影响。

2、进程同步与互斥使用信号量、互斥锁等机制实现进程之间的同步与互斥。

通过模拟多个进程对共享资源的访问,观察并解决可能出现的竞争条件和死锁问题。

(二)内存管理实验1、内存分配与回收实现不同的内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。

观察在不同的内存请求序列下,内存的分配和回收情况,并分析算法的性能和优缺点。

2、虚拟内存管理研究虚拟内存的工作原理,通过设置页面大小、页表结构等参数,观察页面的换入换出过程,以及对系统性能的影响。

(三)文件系统实验1、文件操作实现文件的创建、打开、读取、写入、关闭等基本操作。

观察文件在磁盘上的存储方式和文件系统的目录结构。

2、文件系统性能优化研究文件系统的缓存机制、磁盘调度算法等,通过对大量文件的读写操作,评估不同优化策略对文件系统性能的提升效果。

四、实验步骤(一)进程管理实验步骤1、进程创建与终止(1)使用 C/C++语言编写程序,调用系统函数创建新进程。

(2)在子进程中执行特定的任务,父进程等待子进程结束,并获取子进程的返回值。

(3)通过设置异常情况,模拟子进程的异常终止,观察父进程的处理方式。

2、进程同步与互斥(1)定义共享资源和相关的信号量或互斥锁。

(2)创建多个进程,模拟对共享资源的并发访问。

(3)在访问共享资源的关键代码段使用同步机制,确保进程之间的正确协作。

(4)观察并分析在不同的并发情况下,系统的运行结果和资源竞争情况。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中国石油大学(华东)操作系统课程设计报告姓名:学号:成绩:目录实验一、螺旋矩阵 (3)实验二、用Shell程序实现文件的批量管理 (4)实验三、驱动下的螺旋矩阵程序 (7)实验四、哲学家进餐问题 (10)实验五、NCURSE程序框架 (14)实验一、螺旋矩阵一、实验任务用C语言编写一个螺旋矩阵程序,实现输入行数和列数即可形成A~Z的螺旋矩阵,并用Makefile完成编译。

二、实验环境和工具VMware Workstation红帽子 Linux-2.4.20-8三、关键代码1、螺旋矩阵实现代码(SpiralMatrix.c)#include <stdio.h>#define N 10int main(){int row,col,i,j,x,y,startNum;int dx[4]={0,1,0,-1};//方向int dy[4]={1,0,-1,0};int Matrix[N][N];printf("请输入行数和列数:");scanf("%d %d",&row,&col);for (i=0;i<row;i++){//初始化矩阵for(j=0;j<col;j++)Matrix[i][j]=-1;}startNum=0;x=0;y=0;j=0;for (i=0;startNum<row*col;i++){if (x>=0&&x<row&&y>=0&&y<col&&Matrix[x][y]==-1)Matrix[x][y]=startNum++;else{x-=dx[j];y-=dy[j];j=(j+1)%4;}x+=dx[j];y+=dy[j];}printf("螺旋矩阵为:\n");for (i=0;i<row;i++){for(j=0;j<col;j++)printf("%4c",Matrix[i][j]%26+'A');printf("\n");}return 0;}2、MakefileCC=gccEXEC=SpiralMatrixOBJS=SpiralMatrix.oall:$(EXEC)$(EXEC):$(OBJS)$(CC) -o $@ $(OBJS)clean:rm -rf $(EXEC) $(OBJS)四、实验结果实验二、用Shell程序实现文件的批量管理一、实验任务设计两个Shell程序,一个Shell程序实现给系统添加四个新组,每个组代表一个班级,每一个班级中添加30个用户,每个用户代表一个学生。

另一个Shell程序实现删除上一个Shell程序添加的用户和组。

二、实验环境和工具Linux-2.4.20-8 VMware Workstation三、关键代码1、创建用户addUsers#!/bin/shi=1while [ $i -le 4 ]doGROUPNAME=class${i}groupadd $GROUPNAMEi=$(($i+1))donei=0k=0while [ $i -lt 120 ]doif [ $(($i%30)) -eq 0 ]thenk=$(($k+1))fij=$((($i)%30))j=$(($j+1))if [ $j -le 9 ]thenUSERNAME=class${k}stu0${j} elseUSERNAME=class${k}stu${j}# fiGROUPNAME=class${k}useradd $USERNAMEchown -R $USERNAME /home/$USERNAMEchgrp -R $GROUPNAME /home/$USERNAME i=$(($i+1))Done2、删除用户delUsers#!/bin/shi=0k=0while [ $i -lt 120 ]doif [ $((($i)%30)) -eq 0 ]thenk=$(($k+1))fij=$(($i%30))j=$(($j+1))if [ $j -le 9 ]thenUSERNAME=class${k}stu0${j} elseUSERNAME=class${k}stu${j} fiuserdel $USERNAMErm -rf /home/$USERNAMEi=$(($i+1))donei=1while [ $i -le 4 ]doGROUPNAME=class${i}groupdel $GROUPNAMEi=$(($i+1))done四、实验结果1、编辑addUsers和delUsers2、添加用户3、删除用户实验三、驱动下的螺旋矩阵程序一、实验任务要求实现一个驱动程序的执行过程,设定驱动程序实现的字符设备,设备为111,此设备为0,实现功能:测试程序输入两个数字(行与列),在驱动程序下即可形成相应的字母螺旋矩阵,最后驱动程序会将举证返回给测试程序,Z之后循环至A二、实验环境软件环境:RedHat Linux2.4.20-8,VMware WorkStation三、关键代码接口函数定义在evan_fops结构体中:static struct file_operations evan_fops={owner: THIS_MODULE,//拥有者write: evan_write,//写操作read: evan_read,//读操作ioctl: evan_ioctl,//控制操作open: evan_open,//打开操作release: evan_release,//释放操作};测试程序中实现螺旋矩阵的代码:showbuf(char *buf){int H,L;char a[100][100];int count=65 ;int x,y,round,min;scanf("%d %d",&H,&L);if(H == 1&&L==1){a[0][0] = count;}else if(H!=1&&L==1){for(x=0;x<H;x++){a[x][0]=count;count++;if(count==91)count=count-26;}}else{if(H>L)min=L;else min=H;for(round=0; round<min/2; round++){ x = round;for(y=round;y<L-round;y++) {a[x][y]=count;count++;if(count==91)count=count-26;}//if(count>97)count=count-33;y = L - round - 1;for(x=round+1;x<H-round-1;x++){a[x][y]=count;count++;if(count==91)count=count-26;}x = H - round - 1;for(y=L-round-1;y>=round;y--){a[x][y]=count;count++;if(count==91)count=count-26;}y = round;for(x=H-round-1-1;x>round;x--){a[x][y]=count;count++;if(count==91)count=count-26;}}if(min%2==1){if(H==L)a[H/2][H/2]=count;else if(H<=L)for(x=min/2,y=round;y<=L-1-round;y++){a[x][y]=count;count++;if(count==91)count=count-26;}elsefor(y=min/2,x=round;x<=H-1-round;x++) {a[x][y]=count;count++;if(count==91)count=count-26;}}}//打印矩阵for(x=0;x<H;x++){for(y=0;y<L;y++){printf("%c ",a[x][y]);}printf("\n");}四实验结果实验四、哲学家进餐问题一、实验任务编程实现哲学家进餐模型,所谓的哲学家进餐模型,即有五个哲学家围坐在一圆桌旁,桌中央有一盘面条,每两人之间放一只筷子,即总共有五根筷子。

每个哲学家的行为是思考或者吃面条。

为了吃面条,每个哲学家必须只能直接从自己的左边或者右边取筷子,两根筷子都取到了才能吃面条。

而吃完一根面条之前,哲学家不会放掉手里的筷子。

设定盆中一共有68根面条,一次哲学家只能吃一根。

二、实验环境和工具VMware Workstation 10.0.2 build-1744117和Linux-2.4.20-8三、关键代码#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#define PHILO_NUM 5#define THINK_TIME 3#define EATING_TIME 2enum { THINKING, HUNGRY, EATING } state[PHILO_NUM];pthread_cond_t self[PHILO_NUM];int noodles_num = 68;pthread_mutex_t lock;void test(int i);void pickup(int i){if(noodles_num!=0){pthread_mutex_lock(&lock);state[i]=HUNGRY;test(i);if(state[i]!=EATING)pthread_cond_wait(&self[i],&lock);pthread_mutex_unlock(&lock);}else{printf("The noodles is empty!\n");exit(0);}}void putdown(int i){pthread_mutex_lock(&lock);state[i]=THINKING;test((i+PHILO_NUM-1)%PHILO_NUM);test((i+1)%PHILO_NUM);pthread_mutex_unlock(&lock);}void test(int i){if(state[(i+PHILO_NUM-1)%PHILO_NUM]!=EATING&&state[(i+1)%PHILO_NUM]!=EATING &&state[i]==HUNGRY){state[i]=EATING;pthread_cond_signal(&self[i]);}}void init(){int i=0;for(;i<PHILO_NUM;i++)state[i]=THINKING;}void think(int i){printf("philosopher %d :I am thinking!\n", i);sleep(THINK_TIME);}void eat(int i){printf("philosopher %d :I am eating!\n", i);noodles_num--;sleep(EATING_TIME);}void* philosopher(void* vargs){int i =*(int*)vargs;while (1){think(i);pickup(i);eat(i);putdown(i);}return NULL;}int main(void){pthread_t tid[5];int i=0;init();for(i=0;i<PHILO_NUM;i++)pthread_create(&tid[i],NULL,philosopher,(void*)&i); for(i=0;i<PHILO_NUM;i++)pthread_join(tid[i],NULL);return 0;}2、MakefileCC=gccEXEC=philosopherOBJS=philosopher.oall:$(EXEC)$(EXEC):$(OBJS)$(CC) -o $@ $(OBJS) -lpthreadclean:rm -f $(EXEC) $(OBJS) 四、实验结果实验五、NCURSE程序框架一、任务要求将以上的五个实验任务以ncurse汇总,以menu的方式实现界面显示。

相关文档
最新文档