操作系统段表课程设计说明书

合集下载

燕山大学操作系统课程设计说明书

燕山大学操作系统课程设计说明书

燕山大学课程设计说明书课程设计名称:操作系统题目:多道程序缓冲区协调操作(模拟生产者消费者问题)课题负责人:学院:信息科学与工程学院班级:姓名:学号:课题开发日期:2014年1月13日自评成绩: A目录1概述--------------------------------------------------------------------------------------3目的--------------------------------------------------------3主要完成的任务----------------------------------------------3使用的开发工具、开发语言------------------------------------3本软件解决的主要问题 ---------------------------------------42 设计的基本理念、概念和原理------------------------------------------------4设计的基本理念----------------------------------------------4基本概念----------------------------------------------------4基本原理----------------------------------------------------53 总体设计----------------------------------------------------5基本的技术路线:面向对象--------------------------------------------------------5模块关系及总体流程-------------------------------------------54 详细设计----------------------------------------------------7变量设计----------------------------------------------------7线程的设计--------------------------------------------------7button按钮的设计-------------------------------------------85编码设计----------------------------------------------------9开发环境----------------------------------------------------9注意事项----------------------------------------------------9主要代码设计------------------------------------------------9 PUTTER线程的设计---------------------------------------------------9MOVER1线程的设计---------------------------------------------------10GETTER1线程的设计--------------------------------------------------11“开始”按钮的设计--------------------------------------------------12“结束”按钮的设计--------------------------------------------------14解决的主要难题----------------------------------------------166测试出现的问题及其解决方案-------------------------------167工程总结----------------------------------------------------168参考文献----------------------------------------------------16多道程序缓冲区协调操作演示程序设计说明书1概述目的计算机操作系统是计算机系统中最不可缺少的,最常用的软件,也是核心的,最接近于计算机硬件的软件。

-操作系统课程设计说明书

-操作系统课程设计说明书

中北大学操作系统课程设计说明书学院、系:软件学院专业:软件工程学生姓名:刘婷学号:0921010708 设计题目:基于Linux的实现进程的信号量互斥申请起迄日期: 2011年12月22日- 2012年1月7日指导教师:贾美丽2012 年 1月 7 日1需求分析基于Linux的进程同步与通信的模拟实现需要完成以下功能:(1).创建进程:手动创建几个进程,或者随即创建几个进程,都在界面上完成;要求包括进程的名称(不能重复)、执行时间和申请资源的等待时间等。

在同一时刻可能有多个进行在内存申请某资源,即可以输入多个进程的资源申请。

(2).3类临界资源的管理,包括申请以及分配等。

分别通过信号量实现或者管程实现。

(3).银行家算法,判断是否可以进行资源的分配。

基于以上的功能,可以使用户选择操作,模拟临界资源的管理和银行家算法。

目的:实现临界资源的管理及死锁的避免。

2总体设计进程同步与模拟实现系统分为4个模块:输入输出,进程对资源的随机申请及分配,临界资源管理,银行家算法避免死锁。

输入输出:包括系统运行所需要的进程的名称,执行时间,申请资源的等待时间,进程对资源的需要量等信息以及系统所要显示出的进程的创建信息,资源的分配信息,进行执行信息,进行动态申请资源信息等。

进程对资源的随机申请及分配:根据所输入的进程、资源、以及进程对资源的最大申请情况,随机产生进程当前对资源的申请,输出相应的分配信息与进程执行信息并调用银行家算法对进程的资源申请进行判断。

临界资源的管理:创建相应个数的进程,完成进程的并发执行,使用互斥信号量使各进程互斥的进入各自的临界区对资源进行申请,进程执行完毕后,互斥的对资源进行恢复。

银行家算法避免死锁:对当前进程对资源的申请利用银行家算法进行判断,看系统分配后是否处于安全状态,若处于安全状态,则将资源分配给进程,并输出分配信息,否则对不予以分配。

3.详细设计在该系统中我主要实现了银行家算法避免死锁的模块,该模块中主要使用了数组的数据结构.3.1银行家算法:设Request[i]是进程i的请求向量,如果Request[i][j]=k,表示进程i需要k各j类型的资源。

燕山大学操作系统课程设计说明书

燕山大学操作系统课程设计说明书

目录1概述--------------------------------------------------------------------------------------31.1 目的--------------------------------------------------------3 1.2 主要完成的任务----------------------------------------------3 1.3 使用的开发工具、开发语言------------------------------------3 1.4 本软件解决的主要问题 ---------------------------------------42 设计的基本理念、概念和原理------------------------------------------------42.1 设计的基本理念----------------------------------------------4 2.2 基本概念----------------------------------------------------4 2.3 基本原理----------------------------------------------------53 总体设计----------------------------------------------------53.1基本的技术路线:面向对象--------------------------------------------------------5 3.2模块关系及总体流程-------------------------------------------54 详细设计----------------------------------------------------74.1 变量设计----------------------------------------------------7 4.2 线程的设计--------------------------------------------------7 4.3 button按钮的设计-------------------------------------------85编码设计----------------------------------------------------95.1开发环境----------------------------------------------------9 5.2注意事项----------------------------------------------------9 5.3主要代码设计------------------------------------------------9PUTTER线程的设计---------------------------------------------------9 MOVER1线程的设计---------------------------------------------------10 GETTER1线程的设计--------------------------------------------------11 “开始”按钮的设计--------------------------------------------------12 “结束”按钮的设计--------------------------------------------------14 5.4解决的主要难题----------------------------------------------16 6测试出现的问题及其解决方案-------------------------------167工程总结----------------------------------------------------16 8参考文献----------------------------------------------------16多道程序缓冲区协调操作演示程序设计说明书1概述1.1目的计算机操作系统是计算机系统中最不可缺少的,最常用的软件,也是核心的,最接近于计算机硬件的软件。

操作系统课程设计说明书

操作系统课程设计说明书

操作系统课程设计说明书在Linux环境下模拟实现命令解释器专业:班级:姓名:学号:班内序号:一.程序概述1. 命令解释器的源程序保存在服务器上的路径为:home / 1-31 / j j . c的目录文件中。

可执行程序保存在服务器上的路径为:home / 1-31 / j 。

2. 该命令解释器所完成的功能如下:输入pwd指令来查看目前所在的工作目录的绝对路径名称。

简单得说,每当你在终端进行操作时,你都会有一个当前工作目录。

一般开启终端后默认的“当前工作目录”是用户的“主文件夹”。

输入dir指令显示目录,显示指定目录下或当前目录下的信息,包括文件名等等。

输入cd +<目录名或路径>指令改变当前文件路径,实现将当前用户的当前工作目录更改至cd 命令中指定的目录或文件夹。

如果未指定目标目录名(即只输入“cd”或没输入目录名或文件名),则输出错误信息。

输入newdir +<目录名>指令创建一个新的目录或文件夹,如果创建已存在的目录,则输出创建失败。

输入deldir+<目录名>指令删除一个指定的目录或文件夹,若删除不存在的目录或文件,则显示删除失败。

输入exit指令退出命令解释程序二.概念原理strcmp(str1,str2)函数就是比较参数中两个字符串str1 和str2的大小(大小写敏感,即"A" != "a"),如果完全相等,返回0,如果str1 < str2(按照字母顺序比较),返回-1,如果str1 > str2,则返回1。

本程序的strcmp()函数就是比较t1与6个指令的大小,来输出相应的信息。

chdir()是C语言中的一个系统调用函数,功能:改变工作目录,用法: int chdir(const char *path);返回值:成功返回0 ,失败返回-1。

mkdir()创建由dir-name命名的目录。

要求创建目录的用户在当前目录中(dir-n ame的父目录中)具有写权限,并且dirname不能是当前目录中已有的目录或文件名称。

《操作系统》课程设计说明书

《操作系统》课程设计说明书

河南城建学院《操作系统》课程设计说明书设计题目:UNIX/Linux文件系统分析专业:计算机科学与技术指导教师:邵国金耿永军陈红军班级:0614082学号:061408261姓名:贠炳森同组人:叶矿辉、陈宇计算机科学与工程系2011年1月7日前言在现在计算机更新如此迅速的时代要学好计算机软件技术,特别是操作系统的学习,不仅要努力学好课本上的基础知识,还要经常在图书馆看些有关这方面的书籍,而更重要的是要有足够的实践经验,也要注重和同学的交流,经常尝试性的做些小的操作系统,对自己技术的提升会有很大的帮助。

同时,学习计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。

如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。

例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。

但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。

本操作系统课程设计,是给同学提供一个集中实验的机会。

希望同学们通过该设计加深对所学习课程的理解。

本设计是基于课程中学到的UNIX系统调用,使用操作系统环境是Red Hat Linux 9,言语开发环境是Linux的GNU C或C++。

我做的课程设计是:Linux/Unix文件系统分析。

在Linux系统下,使用与文件相关的系统调用实现对物理设备文件的读写,参照Linux系统源代码以及Grub 系统的源代码,对不同介质上的FAT格式文件系统进行分析。

要求在Linux环境下设计出C语言程序,实现以下功能:1)分析UNIX SysV/Linux系统引导记录的作用;2)分析UNIX SysV/Linux的超级块及其结构,并建立相关数据结构,通过编程实现UNIX SysV/Linux文件系统内各部分的定位。

3)至少要实现对给定i节点文件的只读访问目录一.系统环境 (3)1.1硬件环境 (3)1.2软件环境 (3)二.设计目的及要求 (3)三.总体设计 (5)四.详细设计 (6)五.调试与测试 (6)六.设计中遇到的问题及解决方法 (6)七.Linux/Unix文件系统分析源程序清单 (7)7.1 头文件 (7)7.2 示例程序 (10)八.运行结果及分析 (16)8.1 linux文件系统读取 (16)8.2 UNIX文件系统读取 (18)九.心得体会 (19)十.参考文献 (20)Linux/Unix文件系统分析一.系统环境1.1硬件环境cpu为pentium4双线程技术,频率为2.8GHZ,内存为256MB。

操作系统课程设计报告说明书

操作系统课程设计报告说明书

操作系统课程设计报告说明书-----------银行家算法的实现指导老师:欧阳浩班级:计071姓名:苏建学号:200700401006操作系统课程设计报告说明书---银行家算法1 课设简介:1.1 课程设计题目银行家算法的模拟实现1.2 课程设计目的通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。

1.3 课程设计内容模拟实现动态资源分配。

同时要求编写和调试一个系统动态资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生。

2 实验原理分析:银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。

死锁的产生,必须同时满足四个条件,即一个资源每次只能由一个进程申请;第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,单它仍继续宝石已得到的所有其他资源;第三个为非剥夺条件,即在出现死锁的系统中一定有不可剥夺使用的资源;第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。

防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会发生死锁。

通过这个算法可以用来解决生活中的实际问题,如银行贷款等。

3 程序结构分析:3. 1.银行家算法:设进程i提出请求Request[n],则银行家算法按如下规则进行判断。

(1)如果Request[n]>Need[i,n],则报错返回。

(2)如果Request[n]>Available,则进程i进入等待资源状态,返回。

(3)假设进程i的申请已获批准,于是修改系统状态:Available=Available-RequestAllocation=Allocation+RequestNeed=Need-Request(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

操作系统课程设计说明书

操作系统课程设计说明书

操作系统课程设计说明书课程设计说明书课程设计名称:操作系统题目:XXXXXXX年级:开发小组名称:小组自评成绩:小组负责人:课题组成员:姓名学号班级自评成绩分工签字课题开发日期:指导教师:1. 概述1、目的与意义题目:多道程序缓冲区协调操作设自行车生产线上有3只箱子(BOX ),箱中有N 个位置(N>=2),BOX1每个位置可存放下一个车架,BOX2每个位置可存放一个车轮,BOX3每个位置可存放下一台组装好的车。

有设有3个(类)工人,工人1不定地向箱1中放车架,工人2不定地向箱2中放车轮,工人3不定地从箱中1取出一个车架和箱2中取2个轮子,组装成一台自行车,并把它放到BOX3中。

任何一个时刻只能有1个工人对箱子操作。

有很多个搬运工(Carrier )不停地将BOX3取出运走。

其活动可分别可以抽象为图1。

采用多进程或多线程方式,运用同步和互斥机制,设计一个多道程序完成上述任务和操作。

提示:需要设计Worker1、Worker2、Worker3、Carrier 类线程基本功能要求:(1)提供良好图形界面,显示整个系统操作过程,可以暂停和继续系统的执行;(2) 可以设定各BOX 容量;(3) 可以设定PUT 、GET 、Move 操作的速度;(4) 实时显示每个BOX 中当前物品的数量,空闲空间的数量;(5) 实时显示线程、进程所处于等待(阻塞)状态的个数;(6)程序运行结束,显示汇总数据:总的运行时间;处理个物品的个数;平均每个BOX 中的物品个数。

(7)能够将每次的实验输入和实验结果存储起来,随时可查询。

意义:通过本次课设应对消费者生产者问题有一个更加透彻的了解,加深对于多线程下的互斥同步机制的理解。

2、主要完成的任务;1、数据的输入:包括文件输入和键盘输入。

输入工人数量可用资源数量以及BOX 的容量和工人的生产时间;2、数据的处理(多线程机制):根据可用资源计算生产最大车辆人员最佳分配比例以及根据输入安装生产线按照多线程方式运转;3、数据的输出:运行中实时显示BOX 中的物品数量和余量以及系统中线程阻塞的个数和名称,以及历史纪录。

操作系统课程设计说明书写

操作系统课程设计说明书写

广州大学松田学院操作系统课程设计报告题目:修改内核及Linux内核重编译修改内核及Linux内核重编译--为Linux内核增加系统调用systest( )1概述针对ubuntu10.04.中,通过下载新的内核版本,并且修改新的版本的内核的系统调用,然后在其系统中编译,加载新内核1.1 内核修改内容介绍输入一个数字,各个位上数字相乘,如15 1*5=524 2*4=81.2 内核编译环境介绍虚拟机版本VM9.0Ubuntu版本10.02内核2.6.32-21-generic2内核修改2.1 系统设计2.1.1内核修改的基本思路将被调用的函数写入内核中,并生成新的内核,在新的内核中编写函数调用2.1.2内核修改的实现步骤在网站中下载想要修改的内核版本,并放入到/usr/src中进行解压,解压后修改函数,并重新生成新的内核,重启后再调用函数2.2 程序设计2.2.1Sysmyf( )系统调用介绍操作系统的主要功能是为应用程序的运行创建良好的环境,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户。

系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序2.2.2Sysmyf( )系统调用程序设计asmlinkage int sys_mycall(int num){Int k=1;do{k*=num%10;num/=10;}while(num);return (k);}2.2.3Sysmyf( )系统调用验证程序设计#include<stdio.h>#include<unistd.h>int main(){int num;scanf("%d",&num);printf("%ld\n", sys_mycall(223,num));}3内核重编译3.1 Linux内核源代码下载及其版本说明在网站https:///中下载3.2 在Linux内核源代码中添加sysmyf()系统调用首先修改/usr/src/linux-4.0.4/kernel/sys.c文件。

操作系统课程方案说明书郑丽波

操作系统课程方案说明书郑丽波

个人资料整理仅限学习使用中北大学操作系统课程设计说明书学院、系:软件学院专业:软件工程学学生姓名:郑丽波号: 1121011747设计题目:鉴于 Linux 的模拟进度调动算法的实现起迄日期:2018年 11月 22日- 2018 年 12月 6 日指导教师:康珺2018年12月6 日1需求剖析在操作系统中,进度调动实质就是给进度分派内存资源,跟着计算机系统的发展,为了更充足的利用系统资源以及提升计算机的运转效率,所以需要在不一样的环境下采纳不一样的调动算法,使得系统拥有合理的响应时间,就要求系统能依据某种算法,动向的把办理机分派给就绪行列中的一个进度,使之履行。

所以,就需要设计出几种不一样的算法,经过比较,选出一种最优的。

个人资料整理仅限学习使用务调动算法,短作业优先调动,高响应比调动算法。

在程序的履行过程中,能够自主输入进度的个数以及进度必需的信息,如:进度的创立时间,服务时间等,而后经过不一样的调动算法实现进度的调动,每一种算法都能动向的演示进度调动的过程,时间间隔为一秒钟,而且能够计算出每种调动算法下的均匀周转时间和均匀带权周转时间,经过排序比较各样调动算法的好坏。

2整体设计本程序主要分为四大模块:1.创立进度:能够手动创立进度,用户能够自主决定进度的个数,而且在创立进度时自主决定进度名,进度的创立时间以及履行时间。

2.几种不一样的调动算法:分别是先来先服务调动算法,短作业优先调动和高响应比调动算法。

3.显示结果函数:在各个调动算法中,每一步履行完后都会以表格的形式显示出进度的信息,包含:进度名,创立时间,服务时间,开始履行时间,达成时间,周转时间,带权周转时间。

4.比较各算法的好坏:对均匀周转时间和均匀带权周转时间依据由小到大的次序进行排序比较。

构造图以下:鉴于 linux 的进度调动算法寄存 PCB 信息构造体数组录入 PCB 信息三种调动算法先来先服务短作业优先高响应比调动FCFS SJF HHRN显示结果比较各算法的好坏struct Pro//进度调动信息构造体{char name。

操作系统课程设计说明书

操作系统课程设计说明书

操作系统课程设计说明书在Linux环境下模拟实现命令解释器学院:计算机工程学院专业班级:11软件工程1班姓名:黄少杰学号:201130098062班内序号:24一.程序概述本程序是内核为:Kernel 2.6.9-42.ELsmp on an i686的Linux环境下运行,是一个基于linux系统下的实现的命令解释器。

以下为源程序在服务器上执行的步骤:Linux服务器位置为:telnet 10,5,1,6用户名:11124 密码:123456①进入linux服务器②进入源程序所在目录,代码为:cd huangshaojie③运行源程序,代码:./a.out这个huangshaojie目录为本次操作系统课程设计的目录ls 显示huangshaojie下的文件:hsj2.cpp为本次课程设计的源文件,采用语言为C++。

执行命令g++ hsj2.cpp,产生可执行文件:a.out在命令行键入:./a.out 就可以直接运行程序功能列表本次课程设计在Linux环境下模拟实现命令解释器:本人实现的功能如下:1.使用pwd命令,实现查看目录所处路径的功能。

2.使用dir命令,实现显示列出指定目录名中的所有目录及文件的功能。

3.使用cd命令,实现改变工作目录的功能。

4.使用newdi r命令,实现创建新的目录的功能。

5.使用deldir命令,实现删除目录的功能。

6.使用rename命令,实现重命名一个文件或目录的功能。

7.使用find命令,实现查找指定目录下及其子目录的指定文件。

8.使用date命令,实现显示当前日期。

9.使用exit命令,实现退出命令行模式。

二.概念原理本次操作系统课程设计使用的语言为C++,包含的头文件大多是Linux下c的函数库。

通过调用相关的函数库来实现模拟shell命令操作。

下面是对一些概念原理的说明:1.源程序包含的头文件#include<iostream>//主要用于一些标准输入输出:cin,cout操作#include<cstring>//标准C++函数库,主要用于字符串处理#include<sys/types.h>//基本系统数据类型#include<sys/stat.h>//文件状态#include<dirent.h>//文件操作函数#include<fcntl.h>//文件控制#include<time.h>//定义关于时间的函数以上是整个源程序涉及到的一些函数头文件2.函数概念说明以下是对程序调用Linux c函数库的方法说明:函数原型:char * getcwd(char * buf,size_t size);函数说明:getcwd()会将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size为buf的空间大小。

操作系统课程设计说明书格式要求范本

操作系统课程设计说明书格式要求范本

操作系统课程设计说明书格式要求湖南工业大学课程设计资料袋计算机与通信___ 学院(系、部)年第一2」学期课程名称计算机操作系统指导教师文志强职称博士学生姓名邓德尽专业班级计算机081班学号题目 __________ 磁盘调度成绩____________ 起止日期_年丄月土日〜_年丄月_6日目录清单湖南工业大学课程设计任务书—年第2学期计算机与通信学院(系、部)计算机专业081班级课程名称:计算机操作系统课程设计设计题目:__________ 磁盘调度完成期限:自_年丄月4日至—年丄月_6_日共丄周指导教师(签字): ______ 年月曰系(教研室)主任(签字):年月曰设计说明书(题目) 磁盘调度起止日期: _年_±月_4_0至_年月_6日学 生 姓 名 邓德尽 班 级081学号 _______________________________ 成绩 _______________________________指导教师(签字) ______________________________XXXXXXX 学院(部)年 月曰目录计算机操作系统课程设计1 课程设计简介 ............................... 错误! 未定义书签1.1 课程设计的目的........................ 错误! 未定义书签1.2 课程设计内容.......................... 错误! 未定义书签2 数据结构的设计 .............................. 错误! 未定义书签2.1 XXXXXXX ....................................................... 错误! 未定义书签2.2 XXXXXXX ..................................................... 错误! 未定义书签3 功能模块(或算法)描述...................... 错误! 未定义书签3.1 XXXXXXX ....................................................... 错误! 未定义书签3.2 XXXXXXX ..................................................... 错误! 未定义书签4 程序运行结果 ............................... 错误! 未定义书签5 心得体会 ................................... 错误! 未定义书签参考文献..................................... 错误! 未定义书签附源代码..................................... 错误! 未定义书签1 课程设计简介1.1 课程设计的目的使学生熟悉磁盘管理系统的设计方法;加深对所学各种磁盘调度算法的了解及其算法的特点。

操作系统课程设计说明书(最后修正)

操作系统课程设计说明书(最后修正)

华南理工大学广州学院操作系统课程设计说明书在Linux环境下模拟实现命令解释器学号:************专业:软件工程班级:09级软件工程1班姓名:***一.程序概述1.进入程序的目录如下:使用gcc 05.c –o 05 编译后生成可执行文件05.当输入./05的时候源程序的执行结果就显示如上图,进入了该程序,就可以输入图上的命令exit,mypwd,mydir,mycd,mydel,newdir,mycp.程序存取在/home/09469/05.2.完成的功能本程序在不使用system()系统调用的前提下实现了某些Linux环境下的系统自带功能,如:1、mypwd命令是显示当前所在目录的路径名输入格式:mypwd2、mydir命令是列出当前目录中的所有目录及文件输入格式:mydir3、mycd命令是改变当前工作目录输入格式:mycd <目录名或路径>4、newdir命令是新建所输入的目录输入格式:newdir <目录名>5、mydel命令是删除所输入的目录输入格式:mydel <目录名>6、exit命令是退出命令解释程序输入格式:exit7、mycp命令是复制文件的功能输入格式:mycp <文件1><文件2>二.概念原理该命令解析器程序运用了C++与C语言相结合完成了题目所要求的几种功能,并充分调用了外部函数实现各项功能。

如下是程序中运用到较为重要的几个函数:1、在mypwd()函数里用到了getcwd()函数,该函数原型为:char *_getcwd( char *buffer, int maxlen );功能:获取当前工作目录。

参数说明:_getcwd()会将当前工作目录的绝对路径复制到参数buffer所指的内存空间中,参数maxlen为buffer的空间大小。

所以需要显示当前所在目录的路径名只需要运用getcwd()函数就能直接获取出来。

操作系统课程设计说明书样板范本

操作系统课程设计说明书样板范本

操作系统课程设计说明书样板课程设计任务书计算机科学与技术专业—年级—班—、设计题目文件管理系统设计二、主要内容设计一个简单的文件管理系统来模拟文件操作命令的执行三、具体要求文档仅供参考设计和调试一个简单的文件管理系统来模拟文件管理,使学生对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法。

具体要求如下:⑴设计一个支持n个用户的文件系统,每个用户可拥有多个文件;⑵采用二级或二级以上的多级文件目录管理;⑶对文件应设置存取控制保护方式,如“只能执行”、“允许读”、“允许写”等;⑷系统的外部特征应接近于真实系统,可设置下述文件操作命令:建立文件、打开文件、关闭文件、删除文件、读文件、写文件、复制文件、查询目录。

⑸经过键盘(或鼠标)使用该文件系统,系统应显示操作命令的执行结果。

四、进度安排-9-3 ---- -9-6 确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;文档仅供参考-9-6 ---- -9-12 编写程序代码并调试,再将调试经过的各个子模块进行集成调试;-2-12 -9-16 归纳文档资料,完成课程设计说明书,参加课程设计答辩五、完成后应上交的材料在课程设计完成后需要提交的成果和有关文档资料包括:1、课程设计的说明书。

2、课程设计有关源程序及可运行程序(光盘或电子邮件)六、总评成绩:指导教师 ___ 签名日期 _年_月_日系主任 _____ 审核日期—年_月_日文档仅供参考一、本设计目的及基本思想本课程设计目的是实现树型目录结构文件系统,在实现过程中利用了二叉树,其中每个节点都有父指针,子指针和兄弟指针,其中子指针指向该目录下的第一个子节点,而该子节点的父指针则指向它的上级目录。

目录下各子节点用兄弟指针连接起来。

文件夹打开是则把文件夹名称及其地址压入打开文件夹栈,文件关闭则把文件夹名称及其地址从打开文件夹栈中抛出。

操作系统课程设计说明书

操作系统课程设计说明书

中北大学操作系统课程设计说明书学院、系:软件学院专业:软件工程学生姓名:学号:设计题目:模拟文件系统的设计与实现起迄日期: 2016年12月21日- 2017年1月4日指导教师:2016年12月20日一、需求分析1.1课程设计题目和目的通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解。

同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的力。

1.2 课程设计要求通过课程设计,要求学生主要掌握以下内容:a.文件的物理结构可以选用顺序分配,链表分配或索引分配。

b.建立文件:从命令中得到文件名,得到该文件的文件长度,建立文件修改目录表。

c.删除文件:回收文件占用的空间,修改目录表d.读文件:read[文件名][显示开始字节][显示的字节数],直接显示所需要的字节数。

e.写文件:write[文件名][插入的位置][插入的内容]f.查询属性:显示文件属性,文件名,类型,长度,时间等。

1.3程序设计思想此课程设计把TXT文件作为研究对象来模拟操作系统的文件系统的文件系统工作过程。

所以用一个字符串数组来模拟磁盘空间,顾名思义,模拟磁盘提供字符的存储服务。

磁盘空间分配表,采用链表结构,每个节点保存模拟磁盘的一个逻辑块的信息,包括块的最大长度,文件占用长度,占用标志。

如果占用标志为0,即该空间可分配给文件。

初始化磁盘空间时,从头开始遍历,检查占用位,如果该块位可分配,则检查块大小,若块长度大于或者等于申请空间的大小,则把块的前一部分(等于申请大小)分配给文件,并置标志位为占用。

剩下的大小做来一个新块,做来一个新的节点插入到原节点的后边,标志位为可用。

这样就实现了模拟磁盘的线性分配。

文件表,由于模拟文件系统的文件数量不多,故文件表采用线性表来存储。

线性表每个节点存储一个文件的信息。

打开文件表,采用数组形式存储打开的文件,数组每个元素保存一个打开文件的信息。

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

课程设计任务书学生:朱东各专业班级:计算机0604指导教师:蔡菁工作单位:计算机科学与技术学院题目: 模拟设计段页式虚拟存储管理中地址转换初始条件:1.预备容:阅读操作系统的存管理章节容,理解段页式存储管理的思想及相应的分配主存的过程。

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

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.实现段页式存储管理中逻辑地址到物理地址的转换。

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

2.设计报告容应说明:⑴需求分析;⑵功能设计(数据结构及模块说明);⑶开发平台及源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:错误!未找到引用源。

)你认为你完成的设计哪些地方做得比较好或比较出色;错误!未找到引用源。

)什么地方做得不太好,以后如何改正;错误!未找到引用源。

)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);错误!未找到引用源。

)完成本题是否有其他方法(如果有,简要说明该方法);错误!未找到引用源。

)对实验题的评价和改进意见,请你推荐设计题目。

时间安排:设计安排一周:周1、周2:完成程序分析及设计。

周2、周3:完成程序调试及测试。

周4、周5:验收、撰写课程设计报告。

(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日模拟段页式虚拟存储管理中地址转换1需求分析1.1段页式管理的基本思想1.1.1基本思想段式和页式存储管理各有优缺点,段页式存储管理系统,用分段的方法来分配和管理虚拟存储器,而用分页的方法来分配和管理主存。

既有段式系统便于实现段的共享,段的保护,动态和段的动态增长等一系列优点,又能像页式系统那样,很好地解决存的外碎片问题。

具体来说,把整个存分成大小相等存块,存块从0开始依次编号。

把用户程序分成若干段,每段有个段名。

页面的大小和存块相同,每段的各个页面都分别从0开始依次编号。

虚空间的最小单位是页而不是段,存就被分为若干个页,且每段所拥有的程序和数据在存中可以分开存放,分段大小也不再受存可用区的限制。

1.2段页式存储的原理1.2.1虚地址的构成逻辑地址有三部分构成:V=(S,P,d)即段号s,页号p和页相对地址d,如下所示:存分配:以块为单位进行存分配,为了实现从逻辑地址到物理地址的转换,为每个作业或进程建立一段表:段表中的段长即是页表长度,段表中的段始址即是页表地址,每个段拥有一页表,段的页号映射为物理地址中的物理块号。

1.2.2段表和页表的构成在段页式存储管理系统中,段表包含这样几个基本项:段号,状态,该段的页表长度,页表始址;页表包含的基本项是:页号,状态,块号。

段页式管理中段表,页表以及存的关系如下图:1.2.3 动态地址变换过程在段页式存储管理系统中,要对存中的指令或数据进行一次存取操作至少需要访问3次存。

第一次是由段表寄存器得到段表始址去访问段表,然后取出对应段的页表地址。

第二次则是访问页表得到所要访问的物理地址。

只有在访问了段表和页表之后,,第三次才能访问真正要访问的物理单元。

段页式存储管理系统地址变换如下所示:2 功能设计(数据结构及模块说明)2.1 存储结构说明在此段页式存储管理系统中,我们采用以下数据结构来存储数据,存储结构用结构体和结构体数组来实现:2.1.1段表段号s 状态flag 页表长度plen 页表始址psta//段表typedef struct Stackint num;//段号int flag;//段状态int plen;//页表长度int psta;//页表始址}Stack;其中状态为1代表在存,为0代表不在存。

2.1.2 页表//页表typedef struct Page{int num;//页号int flag;//页状态,即是否在存。

int block;//该页对应的块号}Page;2.1.3 数据区简单起见,我们没有把容初始化到每一个存地址,只给出每个作业块的容,并且用一串字符代替。

typedef struct Data{int num;//存的块数string str;//对应数据块的作业容,简化起见说明容为一串字符。

}Data;2.1.4 快表//快表typedef struct Quick {int qs;//快表段号int qp;//快表页号int qb;//快表段号}Quick;2.1.5 段表寄存器//段表寄存器typedef struct Stare {int ssta;//段表始址int slen;//段表长度}Stare;2.2程序流程图3 程序设计3.1 本程序平台本实验使用VC++ 6.0平台,使用基本的控制台应用程序,单文档结构,主要数据结构是结构体间的关系。

打开VC++6.0建立一个空工程,然后简历C++源文件,根据数据结构编写代码。

3.2变量和函数说明3.2.1 变量说明Stack ss[10];//全局变量,用来存放所有进程的段,数组下标就是段号。

Stare st;///////全局变量,用来存放段表寄存器表。

Data work[20];//全局变量,主存每一块的容,下标是块号。

Quick qu;//////全局变量,存放快表。

Page page[5][5];//存放每个块对应的页表。

bool menuflag=0;//菜单函数标志位,首次使用初始化表。

int bbs;//存块大小int bs;//存大小3.2.2函数说明void menu();//为用户提供菜单,详情见第四部分截图。

void start();//初始化表项。

详情见第四部分截图。

函数实现部分见附录。

void change();//地址转换函数。

详情见第四部分截图。

函数实现部分见附录。

3.2.3 菜单设计进入界面必须先对段表数据进行初始化,然后可以多次进行地址转换。

4 结果与运行情况分析运行程序,测试程序运行情况:本次程序设计中,进入界面必须先对段表数据进行初始化,然后可以多次进行地址转换,其中会出现段页越界,缺(段)页。

其中有一点和实际并不相同:由于C++里面单限制,不能实现快表和段表的同时查询,故模拟时采用先查询快表然后再查询段表的模式,另外,为每一段创建的页表,直接有页表二维数组组成,第一纬代表段号,第二维代表段页号。

整体数据和用例见下图:4.1 段表初始化按照上图,进入程序后进行段表初始化4.2 段号越界中断测试从上图中可以看到段号只有5个,0-4,所以越界中断。

逻辑地址不合法。

4.3 缺段中断测试第二段不在存,逻辑地址无法转化,需要把该段调入主存。

4.4 缺页中断测试第三段第0页不在存,逻辑地址无法转化,需要调入页面。

4.5 页表越界测试第三段没有第五页,页表越界,访问非法。

4.6 在段表中成功访问数据测试成功测试数据,第四段第0页对应块号为10,故物理地址是10*1024+500=10740第十块作业数据是:k5 自我评价与总结本次系统中,主要是利用简单的数据结构和VC的简单的控制台程序,采用自己定义数据模拟段页式存储管理的方式,简单明快的是给用户一个功能菜单,进入菜单必须进行段表数据初始化,然后只要不退出就可以进行各种地址转化测试,也可以重新初始化段表。

而数据结构部分,采用结构体数组比较容易掌握的格式,是的查询过程简单化。

总的来说,利用简单的思想较为完整的模拟了段页式存储的各个步骤,甚至把快表也考虑了进去。

对于各种非法访问非常直观的指出非法原因。

为了体现数据访问的真实性,我还简单的为存中每一个作业快初始化了作业数据,找到物理块号后可以直接读出块的作业容。

体现的本程序的根本目的。

当然,程序也有很多不足,例如可以考虑采用MFC窗口应用程序,结合C++自带的部模板函数MAP 函数,这样也可以较好的模拟段页式系统,本程序中对于段表的初始化过于繁琐,可以采取文本数据库的形式,利用读取TXT的方式给段表链表结构进行初始化,会增加程序的可视性,和简便性。

本次实验中,总体还算比较顺利,但是测试过程中还是出现了一些问题,主要是对段页式存储的理解不够深入照成的,每一个段都有一个页表,而这些段和自己的页表是要靠段表里的页表始址定位的,这个在程序中没有完整的表现出来,另外第一次程序中没有考虑页表越界中断,这是没有完整的把握模拟系统中的各个环节造成的,为此要以自己写好的程序流程图为基础,考虑到每一步分支程序,尽量用简单的方式把系统的各种功能模拟出来。

上图就是错把3 5 521当成缺页中断,应该是页表越界,这个在第四部分已经改正。

当然,完成本题还有其他的方式,可以借用VC的置数据结构和模板,可以使用结构体指针来存取段表,可以吧段表存到文本文件里,这些都是可行的。

通过本次课程设计,加深了自己对书本知识的理解,通过亲自把模拟系统做成数据结构,更加直观真切的体会到段页式存储的基本思想,当然同时也对其他的存储知识加深了理解,同时锻炼了自己把所学知识应用的实际视图里面的能力,做到学以致用,对计算机硬件里面的微观世界有了进一步的剖析。

7附录完整的程序代码:#include<iostream>#include<string>using namespace std;//数据结构//快表typedef struct Quick{int qs;//快表段号int qp;//快表页号int qb;//快表段号}Quick;//数据区,简单起见,只为每一个储块写入容,不具体到每一物理地址。

typedef struct Data{int num;//存的块数string str;//对应数据块的作业容,简化起见说明容为一串字符。

}Data;//页表typedef struct Page{int num;//页号int flag;//页状态,即是否在存。

int block;//该页对应的块号}Page;//段表typedef struct Stack{int num;//段号int flag;//段状态int plen;//页表长度int psta;//页表始址}Stack;//段表寄存器typedef struct Stare{int ssta;//段表始址int slen;//段表长度}Stare;Stack ss[10];////全局变量Stare st;///////全局变量Data work[20];//全局变量Quick qu;//////全局变量Page page[5][5];bool menuflag=0;int bbs;//存块大小int bs;//存大小void menu();void start();void change();int main(){menu();return 0;}void menu(){cout<<"*************请选择**************"<<endl;cout<<endl;cout<<"** 1、初始化表 *****"<<endl;cout<<"** 2、物理地址转换 *****"<<endl;cout<<"** 3、退出 *****"<<endl;int menu1;cin>>menu1;if(menu1!=1&&menu1!=2&&menu1!=3){cout<<"请输入正确的选项"<<endl;menu();}switch(menu1){case 1:{menuflag=1;start();break;}case 2:{if(menuflag==0){cout<<"请初始化表"<<endl;menu();}change();break;}case 3:return;}//switch}void start(){cout<<"请输入存大小(K)"<<endl;cin>>bs;cout<<"请输入存块的大小(k)"<<endl;cin>>bbs;int blocknum;blocknum=bs/bbs;cout<<"存一共被分为"<<blocknum<<"块,每块"<<bbs<<"k"<<"一共"<<bs<<"k"<<endl;cout<<"请输入进程个数"<<endl;int pn;cin>>pn;//下面求所有进程的总段数和段表,并为每段创建页表int sums=0;for (int pn1=0;pn1<pn;pn1++){cout<<"请输入第"<<pn1<<"个进程的段数"<<endl;int ppn;cin>>ppn;sums+=ppn;}for(int ss1=0;ss1<sums;ss1++){cout<<"请输入第"<<ss1<<"个段表数据:段号,状态,页表长度,页表始址"<<endl;cin>>ss[ss1].num>>ss[ss1].flag>>ss[ss1].plen>>ss[ss1].psta;cout<<"请初始化第"<<ss1<<"段的页表,输入两个数据页表状态和对应块号"<<endl;for(int sss1=0;sss1<ss[ss1].plen;sss1++){page[ss1][sss1].num=sss1;cout<<"请输入该段第"<<sss1<<"个页表的页表状态和对应块号"<<endl;cin>>page[ss1][sss1].flag>>page[ss1][sss1].block;}}//初始化段表寄存器cout<<"初始化段表寄存器的段表始址"<<endl;cin>>st.ssta;st.slen=sums;//初始化存中物理地址每一块的数据区cout<<"简单起见,我们对物理地址的每一块用字符串进行简单的初始化,没有具体到每一物理地址"<<endl;for (int bn=0;bn<blocknum;bn++){work[bn].num=bn;cout<<"请输入第"<<bn<<"个存块里的作业容"<<endl;cin>>work[bn].str;}//初始化快表cout<<"简单起见,我们初始化快表只有一个"<<endl;cout<<"请输入要作为快表的段号和页号"<<endl;cin>>qu.qb>>qu.qp;while(ss[qu.qb].flag!=1||page[qu.qb][qu.qp].flag!=1){cout<<"该页不在存请输入一页在存中的作为快表,请输入要作为快表的段号和页号"<<endl;cin>>qu.qb>>qu.qp;}qu.qs=page[qu.qb][qu.qp].block;menu();}void change(){cout<<"请输入要转化的逻辑地址,段号s,段页号p,页偏移地址d(B)"<<endl;int snum,pnum,dnum;cin>>snum>>pnum>>dnum;//首先查快表if(snum==qu.qb&&pnum==qu.qp){cout<<"快表命中"<<"对应块号是"<<qu.qs<<endl;cout<<"该块中作业数据是"<<work[page[qu.qb][qu.qp].block].str<<endl;cout<<"物理地址是"<<qu.qs*bbs*1024+dnum<<endl;;menu();}//访问段表寄存器else{cout<<"快表没有命中,访问段表寄存器,段号等于段表始址加上偏移地址"<<endl;int ssnum;ssnum=st.ssta+snum;if(ssnum>st.slen-1){cout<<"越界中断"<<endl;menu();}//访问段表else{if(ssnum>=0&&ssnum<=st.slen-1){//是否缺段cout<<"段表有效"<<endl;if(ss[ssnum].flag==0){cout<<"缺段中断"<<endl;menu();}else{//查询页表,根据段号查出页表始址,加上段偏移页数,即得到页表项。

相关文档
最新文档