文档库 最新最全的文档下载
当前位置:文档库 › 操作系统课程设计-磁盘调度算法

操作系统课程设计-磁盘调度算法

操作系统课程设计-磁盘调度算法
操作系统课程设计-磁盘调度算法

1.实验题目:

磁盘调度算法。

建立相应的数据结构;

在屏幕上显示磁盘请求的服务状况;

将一批磁盘请求的情况存磁盘文件,以后可以读出并重放;

计算磁头移动的总距离及平均移动距离;

支持算法:FIFO、SSTF、SCAN、CSCAN;

2.设计目的:

调度磁盘I/O请求服务,采用好的方式能提高访问时间和带宽。本实验通过编程对磁盘调度算法的实现,加深对算法的理解,同时通过用C++语言编写程序实现这些算法,并在windos平台上实现,更好的掌握操作系统的原理以及实现方法,提高综合运用专业课知识的能力。

3.任务及要求

3.1设计任务

编程实现下述磁盘调度算法,并求出每种算法的平均寻道长度:

1、先来先服务算法(FCFS)

2、最短寻道时间算法(SSTF)

3、扫描算法(SCAN)

4、循环扫描算法(CSCAN)

3.2设计要求

对用户指定的磁盘调度请求序列,基于以上四种算法,实现各自的调度顺序并输出,同时计算出各种算法下的平均寻道长度。

4.算法及数据结构

4.1算法的总体思想

queue[n] 为请求调度序列,diskrode为磁盘磁道数,headstarts为正在调度的磁道①先来先服务算法(FCFS)

按queue[n]数组的顺序进行磁盘调度,将前一个调度磁道与下一个调度磁道的差值累加起来,得到总的寻道长度,再除以n得到平均寻道长度。

②最短寻道时间优先算法(SSTF)

将queue[n]进行由小到大的排序,首先定位当前调度磁headstarts在queue[n]的位置,通过循环语句找出离起始磁头最短的位置。

③扫描算法(SCAN)

将queue[n]进行由小到大的排序,首先定位当前调度磁headstarts在queue[n]的位置,然后在此位置按给定的方向遍历queue[n],当道端点(queue[0]或queue[n-1])时,再在定位处反向遍历到另一端。当调度磁道不在queue端点时,总的寻道长度为为前一个磁道与后一个磁

道差值的累加,当到达端点且queue[n]未全调度时,总寻道长度加上端点值再加上下一个调度磁道的值,再按前面的算法进行,直到磁道全部都调度完毕,得到总的寻道长度,除以n得到平均寻道长度。

④循环扫描算法(CSCAN)

将queue[n]进行由小到大的排序,首先定位当前调度磁headstarts在queue[n]的位置,然后在此位置按给定的方向遍历queue[n],当道端点(queue[0]或queue[n-1])时,反向到另一端点再以此方向进行遍历,直到queue[n]中所有都调度完。当调度磁道不在queue端点时,总的寻道长度为为前一个磁道与后一个磁道差值的累加,当到达端点且queue[n]未全调度时,总寻道长度加上端点值再加上磁盘磁道总长度,再加上下一个调度磁道的值,再按前面的算法进行,直到磁道全部都调度完毕,得到总的寻道长度,除以n得到平均寻道长度。

5、源代码:

#include

#include

#include

void menu()

{

cout<<"*********************菜单*********************"<

cout<<"******1、先来先服务算法(FCFS) **********"<

cout<<"******2、最短寻道时间优先算法(SSTF) **********"<

cout<<"******3、扫描算法(SCAN) **********"<

cout<<"******4、循环扫描算法(CSCAN) **********"<

cout<<"******5、退出**********"<

cout<<"**********************************************"<

}

/*======================初始化序列=======================*/ void init(int queue[],int queue_copy[],int n)

{

int i;

for(i=0;i

queue[i]=queue_copy[i];

}

//对当前正在执行的磁道号进行定位,返回磁道号小于当前磁道中最大的一个int fix ( int queue[], int n, int headstarts)

{

int i =0;

while ( iqueue[i] )

{

i++;

}

if ( i>n-1 )

return n-1; //当前磁道号大于磁盘请求序列中的所有磁道

if ( i==0 )

return -1; //当前磁道号小于磁盘请求序列中的所有磁道

else

return i-1; //返回小于当前磁道号中最大的一个

}

/*=================使用冒泡算法从小到大排序==============*/

int *bubble(int queue[],int m)

{

int i,j;

int temp;

for( i=0; i

for(j=i+1;j

{

if( queue[i] > queue[j])

{

temp=queue[i];

queue[i]=queue[j];

queue[j]=temp;

}

}

cout<<"排序后的磁盘序列为:";

for( i=0;i

{

cout<

}

cout<

return queue;

}

/* ====================以下是FCFS算法==================*/

void FCFS(int queue[],int n,int diskrode,int headstarts) //queue是请求调度序列,n为其个数,diskroad为磁盘磁道数,headstarts为正在调度的磁道

cout<<"************以下为FCFS调度算法***********"<

int i;

int count=0;

if ( headstarts>queue[0])

count +=headstarts-queue[0];

else

count+=queue[0]-headstarts;

cout<<"调度序列为: ";

cout<

for(i=0;i

{

cout<

if ( queue[i]>queue[i+1])

count +=queue[i]-queue[i+1];

else

count +=queue[i+1]-queue[i];

}

cout<

cout<

cout<<"总的寻道长度为: "<

cout<<"平均寻道长度为: "<

}

/*=====================SSTF算法====================*/

void SSTF( int queue[], int n, int diskrode, int headstarts)

{

int k=1;

int l,r;

int i,j,count=0;

queue =bubble(queue,n);

cout<<"************以下为SSTF调度算法***********"<

if ( queue[n-1] <=headstarts) //若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务

{

cout<<"磁盘扫描序列为: ";

cout<

for(i=n-1;i>=0;i--)

cout<

count =headstarts-queue[0];

}

if ( queue[0] >=headstarts) //若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务

{

cout<<"磁盘扫描序列为: ";

cout<

for(i=0;i

cout<

count =queue[n-1]-headstarts;

}

if( headstarts >queue[0] && headstarts

{

cout<<"磁盘扫描序列为:";

cout<

while ( queue[k]

{

k++;

}

l =k-1;

r =k;

while ( ( l >=0) && ( r

{

if ( (headstarts-queue[l]) <(queue

-headstarts))

{

cout<

count +=headstarts-queue[l];

headstarts =queue[l];

l=l-1;

}

else

if ( (headstarts-queue[l]) ==(queue-headstarts))

{

cout<

count +=headstarts-queue[l];

headstarts =queue[l];

l =l-1;

}

else

{

cout<

count+=queue-headstarts;

headstarts =queue;

r =r+1;

}

}

if ( l==-1) //磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道 {

for ( j=r;j

{

cout<

}

count +=queue[n-1]-queue[0];

}

else //磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道

{

for(j=l;j>=0;j--)

{

cout<

}

count +=queue[n-1]-queue[0];

}

}

cout<

cout<<"总的寻道长度为: "<

cout<<"平均寻道长度为: "<<(float)(count)/(float)(n)<

}

/*======================以下是SCAN算法====================*/

void SCAN( int queue[], int n, int diskrode, int headstarts )

{

int direction, i, fixi;

cout<<"***********以下是SCAN调度算法*************"<

cout<<"请输入磁头的走向:1.由内向外 2.由外向内"<

cout<<"请输入磁头的走向: ";

cin>>direction;

double count=0;

*bubble(queue,n);

fixi = fix(queue,n,headstarts);

cout<

cout<<"调度序列为: "<

if ( fixi ==-1) // headstarts比请求调度序列都小

{

if ( direction ==1) //从大到小

{

for ( i=0;i

{

cout<

count +=queue[i]-headstarts;

headstarts =queue[i];

}

}

if ( direction ==2) //从小到大

{

for (i=0; i

{

cout<

count +=queue[i]-headstarts;

headstarts =queue[i];

}

}

}

else if ( fixi ==n-1) //headstarts比请求调度序列的都大 {

if ( direction ==1)

{

for ( i=n-1; i>=0;i--)

{

cout<

count +=headstarts-queue[i];

headstarts =queue[i];

}

}

if ( direction ==2) //从小到大

{

for ( i=n-1;i>=0;i--) //从大到小

{

cout<

count +=headstarts-queue[i];

headstarts =queue[i];

}

}

}

else

{

if (direction ==1) //从大到小

{

for ( i=fixi;i>-1;i--)

{

cout<

count +=headstarts-queue[i];

headstarts =queue[i];

}

count +=queue[fixi+1]-queue[0]; //磁头走到0再反向走

headstarts =queue[fixi+1];

cout<

for ( i =fixi+2;i

{

cout<

count +=queue[i]-headstarts;

headstarts =queue[i];

}

}

if (direction ==2) //从小到大

{

for ( i=fixi+1;i

{

cout<

count +=queue[i]-headstarts;

headstarts =queue[i];

}

headstarts =queue[fixi];

count +=queue[n-1]-queue[fixi]; //磁头走到n-1再反向走 cout<

for ( i=fixi-1;i>-1;i--) //从大到小

{

cout<

count +=headstarts-queue[i];

headstarts =queue[i];

}

}

}

cout<

cout<<"总的寻道长度为: "<

cout<<"平均寻道长度为: "<

}

/*======================以下是CSCAN算法====================*/ void CSCAN(int queue[],int n,int diskrode,int headstarts)

{

int direction,i,fixi;

cout<<"***********以下是CSCAN调度算法*************"<

cout<<"请输入磁头的走向: ";

cin>>direction;

int count=0; //count表示磁道移动的长度

*bubble(queue,n);

fixi=fix(queue,n,headstarts);

cout<<"调度序列为: "<

if(fixi==-1) //headstarts比请求调度序列都小

{

if(direction==1) //从大到小

{

count +=queue[fixi+1]-queue[0]; //反向再反向

headstarts =queue[n-1];

cout<

for ( i=n-2;i>-1;--i)

{

cout<

count +=headstarts-queue[i];

headstarts=queue[i];

}

}

if(direction==2) //从小到大

{

for(i=0;i

{

cout<

count +=queue[i]-headstarts;

headstarts=queue[i];

}

}

}

else if(fixi==n-1) //headstarts比请求调度序列都大 {

if(direction==1) //从大到小

{

for(i=n-1;i>-1;--i)

{

cout<

count +=headstarts-queue[i];

headstarts=queue[i];

}

}

if( direction==2) //从小到大

{

cout<

for(i=1;i

{

cout<

count +=queue[i]-queue[i-1];

}

count +=headstarts-queue[0];

}

}

else

{

if ( direction==1) //从大到小

{

for ( i=fixi;i>-1;i--)

{

cout<

count +=headstarts-queue[i];

headstarts=queue[i];

}

count +=queue[n-1]-queue[0]; //磁头走到0时再反向...

headstarts=queue[n-1];

cout<

for ( i=n-2;i>fixi;i--)

{

cout<

count +=headstarts-queue[i];

headstarts =queue[i];

}

}

if(direction==2) //从小到大

{

for( i=fixi+1;i

{

if (direction==2) //从小到大

{

cout<

count +=queue[i]-headstarts;

headstarts =queue[i];

}

}

count +=queue[n-1]-queue[0]; //磁头走到n-1再反向走... headstarts =queue[0];

cout<

for(i=1;i

{

cout<

count +=queue[i]-headstarts;

headstarts=queue[i];

}

}

cout<

cout<<"总的寻道长度为: "<

cout<<"平均寻道长度为: "<

}

void main()

{

int n, i, diskrode, headstarts; //n表示调度磁盘请求序列queue 的长度,diskrode表示磁盘磁道的个数,headstarts表示目前正在调度的磁道; cout<<"请输入磁盘的总磁道数:"<

cin>> diskrode;

cout<<"请输入磁盘调度请求序列个数:"<

cin>>n;

int *queue;

queue =(int*)malloc(n*sizeof(int)); //给quneue数组分配空间...

int *queue_copy;

queue_copy =(int*)malloc(n*sizeof(int));

cout<<"请依次输入该序列的值:"<

for ( i=0;i

cin>>queue[i];

for ( i=0;i

queue_copy[i] =queue[i];

cout<<"请输入正在调度的磁道: ";

cin>>headstarts;

int menux;

menu();

cout<<"请按菜单选择,输入相应的数字: ";

cin>>menux;

while (menux !=0)

{

if (menux ==1)

FCFS(queue,n,diskrode,headstarts);

if (menux ==2)

SSTF(queue,n,diskrode,headstarts);

if (menux ==3)

SCAN(queue,n,diskrode,headstarts);

if (menux ==4)

CSCAN(queue,n,diskrode,headstarts);

if (menux ==5)

cout<<"程序结束,谢谢使用!"<

cout<

init(queue,queue_copy,n);

menu();

cout<<"请按菜单选择,输入相应的数字: "; cin>>menux;

cout<

}

}

操作系统课程设计

课程设计报告 2015~2016学年第一学期 操作系统综合实践课程设计 实习类别课程设计 学生姓名李旋 专业软件工程 学号130521105 指导教师崔广才、祝勇 学院计算机科学技术学院 二〇一六年一月

- 1 -

- 2 -

一、概述 一个目录文件是由目录项组成的。每个目录项包含16B,一个辅存磁盘块(512B)包含32个目录项。在目录项中,第1、2字节为相应文件的外存i节点号,是该文件的内部标识;后14B为文件名,是该文件的外部标识。所以,文件目录项记录了文件内、外部标识的对照关系。根据文件名可以找到辅存i节点号,由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。UNIX 的存储介质以512B为单位划分为块,从0开始直到最大容量并顺序加以编号就成了一个文件卷,也叫文件系统。UNIX中的文件系统磁盘存储区分配图如下: 本次课程设计是要实现一个简单的模拟Linux文件系统。我们在内存中开辟一个虚拟磁盘空间(20MB)作为文件存储器,并将该虚拟文件系统保存到磁盘上(以一个文件的形式),以便下次可以再将它恢复到内存的虚拟磁盘空间中。文件存储空间的管理可采用位示图方法。 二、设计的基本概念和原理 2.1 设计任务 多用户、多级目录结构文件系统的设计与实现。可以实现下列几条命令login 用户登录 logout 退出当前用户 dir 列文件目录 creat 创建文件 delete 删除文件 open 打开文件 close 关闭文件 - 3 -

read 读文件 write 写文件 mkdir 创建目录 ch 改变文件目录 rd 删除目录树 format 格式化文件系统 Exit 退出文件系统 2.2设计要求 1) 多用户:usr1,usr2,usr3,……,usr8 (1-8个用户) 2) 多级目录:可有多级子目录; 3) 具有login (用户登录)4) 系统初始化(建文件卷、提供登录模块) 5) 文件的创建:create (用命令行来实现)6) 文件的打开:open 7) 文件的读:read8) 文件的写:write 9) 文件关闭:close10) 删除文件:delete 11) 创建目录(建立子目录):mkdir12) 改变当前目录:cd 13) 列出文件目录:dir14) 退出:logout 新增加的功能: 15) 删除目录树:rd 16) 格式化文件系统:format 2.3算法的总体思想 - 4 -

操作系统课程设计报告书

题目1 连续动态内存管理模拟实现 1.1 题目的主要研究内容及预期达到的目标 (1)针对操作系统中内存管理相关理论进行设计,编写程序并进行测试,该程序管理一块虚拟内存。重点分析三种连续动态内存分配算法,即首次适应算法、循环首次适应算法和最佳适应算法。 (2)实现内存分配和回收功能。 1.2 题目研究的工作基础或实验条件 (1)硬件环境:PC机 (2)软件环境:Windows XP,Visual C++ 6.0 1.3 设计思想 首次适应算法的实现:从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法的目的在于减少查找时间。为适应这种算法,空闲分区表中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高址空间保留大的空闲区。 循环首次适应算法的实现:在分配内存空间时,不再每次从表头开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。 最佳适应算法的实现:从全部空闲区中找到能满足作业要求的、且最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表中的空闲分区要按从小到大进行排序,从表头开始查找第一个满足要求的自由分配。 1.4 流程图 内存分配流程图,如图1-1所示。

图1-1 内存分配流程图内存回收流程图,如1-2所示。

图1-2 内存回收流程图 1.5 主要程序代码 (1)分配内存 void allocate(char z,float l) { int i,k; float ad; k=-1; for(i=0;i= l && free_table[i].flag == 1) if(k==-1 || free_table[i].length

模拟磁盘调度算法,操作系统课程设计报告书

某某大学 课程设计报告课程名称:操作系统 设计题目:模拟磁盘调度算法 系别:计算机系 专业:计算机科学与技术 组别: 学生: 学号: 起止日期: 指导教师:

目录 第一章需求分析 (1) 1.1课程设计的简介 (1) 1.2课程设计的目的 (1) 1.3磁盘调度主要思想 (1) 1.4课程设计容 (2) 第二章概要设计 (3) 2.1设计思想 (3) 2.2 数据结构 (3) 2.3模块调用关系图 (3) 2.4子模块程序流程图 (5) 第三章详细设计 (6) 3.1模块划分 (6) 第四章代码测试 (9) 4.1先来先服务 (9) 4.1最短寻道时间优先 (11) 4.1扫描算法 (12) 第五章心得体会 (13) 第六章致 (13) 参考文献 (1)

附源代码 (2)

第一章需求分析 1.1课程设计的简介 这是一个用VC++6.0为工具、C++为编程语言而实现模拟先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)的一个磁盘调度程序。该程序设计系统主界面可以灵活选择某种算法并算出磁头移动的总磁道数以及平均磁道数。 1.2课程设计的目的 本课程设计的目的是通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)等磁盘调度算法的理解。 1.3磁盘调度主要思想 设备的动态分配算法与进程调度相似,也是基于一定的分配策略的。常用的分配策略有先请求先分配、优先级高者先分配等策略。在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的。操作系统中,对磁盘的访问要求来自多方面,常常需要排队。这时,对众多的访问要求按一定的次序响应,会直接影响磁盘的工作效率,进而影响系统的性能。访问磁盘的时间因子由3部分构成,它们是查找(查找磁道)时间、等待(旋转等待扇区)时间和数据传输时间,其中查找时间是决定因素。因此,磁盘调度算法先考虑优化查找策略,需要时再优化旋转等待策略。 平均寻道长度(L)为所有磁道所需移动距离之和除以总的所需访问的磁道数(N),即: L=(M1+M2+……+Mi+……+MN)/N。其中Mi为所需访问的磁道号所需移动的磁道数。 启动磁盘执行输入输出操作时,要把移动臂移动到指定的柱面,再等待指定扇区的旋转到磁头位置下,然后让指定的磁头进行读写,完成信息传送。因此,执行一次输入输出所花的时间有:

操作系统课程设计报告

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告 学院:计算机学院 专业班级: 13软件工程1班 提交时间: 2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。

二、环境条件 系统: WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景 计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。

(4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。 2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下:钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<

操作系统课程设计完整版内含代码

操作系统课程设计LRU页面调度算法 学号: 姓名: 学院: 专业: 班级: 指导老师: 日期:

目录 一、实验题目 (1) 二、课程设计的目的 (1) 三、设计内容 (1) 四、设计要求 (1) 五、设计思想 (1) 六、主要数据结构及其说明 (2) 七、硬件支持 (3) 八、源程序文件 (3) 九、程序运行结果 (7) 十、实验体会 (8)

一实验题目 LRU页面调度算法 二课程设计的目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解决实际问题的机会。 1.进一步巩固和复习操作系统的基础知识。 2. 培养学生结构化程序、模块化程序设计的方法和能力。 3.提高学生调试程序的技巧和软件设计的能力。 4.提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。 三设计内容 程序应模拟实现LRU算法思想,对n个页面实现模拟调度。 四设计要求 1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。 2.对系统进行功能模块分析、画出总流程图和各模块流程图。 3.用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可以反复使用,最好使用菜单。 4.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。 5.所有程序需调试通过。 五设计思想 最近最久未使用(LRU)页调度算法是选择最近最久未使用的页面予以淘汰。 算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间,当所要访问的页面在内存块中时,就不淘汰页面,否则,淘汰页面中时间最长的,即淘汰最近最久未使用的页面。

操作系统磁盘调度算法实验报告

《操作系统原理》 课程设计报告书 题目:磁盘调度 专业:网络工程 学号: 学生姓名: 指导教师: 完成日期:

目录 第一章课程设计目的 (1) 1.1编写目的 (1) 第二章课程设计内容 (2) 2.1设计内容 (2) 2.1.1、先来先服务算法(FCFS) (2) 2.1.2、最短寻道时间优先算法(SSTF) (2) 2.1.3、扫描算法(SCAN) (3) 2.1.4、循环扫描算法(CSCAN) (3) 第三章系统概要设计 (4) 3.1模块调度关系图 (4) 3.2模块程序流程图 (4) 3.2.1 FCFS算法 (5) 3.2.2 SSTF算法 (6) 3.2.3 SCAN算法 (7) 3.2.4 CSCAN算法 (8) 第四章程序实现 (9) 4.1 主函数的代码实现 (9) 4.2.FCFS算法的代码实现 (11) 4.3 SSTF算法的代码实现 (13) 4.4 SCAN算法的代码实现 (15) 4.5 CSCAN算法的代码实现 (17) 第五章测试数据和结果 (20) 第六章总结 (23)

第一章课程设计目的 1.1编写目的 本课程设计的目的是通过磁盘调度算法设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法、最短寻道时间优先算法、扫描算法以及循环扫描算法等磁盘调度算法的理解 1

第二章课程设计内容 2.1设计内容 系统主界面可以灵活选择某种算法,算法包括:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)。 2.1.1、先来先服务算法(FCFS) 这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。 2.1.2、最短寻道时间优先算法(SSTF) 该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。 2

操作系统课程设计报告

上海电力学院 计算机操作系统原理 课程设计报告 题目名称:编写程序模拟虚拟存储器管理 姓名:杜志豪.学号: 班级: 2012053班 . 同组姓名:孙嘉轶 课程设计时间:—— 评语: 成绩: 目录 一、设计内容及要求 (4) 1. 1 设计题目 (4) 1.2 使用算法分析: (4)

1. FIFO算法(先进先出淘汰算法) (4) 1. LRU算法(最久未使用淘汰算法) (5) 1. OPT算法(最佳淘汰算法) (5) 分工情况 (5) 二、详细设计 (6) 原理概述 (6) 主要数据结构(主要代码) (6) 算法流程图 (9) 主流程图 (9) Optimal算法流程图 (10) FIFO算法流程图 (10) LRU算法流程图 (11) .1源程序文件名 (11) . 2执行文件名 (11) 三、实验结果与分析 (11) Optimal页面置换算法结果与分析 (11) FIFO页面置换算法结果与分析 (16) LRU页面置换算法结果与分析 (20) 四、设计创新点 (24) 五、设计与总结 (27)

六、代码附录 (27) 课程设计题目 一、设计内容及要求 编写程序模拟虚拟存储器管理。假设以M页的进程分配了N

块内存(N

操作系统课程设计报告

课程设计说明书 设计题目:操作系统课程设计 班级:信息学管理与信息系统2011级 学号: 2 姓名:克乾

山东科技大学2013年12 月11 日

课程设计任务书 学院信息科学与工程专业信息学管理与信息系统班级2011-2 克乾 一、课程设计题目:操作系统课程设计 二、课程设计主要参考资料 (1)Abraham Silberschatz & Peter Baer Galvin & Greg Gagne. Operating System Concepts(第七版影印版). 高等教育. 2007.3. (2)c++面向对象程序设计电子工业 (3)计算机操作系统(第三版)电子科技大学 三、课程设计应解决的主要问题: (1)CPU调度算法的模拟实现 (2)死锁相关算法的实现 (3)磁盘调度算法的实现 四、课程设计相关附件(如:图纸、软件等): (1)程序源代码 (2) 五、任务发出日期:2013-10-1 课程设计完成日期:2014-1-1

指导教师签字:

指导教师对课程设计的评语成绩: 指导教师签字: 年月日

设计1 CPU调度算法的模拟实现一、设计目的 利用C++编写CPU调度算法,实现先来先服务调度算法FCFS、优先级调度算法PS、短作业优先调度算法SJF、时间片轮转调度算法RR的运行过程和实现的结果,针对模拟进程,利用编写的CPU调度算法对需要运行的进程进行调度。进行算法评价,计算平均周转时间和平均等待时间。 二、设计要求 针对模拟进程,利用CPU调度算法进行调度,最后要进行算法评价,计算平均周转时间和平均等待时间,并且输出调度结果和输出算法评价指标。 调度所需的进程参数由输入产生(手工输入或者随机数产生)。 三、设计说明 时间片轮转算法需要输入相应的时间片,所以独立编写一个程序,系统主体结构如下:

FIFO磁盘调度算法操作系统课程设计报告_(1)

FIFO磁盘调度算法操作系统课程设计报告_(1)

哈尔滨理工大学 课程设计 (计算机操作系统)题目: FIFO磁盘调度算法 班级: 姓名: 指导教师: 系主任: 2014年03月01日

目录 1FIFO磁盘调度算法课程设计 (1) 1.1 题目分析 (1) 1.2 数据结构 (1) 1.3 流程图 0 1.4 实现技术 (1) 1.5 设计结论和心得 (4) 2 Linux代码分析 (5) 2.1 功能说明 (15) 2.2 接口说明 (15) 2.3 局部数据结构 (15) 2.4 流程图 (16) 2.5 以实例说明运行过程 (16) - -

1FIFO磁盘调度算法课程设计 1.1题目分析 本课程设计的目的是通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务磁盘调度算法的理解。 这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。 1.2数据结构 1 先来先服务算法模块:void FCFS(int array[],int m) 输入磁道号,按先来先服务的策略输出磁盘请求序列,求平均寻道长度,输出移动平均磁道数。 主要代码:for(i=0,j=1;j

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告学院:计算机学院 专业班级:13软件工程1班 提交时间:2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。 二、环境条件 系统:WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景

计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。 (4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。 2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下: 钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<

操作系统课程设计

湖南科技大学计算机科学与工程学院 操作系统课程设计报告 ******** *** 目录 实验一 Windows 进程管理 实验二 Linux 进程管理 实验三 互斥与同步 实验四 银行家算法的模拟与实现 实验五 内存管理 指导老师: *** 完成时间: **** ** **

实验六磁盘调度 实验七进程间通信 实验一 Windows进程管理 一、实验目的 1 )学会使用VC编写基本的Win3 2 Consol Application (控制台应用程序)。 2)2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟 悉操作系统的进程概念,理解Windows进程的"一生”。 3)3)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步 的基本程序设计方法。 二、实验内容和步骤 (1)编写基本的 Win32 Consol Application 步骤1:登录进入 Windows系统,启动VC++ 6.0。 步骤2:在“ FILE”菜单中单击“ NEW”子菜单,在“ projects ”选项卡中选择 “Win32 ConsolApplication ”,然后在“ Project name 处输入工程名,在“Location ”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“ FILE”菜单中单击“ NEW”子菜单,在“ Files ”选项卡中选择“ C++ Source File ” ,然后在“ File ”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5 :在“开始”菜单中单击“程序” -“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的 debug子目录,执行编译好的可执行程序,列出运行结果(如果运行不成功,则可能的原因是什么?) 如果运行不成功可能是路径有问题或者没有通过编译。

磁盘调度算法的模拟实现

磁盘调度算法的模拟实现 学院 专业 学号 学生姓名 指导教师姓名 2014年3月19日 目录

一、课设简介 (2) 1.1 课程设计题目 (2) 1.2 课程设计目的 (2) 1.3 课程设计要求 (2) 二、设计内容 (3) 2.1功能实现 (3) 2.2流程图 (3) 2.3具体内容 (3) 三、测试数据 (4) 3.3 测试用例及运行结果 (4) 四、源代码 (5) 五、总结 (12) 5.1 总结............................................ 一、课设简介 1.1课程设计题目

磁盘调度算法的模拟实现1 1.2程序设计目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。 1)进一步巩固和复习操作系统的基础知识。 2)培养学生结构化程序、模块化程序设计的方法和能力。 3)提高学生调试程序的技巧和软件设计的能力。 4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。 1.3 设计要求 1)磁头初始磁道号,序列长度,磁道号序列等数据可从键盘输入,也可从文件读入。 2)最好能实现磁道号序列中磁道号的动态增加。 3)磁道访问序列以链表的形式存储 4)给出各磁盘调度算法的调度顺序和平均寻道长度 二、设计内容 2.1 功能实现 设计并实现一个本别利用下列磁盘调度算法进行磁盘调度的模拟

程序。 1) 先来先服务算法FCFS 2) 最短寻道时间优先算法 SSTF 2.2流程图 2.3具体内容 1)先来先服务算法FCFS 这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘 的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请 求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情 况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情开始 选择算法 F C F S S S T F 结束

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告 学院:计算机学院 专业班级:13软件工程1班 提交时间:2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。 二、环境条件

系统:WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景 计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。 (4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。

2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下:钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<

进程调度算法磁盘调度算法银行家算法操作系统课程设计大全

操作系统课程设计 说明书 学院名称: 专业班级: 姓名: 学号: 2010年7月16日

评分标准 优秀:有完整的符合标准的文档,文档有条理、文笔通顺,格式正确,程序完全实现设计要求,独立完成; 良好:有完整的符合标准的文档,文档有条理、文笔通顺,格式正确;程序完全实现设计要求,独立完成,但存在少量错误; 中等:有完整的符合标准的文档,有基本实现设计方案的软件,设计方案正确; 及格:有完整的符合标准的文档,有基本实现设计方案的软件,设计方案基本正确; 不及格:没有完整的符合标准的文档,软件没有基本实现设计方案,设计方案不正确。没有独立完成,抄袭或雷同。 成绩评定为:。 指导教师: 年月日

目录 一.进程调度算法4-----23 页二.银行家算法24-----34 页三.磁盘调度算法35------46页

进程调度算法 1.设计目的 在多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略决定哪个进程优先占有处理机,因而必须解决进程调度的问题,进程调度算法就是要解决进程调度的问题。 2. 任务及要求 2.1 设计任务 设计程序来模拟进程的四种调度算法,模拟实现调度的基本功能。 2.2 设计要求 产生的各种随机数要加以限制,如alltime限制在40以内的整数。 进程的数量n不能取值过大。 3. 算法及数据结构 3.1算法的总体思想(流程) 每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段: (1)进程优先数ID,其中0为闲逛进程,用户进程的标识数为1,2,3…。 (2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优 先级大于0,且随机产生,优先数越大,优先级越高。 (3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。 (4)进程总共需要运行时间Alltime,利用随机函数产生。 (5)进程状态,0:就绪态;1:运行态;2:阻塞态。 利用链表将数据连接起来,实现数据的存储。 3.2 链表模块 3.2.1 功能 实现链表的存储功能,以及实现存储的查找功能。

操作系统(一个小型操作系统的设计与实现)课程设计

南通大学计算机科学与技术学院操作系统课程设计报告 专业: 学生姓名: 学号: 时间:

操作系统模拟算法课程设计报告 设计要求 将本学期三次的实验集成实现: A.处理机管理; B.存储器管理; C.虚拟存储器的缺页调度。 设计流程图 主流程图 开始的图形界面 处理机管理存储器管理缺页调度 先来先服务时 间 片 轮 转 首 次 适 应 法 最 佳 适 应 法 先 进 先 出 L R U 算 法

A.处理机调度 1)先来先服务FCFS N Y 先来先服务算法流程 开始 初始化进程控制块,让进程控制块按进程到达先后顺序让进程排队 调度数组中首个进程,并让数组中的下一位移到首位 计算并打印进程的完成时刻、周转时间、带权周转时间 其中:周转时间 = 完成时间 - 到达时间 带权周转时间=周转时间/服务时间 更改计时器的当前时间,即下一刻进程的开始时间 当前时间=前一进程的完成时间+其服务时间 数组为空 结束

2)时间片轮转法 开始 输入进程总数 指针所指的进程是 否结束 输入各进程信息 输出为就绪状态的进程的信息 更改正在运行的进程的已运行时间 跳过已结束的程序 结束 N 指向下一个进程 Y 如果存在下一个进程的话 Y N 输出此时为就绪状态的进程的信息 时间片轮转算法流程图

B.存储器管理(可变式分区管理) 1)首次适应法 分配流程图 申请xkb内存 由链头找到第一个空闲区 分区大小≥xkb? 大于 分区大小=分区大小-xkb,修改下一个空闲区的后向指针内容为(后向指针)+xkb;修改上一个空闲区的前向指针为(前向指针)+xkb 将该空闲区从链中摘除:修改下一个空闲区的后向地址=该空闲区后向地址,修改上一个空闲区的前向指针为该空闲区的前向指针 等于 小于延链查找下 一个空闲区 到链尾 了? 作业等待 返回是 否 登记已分配表 返回分配给进程的内存首地址 开始

操作系统课程设计报告

操作系统课程设计实验报告 实验名称:进程控制 姓名/学号: 一、实验目的 学习、理解和掌握Linux与windows的进行控制系统调用的功能,熟悉主要的几个系统调用命令的格式和如何利用系统调用命令进行编程。通过学习,理解如何创建一个进程、改变进程执行的程序、进程和线程终止以及父子进程的同步等,从而提高对进程和线程控制系统调用的编程能力。 二、实验内容 设计并实现Unix的“time”命令。“mytime”命令通过命令行参数接受要运行的程序,创建一个独立的进程来运行该程序,并记录程序运行的时间。 三、实验环境 CPU: Inter ×2 2.10GHz RAM: 3.00GB Windows 7 旗舰版 Linux Ubuntu 10.04 编译: VS2010 四、程序设计与实现 4.1进程控制系统的调用 4.1.1 windows进程控制调用程序中使用的数据结构及主要符号说明 SYSTEMTIME starttime,endtime; //进程开始时间和结束时间 PROCESS_INFORMATION pi //该结构返回有关新进程及 //其主线程的信息 STARTUPINFO si //该结构用于指定新进程的主窗口特性4.1.2 linux进程控制调用程序中使用的数据结构及主要符号说明 struct timeval starttime,endtime //进程开始时间和结束时间 pid_t pid //进程标志符

4.2 程序流程图 图1 windows进程控制调用图2 linux进程控制调用程序运行流程图程序运行流程图 五、实验结果和分析 5.1 windows实验结果和分析

操作系统课程设计

计算机科学技术学院 操作系统原理课程设计报告 题目:进程管理系统 专业: 班级: 姓名: 学号: 指导老师: 年月日

《操作系统原理》课程设计任务书 一、课程设计题目(任选一个题目) 1.模拟进程管理 2.模拟处理机调度 3.模拟存储器管理 4.模拟文件系统 5.模拟磁盘调度 二、设计目的和要求 1.设计目的 《操作系统原理》课程设计是网络工程专业实践性环节之一,是学习完《操作系统原理》课程后进行的一次较全面的综合练习。其目的在于加深对操作系统的理论、方法和基础知识的理解,掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,培养学生的系统设计能力,并了解操作系统的发展动向和趋势。 2.基本要求: (1)选择课程设计题目中的一个课题,独立完成。 (2)良好的沟通和合作能力 (3)充分运用前序课所学的软件工程、程序设计、数据结构等相关知识 (4)充分运用调试和排错技术 (5)简单测试驱动模块和桩模块的编写 (6)查阅相关资料,自学具体课题中涉及到的新知识。 (7)课题完成后必须按要求提交课程设计报告,格式规范,内容详实。 三、设计内容及步骤 1.根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么。

2.根据实现的功能,划分出合理的模块,明确模块间的关系。 3.编程实现所设计的模块。 4.程序调试与测试。采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果; 5.结果分析。程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。 6.编写课程设计报告; 设计报告要求:A4纸,详细设计部分主要叙述本人的工作内容 设计报告的格式: (1)封面(题目、指导教师、专业、班级、姓名、学号) (2)设计任务书 (3)目录 (4)需求分析 (5)概要设计 (6)详细设计(含主要代码) (7)调试分析、测试结果 (8)用户使用说明 (9)附录或参考资料 四、进度安排 设计在学期的第15、16周进行,时间安排如下:

计算机操作系统课程设计

计算机操作系统课程设计 班级:计091-1 姓名: 学号: 使用语言:C++ 指导老师: 学院:

一、系统要求 1、实验目的 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。 2、实验内容 为linux系统设计一个简单的二级文件系统。要求做到以下几点: (1)可以实现下列几条命令(至少4条); login 用户登陆 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 (2)列目录时要列出文件名、物理地址、保护码和文件长度; (3)源文件可以进行读写保护。

二、系统分析 1、设计思想 本文件为二级文件系统,即要实现对文件的增删改查,同时又具备登陆系统、注册用户的功能,各个用户之间的文件系统互不干扰。 本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。 系统采用结构体来存储用户、文件目录、文件数据内容: 0 48*5 48*5+44*50 48*5+44*50+264*200 每个分区都是由结构体组成,每个个去的结构体的个数由格式化系统是决定。

整个系统的编码构成主要分为: Allstruct.h 定义了每个分区的结构体; Mysys.h 声明了对系统操作的各种方法;Myuserfile.h 声明了对文件操作的各种方法; Mymain.cpp 整个系统的主函数,操作入口; Mysys.cpp 包含了mysys.h,实现了操作系统的各种方法;Myuserfile.cpp 包含了myuserfile.h,实现了操作文件的各种方法; 2、主要数据结构 Allstruct.h文件的内容: struct s_user //用户区结构体 { long isuse; //是否使用 char name[20]; //用户名 char psd[20]; //密码 long address; //目录地址 };

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

中国石油大学(华东)操作系统课程设计报告 姓名: 学号: 成绩: 目录

实验一、螺旋矩阵 (3) 实验二、用Shell程序实现文件的批量管理 (4) 实验三、驱动下的螺旋矩阵程序 (7) 实验四、哲学家进餐问题 (10) 实验五、NCURSE程序框架 (14) 实验一、螺旋矩阵

一、实验任务 用C语言编写一个螺旋矩阵程序,实现输入行数和列数即可形成A~Z的螺旋矩阵,并用Makefile完成编译。 二、实验环境和工具 VMware Workstation红帽子 Linux-2.4.20-8 三、关键代码 1、螺旋矩阵实现代码(SpiralMatrix.c) #include #define N 10 int 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=0&&x=0&&y

相关文档
相关文档 最新文档