资源描述
中南大学
操作系统课程设计
实验报告
题 目:多用户多任务的类操作系统
学 院:信息科学与工程学院
姓 名:
班 级:
日 期:2014/07
目录
一、 概述
二、 课程设计要求
三、 设计的基本原理和概念
四、 总体设计:实现的方法和主要技术路线
1.总体功能模块图
2.总体功能流图
五、 详细设计:
1. 模块内部的流程
2. 实现算法
3. 运行结果
六、 完成的情况
七、 使用说明
八、 实验总结
九、 参考文献
十、 附件:源程序代码
一、 概述
操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。
二、 课程设计要求
采用VC、VB、java或C等编程语言,模拟开发一个多用户多任务的类操作系统软件。要求如下:
1. 模拟进程调度算法,模拟各种进程调度算法,并能管理各种进程调度算法的演示过程。
2. 模拟各种内存分配算法及回收过程,并能动态演示。结合进程调度算法,能为进程模拟分配内存,并设计一个跟踪该内存模拟分配的进程或线程,记录内存分配的结果;
3. 模拟多用户登录管理过程,能允许多个用户登录,为每个用户建立进程或线程,并进行进程管理;
4. 能模拟文件系统管理,进程可以对文件系统(包括文件和目录)进行读、写、创建、删除、打开、关闭等操作;
5. 模拟磁盘管理过程,结合文件系统管理,显示磁盘管理的结构和文件在磁盘上的分布情况。
6. 能模拟进程通信管理,用户之间可以相互通信交流;
7. 最好能采用类似于Windows的窗口界面。
三、 设计的基本原理和概念
本系统软件是模拟操作系统的整个工作过程,主要功能包括多用户登录管理,文件与用户管理,进程与存储管理,以及系统进程管理。
多用户操作系统允许多个不同用户同时使用计算机的资源。操作系统必须确保均衡地满足各个用户的要求,他们使用的各个程序都具有足够且独立的资源,从而使一个用户的问题不会影响到整个用户群。在本系统中,将用户分为管理员用户和普通用户。登陆时可选择,若选择管理员用户登陆,则对各用户有管理权限(添加或删除),对文件系统不仅有读写权限,还能新建、删除、修改文件或目录等;若选择普通用户登陆,则只能查看用户,且只能读文件。
多用户多级目录的文件系统:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 在本系统中,文件与用户管理相结合,实现了以下几项功能:查看文件目录结构、文件属性、磁盘属性、磁盘块分配位示图、索引节点分配位示图、用户管理(管理员有该权限),查看用户、新建文件/目录(管理员权限)、删除文件/目录(管理员权限),读写文件(普通用户只读)。
进程与存储管理系统:即模拟cpu调度和内存分配。作业进入内存中,由CPU分配产生PCB属性,并通过PCB记录进程状态,实验即以PCB代表进程模拟调度过程;在多道系统中,多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机,本实验采用优先级;进程调度时,规定若就绪队列进程数少于6个,则自动从后备队列调入一个作业;系统会将占有较多资源、预期结果不符合要求的进程自动挂起,并回收所占资源,而本实验设置为手动挂起;在适宜条件下,系统会将挂起的进程自动解挂,而且只解挂到就绪队列;本实验为简化操作,设置为手动解挂,若解挂条件合适(即CPU各种资源可用),则解挂到就绪队列,并分配内存;若解挂条件不适宜,则解挂至后备队列,但不分配内存。
系统进程管理器:即任务管理器。操作系统是一个介于软件和硬件之间的特殊硬件,一方面分配硬件资源另一方面支持软件在它上面的实现,如何实时地监控和掌握系统软硬件工作的状态、资源分配和使用的情况,对计算机用户而言十分重要,于是就有了任务管理器这样的实时监控窗口。通过这个窗口我们可以了解到电脑所有进程运行状况,并对运行的进程加于管理和控制,正如在本系统中,启动进程管理器后,可以通过”获取进程”功能来获得本计算机启动的进程,以及与该进程相关的信息,其中包括的信息有:进程映像名称,进程的PID、会话名称、会话次数以及内存使用,我们可以通过这些信息来了解计算机中每个进程的使用状况。同时我们可以在进程管理器上选中一个要终止的的进程,右击选择关闭方式,如“根据名称关闭进程”或“根据PID关闭进程”功能按钮,该进程被终止执行并退出进程列表,此按钮实现的功能正如我们电脑任务管理器的“进程”功能,当电脑执行程序不能通过关闭窗口进行正常的关闭时,可以借助此办法来关闭进程。其中还包括了关闭进程树和刷新进程列表的功能。
磁盘管理:磁盘格式化时,系统把磁盘存储空间分成许多磁道。每个磁道又分成若干个扇区(又叫做磁盘块)。之后用fdisk命令对硬盘进行分区,即使只有一个分区,也必须用fdisk命令进行分区。分区的目的,就是制作文件卷,形成文件系统。一个文件卷一般都被划分成引导扇区、文件系统管理区和文件数据区。其中,文件数据区用来存放系统文件和用户文件。用户可以通过文件系统提供的API,创建、打开、关闭和对文件进行读写。当用户的文件不再需要时,就应该删除。把一个文件放到磁盘上时,可以组织成连续文件、链接文件或索引文件等。因此,磁盘空间的分配方法也有两种,一种是连续空间的分配,一种是不连续空间的分配(又叫动态分配)。
四、总体设计
1.总体功能模块及关系图
系统进程管理
文件与用户管理
多用户多任务类操作系统
多用户登陆界面
磁盘管理
进程与存储管理
2.总体功能流图
开始
初始化登陆界面
管理员用户登陆?
文件与用户管理
系统进程管理
进程与存储管理
内存分配算法
进程控制
进程调度算法
任务管理器
磁盘属性及分配
查看及管理用户
文件及目录管理
五、详细设计
(一)多用户操作系统
(1)数据结构及主要函数
public class LoginView extends JFrame{
JFrame jframe = new JFrame("欢迎登陆系统");
private FilesysServer fss1= null;
int sw=(int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
int sh=(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
public LoginView(FilesysServer fss){
this.fss1 = fss;
//初始化面板
JPanel loginPanel = new JPanel();
JLabel titleJLable = new JLabel();
titleJLable.setText("欢迎登陆系统");
titleJLable.setSize(500,200);
//用户面板
JPanel userPanel = new JPanel();
userPanel.setLayout(null);
JButton adminButton = new JButton();
adminButton.setText("管理员用户登陆");
JButton userButton = new JButton();
userButton.setText("普通用户登陆");
。。。。。。
}
(二)文件与用户管理
本系统分两种用户:管理员用户和普通用户,实现文件系统的模拟管理与查看过程。管理员用户对文件系统可以进行创建用户、删除用户、创建文件、删除文件、创建目录、删除目录、读文件、写文件、打开文件、关闭文件、显示目录等操作;普通用户只能读文件和查看用户。并且加入磁盘管理功能,在查看/创建/删除文件等操作时时,显示文件属性、磁盘属性、磁盘分配情况。索引节点分配情况,动态实时的掌握内存分配。
(1)数据结构及主要函数
public class MyFile {
public int fsize;
public String fname;
public String ftime;
public String fcont;
public int fownid;
public int fgrpid;
public int fmode;
}
public class Dir { //文件名 36B
//TOTAL 36B
public String fname; //文件名 15B
public int findex; //INODE号 3B
public String pname; //父文件名 15B
public int pindex; //父INODE号 3B
}
public class Disk {
public final static int DISKSIZE=100*512; //磁盘大小
public final static int INUM=80; //inode数量
public final static int BNUM=100; //块数量 512B*100 = 51200B
public final static int BSIZE=512; //块大小
public final static int ISIZE=64; //inode大小 64B * 80 = 5120B
public final static int DSIZE=36; //dir大小 36B * 14 ~~512B
public final static int BASEB=11; //不能使用的块
}
public class Inode {//索引节点信息 64B
//TOTAL NOW 59B
public int fsize; //文件大小 6B
public int fblock; //文件块数 6B
public int faddr[]; //直接块号 4*3B
public int fadd1; //一级块号 3B
public int fownid; //所有者ID 6B
public int fgrpid; //所在组ID 6B
public int fmode; //文件类型权限 6B (d/- + 二进制)
public String ftime; //最近修改时间 14B (20XXXXXXXXXX)
public Inode(){
faddr=new int[4];
}
}
public class SuperBlock {
public int bitindex[]; //空余块位示图 100B
public int bitblock[]; //空余节点位示图 120B
public int freindex; //剩余的节点 5B
public int freblock; //剩余的块 5B
}
(2)流程图
文件浏览器
管理员用户?
N
Y
磁盘管理
查看文件及目录
查看与管理用户
索引节点分配
磁盘块分配
磁盘属性
删除用户
添加用户
查看用户
文件属性
读/写文件
删除目录
新建目录
删除文件
新建文件
查看文件及目录
查看与管理用户
磁盘管理
索引节点使用情况
磁盘块使用情况
磁盘属性
查看用户
读文件
文件属性
(三)进程与存储管理
3.1进程控制:利用简单的结构和控制方法模拟进程结构、进程状态和进程控制。
用PCB表示整个进程实体,利用随机数方法或键盘控制方法模拟进程执行中产生的事件。或者利用鼠标或者键盘中断的基于图形接口方式的进程控制管理。
(1) 数据结构:
public class PCB {
private int PID;//进程id
private int timeNeed;//运行所需的时间
private int priority;//进程的优先级
private int state;//所处于的状态 5个
private int memoryNeed;//所需内存
private int startLocation;//开始的位置
private PCB next;//下一个进程控制块的句柄
private Color color;//颜色
private int pecent;//执行的百分比
public final static int state_running = 0; //状态标志位 0表示运行 1表示就绪 2表示挂起 3表示后备 4表示解挂
public final static int state_ready = 1; //就绪
public final static int state_hang = 2; //挂起
public final static int state_reserve = 3; //后备
public final static int state_resume = 3; //解挂
public final static int state_block = 4; //阻塞
public final static int state_dead = 5; //死亡
//默认构造
public PCB(){
}
(2)主要函数:
public class Scheduling{}
public boolean executeProcess(){}
queue.sortQueue1(); //对就绪队列按优先级排序
public void schedulingProcess(){}/*调度进程进入ReadyQueue*/
public boolean schedulingFromResume(){}/*从解挂队列调度进程进入就绪队列*/
public boolean schedulingFromReserve(){}/*从后备队列调度进程进入就绪队列*/
public void resumeProcess(PCB pcb){} /*结束一条进程*/
public void addProcess(int timeNeed,int priority,int memoryNeed){} //添加进程
public boolean blockProcess(){}/*阻塞进程*/
class resumeBlock extends Thread{}/*解除阻塞*/
public boolean hangProcess(){}/*挂起进程*/
class resumeHang extends Thread{
PCB pcb;
int time;
public resumeHang(PCB pcb,int time){
this.pcb = pcb;
this.time = time;
}}/*解挂*/
public int producePID(){}//随机产生PID
(3)算法设计
创建进程:输入进程的名称,先判断进程名是否已存在,若已存在,则创建进程失败,需重新操作,创建进程成功后,新进程进入就绪队列。若执行态为空,将进程插入执行态。
阻塞进程:若当前有执行进程,则将其阻塞,并将进程加入阻塞态,若就绪队列不为空,则就绪队列第一个进程插入执行态;若当前无执行进程 ,则阻塞失败。
唤醒进程:若当前阻塞态不为空,则将阻塞队列第一个进程插入就绪态;若当前阻塞态为空,则唤醒失败。
时间片到:若当前有执行态进程,则插入就绪队态,并将就绪态第一个进程进入执行态;若当前无执行进程,则无执行进程。
结束进程:若当前有执行进程,则结束进程,若当前就绪态不为空,则就绪态第一个进程进入执行态;若当前无执行进程 ,则结束进程失败。
(4)流程图:
开始
输入执行命令
输入t
输入C
输入b
N N N
输入进程名
执行态插入就绪态
执行态转为阻塞态
Y Y Y
将进程插入就绪态
就绪态第一个结点插入执行态
就绪态第一个结点插入执行态
执行态为空
N
显示进程信息
将进程插入执行态
显示进程信息
Y
显示进程信息
输入w
执行态为空
Y N
阻塞态为空
N N
结束进程
阻塞态插入就绪态
Y Y
就绪态第一个结点插入执行态
显示进程信息
结束
显示进程信息
3.2进程调度:实现先来先服务FCFS、短作业优先SJF以及动态优先级调度算法。我们可以根据创建进程的系统时钟,取相对时钟作为进程的到达时间,利用随机数产生每个进程的估计运行时间。利用模拟系统中提供的算法分别计算其相应的周转时间和带权周转时间。
(1)数据结构及主要函数
public class NewPCBDialog extends JDialog implements ActionListener{
private JLabel tips_priority;
private JLabel tips_timeNeed;
private JLabel tips_memoryNeed;
private JTextField text_priority;
private JTextField text_timeNeed;
private JTextField text_memoryNeed;
private JButton create;
private MainFrame parentFrame;
public NewPCBDialog(MainFrame frame){}
public void init(){}
public void actionPerformed(ActionEvent e) {}
}
(2)算法设计:
1、利用绝对时间和相对时钟产生一组进程的到达时刻和运行时间。
2、实现FCFS算法:根据进程的到达时间的先后次序来完成对若干进程的调度。
3、实现SJF算法:根据当前时间已经到达进程的需要运行时间选取其中时间最小的进程最先运行。
4、实现DPS算法:各进程的优先权随运行时间而改变,进程在就绪队列中等待一个时间片,优先权值加1;进程每运行一个时间片,优先权值减3。然后调用 priority()函数 按照个进程的优先级别的高低来决定进程在每个时间片的状态,并通过输出函数显示。
5、计算每种算法调度后,系统的平均周转时间和平均带权周转时间。
(3)流程图:
进程调度过程
FCFS 算法
开 始
创建数组,并初始化
将数组中的进程按到达时间的顺序排序
获取某进程执行过程中到达的所有进程
对获取的所有进程按照短作业优先进行排序
得到进程的执行序列
依次执行各个进程
所有进程执行完成
结 束
SJF算法
DPS算法
(四)系统进程管理:任务管理器
(1)数据结构及主要函数
public TaskList() {
super("任务管理器");
this.addItem();
this.pack();
this.setVisible(true);
this.setLocation(150, 100);
}
(2)任务管理器功能模块
六、完成的情况
在课设期间,采用java编程语言,模拟开发一个多用户多任务的类操作系统软件,所实现的功能有:
(1)模拟进程调度算法,模拟各种进程调度算法,并能管理各种进程调度算法的演示过程。
(2)模拟各种内存分配算法及回收过程,并能动态演示。结合进程调度算法,能为进程模拟分配内存,并设计一个跟踪该内存模拟分配的进程或线程,记录内存分配的结果;
(3)模拟多用户登录管理过程,能允许多个用户登录,为每个用户建立进程或线程,并进行进程管理;
(4)能模拟文件系统管理,进程可以对文件系统(包括文件和目录)进行读、写、创建、删除、打开、关闭等操作;
(5)模拟磁盘管理过程,结合文件系统管理,显示磁盘管理的结构和文件在磁盘上的分布情况。
(6)采用类似于Windows的窗口界面。
未实现模拟进程通信管理功能。
七、 运行及使用说明
1、 进入系统后用户可以选择管理员用户或者普通用户登陆系统,普通用户拥有一般的操作权限,管理员用户拥有一般操作权限和对用户进行管理的权限。
系统已设定的用户名和密码如下:
管理员用户:userId:1 用户名:admin 密码:admin
普通用户:userId:2 用户名:swm 密码:swm
要增加或删除用户可登陆管理员用户,在用户管理进行操作
2、登陆以后用户可进行如下操作:
3、 文件与用户管理:
* 用户管理为管理员用户权限,用户可以在用户文件夹中进行创建,删除,插入等操作
4、 进程与存储管理:
操作界面如下:
用户可在此创建新进程、或対进程进行各种状态转换操作
5、 系统进程管理器:
用户可以查看当前系统进程的运行情况,并可结束某一进程
八、 实验总结
本次课程设计,首先对操作系统的基础知识和java编程所用的API进行了学习、巩固和提高。程序采用的是java语言编程, 设计的功能包括多用户登录管理,文件与用户管理,进程与存储管理,以及系统进程管理。
学习操作系统原理的时候,对很多原理性的知识并不能很好的理解消化,过后很快就忘记了。通过这次课程设计,我们更加深入的理解了操作系统的基本原理,特别是对各种进程调度算法有了更好的把握;对磁盘文件管理等操作系统原理性的知识也在实际操作过程中得到了增长。在整个过程中,也遇到了各种各样的问题,但经过努力,问题大都得到了解决。
经过这次课程设计,我感觉到,对于一个大学生而言,我们不仅仅要学会理论知识是远远无法在以后的社会中立足的,我们要更加重视动手能力。对于很多问题,我们不仅要学会理论知识,更重要的是要在实际过程中不断更新和改进自己的思维。很多问题需要通过实际操作,一点一点的解决问题来加深对知识和对问题本身的理解。也就是在这个过程中,我们发现问题和解决问题的能力也会有很大的提高。
九、 参考文献
(1)胡志刚等. 计算机操作系统. 中南大学出版社,2005
(2)陈向群等. Windows内核实验教程. 机械工业出版社,2004
(3)罗宇等. 操作系统课程设计. 机械工业出版社,2005
附:源程序代码
展开阅读全文