文档库 最新最全的文档下载
当前位置:文档库 › 南京农业大学-操作系统课程设计实验报告

南京农业大学-操作系统课程设计实验报告

南京农业大学-操作系统课程设计实验报告
南京农业大学-操作系统课程设计实验报告

操作系统课程设计

实践报告

题目: 基于SPOOLing技术的多打印机管理系统仿真姓名:

学院: 信息科技学院

专业: 计算机与科学系

班级: 网络工程131

学号:

指导教师: 姜海燕职称: 教授

2016年3月18日

目录

摘要 (2)

关键字 (2)

1. 目的及意义....................................................................................... 错误!未定义书签。

2. 课程设计思路及完成功能说明 (3)

2.1设计思路 (3)

2.2 完成功能说明 (4)

3. 硬件及数据结构设计与实现 (5)

3.1 输入请求块类Inblock (5)

3.2 PCB类 (5)

3.3请求输出类Reqblock (6)

3.4 主类Spooling (6)

3.5 可视化类Spooling_Frame ........................................................ 错误!未定义书签。

4. 仿真系统结构及关键操作实现 (9)

4.1 Spooling(Spooling_Frame Spooling_Frame) (9)

4.2 main_control主控函数 (10)

4.3 require_output_service(Pcb pcb)--请求输出函数 (10)

4.4 SpoolingPcb()--Spooling输出函数 (11)

4.5 FCFSPrint()--先来先服务算法 (12)

4.6 SJFPrint()--短作业优先调度算法 (12)

4.7文件管理 (13)

5. 测试用例及分析 (13)

5.1开发调试及运行环境 (13)

5.2不同情境的测试用例,分析模拟结果..................................... 错误!未定义书签。

6. 小组分工及实践体会 (22)

7. 存在问题及改进 (24)

参考文献 (24)

核心部分代码 (25)

基于SPOOLING技术的多打印机管理系统仿真实现

摘要:SPOOLING技术实际上是一种外围设备同时联机操作技术,是关于慢速字符设备如何与计算机主机交换信息的一种技术,通常称为"假脱机技术"。SPOOLING技术是在通道技术和多道程序设计基础上产生的,它由主机和相应的通道共同承担作业的输入输出工作,利用磁盘作为后援存储器,实现外围设备同时联机操作。

本设计模拟实现了使用SPOOLING技术的输出过程,并采用随机调度算法模拟SPOOLING进程的调度过程和先来先服务、短作业优先算法模拟各进程的作业调度过程。它包括一个SPOOLING输出进程、三个请求输出的进程和一个简单的文件管理系统模块。请求输出进程每次调用请求服务程序输出一行信息,由输出请求服务程序将该信息项送入输出井。待输出一个结束标志时,表示一个输出文件输出完成,在输出井中形成一个输出信息块,并构成一个输出请求块,SPOOLING 输出进程工作时,根据某输出请求块将输出井中相应信息块实际输出到打印机或显示器,然后可由打印按钮触发打印过程将实际信息打印到相应打印机中并显示。SPOOLING进程与请求输出进程可并发运行。

关键字:SPOOLING;进程;输出井;联机操作;打印机

1.目的及意义

Spooling技术:利用高速共享设备将低速的独享设备模拟为高速的共享设备。它是关于慢速字符设备如何与计算机主机交换信息的一种技术,通常称为“假脱机技术”。

它在输入和输出之间增加了“输入井”和“输出井”的排队转储环节,以消除用户的“联机”等待时间。在系统输入模块收到作业输入请求信号后,输入管理模块中的读过程负责将信息从输入装置中读入输入井缓冲区。当缓冲区满时,由写过程将信息从缓冲区写到外存的输入井中,读过程和写过程反复循环,直到一个作业输入完毕。当读过程读到一个硬件结束标志之后,系统再次驱动写过程把最后一批信息写入外存输入井并调用中断处理程序结束该次输入。然后,系统为该作业建立作业控制块,从而使输入井中的作业进入作业等待队列,等待作业调度程序选中后进入内存运行。系统在管理输入井过程中可以“不断”读入输入的作业,直到输入结束或输入井满而暂停。

设计目的,若系统的某台打印机采用了虚拟设备技术,那么若有进程要求对它打印输出时,SPOOLing系统并不是将这台打印机直接分配给进程,而是在共享设备(磁盘)上的输出,SPOOLing存储区中为其分配一块存储空间,进程的输出数据以文件形式此。各进程的数据输出文件形成了一个输出队列,由输出SPOOLing 系统控制这台打印机进程,依次将队列中的输出文件实际打印输出。在SPOOLing 系统中,实际上并没有为任何进程分配,而只是在输入井和输出井中,为进程分配一存储区和建立一章I/O请求表。这样,便把独占设备改造为共享设备。将一台独享打印机改造为可供多个用户共享的打印机,是应用SPOOLing技术的典型实例。具体做法是:系统对于用户的打印输出,但并不真正把打印机分配给该用

户进程,而是先在输出井中申请一个空闲盘块区,并将要打印的数据送入其中;然后为用户申请并填写请求打印表,将该表挂到请求打印队列上。若打印机空闲,输出程序从请求打印队首取表,将要打印的数据从输出井传送到内存缓冲区,再进行打印,直到打印队列为空。

2.课程设计思路及完成功能说明

2.1设计思路:

SPOOLING技术的特点主要体现在以下三个方面:第一,提高了I/O速度.从对低速I/O设备进行的I/O操作变为对输入井或输出井的操作,如同脱机操作一样,提高了I/O速度,缓和了CPU与低速I/O设备速度不匹配的矛盾。第二,设备并没有分配给任何进程.在输入井或输出井中,分配给进程的是一存储区和建立一张I/O请求表。第三,实现了虚拟设备功能.多个进程同时使用一台独享设备,而对每一进程而言,都认为自己独占这一设备,不过,该设备是逻辑上的设备。

操作系统初启后激活SPOOLING输入程序使它处于捕获输入请求的状态,一旦有输入请求消息,SPOOLING输入程序立即得到执行,把装在输入设备上的作业输入到硬盘的输入井中。输入井是一组硬盘扇区SPOOLING输出把硬盘上输出井的数据送到慢速的输出设备上。输出井的数据来自作业运行过程中的输出。这就是说,作业调度程序不是从输入设备上装入作业,而是直接从输入井中把选中的作业装入主存,使主机等待作业输入的时间大为缩短。同样对作业的输出而言,写到输出井要比写到输出设备快得多。即使作业的JCB已注销,SPOOLING输出活动仍可以从容地把输出井中没有输出完的数据继续输出到输出设备上。由此可见,引入SPOOLING技术,把一个共享的硬盘改造成若干台输入设备(对作业调度程序而言)和若干台输出设备(对各作业而言)。这样的设备称为虚拟设备,它们的物理实体是输入(出)井。这样改造之后,保持了物理的输入(出)设备繁忙地与主机并行地工作,提高了整个系统的利用率。

SPOOLING技术是在通道技术和多道程序设计基础上产生的,它由主机和相应的通道共同承担作业的输入输出工作,利用磁盘作为后援存储器,实现外围设备同时联机操作。

SPOOLING系统由专门负责I/O的常驻内存的进程以及输入井、输出井组成;它将独占设备改造为共享设备,实现了虚拟设备功能。将一台独享打印机改造为可供多个用户共享的打印机,是应用SPOOLING技术的典型实例。具体做法是:系统对于用户的打印输出,但并不真正把打印机分配给该用户进程,而是先在输出井中申请一个空闲盘块区,并将要打印的数据送入其中;然后为用户申请并填写请求打印表,将该表挂到请求打印队列上。若打印机空闲,输出程序从请求打印队首取表,将要打印的数据从输出井传送到内存缓冲区,再进行打印,直到打印队列为空。

假脱机(Spooling)技术是广泛用于各种系统的一种行之有效的输入输出手段,这种技术使用比较简单的方法,缓和了处理机与低速输入输出设备速度不匹

配的矛盾,提高设备的利用率。为了更好地掌握这种技术,本实习要求学生独立地用高级语言编写一个Spooling程序来模拟假脱机输入输出过程。

本实验编制一个Spooling 输出进程,另外三个要求输出的进程并发运行。要求输出进程每运行一次只输出一项信息到输出井,待输出到一个结束标志时,表示一批信息输出完成,在输出井中形成一输出信息块,再由Spooling 进程把整个信息块实际输出到打印机或CRT。因此,进程的运行必须考虑同步问题。

进程基本状态有3种,分别为可执行,等待和结束。可执行态就是进程正在运行或等待调度的状态。

状态变化的条件为:(一共有五种状态,分别代表0,1,2,3,4)

(1)进程执行完成时,置为“结束”态。

(2)服务程序在将输出信息送输出井时,如发现输出井已满,将调用进程置为“等待状态1”。

(3)SPOOLING进程在进行输出时,若输出井空,则进入“等待状态2”。

(4)SPOOLING进程输出一个信息快后,应立即释放该信息快所占的输出井空间,并将正在等待输出的进程置为“可执行状态”。

(5)服务程序在输出信息到输出井并形成输出请求信息快后,若SPOOLING进程处于等待态则将其置为“可执行状态”。

(6)当用户进程声请请求输出快时,若没有可用请求快时,调用进程进入“等待状态3”。

2.2完成功能说明

(1)该系统设计了一个SPOOLING输出进程和三个请求输出的用户进程,以及一个SPOOLING输出服务程序。当确定用户进程文件数目时,调用输出服务程序,由输出服务程序将该信息送入输出井。待遇到一个输出结束标志时,表示进程该次的输出文件输出结束。之后,申请一个输出请求块,等待SPOOLING进程进行输出。

(2)SPOOLING输出进程工作时,根据请求块记录的各进程要输出的信息,将其实际输出到打印机显示器,并且可以选择作业调度算法,实现先来先服务作业调度以及短作业优先作业调度,并进行仿真打印,可生成TXT文件,其中请求输出的用户进程可并发运行,进程调度方法为先来先服务调度算法。

(3)实现了简单的文件管理功能,可以对外存进行管理,当文件输出到井中时,可以对文件进行简单的管理,包括创建文件以及将作业内容输出到文件中,实现外存管理。

3.硬件及数据结构设计与实现

3.1输入请求块类Inblock

记录进程的输入情况,包括请求进程名,本次输入的信息长度以及信息在输入井中的首地址,将进程中文件放入请求输入块中。

class Inblock //输入请求类

{

privateint inname1; //请求进程名

privateint length1; //本次输入信息长度

privateint addr1; //信息在输入井的首地址

}

3.2PCB类

记录进程控制块情况,包括:

(1)进程标志数,记录进程编号(id=1,2,3,4)q其中1,2,3代表用户进程,4

代表SPOOLing输出进程。

(2)进程状态,记录进程的状态(status=0,1,2,3,4) 0:为可执行状态,1:

为服务程序在将输出信息送输出井时,如发现输出井已满,将调用进程置为“等待状态1”。2:为SP00LING进程在进行输出时,若输出井空,则进入“等待状态2”。3:为当用户进程申请请求输出块时,若没有可用请求块时,调用进程进人“等待状态3”。4为结束状态。

(3)要输出的文件数,记录一个进程中要输出的作业个数(count),可由键盘输入。

(4)进程输出时的临时变量,记录每个作业中的具体数值(X)。

(5)记录用户进程请求输入的文件在缓冲区的首地址(address)。

(6)记录请求输入的文件长度(length)。

public class Pcb //进程控制块类

{

private int id; //进程标志数

private int status;//进程状态

private int count;//要输出的文件数

private int x;//进程输出时的临时变量

private int address;//记录用户进程请求输入的文件在缓冲区的首地址

private int length;//记录请求输入的文件长度

}

3.3请求输出类Reqblock

记录进程的输出情况,输出进程每运行一次只输出一项信息到输出井,待输出到一个结束标志时,表示一批信息输出完成,在输出井中形成一输出信息块,包括请求进程名,本次输入的信息长度已经信息在数入井中的首地址,将进程中文件放入请求输出块中。

public class Reqblock //输出请求类

{

private int reqname; //请求进程名

private int length; //本次输出信息长度

private int addr; //信息在输出井的首地址

}

3.4主类Spooling

对数据进行初始化,实现进程的同步互斥输入,并对井进行管理,在输出井中申请一个空闲盘块区,并将要打印的数据送入其中;然后为用户申请并填写请求打印表,将该表挂到请求打印队列上。实现简单文件管理,以及打印功能的实现和作业调度算法的实现。

(1)Spooling() ——构造函数,初始化数据

(2)Spooling(Spooling_Frame Spooling_Frame) ——构造函数重载,初始化数据

(3)main_control ——系统主控函数,确定调用的进程

(4)require_output_service(Pcb pcb) ——请求输出函数

(5)SpoolingPcb() ——Spooling输出函数

(6)FCFSPrint() ——先来先服务算法

(7)SJFPrint()——短作业优先调度算法

public class Spooling //输入输出主要处理操作类

{

public Pcb PCB[];//用户进程数组

private Reqblock reqblock[];//请求块数组

private int OUT_FenPei[][];//Spooling系统为每个请求输出的进程在输出井中分别分配一个区

private int USE_ShuChuJing[]; //表示用户进程可使用的输出井的空间private int Situa_ShuChuJing[][]; //表示输出井的使用情况

private int Rest_ShuChuKuai; //表示当前系统剩余的请求输出快信息块个数

private int Ptr1, Ptr2;//表示请求输出块的使用情况

int JobPid=0; //输出缓冲区内作业的编号

String SPrint[]; //作业长度的数组队列

private int s[];

public Spooling_Frame TTS;

public Spooling() //构造函数

{

USE_ShuChuJing = new int[3];//表示用户进程可使用的输出井的空间,其初始值都为100

USE_ShuChuJing[0] = 100;//表示进程1可使用的输出井的空间为100 USE_ShuChuJing[1] = 100;//表示进程2可使用的输出井的空间为100 USE_ShuChuJing[2] = 100;//表示进程3可使用的输出井的空间为100 Situa_ShuChuJing = new int[3][2];

Situa_ShuChuJing[0][0] = 0;//代表OUT_FenPei[0]的第一个可用空缓冲指针

Situa_ShuChuJing[0][1] = 0;//代表OUT_FenPei[0]的第一个满缓冲指针Situa_ShuChuJing[1][0] = 0;//代表OUT_FenPei[1]的第一个可用空缓冲指针

Situa_ShuChuJing[1][1] = 0;//代表OUT_FenPei[1]的第一个满缓冲指针Situa_ShuChuJing[2][0] = 0;//代表OUT_FenPei[2]的第一个可用空缓冲指针

Situa_ShuChuJing[2][1] = 0;//代表OUT_FenPei[2]的第一个满缓冲指针Rest_ShuChuKuai = 10;//表示系统当前剩余的请求输出块的个数,其初始值为10

Ptr1 = 0;//ptr1是要输出的第一个请求输出块指针,初值为0

Ptr2 = 0;//ptr2是空闲请求输出块指针,初值为0

SPrint=new String[40];

for(int i=0;i<40;i++)

{SPrint[i]="";}

PCB = new Pcb[4];

for (int i = 1; i <= 4; i++)

{

PCB[i - 1] = new Pcb(i, 0, 0);

}

reqblock = new Reqblock[10];

OUT_FenPei = new int[3][100];

TTS = new Spooling_Frame(this);

}

}

3.5可视化类Spooling_Frame

主要用Java面板实现一个简单的系统界面,使系统更直观同时便于操作。

public class Spooling_Frame extends JFrame implements ActionListener //界面类

{

JButton JB1,JB2;

public JFrame JF1=new JFrame("Welcome");//欢迎界面框架

public JPanel background;//欢迎界面背景面板

//*****

public JFrame JF=new JFrame("基于SPLOOING技术的多任务打印机管理系

统仿真");//框架

JButton

startButton,clearButton,closeButton,printButton,cipanButton,JB3,JB4,J

B5,JB6,JB7;

JComboBox JC;

JTextField countText,countText2,countText3,tf1,tf2; //

用于输入进程需要输出的文件数的个数的文本框

JPanel P,p1,p2,p3,p4,p5,p6,PP,panel1,panel2,panel3,panel4;

JLabel topLabel,countlabel,countlabel2,countlabel3,Jl1,Jl2;

public JTextArea showText1,showText2,showText3,showText4,showText5,showText6;//用于输

出进程模拟输出的过程

JScrollPane

scrollPane1,scrollPane2,scrollPane3,scrollPane4,scrollPane5,scrollPan

e6;

JDialog jd1,jd2;

String pcb1Count,pcb2Count;

private Spooling aSpooling;

//******

public JFrame JF2=new JFrame("文件管理");//文件管理框架

public JPanel wenjianguanli,wenjianguanli1,wenjianguanli2;

}

4.仿真系统结构及关键操作实现

4.1 Spooling(Spooling_Frame Spooling_Frame)——构造函数重载初始化数据对函数相关数据进行初始化:

public Spooling(Spooling_Frame Spooling_Frame) //构造函数重载

{

USE_ShuChuJing = new int[3]; //表示用户进程可使用的输出井的空间,其初始值都为100

USE_ShuChuJing[0] = 100; //表示进程1可使用的输出井的空间为100 USE_ShuChuJing[1] = 100; //表示进程2可使用的输出井的空间为100 USE_ShuChuJing[2] = 100;//表示进程3可使用的输出井的空间为100

Situa_ShuChuJing = new int[2][2];

Situa_ShuChuJing[0][0] = 0; //代表OUT_FenPei[0]的第一个可用空缓冲指针Situa_ShuChuJing[0][1] = 0; //代表OUT_FenPei[0]的第一个满缓冲指针Situa_ShuChuJing[1][0] = 0;//代表OUT_FenPei[1]的第一个可用空缓冲指针Situa_ShuChuJing[1][1] = 0; //代表OUT_FenPei[1]的第一个满缓冲指针Situa_ShuChuJing[0][2] = 0;//代表OUT_FenPei[2]的第一个可用空缓冲指针Situa_ShuChuJing[1][2] = 0;//代表OUT_FenPei[2]的第一个满缓冲指针

Rest_ShuChuKuai = 10//表示系统当前剩余的请求输出块的个数,其初始值为10 Ptr1 = 0; //ptr1是要输出的第一个请求输出块指针,初值为0

Ptr2 = 0; //ptr2是空闲请求输出块指针,初值为0

SPrint=new String[40];

for(int i=0;i<40;i++)

{

SPrint[i]="";

}

PCB = new Pcb[4];//初始定义三个进程

for (int i = 1; i <= 4; i++)

{

PCB[i - 1] = new Pcb(i, 0, 0);//对进程进行初始化,分别为1,2,3号进程,进程状态和文件数均为0

}

reqblock = new Reqblock[10]; //初始化定义请求输出块,最大为10块

OUT_FenPei = new int[3][100]; //对两个请求输出的用户进程分配一个区TTS = new Spooling_Frame(this);

}

4.2 main_control ——系统主控函数,确定调用的进程

决定调用用户进程1,2,3和SPOOLING进程,实现用户进程同步互斥;

4.3require_output_service(Pcb pcb) ——请求输出函数

图1.输出请求服务的流程图

如上图1为输出请求服务的相关流程图。先判断输出井是否已满,及判断输出井USE_ShuChuJing[i]是否等于0,若等于0,则请求输出进程进行等待,若不等于0,调用PCB[i]的随机变量输出到PCB[i].X中,并将进程的输出信息PCB[i].X送到OUT_FenPei [i][Situa_ShuChuJing[i][0]]中,并且令USE_ShuChuJing[i]减一,代表已经用掉一个,然后修改空缓冲区指针Situa_ShuChuJing[i][0],令其加一,代表移到下一个空闲区中,随后进行判断文件输出是否结束,如果未结束则重新进行上述过程,如果结束,则请求输出块,如果没有空闲输出块,则请求输出的进程进行等待状态3,如果还有空闲的输出块,将文件在输出井的位置和长度填入空闲请求块,将进程名i填入请求块,修改空闲请求块指针为(ptr+1)%10,并将空闲请求块数Rest_ShuChuJing减1,随后判断SPOOLING进程是否是等待状态,如果是则唤醒SPOOLING进程,并将文件

数目减一。

public int require_output_service(Pcb pcb) //请求输出函数,进程结束返回1,进程进入等待状态返回0 //对两个用户进程起作用

{

if(pcb.getX() == 0) //此时没有用户进程输出

{}

else//当系统此时剩余的请求输出块的信息个数为零时 ,即输出井已满{pcb.setLength(length);//输入的文件长度

pcb.setStatus(3);//用户进程进行等待}

else //此时输出井内容不为空且未满

{if (USE_ShuChuJing[id - 1] != 0) //表示可用的输出井空间没有用完时,当用户进程可使用的输出井的空间不满时

{if (pcb.getX()==-1) //规定文件变量产生的数值为0-10之间的数{pcb.setX((int) (Math.random() * 10) % 10);//产生10以内的整数

pcb.setAddress(Situa_ShuChuJing[id - 1][0]);//记录输出井的使用情况}

}

4.4SpoolingPcb() ——Spooling输出函数

图2. Spooling输出进程流程图

如上图2为Spooling输出进程流程图。先判断输出块是否为空,如果不为空,按该请求输出信息块reqblock[]的指针ptrl将输出井中的一个文件的内容输出,释放相应输出井,即修改相应的输出井计数:按请求输出块中进程号修改USE_ShuChuJing数组和Situa_ShuChuJing数组,释放该请求输出块,修改请求信息块reqblock[]的指针ptrl=(ptrl+1)%10,Rest_ShuChuJing加一。然后判断是否有等待输出井空的进程,如果有,则唤醒进程,若果没有则判断有等待输出块的进程,如果有则唤醒进程,如果没有,则重新执行上述过程。

public int SpoolingPcb() //Spoo ling输出函数

{int t = 1;

while (t == 1)

{if (Rest_ShuChuKuai == 10) //初始状态,请求输出块为10

{}

else //当请求输出请求块的个数不为10时

{

int id = reqblock[Ptr1].getReqname() - 1;//将已放入输出请求块中的进程输出

int address = reqblock[Ptr1].getAddr();

int length = reqblock[Ptr1].getLength();

s = new int[length];

}

}

4.5 FCFSPrint() ——先来先服务算法

public int FCFSPrint()

{TTS.showText4.append("\n");

for(int i=0;i<=JobPid;i++)

{TTS.showText4.append(SPrint[i]);}

return 1;}

4.6 SJFPrint() ——短作业优先调度算法

public int SJFPrint()

{TTS.showText4.append("\n");

for(int i=0;i<=JobPid;i++)

{for(int j=i+1;j<=JobPid;j++)

if(SPrint[i].length()>SPrint[j].length())

{String temp=SPrint[i];

SPrint[i]=SPrint[j];

SPrint[j]=temp; }}

for(int i=0;i<=JobPid;i++)

{TTS.showText4.append(SPrint[i]); }

return 1;

}

4.7文件管理:

public void createFile(){}//创建文件

public void writeIn(String line){} //写入文件

public void delete(){}//删除文件

5.测试用例及分析

5.1开发调试及运行环境

为了完成基于SPOOLING技术的多打印机管理系统仿真实现问题,我选择开发语言为JAVA。在eclipse平台上编写,并在eclipse的控制台运行,Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。

Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的。1995年更名为Java,并重新设计用于开发Internet应用程序。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Javaapplet。另一方面,Java技术也不断更新。Java自面世后就非常流行,发展迅速,对C++语言形成有力冲击。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

Java提供了丰富的类库,可以帮助我们很方便的开发Java程序。Java致力于检查程序在编译和运行时的错误。Java自己负责内存管理,提供了垃圾内存回收机制,有效的避免了C++中最头疼的内存泄漏问题。Java的安全性可从两个方面得到保证。一方面,在Java语言里,删除了指针和释放内存等C++功能,避免了非法内存操作。

另一方面,通过Java的安全体系架构来确保Java代码的安全性。Java作为一种网络语言,其源代码被编译成一种结构中立的中间文件格式。只要有Java 运行系统的机器都能执行这种中间代码。Java源程序被编译成一种与机器无关的字节码格式,在Java虚拟机上运行。因此具有可以移植性,支持多平台。

Eclipse

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C++和Python等开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。

Eclipse 最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999

年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT 和PDE。Eclipse 项目IBM发起,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、Rational Software、Red Hat及Sybase等。Eclipse是一个开放源码项目,它其实是Visual Age for Java的替代品,其界面跟先前的Visual Age for Java差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。

随后还有包括Oracle在内的许多大公司也纷纷加入了该项目,Eclipse的目标是成为可进行任何语言开发的IDE集成者,使用者只需下载各种语言的插件即可。

Jre

JRE为Java Runtime Environment的简称,Java Runtime Environment(包括Java Plug-in)是Sun的产品,包括两部分:Java Runtime Environment和Java Plug-in。JavaRuntimeEnvironment(JRE)是可以在其上运行、测试和传输应用程序的Java平台。它包括Java虚拟机(jvm)、Java核心类库和支持文件。它不包含开发工具(JDK)--编译器、调试器和其它工具。JRE需要辅助软件--Java Plug-in--以便在浏览器中运行applet。

Java Plug-in软件允许Java Applet和JavaBean组件在使用Sun的Java Runtime Environment(JRE)的浏览器中运行,而不是在使用缺省的Java运行环境的浏览器中运行。Java Plug-in可用于Netscape Navigator和Microsoft Internet Explorer。

J2RE是Java2 Runtime Environment,即Java运行环境,只是强调其匹配Java2平台,有时简称JRE。如果你只需要运行Java程序或Applet,下载并安装它即可。如果你要自行开发 Java软件,请下载JDK(JRE和JDK的区别)。在JDK中附带有JRE。注意由于Microsoft对Java的支持不完全,请不要使用IE 自带的虚拟机来运行 Applet,务必安装一个JRE或JDK。

5.2不同情境的测试用例,分析模拟结果

图3.登录界面

上图3为登录界面,点击进入系统,就会进入Spooling仿真界面即图4所示界面,点击退出,则退出系统。

图4.仿真界面

界面主要有三部分组成,第一部分为可输入区,可以输入用户进程的作业文件个数,并可以对作业调度算法进行选择,第二部分为按钮区,可以选择相应的功能,第三部分为进程输入输出区,可以对进程的输入过程进行同步的可视化体现。

图5.运行界面

测试数据为3,3,5;即用户进程1输入的作业个数为3个,用户进程2输入的作业个数为3个,用户进程3输入的作业个数为5个,然后进程1,2,3进行同步互斥输出,然后调用SPOOLING输出进程将输出结果输入到输出缓冲区中,没有发生死锁现象。

图6. 打印界面一

图6为打印界面,选择先来先服务算法则将打印队列中的作业按先来先服务的调度算法打印出来,并且仿真模拟在F盘生成一个print.txt文件,生成的打印文件如图7所示。

图7.磁盘内效果图

图8.打印界面二

图8为打印界面,选择短作业优先算法则将打印队列中的作业按短作业优先的调度算法打印出来,并且仿真模拟在F盘生成一个print.txt文件,生成的打印文件。

操作系统课程设计

课程设计报告 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)上机前认真使用C语言编写好程序,采用Visual C++6.0作为编译环境; 2)上机时独立调试程序 3)上机验收运行结果,现场提问 4)根据具体任务要求,提交课程设计实验报告,报告内容包括:课程设计目的、内容、基本原理、模块划分、数据结构、算法设计、程序流程图(包括主程序流程图、模块详细设计流程图等)、以及算法源码(必须有相关注释,以有助于说明问题为宜,不得全盘打印而不加任何注释)、心得体会等。

设计内容一页式虚拟存储管理页面置换算法 1.目的和要求 在熟练掌握计算机虚拟存储技术的原理的基础上,利用一种程序设计语言模拟实现几种置换算法,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础 2.实验内容 阅读教材《计算机操作系统》,掌握存储器管理相关概念和原理。 模拟实现页式虚拟存储管理的三种页面置换算法(OPT、FIFO和LRU),并通过比较性能得出结论。 前提: (1)页面分配采用固定分配局部置换。 (2)作业的页面走向和分得的物理块数预先指定。可以从键盘输入也可以从文件读入。 (3)置换算法的置换过程输出可以在显示器上也可以存放在文件中,但必须清晰可读,便于检验。 3.实验环境 Windows操作系统、VC++6.0、C语言 4.实验提示 (1)基础知识 存储管理是操作系统进行资源管理的一个重要功能。现代操作系统广泛采用虚

操作系统课程设计文件系统管理)

操作系统课程设计Array文件系统管理 学院计算机学院 专业计算机科学与技术 班级 姓名 学号 2013年1月8日 广东工业大学计算机学院制 文件系统管理 一、实验目的 模拟文件系统的实现的基本功能,了解文件系统的基本结构和文件系统的管理方法看,加深了解文件系统的内部功能的实现。通过高级语言编写和实现一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作系统命令的实质内容和执行过程有比较深入的了解。 二、实验内容和要求 编程模拟一个简单的文件系统,实现文件系统的管理和控制功能。在用户程序中通过使用文件系统提供的create,open,read,write,close,delete等文件命令,对文件进行操作。 以下报告主要包括: 1.可行性分析 2.需求分析 3.概要设计

4.详细设计 5.测试 6.总结 三、可行性分析 1、技术可行性 对于图形编程还不了解,但是经过本学期的三次实验的练习,可以设计好命令操作界面。利用大二期间学习的数据结构可以模拟出此课程设计的要求。 2、经济可行性 课程设计作为本课程的练习及进一步加深理解。与经济无关,可以不考虑。(零花费,零收益) 3.法律可行性 自己编写的程序,仅为练习,不作其他用途,与外界没什么联系,可行。 四、需求分析 编写程序实现文件系统,主要有以下几点要求: 1、实现无穷级目录管理及文件管理基本操作 2、实现共享“别名” 3、加快了文件检索 五、概要设计 为了克服单级目录所存在的缺点,可以为每一位用户建立一个单独的用户文件目录UFD(User File Directory)。这些文件目录可以具有相似的结构,它由用户所有文件的文件控制块组成。此外,在系统中再建立一个主文件目录MFD (Master File Directory);在主文件目录中,每个用户目录文件都占有一个目

操作系统课程设计报告书

题目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

《操作系统课程设计》题目要求

操作系统课程设计要求 一.设计目的 熟悉Linux编程环境,加强对Linux命令的理解及函数的运用 二.设计内容 1. 在Linux环境下模拟实现简单命令解释器。 (1)要求实现的基本命令包括: pwd //显示当前所在目录的路径名 dir <目录名> //列出指定目录名中的所有目录及文件 cd <目录名或路径>//改变当前工作目录 newdir <目录名> //新建目录 deldir <目录名> //删除目录 exit //退出命令解释程序 (2)可选做的扩展命令包括: rename <旧文件名> <新文件名> //重命名一个文件或目录 find <目录> -name <待查找的文件名> //在指定的目录及其子目录中查找指定的文件date //显示当前日期 (3)提示:整个程序的大致框架可参考如下: while ( exit未被输入) { 接收键盘的一行输入 分析输入的命令 对输入的命令进行处理,调用系统函数实现功能 } 2. 设计要求 (1) 设计必须在Linux环境下进行。 (2) 命令解释程序的提示符为:姓名拼音@ (3) 程序编写中不得使用system()系统调用。 (4) 整个程序必须严格经过测试,完成所有基本功能。源程序应有较详尽的注释。 3.可能用到的系统调用: open(),close(),read(),write(),creat() chdir(), opendir(),readdir(),rewinddir(),closedir(),rmdir(),mkdir() getcwd(), ftw() time(), localtime(), asctime()

操作系统课程设计-模拟文件系统

目录 第1章需求分析 (1) 第2章概要设计 (1) 2.1 系统的主要功能 (1) 2.2系统模块功能结构 (1) 2.3运行环境要求 (2) 2.4数据结构设计 (2) 第3章详细设计 (3) 3.1模块设计 (3) 3.2算法流程图 (3) 第4章系统源代码 (4) 第5章系统测试及调试 (4) 5.1运行结果及分析 (4) 5.2系统测试结论 (5) 第6章总结与体会 (6) 第7章参考文献 (6) 附录 (7)

第1章需求分析 通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力;掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,并了解操作系统的发展动向和趋势。 模拟二级文件管理系统的课程设计目的是通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。 第2章概要设计 2.1 系统的主要功能 1) 系统运行时根据输入的用户数目创建主目录 2) 能够实现下列命令: Login 用户登录 Create 建立文件 Read 读取文件 Write写入文件 Delete 删除文件 Mkdir 建立目录

Cd 切换目录 Logout 退出登录 2.2系统模块功能结构 2.3运行环境要求 操作系统windows xp ,开发工具vc++6.0 2.4数据结构设计 用户结构:账号与密码结构 typedef struct users { char name[8]; char pwd[10]; }users;

操作系统课程设计报告

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告 学院:计算机学院 专业班级: 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<

操作系统课程设计报告

上海电力学院 计算机操作系统原理 课程设计报告 题目名称:编写程序模拟虚拟存储器管理 姓名:杜志豪.学号: 班级: 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

操作系统-课程设计

课程设计说明书(操作系统) 题目:进程调度 院系:计算机科学与工程学院 专业班级:信息安全13-2 学号:20133029xx 学生姓名:xx 指导教师:xx 2015年12月15日

安徽理工大学课程设计(论文)任务书计算机科学与工程学院

安徽理工大学课程设计(论文)成绩评定表

摘要 现代计算机系统中,进程是资源分配和独立运行的基本单位,是操作系统的核心概念。因而,进程就成为理解操作系统如何实现系统管理的最基本,也是最重要的概念。进程调度是进程管理过程的主要组成部分,是必然要发生的事件。 在现代操作系统中,进程的并发机制在绝大多数时候,会产生不断变化的进程就绪队列和阻塞队列。处于执行态的进程无论是正常或非正常终止、或转换为阻塞状态,都会引发从就绪队列中,由进程调度选择一个进程进占CPU。 进程调度的核心是进程调度的算法.在本课程设计中,用良好清晰的界面向用户展示了进程调度中的时间片轮转调度算法。在最终实现的成果中,用户可指定需要模拟的进程数,CPU时间片和进程的最大执行时间,并且选择需要演示的算法,界面将会动态的显示进程调度过程及各个队列的变化。通过此进程调度模拟系统,用户可以对时间片轮转调度算法有进一步以及直观的了解。 关键词:进程,调度,PCB,时间片轮转

目录 1.设计目的 (6) 2.设计思路 (6) 3.设计过程 (8) 3.1流程图 (8) 3.2算法 (8) 3.3数据结构 (10) 3.4源代码 (10) 4.实验结果及分析 (20) 4.1 使用说明 (20) 4.2程序演示 (20) 5.实验总结 (24) 6.参考文献 (24)

【精选】操作系统课程设计(文件系统管理)文件

评定等级 操作系统课程设计 文件系统管理 学院计算机学院 专业计算机科学与技术 班级 姓名 学号 2013年1月8日 广东工业大学计算机学院制

文件系统管理 一、实验目的 模拟文件系统的实现的基本功能,了解文件系统的基本结构和文件系统的管理方法看, 加深了解文件系统的内部功能的实现。通过高级语言编写和实现一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作系统命令的实质内容和执行过程有比较深入的了 解。 二、实验内容和要求 编程模拟一个简单的文件系统,实现文件系统的管理和控制功能。在用户程序中通过使用文件系统提供的create,open,read,write,close,delete 等文件命令,对文件进行操作。以下报告主要包括: 1.可行性分析 2.需求分析 3.概要设计 4.详细设计 5.测试 6.总结 三、可行性分析 1、技术可行性 对于图形编程还不了解,但是经过本学期的三次实验的练习,可以设计好命令操作界面。利用大二期间学习的数据结构可以模拟出此课程设计的要求。 2、经济可行性 课程设计作为本课程的练习及进一步加深理解。与经济无关,可以不考虑。(零花费,零收益) 3.法律可行性 自己编写的程序,仅为练习,不作其他用途,与外界没什么联系,可行。 四、需求分析 编写程序实现文件系统,主要有以下几点要求: 1、实现无穷级目录管理及文件管理基本操作 2、实现共享“别名” 3、加快了文件检索 五、概要设计 为了克服单级目录所存在的缺点,可以为每一位用户建立一个单独的用户文件目录 UFD (User File Directory )。这些文件目录可以具有相似的结构,它由用户所有文件的文件 控制块组成。此外,在系统中再建立一个主文件目录MFD (Master File Directory );在主文件目录中,每个用户目录文件都占有一个目录项,其目录项中包括用户名和指向该用户目 录的指针。

2017操作系统(含课程设计) - 随堂练习

随堂练习提交截止时间:2017-12-15 23:59:59 当前页有10题,你已做10题,已提交10题,其中答对10题。 1.(单选题) 操作系统是基本的特征是() A、并发 B、共享 C、虚拟 D、异步 答题: A. B. C. D. (已提交) 参考答案:A 问题解析: 2.(单选题) 下面不属于操作系统设计目标的是() A、提高资源利用率 B、提高系统吞吐量 C、用户操作计算机更方便 D、并行执行多个进程 答题: A. B. C. D. (已提交) 参考答案:D 问题解析: 3.(单选题) 历史上最早出现的操作系统是() A、单道批处理系统 B、多道批处理系统 C、分时系统 D、实时系统 答题: A. B. C. D. (已提交) 参考答案:A 问题解析: 4.(单选题) 实时操作系统必须在()内处理完来自外部的事件。 A、响应时间 B、周转时间 C、被控对象规定时间 D、调度时间 答题: A. B. C. D. (已提交) 参考答案:C 问题解析: 5.(单选题) 操作系统是对()进行管理的软件。 A、软件 B、硬件 C、计算机资源 D、应用程序 答题: A. B. C. D. (已提交) 参考答案:C 问题解析: 6.(单选题) 配置了操作系统的计算机是一台比原来的物理计算机功能更强的计算机,这样的一台计算机只是一台逻辑上的计算机,称为()计算机。 A、并行 B、真实 C、虚拟 D、共享 答题: A. B. C. D. (已提交)

问题解析: 7.(单选题) 操作系统中采用多道程序设计技术提高了CPU和外部设备的() A、利用率 B、可靠性 C、稳定性 D、兼容性 答题: A. B. C. D. (已提交) 参考答案:A 问题解析: 8.(单选题) 在操作系统中,并发性是指若干事件____发生( ) A、在同一时刻 B、在不同时刻 C、在某一时间间隔内 D、依次在不同时间间隔内 答题: A. B. C. D. (已提交) 参考答案:C 问题解析: 9.(单选题) ()操作系统允许在一台主机上同时联接多台终端,多个用户可以通过各自的终端同时交互地使用计算机。 A、网络操作系统 B、批处理操作系统 C、实时操作系统 D、分时操作系统 答题: A. B. C. D. (已提交) 参考答案:D 问题解析: 10.(单选题) 下面关于操作系统的叙述中正确的是 ( ) A、批处理作业必须提交作业控制信息 B、分时系统不一定都具有人机交互功能 C、从响应时间的角度看,实时系统与分时系统差不多 D、由于采用了分时技术,用户可以独占计算机的资源 答题: A. B. C. D. (已提交) 参考答案:A 问题解析:

操作系统课程设计报告

; 一、概述 课程设计目的、意义: 课程设计目的使学生熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。 主要任务: 模拟文件系统设计是设计和实现一个简单的文件系统。内容包括: 1.建立文件存储介质的管理机制 2.建立目录(采用一级目录结构) 3.文件系统功能(显示目录、创建、删除、打开、关闭、读、写) ~ 4.文件操作接口(显示目录、创建、删除、打开、关闭、读、写) 二、系统设计 课程设计的系统设计: 本系统模拟一个文件管理系统,要完成对文件的基本操作,文件的基本操作有文件、文件夹的打开、新建、删除和读取写入文件,创建更改目录,列出目录内容等信息。系统建立了文件目录树,存储文件系统中的所有文

件。对于用户名下的文件,用文件目录树的分枝来存贮。采用命令行操作界面很直观,也方便用户进行操作,用户只要按照操作界面所显示的命令来操作就行了。 整体设计框架: 系统初始化界面是由创建用户存储空间,管理文件,退出系统三个模块组成。用户创建由创建用户存储空间,进入目录,删除用户存储空间,显示所有用户存储空间,等模块组成。然后各个模块再由一些小模块组成。其中创建文件,打开关闭文件,读写文件等文件操作模块包括在进入目录模块里面。 三、系统实现 课程设计主要内容的实现程序代码: 《 #include <> #include <> #include <> typedef struct file{ char name[10]; struct file *next; }File; typedef struct content{ ! char name[10]; File *file;

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告学院:计算机学院 专业班级: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<

操作系统课程设计论文

学年论文(课程设计)题目:操作系统课程设计 学院数学与计算机学院 学科门类工学 专业网络工程 学号 姓名 指导教师王煜 年月日

河北大学学年论文(课程设计)任务书 (指导教师用表) 指导教师签字: 系主任签字: 主管教学院长签字: 装 订 线

河北大学学年论文(课程设计)成绩评定表学院:数学与计算机学院 装 订 线

摘要 此系统实现了存储管理、设备管理和进程管理。 存储管理部分主要实现主存空间的分配和回收。存储管理采用可移动的可变分区存储管理方式。采用数组来模拟主存,大小为512个字节。 设备管理主要包括设备的分配和回收。模拟系统中有A、B、C三种独占型设备,A设备3个,B设备2个,C设备1个。设备分配时采用采用先来先服务策略。设备回收时唤醒等待设备的进程。 进程管理主要包括进程调度,进程的创建和撤销、进程的阻塞和唤醒,中断作用的实现。其中硬件中的中央处理器用不断循环的函数CPU( )模拟,重要寄存器(如:程序状态寄存器PSW、指令寄存器IR)用全局变量模拟,中断的发现是在函数CPU中加检测PSW 的方式来模拟,时钟的模拟通过timer控件实现。进程控制块的模拟通过数组,本系统最多容纳10个。进程调度时采用时间片轮转调度算法,时间片为5。 关键词:存储管理设备管理进程管理时间片

ABSTRACT The system has storage management, equipment management and process management. The storage management has achieved the allocation and recovery of the main memory space. Variable storage management is used as storage management .We simulate the main memory by array, whose size is 512 bytes. The device management, including the distribution and recovery of devicet. We simulate three devices ,A,B,C. the numbers of them are 3,2,1. The distribution of device used to adopt first-come first-service strategy. It awakes the blocking process when the device is recycled. The process management, including scheduling ,creating revocation ,blocking and waking up the process, the realization of the interruption.We simulate the central processing unit by the cycling function named CPU(),simulate the important register by global variable, simulate the recovering of interruption by checking PSW in the function of CPU(),simulate the clock by the timer control. The simulation of the process control block by array, whose number is up to 10. When the scheduling of the process happens, we use the algorithm of time piece rotation scheduling, and the time piece is 5. Key words: storage device process time

操作系统课程设计二级文件系统

操作系统课程设计报告 专业:计算机信息处理 学号:09103408 姓名:纪旻材 提交日期:2011-12-28

【设计目的】 1. 课程设计目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。 2. 结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。 3. 通过对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力 【设计内容】 1、delete 删除文件 2、open 打开文件 3、close 关闭文件 4、write 写文件 【实验环境】 Windows7系统

Visual studio 2010 【相关知识综述】 本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。 首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记。 【设计思路】 1 主要数据结构 #define MAXNAME 25 /*the largest length of mfdname,ufdname,filename*/ #define MAXCHILD 50 /*the largest child每个用户名下最多有50个文件*/ #define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/ typedef struct/*the structure of OSFILE定义主文件*/

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告 学院:计算机学院 专业班级: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<

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

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

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

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

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

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

操作系统课程设计题目

实验一进程调度 一、实验目的 观察、体会Linux 系统的进程调度方法,并通过一个简单的进程调度模拟程序的实现,加深对进程调度算法,进程切换的理解。 二、实验内容 采用动态优先数的方法,编写一进程调度程序模拟程序。模拟程序只进行相应的调度模拟操作,不需要实际程序。 [提示]: (1) 假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为: 进程名 指针 要求运行时间 优先数 状态 其中,进程名——作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4,P5。 指针——按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。 要求运行时间——假设进程需要运行的单位时间数。 优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态——可假设有两种状态,“就绪”状态和“结束”状态。五个进程的初始状态都为“就绪”,用“R”表示,当一个进程运行结束后,它的状态为“结束”,用“E”表示。 (2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”。 (3) 为了调度方便,把五个进程按给定的优先数从大到小连成队列。用一单元指出队首进程,用指针指出队列的连接情况。 (4) 处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先数就减“1”。由于本实习是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行: 优先数-1 要求运行时间-1 来模拟进程的一次运行。 提醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行结束。在这里省去了这些工作。 (5) 进程运行一次后,若要求运行时间?0,则再将它加入队列(按优先数大小插入,且置队首标志);若要求运行时间=0,则把它的状态修改成“结束”(E),且退出队列。 (6) 若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,

操作系统课程设计(文件系统)

操作系统课程设计 班级: 姓名: 学号: 使用语言: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; //目录地址 }; struct s_list //目录结构体 { long isuse; //是否使用 char name[20]; //文件名字 long myaddress; //本条目录地址 long pointaddress; //指向的文件的地址 long isfile; //是否锁定 long pointsize; //目标文件的大小 long nextaddress; //下条目录的地址 }; struct s_file //文件结构体 { long isuse; //是否使用 char content[256]; //文件内容 long next; //下个文件块地址 };

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