谢偲灏3112006110操作系统课程设计
操作系统课程设计地址转换
课程设计课程名称操作系统学院计算机学院专业年级班别学号学生姓名指导教师2013 年 1 月7 日操作系统课程设计任务书学生姓名陈泳鑫专业班级学号题目编程演示三种存储管理方式的地址换算过程指导教师林穗题目编号2012秋-14主要内容1、分页方式的地址换算2、分段方式的地址换算3、段页式的地址换算任务要求要求演示正确、清晰,编程所用工具不限。
参考文献[1]计算机操作系统,汤小丹等,西安电子科技大学出版社[2]操作系统实验指导书,傅秀芬,广东工业大学(自编)[3] 计算机操作系统教程( 第二版),张尧学、史美林,清华大学出版社[4] 现代操作系统,A.S.Tanenbaum 著,陈向群等译机械工业出版社审查意见指导教师签字:系主任签字:年月日1、设计思想说明1.1 设计环境在实现地址转换的程序实现时,运用了C++6.0来实现,因为对C语言程序的编写稍微熟悉点,可以很好的编写及调试。
程序很容易看懂,输入条件在后边备注。
1.2 设计思想编程演示三种存储管理方式的地址换算过程,分别为分页方式的地址换算,分段方式的地址换算,段页式的地址换算。
分页方式通过逻辑地址算出页号与叶内地址,然后通过页表来实现向物理地址的转换。
分段方式通过段号和段内地址得到物理地址。
段叶式通过段号得到页表首地址,通过页号得到块号,进而得到物理地址。
2、系统结构程序主要有三个功能,分别是分页方式的地址换算,分段方式的地址换算,段页式的地址换算。
Switch函数包含3个case语句,分别用page,Segment,SegPagt完成分页方式的地址换算,分段方式的地址换算,段页式的地址换算。
3、数据结构的说明typedef struct segtable{int segf[256];int segl[256];}segtable;struct segtable st;typedef struct segpagt{int segf[256];int segl[256];int ptl[256];int pt[256];int pf[256];int pl;}segpagt;struct segpagt sp;4、算法流程图分页式:分段式:段页式:5、主要函数列表函数原型功能入口、出口参数说明void main() 输入、输出Int 整形变量6、测试与分析分页式地址换算结果:分页式地址越界中断:分段式地址转换结果:分段式地址段号越界中断:分段式地址段内越界中断:段页式地址转换结果:段页式地址转换段号越界中断:段页式地址转换页号越界中断:段页式地址转换段内地址越界中断:结束:7、用户使用说明根据提示输入1-4,然后有相应的提示说明,分别输入,错误的时候有提示,正确的输入会输出相应的正确的结果。
操作系统课程设计报告 (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,并对其进行随机初始化。
操作系统课程设计
课 程 设 计2014——2015学年 第1学期课程名称操作系统学 院 计算机科学与技术学院专 业软件工程专业 班 级软件1201 姓 名 柏 扬 指导教师刘 军《操作系统原理》课程设计指导书课程编号:课程名称:操作系统/Operating System周数/学分:1周/1学分先修课程:高级语言程序设计、汇编语言、数据结构、计算机组成原理适用专业:计算机科学与技术、软件工程开课学院、系或教研室:计算机科学与技术学院一、课程设计的目的通过对操作系统内核实现代码的阅读、修改、设计,理解和掌握复杂的操作系统的工作原理。
二、课程设计的内容和要求1.系统调用学习在Linux中产生一个系统调用以及怎样通过往Linux内核中增加一个新函数从而在该内核空间中实现对用户空间的读写。
这个函数的功能是返回当前的系统时间。
实验条件要求:每人一台Linux主机且有超级用户权限。
2.内核定时器通过研究内核的时间管理算法学习内核源代码。
然后应用这些知识并且使用“信号”建立一种用户空间机制来测量一个多线程程序的执行时间。
实验条件要求:每人一台Linux主机且有超级用户权限。
3.实现生产者消费者(Bounded – Buffer Problem)问题通过研究Linux的线程机制和信号量实现生产者消费者(Bounded Buffer)问题的并发控制。
实验条件要求:每人一台与Linux主机联网的Windows主机,普通用户权限。
4.实现读者写者(Reader-Writer Problem)问题通过研究Linux的线程机制和信号量实现读者写者(Reader-Writer)问题并发控制。
实验条件要求:每人一台与Linux主机联网的Windows主机,普通用户权限。
三、课程设计进度安排四、课程设计说明书与图纸要求应包含如下内容:1.设计题目与要求2.总的设计思想及系统平台、语言、工具等。
3.数据结构与模块说明(功能与流程图)4.源程序5.运行结果与运行情况6.调试记录7.自我评析和总结五、课程设计评分标准注:优(90-100分)、良(80-89分)、中(70-79分)、及格(60-69分)、60分以下为不及格。
操作系统课程设计2011
SDUST 信息学院 房胜
实验任务
Project0 : 阅读代码和说明,理解NACHOS的 工作方式 Project1: 线程工作机制 Project2: 多道程序(用户程序) Project3: 虚拟存储器实现
Project0 : 阅读代码和说明, 理解NACHOS的工作方式 理解NACHOS的工作方式
设计要求
并发控制要求:生产者消费者之间正确的互斥和同步 采用线程、进程两种方式完成 测试文件。测试要求:不同的N和M,不同的K,以 及线程和进程。 运行结果显示要求 每个线程/进程的动态运行信息 运行时间 每个进程或线程是否都完成了任务
设计要求
注意:只有所有对应于一个生产者的所有消费 者都访问过某临界区后,此生产者或其他生产 者才可以向这个临界区放新的产品。
MSDN的使用
目的
通过在Windows 2K/XP环境下对经典的生 产者-消费者问题的编程实现, 加深理解信号量和wait、signal操作的原 理 对Win32 API中定义的IPC函数和涉及到 的几种同步对象有更进一步的了解
课本中OS并发控制的普遍机制--》 课本中OS并发控制的普遍机制--》 OS并发控制的普遍机制-- 具体的Windows多种并发控制方法 具体的Windows多种并发控告要求
设计要求和目的 特别需要注意:背景知识 设计思路和程序结构 对关键代码进行分析 运行结果&结果分析 Q&A 观察体会 总结
5
最终提交的作业,应该: 画图正确、美观,文字描述准确、易懂 排版格式易于阅读 代码阅读:推荐sourcenavigator软件 画图:推荐visio软件 文档:word2000以上版本 该作业windows相关作业需每人提交一份,其他平台可 以两人合作,但需要说明分工,并在最后检查时各自 报告。
课程设计任务书(操作系统课程设计)
武汉理工大学华夏学院信息工程系课程设计任务书课程名称:操作系统课程设计指导教师:杨铭熙班级名称:物联网1121 开课系、教研室:通信与物联一、课程设计目的与任务本课程是在物联网工程专业的学生学习了《操作系统》课程之后,为了加深和巩固其对所学操作系统理论的理解,同时提高学生利用操作系统知识综合运用的能力和分析问题、解决的问题的能力而开设的一门实践课程。
通过本环节使学生能够充分把学到的知识应用到实际的编程实践中去。
通过算法及其程序控制实现所需的对软件和硬件的控制,或深入利用操作系统的功能进行高水平的应用编程,使学生在系统编程和应用编程两方面都得到切实有效的训练和提高。
二、课程设计的内容与基本要求本课程设计包含如下两个题目:1.在Linux系统中增加一个新的设备驱动程序(通过模块方法)基本要求:采用动态模块加载方式加载已完成的设备驱动程序,并通过已编写的应用程序进行测试。
2.Linux多线程编程(任选一题)题目一:用多线程同步方法解决生产者-消费者问题目的:通过研究Linux的线程机制和信号量实现生产者消费者问题的并发控制。
说明:有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1~20这20个整型数。
要求;(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前指针位置和生产者/消费者线程的标识符。
(2)生产者和消费者各有两个以上。
(3)多个生产者或多个消费者之间须共享对缓冲区进行操作的函数代码。
题目二:用多线程同步方法解决读者写者问题目的:通过研究Linux的线程机制和信号量实现读者写者问题的并发控制。
说明:设有20个连续的存储单元,写入/读出的数据项设定为1~20这20个字符。
要求;(1)每个读者/写者对该存储区进行操作后,即时显示该存储区的全部内容、当前指针位置和读者/写者线程的标识符。
(2)读者应有3个以上,写者应有有两个以上。
(3)多个读者/写者之间须共享对存储区进行操作的函数代码。
10-11操作系统课程设计教案
山东大学授课教案课程名称:操作系统课程设计本次授课内容:Nachos系统综述教学日期:10-9/20授课教师姓名:张鸿烈职称:高级实验师授课对象:本科授课时数:2教材名称及版本:Nachos Study v3.4授课方式:讲课本单元或章节的教学目的与要求:目的:让学生了解Nachos系统在操作系统内核实验教学中的作用和地位,如何利用Nachos系统培养和启发开发系统软件的能力要求:说明Nachos系统概貌,如何安装Nachosx系统,如何配置Nachos系统的开发和运行环境。
授课主要内容及学时分配讲授Nachos系统的主要作用和功能。
(0.4学时)讲授Nachos系统的实验环境、安装方法和系统结构。
(0.4学时)讲授Nachos系统的开发过程。
Makefile文件的设计和管理方法。
(0.4学时)讲授Nachos系统内核跟踪和调试的方法。
(0.4学时)安排本节实验内容(0.4学时)重点、难点及对学生的要求(掌握、熟悉、了解、自学)重点:Nachos系统的安装和系统结构。
要求:掌握。
难点:Makefile文件的设计和管理。
要求:了解。
主要外语词汇Nachos Operating Systemtar C++ emacs gdbmakeMakefile辅助教学情况(多媒体课件、板书、绘图、标本、示教等)板书、示教,多媒体课件复习思考题1.What is the purpose of ystem program?2. What is main advantage of Nachos?3. How does Makefile in Nachos?参考教材(资料)Silberschatz, A., Galvin, P., and Gagne, G., ”Operating System Concepts”, 6th Edition. Chapter 1,2,3 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”. Chapter 1,2,3山东大学授课教案课程名称:操作系统课程设计本次授课内容:线程的创建与管理教学日期:10-9/27授课教师姓名:张鸿烈职称:高级实验师授课对象:本科授课时数:2教材名称及版本:Nachos Study v3.4授课方式:讲课本单元或章节的教学目的与要求:目的:让学生了解操作系统内核中对线程的基本管理技术,培养学生编制、开发和改进内核级线程管理机制的技能,启发学生对内核线程管理机制的创新思路。
操作系统课程设计
操作系统课程设计五子棋小游戏学生所在学院:燕山大学信息学院学生所在班级:11级计算机科学1班小组成员:学号:2014年1 月一、课程设计的目的1、通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应用软件、开发系统软件等各项工作。
2、通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。
3、学会创建互动的图形化用户界面。
此程序运用了Java Applet,实现图形绘制,字体和颜色控制,人机交互等功能。
Applet还提供了名为抽象窗口工具箱(Abstract Window Toolkit,AWT)的窗口环境开发工具。
AWT利用用户计算机的GUI元素,可以建立标准的图形用户界面,如窗口、按钮、滚动条等等。
二、程序简介设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能:1.选择落子的先后顺序2.重置棋盘3.直接退出4、判断某一方是否为五子连珠,确定输赢。
实现一个简单的多用户五子棋的游戏程序,包括如下两个界面:(1)通过组合框选择对弈桌(执黑、执白)。
(2)在游戏界面有开始、重置游戏、退出按钮。
5、该五子棋小程序是Java Applet(小应用程序)的一个应用,该程序有一个缺点:不能够实现玩家退棋环节,有待改善。
三、设计步骤3.1程序流程图开始选择角色判断输赢重新是开始否退出游戏3.2 程序的功能分配(1)棋盘的绘制public void paint(Graphics g);(2)添加按钮添加开始、退出按钮和执黑、执白组合框。
(3)鼠标棋子的触发事件public void mouseClicked(MouseEvent e);(4)按钮的触发事件public void actionPerformed(ActionEvent e);(5)组合框的触发事件public void itemStateChanged(ItemEvent e);(6)判断落子的位置及画出相应的黑白棋子public void setDown(int x,int y);(7)判断胜负public boolean CheckWin(int x,int y)(8)游戏程序初始化public void init();public void paint(Graphics g)四、源代码设计4.1创建Java Applet(应用小程序)import java.awt.*;import java.awt.event.*;import java.applet.Applet;import java.awt.Color;import javax.swing.JOptionPane;public class FiveChessGame extends Applet implements ActionListener, MouseListener, MouseMotionListener, ItemListener {int color = 0;// 旗子的颜色标识0:白子1:黑子boolean isStart = false;// 游戏开始标志int bodyArray[][] = new int[16][16]; // 设置棋盘棋子状态0 无子1 白子2 黑子Button b1 = new Button("游戏开始");Button b2 = new Button("重置游戏");Button b3 =new Button("退出");Label lblWin = new Label(" "); //标签Checkbox ckbHB[] = new Checkbox[2];CheckboxGroup ckgHB = new CheckboxGroup();public void init() {setLayout(null);addMouseListener(this);add(b1);b1.setBounds(330, 50, 80, 30);b1.addActionListener(this);add(b2);b2.setBounds(330, 90, 80, 30); //(x,y,width,height)b2.addActionListener(this);add(b3);b3.addActionListener(this);b3.setBounds(330, 120, 80, 30);ckbHB[0] = new Checkbox("白子先", ckgHB, false);ckbHB[0].setBounds(320, 20, 60, 30);ckbHB[1] = new Checkbox("黑子先", ckgHB, false);ckbHB[1].setBounds(380, 20, 60, 30);add(ckbHB[0]);add(ckbHB[1]);ckbHB[0].addItemListener(this);ckbHB[1].addItemListener(this);add(lblWin);lblWin.setBounds(330, 130, 80, 30);gameInit();this.resize(new Dimension(450,350));//运行界面大小this.setVisible(true);}public void itemStateChanged(ItemEvent e) {if (ckbHB[0].getState()) // 选择黑子先还是白子先{color = 0;//heizi} else {color= 1; } } //监听组合框public void actionPerformed(ActionEvent e) { //监听按钮if (e.getSource() == b1) {gameStart();} elseif(e.getSource()==b2){reStart();}else{JOptionPane.showMessageDialog(this,startColor(color+1) + "认输了!" );System.exit(1); } } //监听按钮public void mousePressed(MouseEvent e) {}public void mouseClicked(MouseEvent e) {int x1, y1;x1 = e.getX();y1 = e.getY();if (e.getX() < 20 || e.getX() > 300 || e.getY() < 20 || e.getY() > 300) { return; }if (x1 % 20 > 10) {x1 += 20; }if (y1 % 20 > 10) {y1 += 20;}x1 = x1 / 20 * 20;y1 = y1 / 20 * 20;setDown(x1, y1); }public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) { }public void mouseReleased(MouseEvent e) {}public void mouseDragged(MouseEvent e) {}public void mouseMoved(MouseEvent e) { }public void paint(Graphics g) {g.setColor(Color.LIGHT_GRAY);g.fill3DRect(10, 10, 300, 300, true);g.setColor(Color.black);for (int i = 1; i < 16; i++) {g.drawLine(20, 20 * i, 300, 20 * i);g.drawLine(20 * i, 20, 20 * i, 300); } } //画图public void setDown(int x, int y) // 落子{if (!isStart) // 判断游戏未开始{ return; }if (bodyArray[x / 20][y / 20] != 0) //不空{JOptionPane.showMessageDialog(this, "该处已有子");return;}Graphics g = getGraphics();if (color == 1)// 判断黑子还是白子{g.setColor(Color.black); //画黑子color = 0;} else {g.setColor(Color.white);color = 1; }g.fillOval(x - 10, y - 10, 20, 20);bodyArray[x / 20][y / 20] = color + 1; //bodyArry[][]=2 画黑子,bodyArry[][]=1 画白子if (CheckWin(x / 20, y / 20)) // 判断输赢{lblWin.setText(startColor(color) + "赢了!");JOptionPane.showMessageDialog(this,startColor(color) + "赢了!" );isStart = false;} }public String startColor(int x) {if (x == 0) {return "黑子";} else { return "白子";} }public void gameStart()// 游戏开始{isStart = true;enableGame(false);b2.setEnabled(true);}public void gameInit() // 游戏开始初始化{isStart = false;enableGame(true);b2.setEnabled(false);ckbHB[0].setState(true);for (int i = 0; i < 16; i++) {for (int j = 0; j < 16; j++) {bodyArray[i][j] = 0; } }lblWin.setText("");}public void reStart() // 游戏重新开始{repaint(); // 默认调用panit(Graphics g)gameInit();}public void enableGame(boolean e) // 设置组件状态1 均能动状态2 {b1.setEnabled(e);b2.setEnabled(e);ckbHB[0].setEnabled(e);ckbHB[1].setEnabled(e);}public boolean CheckWin(int x,int y){boolean flag=false;//保存共有多少相同颜色的棋子相连int count=1;//先判断横向,特点,y坐标相同,即bodyArray[x][y]中y相同//判断这个棋子的颜色int color=bodyArray[x][y];int i=1;//横向向右判断while(color==this.bodyArray[x+i][y]){count++;i++;}//横向向左判断i=1;while(color==this.bodyArray[x-i][y]){count++; i++;}if(count>=5){flag=true; return flag;}//综向判断int i2=1; int count2=1;while(color==this.bodyArray[x][y+i2]){count2++; i2++;}i2=1;while(color==this.bodyArray[x][y-i2]){count2++; i2++;}if(count2>=5){flag=true; return flag;}//斜方向判断,y=-x方向int i3=1; int count3=1;while(color==this.bodyArray[x+i3][y-i3]) //右下方{count3++; i3++;}i3=1;while(color==this.bodyArray[x-i3][y+i3]) //左上方{count3++; i3++;}if(count3>=5){flag=true; return flag;}//斜方向,y=xint i4=1; int count4=1;if(color==this.bodyArray[x-i4][y-i4]){count4++; i4++;}i4=1;while(color==this.bodyArray[x+i4][y+i4]){count4++; i4++;}if(count4>=5){flag=true; return flag;}return flag; }}4.2 测试结果a. 进入游戏界面游戏开始的界面有两个选择项,用户可以选择相应的角色,选择完毕后点击开始进入游戏。
3112006110-谢偲灏-12级计科8班-计算机网络课程设计
课程设计课程名称计算机网络题目名称采用Windows Server 2003 组建网络服务器学生学院计算机学院专业班级 2012级计算机科学与技术8班学号 3112006110 学生姓名谢偲灏指导教师王文彦2015年6 月7日目录一、搭建DNS服务器 (3)1、安装DNS服务器 (3)2、配置DNS server (4)3、用命令提示符进行测试 (7)二、搭建FTP服务器 (8)1、安装FTP服务器 (8)2、FTP站点测试 (9)三、搭建Email服务器 (10)1、创建Email服务器 (10)2、测试Email服务器 (14)四、搭建Web服务器 (16)1、安装Web服务器 (16)2、配置Web服务器 (16)3、测试web服务器 (18)五、课程设计体会: (20)一、搭建DNS服务器1、安装DNS服务器在开始菜单处点击“配置你的服务器向导”,在弹出的服务器向导中选择DNS服务器。
2、配置DNS server设置我自己主机(服务器主机)的IP地址:键入域名,配置区域文件。
设置我自己的主机名称:配置服务器域名:3、用命令提示符进行测试在服务器主机进行测试:二、搭建FTP服务器1、安装FTP服务器打开控制面板,找到添加/删除组件:点击“开始”——“菜单”,配置你的服务向导:已搭建成功的FTP站点:2、FTP站点测试①虚拟机上站点下的文件:②在我的现实PC端的测试:三、搭建Email服务器1、创建Email服务器创建邮件发件人名称:创建邮件发件人电子邮件地址:创建电子邮件服务器名:2、测试Email服务器创建成功的邮件登录的相关信息:邮件的发送:邮件发送并接收成功:四、搭建Web服务器1、安装Web服务器点击确定即可成功安装。
2、配置Web服务器3、测试web服务器在WEB上制作的自己的网页第一步:在“网站”选项卡中设置“IP地址第二步:在“主目录”选项卡中设置“本地路径”、“执行权限”、配置按钮->“调试”->asp的2个勾上。
操作系统课程设计总结报告(白雪娇20103823)
typedef struct CHCT {
char name[20]; int zhuangtai; LNode *next1; CHCT *rear; CHCT *next2; }CHCT;
int date[15]; int dat=0; int Map2[100]; //OPT 位视图 int yebiao2[100][2]; //OPT 页表 int Mat2=0; //OPT 计数器 int Ming2=0; //OPT 命中次数 int Que2=0; //OPT 缺页次数 int Stack2[100]; //OPT 内存栈 int Head2=0; //OPT 头指针 int t,w; 2.4 算法设计及流程图: 算法: 建立位示图,显示内存的分配,产生一组 0 和 1 的随机数。 输入块的大小,通过位示图分配内存空间建立相应的页表; 输入逻辑地址,计算出页号和逻辑地址转换成相应的物理地址。然 后检查状态位,判断页号是否在内存,若是,则命中,若不是,则
dc1=new DCT(); strcpy(dc1->name,"K"); strcpy(dc1->type,"I"); dc1->zhuangtai=0;
dc2=new DCT(); strcpy(dc2->name,"M"); strcpy(dc2->type,"I"); dc2->zhuangtai=0;
int Length; //页表长度 int Size; //内存栈的大小 int Memory; //内存的大小
“操作系统”课程教学法探析
这些软硬件 资源进行管理 : 处理机管理 、 存 储器管 理 、 I / 0 设备
中图分 类号 : G6 4 2 . 0 文献标识码 : A 文章编号 : 1 0 0 7 — 0 0 7 9( 2 0 1 4 ) 2 3 — 0 0 4 8 — 0 2
计算 机系统 由硬件和软件 组成 , 操作系统是配 置在计算 机 硬件上 的第 一层 软件 , 其他 系统软件或应 用软件都 依赖 于操 作
问题 所研 究的教学方法需 要达 到以下 的效 果 : 形象化地讲解 , 帮助学生理 解操作系统工作原理 ; 训练 和提高学生分析问题和
解决 问题 的能力。 为了实现 以上效 果 , 笔者将 日常生活 中的管理 经验引入教
需了 解 软硬件本身的细节 , 所以, 操 作系统是 一个友善 的 用户与
发工作。 因此 , 操作系统的主要工作就是 合理调度 和分配各种资 源给多个进程 , 充分发挥计 算机各部件的性能 , 使它们最大限度
地保 挣 碌 , 也因此引申出了诸如互斥 、 同步、 死锁等问题 。 本文所研 究的 “ 操作系统”课程是 面向计 算机专业学生开
设 的。对于这些学生 , 上一年级 时所 学 的计算 机应用 基础讲述 了Wi n d o w s 操作系统的使 用, 在二年级 时又开设了 “ l i n u x操作系
一
、
“ 操作系统” 课程的教 学法研究
分析现行操作系统和设计、 开发实际操作 系统 的基本能力, 为今 后从事各种软硬件开发打下扎实 的基础 ; 使 学生系统科学 地受
1 . “ 操 作 系统” 课 程 的 内容 特 点分 析
从用户角度看操 作系统是用户与硬件系统之 间的接 口, 是
服务 的提 供者。 从 系统的角度来观 察, 操作系统是计 算机 系统 资源的管理者, 是程序 执行的控制者。 [ 4
操作系统课程实验远程教育系统的设计与实现
操作系统课程实验远程教育系统的设计与实现
杨铭熙;胡伟莉
【期刊名称】《武汉理工大学学报(信息与管理工程版)》
【年(卷),期】2002(024)004
【摘要】给出了一种在Internet上建立操作系统课程实验远程教育系统的设计方案.该系统以Lotus LearningSpace 为课件开发和运行平台,以Linux为操作系统范例,实现了在Internet上远程进行操作系统课程实验的教师指导、学生实时上机操作、在线测验、师生异步交互和讨论等功能.文中对网络和系统环境配置及软件设计要点和该系统各功能模块作了详细论述.
【总页数】3页(P8-10)
【作者】杨铭熙;胡伟莉
【作者单位】武汉理工大学,计算机科学与技术学院,湖北,武汉,430070;武汉理工大学,教务处,湖北,武汉,430070
【正文语种】中文
【中图分类】TP316
【相关文献】
1.面向运维的Linux操作系统课程实验教学研究 [J], 魏小龙
2.基于实践应用能力的《计算机操作系统》课程实验教学研究与应用 [J], 宋添树; 朱昌洪
3.信息网络安全监察专业Linux操作系统课程实验设计 [J], 马玉州
4.师范类专业操作系统课程实验教学探索 [J], 雷丽晖;李鹏
5.《操作系统》课程实验教学研究与应用关键要点 [J], 刘伟
因版权原因,仅展示原文概要,查看原文内容请购买。
《计算机操作系统》课程设计要求(武汉华夏)
选题2. 处理机调度程序:选择一个调度算法,实现处理机调度。
设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个 。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作, 必须选用某种调度策略,选择一进程占用处理机。要求学生设计一个模拟处理机调度算 法,以巩固和加深处理机调度的概念。 设计要求: 1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。 2)可选择进程数量 3)本程序包括三种算法,用C语言实现,执行时在主界面选择算法(可用函数实现), 进入子页面后输入进程数,(运行时间,优先数由随机函数产生),执行,显示结果。
的小组,综合评定平均成绩要高于未参与答辩(未抽中或未申请)的小组均成绩。 2. 成绩评定
由指导教师根据学生在设计中的表现、任务的完成情况、课程设计报告的质量等综合评定。评分 标准为:1)完成基本功能占60%;2)设计报告占20%;3)出勤率占10%;4)回答指导教师提问 占10%。根据以上四个标准,课程设计成绩按优秀、良好、中等、及格和不及格五级记分制评定。
要求设计主界面以灵活选择某算法,以下算法任选两种 实现: 1) 先来先服务算法(FCFS) 2) 最短寻道时间优先算法(SSTF) 3) 扫描算法(SCAN) 4) 循环扫描算法(CSCAN)
选题5. 存储管理---动态分区分配算法的模拟
要求设计主界面以灵活选择某算法,且以下算法都要实 现:首次适应算法、最佳适应算法和最坏适应算法;
选题6. 为LINUX 设计一个简单的二级文件系统。
要求做到以下几点:
1) 可以实现下列几条命令(至少4条)。
Login 用户登录 Dir
列文件目录
Create e 关闭文件
《计算机操作系统》课程设计指导书
《计算机操作系统》课程设计指导书湖南工业大学计算机与通信学院二O一三年九月《计算机操作系统》课程设计说明计算机操作系统是计算机科学与技术专业的主要专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
计算机操作系统课程设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握操作系统的基本原理,加深对操作系统基本方法的理解,加深对课堂知识的理解,为学生综合运用所学知识,在Linux环境下编写功能较简单的程序来实现操作系统的基本方法、并在实践应用方面打下一定基础。
要求学生在指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个实验解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,并且能够进行简单分析和判断;能够熟练使用Linux 用户界面;掌握操作系统中进程管理概念和控制方法;了解进程的并发,进程之间的通信方式,了解虚拟存储管理的基本思想,了解设备管理的功能,了解文件系统的功能。
同时培养学生进行分析问题、解决问题的能力;培养学生完成实验分析、实验方法、实验操作与测试、实验过程的观察、理解和归纳能力。
为了收到良好的实验效果,编写了这本课程设计指导书。
在指导书中,每一个课程设计任务按照该课程设计大纲的要求编写,力求紧扣理论知识点、突出设计方法、明确设计思路,通过多种形式引导学生有目的、有方向地完成课程设计任务,得出实验结果。
任课教师在课程设计前对课程设计的任务进行一定的分析和讲解,要求学生按照课程设计任务的具体要求提前做准备工作,如:查找资料等,做到有准备地上机。
进行课程设计时,指导教师应检查学生的预习情况,并对设计过程给予积极指导。
课程设计完毕后,学生应根据课程设计情况,实验数据及结果,完成课程设计报告,由学习委员统一收齐后交指导教师审阅评定。
任务1 进程管理演示一、课程设计目的加深对进程概念及进程管理各部分内容的理解;熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构的实施。
现代操作系统第二版课程设计
现代操作系统第二版课程设计一、概述本文档介绍了现代操作系统第二版课程设计的要求和内容。
本次课程设计是对现代操作系统第二版中所学知识的综合应用和实践,旨在提高学生对操作系统的理解和应用能力。
二、课程设计内容本课程设计要求学生完成以下内容:1. 操作系统原理分析学生需要深入学习现代操作系统第二版中的操作系统原理,掌握操作系统的内核结构和运行机制,并能够运用所学知识分析现有操作系统的设计和实现。
2. 操作系统的实现学生需要实现一个基本的操作系统内核。
具体要求如下:•实现基本的进程管理,包括进程调度、进程通信等;•实现基本的内存管理,包括虚拟内存、页面置换等;•实现基本的文件系统,支持文件读写、目录操作等。
3. 操作系统的优化学生需要对操作系统进行优化,提高其性能和稳定性。
具体要求如下:•实现基于多核CPU的并发编程;•优化内存管理,提高内存利用率和性能;•优化文件系统,提高文件读写速度和数据安全性。
4. 实验报告撰写学生需要撰写一份实验报告,介绍所实现的操作系统内核的设计和实现过程,并对优化效果进行评估和分析。
同时,实验报告还需包括运行截图和代码实现等内容。
三、考核要求本课程设计的考核方式为结合理论和实践,评分比例约为5:5。
具体要求如下:1. 操作系统原理分析学生需要提交一份相关原理的小论文,介绍操作系统的内核结构和运行机制,并能够对现有操作系统的设计和实现进行分析。
小论文成绩占总评成绩的30%。
2. 操作系统的实现学生需要提交一个能够运行的操作系统内核,同时需要完成一个基于该操作系统内核的实际应用程序,例如文件管理等。
操作系统和应用程序的实现代码和文档占总评成绩的30%。
3. 操作系统的优化学生需要提交优化过程的代码和文档,同时需要撰写一份评估报告,详细分析优化效果和原因。
优化代码和评估报告占总评成绩的20%。
4. 实验报告撰写学生需要撰写一份实验报告,介绍所实现的操作系统内核的设计和实现过程,并对优化效果进行评估和分析。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计课程名称____计算机操作系统_ 题目名称_多用户多级目录文件系统实现_ 学生学院___计算机学院______ 专业班级___计科8班_______ 学号____3112006110_____学生姓名____谢偲灏_________ 指导教师_____李敏_________2015 年1月13日广东工业大学课程设计任务书目录一、课程设计的目的 (1)二、实验内容与要求 (1)三、设计步骤分析 (1)(1)实现原理 (1)(2)实现原理图 (2)(3)程序执行过程 (2)(4)实现用到的数据结构 (3)四.部分源代码 (5)(1)bool InitFileSys(); //寻找第一个空白的文件块ID (5)(2)char * FindBlankFileBlock(unsigned fileblockid) //寻找第一个文件块地址 (7)(3)void UpdateBitMap(unsigned fileblockid) //计复所在位示图的位置 (7)(4)bool InitFileSys() //初始化模拟文件系统 (8)(5)void FindCommKey(char *command, char *key, char *path) //命令分解 (9)(6)void Shell() //命令解释模块 (10)五.执行结果和结果分析 (11)(1)初始化界面并登陆系统 (11)(2)创建一个文件 (11)(3)删除文件 (12)(4)打开文件 (12)(5)关闭文件 (12)(6)写文件 (12)(7)读文件 (12)(8)创建目录 (12)(9)查看目录 (12)(10)改变当前目录 (12)(11)退出系统 (12)六.心得体会 (12)(1) (12)(2) (13)(3) (13)(4) (13)(5)....................................................................................................... 错误!未定义书签。
一、课程设计的目的1、在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。
2、文件物理结构可采用显式链接或其他方法。
3、磁盘空闲空间的管理可选择位示图或其他方法。
如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。
4、文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。
5、设计一个较实用的用户界面,方便用户使用。
要求提供以下相关文件操作:(1)具有login (用户登录);(2)系统初始化(建文件卷、提供登录模块);(3)文件的创建: create;(4)文件的打开:open;(5)文件的读:read;(6)文件的写:write;(7)文件关闭:close;(8)删除文件:delete ;(9)创建目录(建立子目录):mkdir;(10)改变当前目录:cd;(11)列出文件目录:dir;(12)退出:logout。
6、系统必须可实际演示,选用程序设计语言:C++、C等。
二、实验内容与要求1.设计多用户文件系统,采用多级文件目录。
2.至少要有十个以上的实用命令,应设置文件保护措施。
3.设计一个较实用的用户界面,方便用户使用,界面要为用户提供足够的选择信息,不需用户打入冗长的命令。
三、设计步骤分析(1)实现原理本程序是一个文件系统模拟程序,模拟文件管理的工作过程。
本程序设计一个最多有10个用户的文件系统,实现文件系统的模拟管理过程,可以 进行创建用户、创建文件、删除文件、创建文件夹、删除文件夹、读文件、写文件、执行文件、打开文件、关闭文件、显示目录等操作。
(2)实现原理图(3)程序执行过程(4)实现用到的数据结构typedef enum//文件元素可供操作性权限{pub, //任何人可做任何操作protect, //非创建者或管理员,只可以察看pri //非创建者或管理员,不可以做任何操作} FileAccess;//文件元素类型typedef enum{file, //文件dir //文件夹} FileType;//用户类型typedef enum{administrator, //管理者,拥用所有权限guest //一般用户} UserType;//文件状态typedef enum{closed,opened,reading,writing} FileStatus;//一个文件索引结构typedef struct{unsigned Index; //文件元素索引编号char FileName[NAME_LEN]; //文件元素名char ParentName[NAME_LEN]; //父节点名unsigned FileBlockId; //文件元素所在物理块编号unsigned FileLevel; //文件元素所在层次,层+文件元素名为一个文件元素的逻辑位置unsigned effect; //是否有效,0-无效,1-有效} FileIndexElement;//文件索引结构或目录表项typedef struct{FileIndexElement *FIStart; //文件系统中的文件索引起始位置unsigned FILen; //文件索引的最大长度unsigned FICount; //文件索引数量} FileIndex;//文件块的结构typedef struct fb{unsigned FileBlockId; //文件块编号unsigned BLOCK_SIZE; //文件块的容量char *FileBlockAddr; //文件块地址struct fb *next; //下一个文件块的地址} FileBlock;//文件系统的位示图结构typedef struct{unsigned BITMAP_LEN; //文件位示图长度char *BMStart; //位示图的起始指针} BitMap;//文件系统结构typedef struct{char *FSStart; //文件系统的起始地址unsigned SuperBlockSize; //文件系统的容量BitMap bm; //文件系统中的位示图unsigned BLOCK_COUNT; //文件系统中文件块的数量FileBlock *head; //文件系统中文件块首地址FileIndex FI; //文件系统中的文件索引} SuperBlock;typedef struct{char *UserName; //用户名称UserType ut; //用户类型} User;//文件系统中的元素结构,包括文件和文件夹typedef struct fse{struct fse *parent; //指向自己的父亲节点unsigned FileLevel; //文件元素所在层次,层+文件元素名为一个文件元素的逻辑位置char FileName[NAME_LEN]; //文件元素名unsigned FileBlockId; //文件元素所在物理块编号unsigned FileElemLen; //文件元素的长度FileType Type; //文件元素类型FileAccess Access; //文件元素可供操作的权限User Creator; //文件创建者char CreateTime[18]; //创建时间,日期格式:MM/DD/YY HH:MI:SSchar LastModTime[18]; //最后一次修改时间char *FileData; //一个文件的数据开始地址,文件夹时该值为NULLFileStatus fileStu; //如果是一个文件表示文件当前的状态} FSElement;//系统当前状态typedef struct{User CurrentUser; //当前用户unsigned FileLevel; //用户所在文件系统层FSElement *CurrParent; //当前层的父节点char *CurrentPath; //当前路径} CurrentStatus;四.部分源代码(1)bool InitFileSys(); //寻找第一个空白的文件块IDunsigned FindBlankFileBlockId(){unsigned char c;for (unsigned i = 0; i < FS.bm.BITMAP_LEN / 8; i++){c = FS.bm.BMStart[i] | 0x7F;if (c == 0x7F){return i * 8; //一个字节左边第一位为0,表示该区域未使用}c = FS.bm.BMStart[i] | 0xBF;if (c == 0xBF){return i * 8 + 1;}c = FS.bm.BMStart[i] | 0xDF;if (c == 0xDF){return i * 8 + 2;}c = FS.bm.BMStart[i] | 0xEF;if (c == 0xEF){return i * 8 + 3;}c = FS.bm.BMStart[i] | 0xF7;if (c == 0xF7){return i * 8 + 4;}c = FS.bm.BMStart[i] | 0xFB;if (c == 0xFB){return i * 8 + 5;}c = FS.bm.BMStart[i] | 0xFD;if (c == 0xFD){return i * 8 + 6;}c = FS.bm.BMStart[i] | 0xFE;if (c == 0xFE){return i * 8 + 7;}}return BLOCK_COUNT + 1;}(2)char * FindBlankFileBlock(unsigned fileblockid) //寻找第一个文件块地址{FileBlock *fblock = FS.head;while (fblock->next != NULL){if (fblock->FileBlockId == fileblockid){return fblock->FileBlockAddr;}else{fblock = fblock->next;}}return NULL;}(3)void UpdateBitMap(unsigned fileblockid) //计复所在位示图的位置{int dirInBitmap = ((int)(fileblockid / 8));int dirInChar = fileblockid % 8;char *c = &(FS.bm.BMStart[dirInBitmap]);char xor;switch (dirInChar){case 0:xor = 0x80;break;case 1:xor = 0x40;break;case 2:xor = 0x20;break;case 3:xor = 0x10;break;case 4:xor = 0x08;break;case 5:xor = 0x04;break;case 6:xor = 0x02;break;case 7:xor = 0x01;break;}*c = *c ^ xor;}(4)bool InitFileSys() //初始化模拟文件系统{if ((FS.FSStart = (char *)malloc(FILE_SYS_SIZE)) == NULL){return false;}FS.SuperBlockSize = FILE_SYS_SIZE;FS.bm.BITMAP_LEN = BITMAP_LEN;FS.bm.BMStart = FS.FSStart;//设置位示图为未使用memset(FS.bm.BMStart, '\0', FS.bm.BITMAP_LEN);//初始化文件系统索引FS.FI.FIStart = (FileIndexElement *)(FS.FSStart + BITMAP_LEN);//因为是模拟系统,暂定一个文件或文件夹最多占用一个文件块,一个文件块只放一个文件元素FS.FI.FILen = sizeof(FileIndexElement) * BLOCK_COUNT + sizeof(unsigned) * 2;FS.FI.FICount = 0;memset(FS.FI.FIStart, '\0', FS.FI.FILen);//初始化文件块FS.BLOCK_COUNT = BLOCK_COUNT;FS.head = CreateFileBlockList((FS.FSStart + FILE_SYS_SIZE - BLOCK_SIZE *BLOCK_COUNT),BLOCK_SIZE, FS.BLOCK_COUNT);//区域的后BLOCK_SIZE * BLOCK_COUNT个单元用来存储数据if (FS.head == NULL){return false;}//初始化系统当前状态erName = (char *)calloc(10,sizeof(char));strcpy(erName, "man");CS.CurrentUser.ut = administrator;CS.CurrParent = NULL;CS.FileLevel = 0;CS.CurrentPath = (char *)calloc(1000, sizeof(char));//创建一个根目录base = CreateFileElement(pub, "root", dir, NULL, NULL);if (base == NULL){return false;}else{return true;}}(5)void FindCommKey(char *command, char *key, char *path) //命令分解{for (unsigned i = 0; i < strlen(command); i++){if (command[i] == ' '){i++;if (i < strlen(command)){strcpy(path, command + i);}break;}if (i <= 9){key[i] = command[i];}else{for (unsigned j = i; j < strlen(command); j++){if (command[j] != ' '){strcpy(path, command + j);break;}}break;}}strlwr(key);strlwr(path);}(6)void Shell() //命令解释模块{char command[COMMAND_LEN];gets(command);char key[10];char path[COMMAND_LEN - 10];while (true){memset(key, '\0', 10);memset(path, '\0', COMMAND_LEN - 10);FindCommKey(command, key, path);unsigned i;for (i = 0; i < PRO_SET_COMM_COU; i++){if (strcmp(key, PRO_SET_COMM[i]) == 0){break;}}switch (i){case 0:Create(path);break;case 1:Open(path);break;case 2:Read(path);break;case 3:Write(path);break;case 4:Close(path);break;case 5:Delete(path);break;case 6:Mkdir(path);break;case 7:Cd(path);break;case 8:Dir(path);break;case 9://Logoutbreak;default:printf("\n命令错误。