操作系统课程设计报告格式
《操作系统》课程设计
《操作系统》课程设计一、课程目标知识目标:1. 让学生掌握操作系统的基本概念,包括进程、线程、内存管理、文件系统等核心知识;2. 了解操作系统的历史发展,掌握不同类型操作系统的特点及使用场景;3. 掌握操作系统的性能评价方法和常用的调度算法。
技能目标:1. 培养学生运用操作系统知识解决实际问题的能力,如分析系统性能瓶颈、优化系统资源分配等;2. 培养学生具备基本的操作系统编程能力,如进程创建、线程同步、文件操作等;3. 提高学生的团队协作能力和沟通能力,通过小组讨论和项目实践,学会共同解决问题。
情感态度价值观目标:1. 培养学生对操作系统学科的兴趣,激发学生的学习热情,使其形成积极向上的学习态度;2. 培养学生具备良好的信息素养,尊重知识产权,遵循法律法规;3. 培养学生的创新精神和批判性思维,敢于质疑、勇于探索,形成独立思考的能力。
课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,提高学生的系统分析和编程能力。
学生特点:学生具备一定的编程基础和计算机系统知识,具有较强的逻辑思维能力和动手实践能力。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和项目实践,帮助学生将所学知识内化为具体的学习成果。
在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。
二、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、功能、类型及特点,对应教材第一章内容。
- 操作系统的起源与发展- 操作系统的功能与类型- 操作系统的主要特点2. 进程与线程:讲解进程与线程的概念、状态、调度算法,对应教材第二章内容。
- 进程与线程的定义与区别- 进程状态与转换- 进程调度算法3. 内存管理:分析内存管理的基本原理、策略和技术,对应教材第三章内容。
- 内存分配与回收策略- 虚拟内存技术- 页面置换算法4. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。
《操作系统课程设计》报告范本(doc 10页)
《操作系统课程设计》报告学号:姓名:班级:指导教师:报告日期:一、课设目的通过对操作系统课程的学习,熟悉进程的概念、进程的管理与存储、进程的调度,通过实践深入理解进程的调度算法。
二、课设任务要求编写一个程序,可以创建若干个虚拟进程,并对若干个虚拟进程进行调度,调度策略为时间片轮转法,主要任务包括:①进程的个数,进程的内容(即进程的功能序列)来源于一个进程序列描述文件,另外调度运行结果输出到一个运行日志文件;②设计PCB适用于时间片轮转法;③建立进程队列;④实现时间片轮转调度算法,尽量可视化的展示调度的动态过程。
○5总结程序设计的开发过程:需求分析、系统设计、系统实现及文档的收集和整理。
三、实验方法与设计分析每个进程有一个进程控制块( PCB)表示。
进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
据需要设计调查计划调查、收集数据,能按要求整理数据,在统计表进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。
进程的到达时间为输入进程的时间。
,计算机,千千万万中小创业者渴望成功高中语文,语文试卷,计算机摇篮课进程的运行时间以时间片为单位进行计算。
每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。
式,因此上开店成为了一种潮流,并且越来越多高中语文,语文试卷,计算机就绪进程获得 CPU后都只能运行一个时间片。
用已占用CPU时间加1来表示。
卷,计算机络购物高中语文,语文试卷,计算机市场潜力还远未被释放课件同如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
语文,语文试卷,计算机,第5代速度达自动软件,不用东奔西走高中语文,语文每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。
操作系统课程设计报告
操作系统课程设计报告1. 引言操作系统是计算机系统中最核心的软件之一,它负责管理和优化计算机资源的分配和调度,为用户和应用程序提供一个可靠、高效的执行环境。
在操作系统课程设计中,我们通过设计一个简单的操作系统,深入理解操作系统的原理和功能,提升对操作系统的理解和实践能力。
本报告将详细介绍我们小组在操作系统课程设计过程中所完成的工作和实现的目标。
2. 设计目标在本次操作系统课程设计中,我们的设计目标包括:•实现一个基本的中断处理、进程调度和内存管理机制;•设计一个简单的文件系统;•确保操作系统的稳定性和可靠性;•实现用户命令解析和执行功能。
3. 系统架构我们的操作系统设计采用了经典的分层结构,主要由硬件抽象层、内核和用户接口层组成。
1.硬件抽象层:负责与硬件进行交互,提供基本的底层硬件接口,如处理器管理、中断处理、设备控制等。
2.内核:实现操作系统的核心功能,包括进程管理、内存管理、文件系统管理等。
这一层是操作系统的核心,负责管理和调度系统资源。
3.用户接口层:为用户提供简单友好的界面,解析用户输入的命令并调用内核功能进行处理。
用户可以通过命令行或图形界面与操作系统进行交互。
4. 功能实现4.1 中断处理中断是操作系统与外部设备通信的重要机制,我们的操作系统设计中实现了基本的中断处理功能。
通过在硬件抽象层中捕获和处理硬件的中断信号,内核可以对中断进行相应的处理,保证系统的响应能力和稳定性。
4.2 进程调度进程调度是操作系统中的重要任务之一,它决定了系统如何分配和调度上下文切换。
我们的操作系统设计中实现了一个简单的进程调度算法,通过时间片轮转算法和优先级调度算法来管理多个进程的执行顺序,以提高系统的吞吐量和响应性能。
4.3 内存管理内存管理是操作系统中必不可少的功能,它负责对系统内存的分配和回收。
我们的操作系统设计中实现了基本的内存管理功能,包括内存分区、内存空闲管理和地址映射等。
通过合理的内存管理,可以提高系统的内存利用率和性能。
课程设计操作系统
课程设计操作系统一、教学目标本课程旨在让学生掌握操作系统的基本原理和概念,了解操作系统的运行机制和功能,培养学生运用操作系统知识解决实际问题的能力。
具体目标如下:1.知识目标:(1)理解操作系统的基本概念、功能和作用;(2)掌握操作系统的运行机制,包括进程管理、内存管理、文件管理和设备管理;(3)了解操作系统的发展历程和主流操作系统的基本特点。
2.技能目标:(1)能够运用操作系统知识分析和解决实际问题;(2)具备基本的操作系统使用和维护能力;(3)掌握操作系统的基本配置和优化方法。
3.情感态度价值观目标:(1)培养学生对操作系统知识的兴趣和好奇心;(2)树立正确的计算机使用观念,提高信息素养;(3)培养学生团队协作、创新思考和持续学习的能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.操作系统概述:介绍操作系统的定义、功能、作用和分类;2.进程管理:讲解进程的概念、进程控制、进程同步与互斥、死锁等问题;3.内存管理:讲解内存分配与回收策略、虚拟内存、页面置换算法等;4.文件管理:讲解文件和目录的概念、文件存储结构、文件访问控制、磁盘空间分配等;5.设备管理:讲解设备驱动程序、I/O调度策略、中断处理和DMA传输等;6.操作系统实例分析:分析主流操作系统(如Windows、Linux)的基本特点和运行机制。
三、教学方法本课程采用多种教学方法相结合,以提高学生的学习兴趣和主动性:1.讲授法:讲解操作系统的基本概念、原理和知识点;2.讨论法:学生针对操作系统相关问题进行讨论,培养学生的思维能力和团队协作精神;3.案例分析法:分析实际案例,让学生了解操作系统在实际应用中的作用和意义;4.实验法:安排实验课程,让学生动手实践,巩固所学知识。
四、教学资源为实现课程目标,我们将采用以下教学资源:1.教材:选用权威、实用的操作系统教材,为学生提供系统、全面的知识体系;2.参考书:提供相关领域的参考书籍,拓展学生的知识视野;3.多媒体资料:制作精美的PPT课件,辅助讲解和展示操作系统的相关概念和实例;4.实验设备:配置相应的实验设备,让学生动手实践,提高操作能力。
操作系统课程设计总结报告--参考格式
(请同学们书写自己所分担的部分)(由于每个同学所完成的任务不同,该格式仅供参考)操作系统课程设计总结报告2013级软件工程x班学号:xxxxxxxxxxxxxx姓名:xxxxx1 源码分析报告 (3)1.1 Nachos内核启动(Machine.java) (3)1.2Nachos 参数解析、设备创建和Debug方法 ................................. 错误!未定义书签。
1.2.1 Nachos 启动参数解析....................................................................... 错误!未定义书签。
1.2.2 Nachos配置文件................................................................ 错误!未定义书签。
1.2.3Nachos 设备创建................................................................... 错误!未定义书签。
1.2.4Nachos Debug方法 ................................................................ 错误!未定义书签。
1.3Nachos 中断过程.............................................................................. 错误!未定义书签。
1.3.11.3.21.3.3.......2 Phase 1 Build a Thread System for Kernel Processes ........... 错误!未定义书签。
2.1 设计要求......................................................................................... 错误!未定义书签。
操作系统课程设计报告
实践课设计报告课程名称操作系统课程设计模拟设计内存管理中的地址题目转换(动态分区、页式十进制)学院班级学号姓名指导教师年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 模拟设计内存管理中的地址转换(动态分区、页式十进制)初始条件:1.预备内容:阅读操作系统的内存管理章节内容,理解动态分区、页式、段式和段页式存储管理的思想及相应的分配主存的过程。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.下列内部存储器管理中地址转换,在完成指定存储管理技术中的地址转换基础上还可以选择其它内部存储器管理中的地址转换进行模拟设计并实现:⑴动态分区方案,用最先适用算法对作业实施内存分配,然后把作业地址空间的某一逻辑地址转换成相应的物理地址。
能够处理以下的情形:输入某一逻辑地址,程序能判断地址的合法性,如果合法,计算并输出相应的物理地址。
如果不能计算出相应的物理地址,说明原因。
⑵页式存储管理中逻辑地址到物理地址的转换(十进制)。
能够处理以下的情形:输入某一十进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用十进制表示。
⑶页式存储管理中逻辑地址到物理地址的转换(八进制)。
能够处理以下的情形:输入某一八进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用八进制表示。
⑷页式存储管理中逻辑地址到物理地址的转换(十六进制)。
能够处理以下的情形:输入某一十六进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用十六进制表示。
⑸段式存储管理中逻辑地址到物理地址的转换。
能够处理以下的情形:指定内存的大小,进程的个数,每个进程的段数及段大小;能检查地址的合法性,如果合法进行转换,否则显示地址非法的原因。
⑹段页式存储管理中逻辑地址到物理地址的转换。
操作系统课程设计总结报告范文
5.2内容
5.3数据结构
5.4算法设计及流程图
5.5小结
六、银行家算法
6.1目的
6.2内容
6.3数据结构
6.4算法设计及流程图
6.5小结
七、课程总结
操作系统课程设计总结报告
《操作系统课程设计》
总结报告
学期- 第二学期
学院软件学院
ห้องสมุดไป่ตู้学号1
姓名
年 6月 28日
本学期开设了操作系统课程,为了更好的理解操作系统理论,掌握其应用,特设此操作系统实验课程,在该操作系统实验中包括进程管理、存储管理、设备管理和文件管理四个实验部分。
一、进程控制
1.1目的
利用简单的结构和控制方法模拟进程结构、进程状态转换和进程控制。
1.2内容
1、利用简单的结构和控制方法模拟进程结构、进程状态和进程控制,使学生掌握作为操作系统分配资源的基本单位的进程相关的概念。定义PCB(能够采用静态结构或动态结构),在实验中只需建立PCB,用它代表完整的进程。
2、定义进程状态转换方式:进程的状态转换是由进程内部操作或操作系统的控制引起,由于无法实现这些功能,学生能够采用随机数方法或键盘控制方法模拟,并实现对应的控制程序。随机方法指产生1-6的随机数,分别代表创立进程(c)、结束进程(e)、进程阻塞(b)、激活进程(w)、调度进程(p)、时间片到(t)等事件;键盘模拟方法指定义6种按键代表以上6种事件。
3、创立进程的过程中加入连续存储管理的可变分区的分配算法,可采用最佳适应算法,在结束进程的同时完成内存分区的回收算法,保证连接成一个连续空闲区。
1.3数据结构
建立三个队列,分别是就绪队列,执行队列,阻塞队列。并写出相应的出队入队及初始化函数。三个结构体,分别是链队结构体,进程结构体,空闲表结构体。有一个表,一个空余表。
操作系统课程设计(完整规范版)
操作系统课程设计(完整规范版)一、设计目的操作系统课程设计旨在让学生深入了解操作系统的基本原理,掌握操作系统设计与实现的基本方法,培养学生在操作系统领域的实际动手能力和创新思维。
通过本次课程设计,学生应能够:1. 理解操作系统的功能、结构和关键技术;2. 学会分析实际操作系统的性能和特点;3. 设计并实现一个简单的操作系统模块或功能;4. 提高团队协作和沟通能力。
二、设计要求1. 设计内容:根据课程所学,选择一个具有实际意义的操作系统模块进行设计与实现。
模块可包括:进程管理、内存管理、文件系统、设备管理等。
2. 设计规范:遵循软件工程的基本原则,确保代码的可读性、可维护性和可扩展性。
3. 团队协作:本次课程设计以小组为单位进行,每组35人。
小组成员需明确分工,共同完成设计任务。
(2):包括所有设计文件、代码及相关文档;(3)演示PPT:汇报课程设计成果,阐述设计思路、实现过程及创新点。
三、设计流程1. 需求分析:分析所选操作系统模块的功能需求,明确设计目标。
2. 系统设计:根据需求分析,设计系统架构,划分模块,确定各模块的功能和接口。
3. 编码实现:按照系统设计,编写代码,实现各模块功能。
4. 测试与调试:对实现的系统模块进行功能测试、性能测试和兼容性测试,确保系统稳定可靠。
5. 优化与改进:根据测试结果,对系统进行优化和改进。
7. 演示与答辩:制作演示PPT,汇报课程设计成果,回答评委提问。
四、评分标准1. 设计报告(30%):内容完整、结构清晰、表述准确、格式规范。
2. 代码质量(40%):代码可读性、可维护性、可扩展性、创新性。
3. 演示与答辩(20%):PPT制作、汇报效果、回答问题。
4. 团队协作(10%):分工明确、协作高效、沟通交流。
五、预期成果1. 理论与实践相结合:将课堂上所学的操作系统理论知识运用到实际设计中,加深对操作系统的理解。
2. 技能提升:提高编程能力,掌握操作系统核心模块的设计与实现技巧。
操作系统课程设计
操作系统课程设计报告1、概述一、设计目的1.对死锁避免中的银行家算法作进一步理解。
2.加深理解死锁的概念。
3.加深理解安全序列和安全状态的概念。
4.通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。
二、开发环境操作系统Windows xp编译环境VC++6.0生成文件银行家算法.cpp2、需求分析一、死锁概念:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程.由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了死锁。
二、关于死锁的一些结论:1.参与死锁的进程最少是两个(两个以上进程才会出现死锁)2.参与死锁的进程至少有两个已经占有资源3.参与死锁的所有进程都在等待资源4.参与死锁的进程是当前系统中所有进程的子集如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。
三、资源分类:永久性资源:可以被多个进程多次使用(可再用资源)1)可抢占资源2)不可抢占资源临时性资源:只可使用一次的资源;如信号量,中断信号,同步信号等(可消耗性资源)“申请--分配--使用--释放”模式四、产生死锁的四个必要条件:1、互斥使用(资源独占)一个资源每次只能给一个进程使用2、不可强占(不可剥夺)资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放3、请求和保持(部分分配,占有申请)一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)4、循环等待存在一个进程等待队列{P1 , P2 , … , Pn}, 其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路。
操作系统课程设计报告
.操作系统课程设计报告专业:学号:姓名:提交日期:【设计目的】(1)本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。
(2)结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。
(3)通过分对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力【设计内容】为Linux系统设计一个简单的二级文件系统。
要求做到以下几点:1.可以实现下列几条命令:login 用户登录dir 列目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件cd 进出目录2.列目录时要列出文件名,物理地址,保护码和文件长度3.源文件可以进行读写保护【实验环境】C++/VC++【源程序清单】#include "stdio.h"#include "string.h"#include "conio.h"#include "stdlib.h"#define MAXNAME 25 /*the largest length of mfdname,ufdname,filename*/#define MAXCHILD 50 /*the largest child*/#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/typedef struct /*the structure of OSFILE*/{int fpaddr; /*file physical address*/int flength; /*file length*/int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write; 3-Protect;*/ char fname[MAXNAME]; /*file name*/} OSFILE;typedef struct /*the structure of OSUFD*/{char ufdname[MAXNAME]; /*ufd name*/OSFILE ufdfile[MAXCHILD]; /*ufd own file*/}OSUFD;typedef struct /*the structure of OSUFD'LOGIN*/{char ufdname[MAXNAME]; /*ufd name*/char ufdpword[8]; /*ufd password*/} OSUFD_LOGIN;typedef struct /*file open mode*/{int ifopen; /*ifopen:0-close,1-open*/int openmode; /*0-read only,1-write only,2-read and write,3-initial*/}OSUFD_OPENMODE;OSUFD *ufd[MAXCHILD]; /*ufd and ufd own files*/OSUFD_LOGIN ufd_lp;int ucount=0; /*the count of mfd's ufds*/int fcount[MAXCHILD]; /*the count of ufd's files*/int loginsuc=0; /*whether login successfully*/char username[MAXNAME]; /*record login user's name22*/char dirname[MAXNAME];/*record current directory*/int fpaddrno[MAX]; /*record file physical address num*/OSUFD_OPENMODE ifopen[MAXCHILD][MAXCHILD]; /*record file open/close*/ int wgetchar; /*whether getchar()*/FILE *fp_mfd,*fp_ufd,*fp_file_p,*fp_file;void LoginF(); /*LOGIN FileSystem*/void DirF(); /*Dir FileSystem*/void CdF(); /*Change Dir*/void CreateF(); /*Create File*/void DeleteF(); /*Delete File*/void ModifyFM(); /*Modify FileMode*/void OpenF(); /*Open File*/void CloseF(); /*Close File*/void ReadF(); /*Read File*/void WriteF(); /*Write File*/void QuitF(); /*Quit FileSystem*/void help();char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/void InputPW(char *password); /*input password,use '*' replace*/void SetPANo(int RorW); /*Set physical address num*/int ExistD(char *dirname); /*Whether DirName Exist,Exist-i,Not Exist-0*/int WriteF1(); /*write file*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int FindPANo(); /*find out physical address num*/void clrscr(){system("cls");}int main(){int i,choice1;char choice[50]; /*choice operation:dir,create,delete,open,delete,modify,read,write*/ int choiceend=1; /*whether choice end*/char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/if((fp_mfd=fopen("c:\\osfile\\mfd.txt","rb"))==NULL){fp_mfd=fopen("c:\\osfile\\mfd.txt","wb");fclose(fp_mfd);}for(i=0;i<MAX;i++) fpaddrno[i]=0;//textattr(BLACK*16|WHITE);clrscr(); /*clear screen*/LoginF(); /*user login*/clrscr();if(loginsuc==1) /*Login Successfully*/{while (1){wgetchar=0;if (choiceend==1)printf("\n\nC:\\%s>",strupr(dirname));elseprintf("Bad command or file name.\nC:\\%s>",strupr(username));gets(choice); //输入所选择的strcpy(choice,ltrim(rtrim(strlwr(choice)))); //将输入的值赋给choiceif (strcmp(choice,"dir")==0) choice1=1; //依次将输入的值与dir,create等进行比较else if(strcmp(choice,"create")==0) choice1=2; //如果输入create将choice1置为2通过switch选择,以下依次类推else if(strcmp(choice,"delete")==0) choice1=3;else if(strcmp(choice,"attrib")==0) choice1=4;else if(strcmp(choice,"open")==0) choice1=5;else if(strcmp(choice,"close")==0) choice1=6;else if(strcmp(choice,"read")==0) choice1=7;else if(strcmp(choice,"write")==0) choice1=8;else if(strcmp(choice,"exit")==0) choice1=9;else if(strcmp(choice,"cls")==0) choice1=10;else if(strcmp(choice,"cd")==0) choice1=11;else if(strcmp(choice,"help")==0) choice1=20;else choice1=12; //choice1=12时跳转到default,然后继续循环switch(choice1){case 1:DirF();choiceend=1;break;case 2:CreateF();choiceend=1;if(!wgetchar) getchar();break;case 3:DeleteF();choiceend=1;if(!wgetchar)getchar();break;case 4:ModifyFM();choiceend=1;if(!wgetchar) getchar();break;case 5:OpenF();choiceend=1;if (!wgetchar) getchar();break;case 6:CloseF();choiceend=1;if (!wgetchar) getchar();break;case 7:ReadF();choiceend=1;if (!wgetchar) getchar();break;case 8:WriteF();choiceend=1;if (!wgetchar) getchar();break;case 9:printf("\nYou have exited this system.");QuitF();exit(0);break;case 10:clrscr();choiceend=1;break;case 11:CdF();choiceend=1;break;case 20:help();choiceend=1;break;default:choiceend=0;}}}elseprintf("\nAccess denied."); //登录成功}void help(void){printf("\nThe Command List\n");printf("\nCd Attrib Create write Read Open Cls Delete Exit Close\n"); }char *rtrim(char *str) /*除去末尾端的空格指针指向字符串第一个*/{int n=strlen(str)-1; //n为字符串长度减1while(n>=0){if(*(str+n)!=' ') //末尾不存在空格{*(str+n+1)='\0'; //'\n'表示结束符break;}else n--; //如果存在空格将空格去掉}if (n<0) str[0]='\0';return str;}char *ltrim(char *str) /*除去前端的空格*/{strrev(str); //把字符串str的所有字符的顺序颠倒rtrim(str); //去掉尾端空格strrev(str); //再颠倒过来return str;}void LoginF() /*LOGIN FileSystem*/{char loginame[MAXNAME],loginpw[9],logincpw[9],str[50];int i,j,flag=1;char a[25];int findout; /*login user not exist*/while(1){findout=0;printf("\n\nLogin Name:");gets(loginame); //输入字符串ltrim(rtrim(loginame)); //去掉前后端的空格fp_mfd=fopen("c:\\osfile\\mfd.txt","rb"); //打开该文件,返回给一个文件指针for(i=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;i++) //检测输入登录名和mfd.txt是否一样if (strcmp(strupr(ufd_lp.ufdname),strupr(loginame))==0) //若已经注册过{findout=1; //表示该用户已注册过strcpy(logincpw,ufd_lp.ufdpword);}fclose(fp_mfd);if (findout==1) /*user exist*/{printf("Login Password:");InputPW(loginpw); /*input password,use '*' replace*/if (strcmp(loginpw,logincpw)==0){strcpy(username,strupr(loginame));strcpy(dirname,username);fp_mfd=fopen("c:\\osfile\\mfd.txt","rb");for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;j++){strcpy(str,"c:\\osfile\\");strcat(str,ufd_lp.ufdname);strcat(str,".txt");ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));strcpy(ufd[j]->ufdname,strupr(ufd_lp.ufdname));fp_ufd=fopen(str,"rb");fcount[j]=0;for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd)!=0;i++,fcount[j]++){ifopen[j][i].ifopen=0;ifopen[j][i].openmode=4;}fclose(fp_ufd);}fclose(fp_mfd);ucount=j;SetPANo(0);printf("\n\nLogin successful! Welcome to this FileSystem\n\n");loginsuc=1;return;}else{printf("\n\n");flag=1;while(flag){printf("Login Failed! Password Error. Try Again(Y/N):");gets(a);ltrim(rtrim(a));if (strcmp(strupr(a),"Y")==0){loginsuc=0;flag=0;}else if(strcmp(strupr(a),"N")==0){loginsuc=0;flag=0;return;}}}}else{printf("New Password(<=8):");InputPW(loginpw); /*input new password,use '*' replace*/printf("\nConfirm Password(<=8):"); /*input new password,use '*' replace*/ InputPW(logincpw);if (strcmp(loginpw,logincpw)==0){strcpy(ufd_lp.ufdname,strupr(loginame));strcpy(ufd_lp.ufdpword,loginpw);fp_mfd=fopen("c:\\osfile\\mfd.txt","ab");fwrite(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd);fclose(fp_mfd);strcpy(username,strupr(loginame));strcpy(dirname,loginame);////////////////////////////////////////////////////////strcpy(str,"c:\\osfile\\");strcat(str,username);strcat(str,".txt");if((fp_ufd=fopen(str,"rb"))==NULL){fp_ufd=fopen(str,"wb");fclose(fp_ufd);}fp_mfd=fopen("c:\\osfile\\mfd.txt","rb");for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;j++){/////////////////////////////////////strcpy(str,"c:\\osfile\\");strcat(str,ufd_lp.ufdname);strcat(str,".txt");ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));strcpy(ufd[j]->ufdname,strupr(ufd_lp.ufdname));fp_ufd=fopen(str,"rb");for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd)!=0;i++,fcount[j]++){ifopen[j][i].ifopen=0;ifopen[j][i].openmode=4;}fclose(fp_ufd);}fclose(fp_mfd);ucount=j;SetPANo(0);printf("\n\nLogin Successful! Welcome to this System\n\n");loginsuc=1;return;}else{printf("\n\n");flag=1;while(flag){printf("Login Failed! Password Error. Try Again(Y/N):");gets(a);ltrim(rtrim(a));if (strcmp(strupr(a),"Y")==0){loginsuc=0;flag=0;}else if(strcmp(strupr(a),"N")==0){loginsuc=0;flag=0;return;}}}}}}void SetPANo(int RorW) /*Set physical address num,0-read,1-write*/{int i,j;if (RorW==0){if((fp_file_p=fopen("c:\\osfile\\file\\file_p.txt","rb"))==NULL) //如果文件未读成功{fp_file_p=fopen("c:\\osfile\\file\\file_p.txt","wb"); //创建该文件fclose(fp_file_p);}fp_file_p=fopen("c:\\osfile\\file\\file_p.txt","rb");///////////////////////////////////////////////////////////////////for(i=0;fread(&j,sizeof(int),1,fp_file_p)!=0;i++)fpaddrno[j]=1; //真正模拟的位示图的关系/*for(i=1;i<MAX;i++)if ((i%13)==0)fpaddrno[i]=1;*/}else{fp_file_p=fopen("c:\\osfile\\file\\file_p.txt","wb");/*for(i=1;i<MAX;i++)if((i%13)==0)fpaddrno[i]=0;*/for(i=0;i<MAX;i++)if (fpaddrno[i]==1) //表示已使用fwrite(&i,sizeof(int),1,fp_file_p); //把第几个扇区号写进文件}fclose(fp_file_p);}void InputPW(char *password) /*input password,use '*' replace*/{int j;for(j=0;j<=7;j++) //密码的长度小于8{password[j]=getch(); //获得输入值存入数组if ((int)(password[j])!=13) //13表示ASCII码,如果不是回车{if((int)(password[j])!=8) //如果不是退格putchar('*'); //就输入J个*号else //如果是退格{if (j>0) //且密码个数大于0{j--;j--;putchar('\b');putchar(' ');putchar('\b'); //'\b'表示退格,putchar 函数只能用于单个字符输出}else j--;}}else{ password[j]='\0'; //\0是字符串的结束符,如果输出完毕则终止break;}}password[j]='\0';}void DirF() /*Dir FileSystem*/{int i,j,count=0;char sfmode[25],sfpaddr[25],str[25];clrscr();if (strcmp(strupr(ltrim(rtrim(dirname))),"")!=0){printf("\n\nC:\\%s>dir\n",dirname);printf("\n%14s%16s%14s%10s%18s\n","FileName","FileAddress","FileLength","Type","FileM ode");j=ExistD(dirname);for(i=0;i<fcount[j];i++){if ((i%16==0)&&(i!=0)){printf("\nPress any key to continue..");getch();clrscr();printf("\n%14s%16s%14s%10s%18s\n","FileName","FileAddress","FileLength","Type","FileM ode");}/////////////////////////////////////////////////////////itoa(ufd[j]->ufdfile[i].fpaddr,str,10);strcpy(sfpaddr,"file");strcat(sfpaddr,str);if (ufd[j]->ufdfile[i].fmode==0) strcpy(sfmode,"Read Only");else if(ufd[j]->ufdfile[i].fmode==1) strcpy(sfmode,"Write Only");else if(ufd[j]->ufdfile[i].fmode==2)strcpy(sfmode,"Read And Write");else strcpy(sfmode,"Protect");printf("%14s%16s%14d%10s%18s\n",ufd[j]->ufdfile[i].fname,sfpaddr,ufd[j]->ufdfile[i].flengt h,"<FILE>",sfmode);}printf("\n %3d file(s)\n",fcount[j]);}else{printf("\n\nC:\\>dir\n");printf("\n%14s%18s%8s\n","DirName","OwnFileCount","Type");for(i=0;i<ucount;i++){if ((i%16==0)&&(i!=0)){printf("\nPress any key to continue...");getch();clrscr();printf("\n%14s%18s%8s\n","DirName","OwnFileCount","Type");}printf("%14s%18d%8s\n",ufd[i]->ufdname,fcount[i],"<UFD>");count=count+fcount[i];printf("\n %3d dir(s),%5d file(s)\n",ucount,count);}}int ExistD(char *dirname) /*Whether DirName Exist,Exist-i,Not Exist-0*/{int i;int exist=0;for(i=0;i<ucount;i++)if (strcmp(strupr(ufd[i]->ufdname),strupr(dirname))==0){exist=1;break;}if (exist) return(i);else return(-1);}void CdF() /*Exchange Dir*/{char dname[MAXNAME];printf("\nPlease input DirName (cd..-Previous dir; DirNAME-cd [DirNAME]):");gets(dname);ltrim(rtrim(dname));if (ExistD(dname)>=0) strcpy(dirname,strupr(dname));elseif(strcmp(strupr(dname),"CD..")==0) strcpy(ltrim(rtrim(dirname)),"");else printf("\nError.\'%s\' does not exist.\n",dname);}void CreateF() /*Create File*/{int fpaddrno,flag=1,i;char fname[MAXNAME],str[50],str1[50],a[25];char fmode[25];if (strcmp(strupr(dirname),strupr(username))!=0){printf("\nError. You must create file in your own dir.\n");wgetchar=1;}{printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));if (ExistF(fname)>=0){printf("\nError. Name \'%s\' has already existed.\n",fname);wgetchar=1;}else{printf("Please input FileMode(0-Read Only, 1-Write Only, 2-Read and Write, 3-Protect):");gets(fmode);ltrim(rtrim(fmode));if((strcmp(fmode,"0")==0)||(strcmp(fmode,"1")==0)||(strcmp(fmode,"2")==0)||(strcmp(fm ode,"3")==0)){fpaddrno=FindPANo();if (fpaddrno>=0){i=ExistD(username);strcpy(ufd[i]->ufdfile[fcount[i]].fname,fname);ufd[i]->ufdfile[fcount[i]].fpaddr=fpaddrno;ufd[i]->ufdfile[fcount[i]].fmode=atoi(fmode);ifopen[i][fcount[i]].ifopen=0;ifopen[i][fcount[i]].openmode=4;strcpy(str,"c:\\osfile\\file\\file");itoa(fpaddrno,str1,10);strcat(str,str1);strcat(str,".txt");fp_file=fopen(str,"wb");fclose(fp_file);fcount[i]++;while(flag){printf("Input text now(Y/N):");gets(a);ltrim(rtrim(a));ufd[i]->ufdfile[fcount[i]-1].flength=0;if(strcmp(strupr(a),"Y")==0){fp_file=fopen(str,"wb+");ufd[i]->ufdfile[fcount[i]-1].flength=WriteF1();flag=0;}else if(strcmp(strupr(a),"N")==0){flag=0;wgetchar=1;}}printf("\n\'%s\' has been created successfully!\n",fname);}else{printf("\nFail!No Disk Space. Please format your disk.\n");wgetchar=1;}}else{printf("\nError. FileMode\'s Range is 0-3\n");wgetchar=1;}}}}int ExistF(char *filename) /*该函数检测某文件是否存在*/{int i,j;int exist=0;j=ExistD(dirname);for(i=0;i<fcount[j];i++)if (strcmp(strupr(ufd[j]->ufdfile[i].fname),strupr(filename))==0){exist=1;break;}if (exist) return(i);else return(-1);}//找出没有使用的磁盘号,然后加以使用,返回值为该磁盘号int FindPANo() /*find out physical address num*/{int i;for(i=0;i<MAX;i++)if (fpaddrno[i]==0) //找到没有使用的磁盘号{fpaddrno[i]=1; //然后加以使用break;}if (i<MAX) return(i);else return(-1);}int WriteF1() /*write file*/{int length=0;char c;printf("Please input text(\'#\' stands for end):\n");while((c=getchar())!='#'){fprintf(fp_file,"%c",c); //传送格式化输出到一个fp_file文件中if (c!='\n') length++;}fprintf(fp_file,"\n");fclose(fp_file);return(length);}void OpenF() /*打开文件*/{int fc, i; //定义两个整型变量char fname[MAXNAME], fmode[25]; //定义两个字符数组int fm;printf("\nPlease enter filename:");gets(fname); //从键盘获得文件名ltrim(rtrim(fname)); //出去前后的空格if(ExistF(fname)<0) //判断文件是否存在{printf("\\'%s\'is not existed.\n",fname); //文件不存在wgetchar = 1;}else //如果存在文件{i = ExistD(username); //获取用户标识for(int a = 0; a < fcount[i]; a++) //循环检验文件名是否匹配{if(strcmp(fname,ufd[i]->ufdfile[a].fname)==0) //如果文件名匹配{fc=a; //记住是第几个文件break;}}ifopen[i][fc].ifopen = 1; //设置ifopen数组的第i个用户的第fc个文件的状态未打开printf("please input OpenMode(0-Read Only, 1-Write Only, 2-Read and Write,3-Protect):");gets(fmode); //得到用户输入的打开权限fm = atoi(fmode); //字符串转成整型ifopen[i][fc].openmode = fm; //设置ifopen的打开模式printf("\nOpen successed");wgetchar = 1;}}void CloseF() /*关闭文件*/{char fname[MAXNAME]; //定义一个字符数组int i,k;if(strcmp(strupr(dirname),strupr(username))!=0) //判断所处的目录名是否存在{printf("\nerror.you can only moddify filemode in yourself dir.\n"); //只能关闭自己目录下的文件}else{printf("\nplease enter filename:");gets(fname); //输入需要关闭的文件名ltrim(rtrim(fname)); //除去前面和后面的空格i = ExistF(fname); //获取用户标识if(i>=0){k = ExistD(username);if(ifopen[k][i].ifopen==0) //文件已被关闭{printf("\\'%s\'has been closed.you can not close itagain.\n",fname);}else //文件关闭成功{ifopen[k][i].ifopen=0; //ifopen的状态设为0ifopen[k][i].openmode=4; //打开状态为4printf("\'%s\'has been closed successfully!",fname);}}else //文件不存在{printf("\\'%s\'dose not exist.\n",fname);}}}void WriteF() /*Write File*/{int i,k,m = 0; //定义三个整型变量int length;char fname[MAXNAME];char str[255], str1[255];if(strcmp(strupr(dirname),strupr(username))!=0) //只能写自己目录下的文件{printf("\nerror.please convert to ufd dir before write.\n");wgetchar=1;return;}printf("\ncaution:open file first\n");printf("opened file(s) list:\n");k=ExistD(dirname); //获取目录编号for(i=0; i<fcount[k]; i++) //列出可以写的文件{if(ifopen[k][i].ifopen==1) //如果文件是打开的{printf("%15s",ufd[k]->ufdfile[i].fname);m++;}if((m%4==0)&&(m!=0))printf("\n");}printf("\n%d files openned.\n",m);if(m==0) //没有打开的文件wgetchar=1;if(m!=0){printf("\nplease input filename:");gets(fname); //获得所要写的文件名ltrim(rtrim(fname)); //除去前面和后面的空格i=ExistF(fname); //获取文件的编号if(i>=0) //文件是打开的{if(ifopen[k][i].openmode==1 || (ifopen[k][i].openmode==2)) //文件是可写或者可读可写{itoa(ufd[k]->ufdfile[i].fpaddr,str,10); //获取文件对应的物理地址strcpy(str1,"file");strcat(str1,str);strcpy(str,"c:\\osfile\\file\\");strcat(str,str1);strcat(str,".txt");fp_file=fopen(str,"ab"); //以二进制只写的方式打开,每次将内容添加到文件内容的末尾length = WriteF1(); //写入并获得长度ufd[k]->ufdfile[i].flength=ufd[k]->ufdfile[i].flength+length; //获得总长度printf("\n\n%d Length.\n",ufd[k]->ufdfile[i].flength);printf("\n you have write file successfully!");fclose(fp_file);wgetchar=0;}else if(ifopen[k][i].openmode==0) //文件是只读的{printf("\nerror.\'%s\' has been opened with read only mode.it isn\'t write.\n",fname);wgetchar=1;}else //文件是保护的{printf("\nerror.\'%s\' has been opened with protect mode . it isn\'t write.\n",fname);wgetchar=1;}}else //文件是关闭的{printf("\nerror.\'%s\' is in closing status.please open it beforewrite\n",fname);wgetchar=1;}}else //文件不存在{printf("\nerror.\'%s\' dose not exist.\n",fname);wgetchar=1;}}void DeleteF() /*Delete File*/{char fname[MAXNAME],str[50],str1[50]; //定义了三个数组int i, j, k; //定义三个整形变量int fpaddrno1; //文件的物理地址if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0) //将获取的文件名的前后空格去掉,再与空格比较{printf("\nerror.please convert to ufd dir before delete.\n");wgetchar = 1;}if(strcmp(strupr(dirname),strupr(username))!=0) //无法删除不是自己目录的文件{printf("\nerror.you can only modify filemode in youself dir.\n");wgetchar = 1;}else{printf("\nplease enter filename:\n");gets(fname); //从键盘获得要删除的文件名ltrim(rtrim(fname)); //去除前面和后面的空格i = ExistF(fname); //得到文件编号if(i>=0){k = ExistD(username); //获取用户名if(ifopen[k][i].ifopen==1) //如果文件打开,则无法删除{printf("\nerror.\'%s\' is in open status.close it before delete.\n",fname);wgetchar=1;}else{if(ufd[k]->ufdfile[i].fmode==3) //保护的文件无法删除{printf("error.\'%s\' is in protect status.close it before delete.\n",fname);wgetchar=1;}else{fpaddrno1=ufd[k]->ufdfile[i].fpaddr; //获取文件对应的物理文件名fpaddrno[fpaddrno1]=0; //收回盘块for(j=i; j<fcount[k]; j++){ufd[k]->ufdfile[j]=ufd[k]->ufdfile[j+1]; //从被删除的文件开始,数组值全部向前移动一个}strcpy(str,"c:\\osfile\\file\\file");itoa(fpaddrno1,str1,10); //将整数转化成字符串strcat(str,str1); //把str1添加到str结尾处strcat(str,".txt"); //把.txt添加到str结尾处remove(str); //删除物理文件fcount[k]--; //K用户数量减少1printf("\n \'%s\' is deleted successfully.\n",fname);wgetchar=1;}}}else //需要删除的文件不存在{printf("\nerror.\'%s\' dose not exist.\n",fname);wgetchar=1;}}}void ModifyFM() /*Modify FileMode*/{char fname[MAXNAME],str[50];int i,k;char fmode[25]; /*whether delete*/if (strcmp(strupr(dirname),strupr(username))!=0){printf("\nError.You can only modify filemode in yourself dir.\n");wgetchar=1;}else{printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if (i>=0){k=ExistD(username);if(ifopen[k][i].ifopen==1){printf("\nError.\'%s\' is in open status. Close it before modify.\n",fname);wgetchar=1;}else{if(ufd[k]->ufdfile[i].fmode==0) strcpy(str,"read only"); /*FileMode*/else if(ufd[k]->ufdfile[i].fmode==1) strcpy(str,"write only");else if(ufd[k]->ufdfile[i].fmode==2) strcpy(str,"read and write");else strcpy(str,"Protect");printf("\'%s\' filemode is %s.\n",fname,strupr(str));printf("Modify to(0-read only,1-write only,2-read and write,3-Protect):");gets(fmode);ltrim(rtrim(fmode));if(strcmp(fmode,"0")==0){ufd[k]->ufdfile[i].fmode=0;printf("\n\'%s\' has been modified to READ ONLY mode successfully.\n",fname);wgetchar=1;}else if(strcmp(fmode,"1")==0){ufd[k]->ufdfile[i].fmode=1;printf("\n\'%s\' has been modified to WRITE ONLY mode successfully.\n",fname);wgetchar=1;}else if(strcmp(fmode,"2")==0){ufd[k]->ufdfile[i].fmode=2;printf("\n\'%s\' has been modified to READ AND WRITE mode successfully.\n",fname);wgetchar=1;}else if(strcmp(fmode,"3")==0){ufd[k]->ufdfile[i].fmode=3;printf("\n\'%s\' has been modified to FORBID mode successfully.\n",fname);wgetchar=1;}else{printf("\nError.\'%s\' is not modified.\n",fname);wgetchar=1;}}}else{printf("\nError. \'%s\' dose not exist.\n",fname);wgetchar=1;}}}void ReadF() /*Read File*/{int i,k,n=0;char fname[MAXNAME];char str[255],str1[255],c;if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0){printf("\nError.Please convert to ufd dir before read.\n");wgetchar=1;return;}printf("\nCaution:Open file first\n");printf("Opened File(s) List:\n");k=ExistD(dirname);for(i=0;i<fcount[k];i++){if (ifopen[k][i].ifopen==1)if ((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2)){printf("%15s",ufd[k]->ufdfile[i].fname);n++;}if((n%4==0)&&(n!=0)) printf("\n");}printf("\n%d files openned.\n",n);if (n==0) wgetchar=1;if(n!=0){printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){if(ifopen[k][i].ifopen==1){if((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2)){itoa(ufd[k]->ufdfile[i].fpaddr,str,10);strcpy(str1,"file");strcat(str1,str);strcpy(str,"c:\\osfile\\file\\");strcat(str,str1);strcat(str,".txt");fp_file=fopen(str,"rb");fseek(fp_file,0,0);printf("\nThe text is:\n\n");printf(" ");while(fscanf(fp_file,"%c",&c)!=EOF)if (c=='\n') printf("\n ");else printf("%c",c);printf("\n\n%d Length.\n",ufd[k]->ufdfile[i].flength);fclose(fp_file);wgetchar=1;}else{printf("\nError.\'%s\' has been opened with WRITE ONLY mode. It isn\'t read.\n",fname);wgetchar=1;}}else{printf("\nError.\'%s\' is in closing status. Please open it before read\n",fname);wgetchar=1;}}else{printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}}}void QuitF() /*Quit FileSystem*/{int i,j;char str[50];SetPANo(1);if (fp_mfd!=NULL) fclose(fp_mfd);if (fp_ufd!=NULL) fclose(fp_ufd);if (fp_file!=NULL) fclose(fp_file);for(j=0;j<ucount;j++){strcpy(str,"c:\\osfile\\");strcat(str,ufd[j]->ufdname);ltrim(rtrim(str));strcat(str,".txt");fp_ufd=fopen(str,"wb");fclose(fp_ufd);fp_ufd=fopen(str,"ab");for(i=0;i<fcount[j];i++)fwrite(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd);fclose(fp_ufd);}}【测试结果】1.创建和打开文件2.写入文件3.关闭和删除文件【设计总结】这次操作系统的课程设计是设计二级文件系统,虽然只有短短的两周时间,还是在考试周,时间非常的短暂,但是我从中学到了很多课本以外的知识,在课设中并不是一帆风顺,课设中需要很多的专业知识,遇到了很多的问题,通过问老师,问同学还有网上查找资料解决了,在编写程序的过程中老师还要求我们养成良好的注释习惯,方便其他人理解程序。
操作系统课程设计报告书
操作系统课程设计题目: 操作系统课程设计学 院 工商学院学 部 信息科学与工程专 业 计算机类学 号 20144229166姓 名 赵林华指导教师 王煜装订线 河北大学工商学院2016 年 6 月24 日目录目录 (2)一、引言 (1)1.1课程设计目的 (1)1.2课程设计内容 (1)1.3小组人数及编程语言 (1)二、需求分析 (1)设备管理 (2)2.1设计任务 (2)2.2设计要求 (2)三算法及数据结构 (2)3.1算法的总体思想(流程) (3)3.2 Equipment模块 (3)3.2.1 功能 (3)3.2.2 数据结构 (3)3.3 cpu模块 (4)3.3.1 功能 (4)3.3.2 数据结构 (4)3.3.3 算法 (5)3.4 form1模块 (5)3.4.1 功能 (5)3.4.2 算法 (6)四、程序设计及实验 (6)五、总结和讨论 (9)六、代码 (10)一、引言1.1课程设计目的通过模拟操作系统的实现,加深对操作系统工作原理理解,进一步了解操作系统的实现方法,并可练习合作完成系统的团队精神和提高程序设计能力。
1.2课程设计内容模拟采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。
1.3小组人数小组人员:赵林华张铭二、需求分析设备管理设备管理设备管理主要包括设备的分配和回收。
模拟系统中有鼠标、键盘、打印机和视频四种设备,采用安全分配方式。
设备采用设备状态的变化还有设备颜色的变化来判断设备所处的状态,当创建文件是就指明了要调用的设备,让后等进程运行时来知道调用的什么设备,最后颜色和状态的变化来反应调用的设备与每个设备所处的状态。
设备用JButton 图标显示,通过灰色和可见色判断是否被调用2.1设计任务设计一个设备管理分配程序,按先来先服务的算法,对设备进行分配。
2.2设计要求设备管理主要包括设备的分配和回收。
操作系统课程设计报告样本
课程设计报告题 目XXXXX 程序设计课 程 名 称 操作系统课程设计 院 部 名 称 信息技术学院 专 业 计算机科学与技术 班 级 09级计算机科学与技术(X) 学 生 姓 名 何健 学 号 XXXXXXXXXX 课程设计地点 A206 课程设计学时 20 指 导 教 师 何 健金陵科技学院教务处制一、课程设计的目的和要求XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX二、课程设计环境要求1、硬件环境XXXXXXXX2、软件环境XXXXXXXXX三、设计任务介绍及系统需求分析XXXXXXXXX四、概要设计系统分为4个子模块:初始化模块、功能控制模块、下棋操作模块、帮助模块。
初始化模块:该模块主要是用于初始化屏幕信息,包括显示欢迎信息、操作方法和初始棋盘。
功能控制模块:该模块是各个功能函数的集合,主要是被其他模块调用,包括画棋子、胜负判断和行棋转换等功能。
下棋操作模块:该模块用于执行下棋操作。
帮助模块:该模块主要用于显示帮助信息,提示轮到哪方下棋。
系统模块图五、详细设计一.功能模块设计1、初始化模块由两个函数实现:void WelcomeInfo(),显示欢迎信息和按键提示操作。
Void DrawBorad(),用于初始化棋盘,该函数主要是调用系统函数line()函数来实现的。
功能控制模块由以下几个函数实现:void DrawCircle(int x,int y,int color),以指定的颜色在指定的坐标画棋子(圆圈)。
V oid Alternation(),交换行棋方。
Void JudgePlayer(int x,int y),不同的行棋方画不同颜色的棋子(圆圈)。
Int ResultCheck(int x,int y),判断胜负。
下棋操作模块用Done()函数,由Done()函数调用在功能模块中定义的函数以用一些系统函数实现下棋操作。
帮助模块由ShowMessage()函数实现,用于在下棋时提示该轮到哪个玩家行棋了。
操作系统课程设计报告_CQUPT
计算机科学与技术学院操作系统课程设计实验报告班级XXXXXXX专业计算机科学与技术实验室名称XXXX学号XXXXXXXXXX姓名XXXXXX目录一、实验目的 (2)二、实验任务 (2)三、实验步骤 (2)3.1在虚拟机下安装linux系统 (2)3.2重新编译内核 (2)3.3编写驱动程序并进行测试 (8)1.编译驱动程序 (8)2.装载模块 (8)3.分配次设备号 (9)4.测试驱动程序 (9)5.删除设备、模块 (11)四、遇到的问题以及解决的方法 (11)五、实验心得体会 (11)一、实验目的1.掌握linux安装的方法2.掌握Kernel的升级3.掌握系统引导管理器Grub的使用4.学会编写简单的模块化的字符设备驱动程序。
二、实验任务1.在虚拟机下安装某一Linux的发行版(推荐CentOS)2.从内核官网下载某一新的内核版本,并进行编译3.设置系统引导管理器(推荐Grub),使得系统可以从新内核启动4.编写一个简单的模块化字符设备驱动程序,动态地装载和卸载以模块形式存在的字符设备驱动程序。
同时,学会对所编写的字符设备驱动程序进行测试,最终了解Linux操作系统是如何管理字符设备的。
基本要求:(1)编写初始化和注销函数:scull_init()和scull_exit();(2)编写5个基本的设备接口函数,包括scull_open(),scull_write(),scull_read(),scull_ioctl()(3)和scull_release();(4)一个测试程序来测试所编写的字符设备驱动程序。
三、实验步骤3.1在虚拟机下安装linux系统1.安装虚拟机软件:vmware workstation2.安装CentOS 6.43.2重新编译内核1.重新编译内核2.安装vsftp服务器,samba服务器,3.安装好rh之后,首先查看ip,运行:service network start,如果出现提示:Determining IP information for eth0...failed;no link present.Check cable4.编辑文件/etc/sysconfig/network-scripts/ifcfg-eth0在该文件末尾加上:check_link_down(){return1;}再运行:service network up再运行:ifconfig即可看到ip5.为了方便操作,采用putty连接到虚拟机的方式(如果putty老是连接不上,可能就是因为linux的防火墙的原因,所以要把防火墙关掉:service iptables stop)(注意,每次重启之后都要关闭防火墙)6.运行命令uname–r,得到内核版本:2.6.32.87.到网站,下载一个比较新的稳定版本(下载方法:wget/......................................8.用命令解压缩到目录/usr/src下面:tar–jxvf linux-3.11.6.tar.bz2–C/usr/src9.注意解压缩之后,会同时生成一个文件pax_global_header10.仔细阅读README文件(最好要求交课程设计报告的时候有翻译,因为仔细研读这些文件就是一种最好的学习)11.cd/usr/src/linux…../12.make mrproper目的是建立一个清洁的内核树13.make menuconfig设置内核编译的配置文件14.选好各个需要的选项之后推出保存15.make dep16.make clean删除一些stale的文件17.make bzImage制作核心文件,这个过程比较花时间18.make modules编译模块19.make modules_install安装模块20.make install文档由风行下载2014正式版下载/分享21.下面制作新旧内核的多重开机移动新内核到/boot下面去cp/usr/src/linux-2……../arch/i386/boot/bzImage/boot/vmlinuz-2.6.38.8cp/usr/src/linux-2.6.38.8/System.map/boot/System.map-2.6.38.8修改grub配置文件…………………………….22.注意在vmware下面以内核和直接在PC机上编译内核有些不同,在vmware上编译内核有些选项必须要选上3.3编写驱动程序并进行测试1.编译驱动程序在控制台下进入文件所在目录,输入命令make。
操作系统课程设计报告参考模板
操作系统课程设计报告时间:2013-1-7~2013-1-18地点:信息技术实验中心软件工程专业2010级2班26号钟镁城2013-1-18一课程设计的目的和意义 (3)二进程调度算法模拟 (4)1 设计目的 (4)2 设计要求 (4)3 使用动态优先权的进程调度算法的模拟 (5)三动态分区分配方式模拟 (9)1 设计目的 (9)2 设计要求 (9)3 模拟算法的实现 (10)(1)首次适应算法 (13)(2)最佳适应算法 (14)四请求调页存储管理方式模拟 (16)1 设计目的 (16)2 设计要求 (16)3模拟算法的实现 (17)(1)OPT算法 (19)(2)FIFO算法 (20)(3)LRU算法 (21)五简单的文件操作 (23)1 设计目的 (23)2 设计要求 (23)3 模拟算法的实现 (24)六总结 (35)一课程设计的目的和意义本次课程设计目的是通过c语言对学过的课程进行理解应用。
本次课程设计共有四个部分:(1)使用动态优先权的进程调度算法的模拟,通过实现动态优先权的模拟加深对进程概念和进程调度的理解。
了解在实际进程调度中,除了按调度算法选择下一个执行的进程外,还有哪些工作等。
(2)了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。
了解采用首次适应算法和最佳适应算法对内存分配和回收的基本机制。
(3)通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求页面系统的原理和实现过程的理解。
(4)通过具体的文件存储空间的管理和文件的物理结构、目录和文件操作加深对文件管理机制的理解。
加深对计算机操作系统进程管理、文件管理机制的理解和应用。
二进程调度算法模拟1 设计目的通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。
2 设计要求(1)用C语言来实现对N个进程采用动态优先算法的进程调度;(2)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:●进程标识符id●进程优先数priority,并规定优先数越大的进程,其优先权越高;●进程已占用的CPU时间cputime ;●进程还需占用的CPU时间alltime,当进程运行完毕时,alltime变为0;●进程的阻塞时间startblock,表示当进程再运行startblock个时间片后,进程将进入阻塞状态;●进程被阻塞的时间blocktime,表示已阻塞的进程再等待blocktime个时间片后,将转换成就绪态●进程状态state;●队列指针next,用来将PCB排成队列(3)优先数改变的原则:●进程在就绪队列中呆一个时间片,优先数增加1●进程每运行一个时间片,优先数减3。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《操作系统原理与Linux》
课程设计报告
专业
班级
学号
姓名
指导教师
完成时间
成绩
报告要求
1.封面—指定样稿
2.纸张—统一用16k纸打印
标题:字体—黑体;大小—小三~小四
正文内容:字体—宋体;大小—小四
左右页边距:2厘米,有页码
3.撰写内容
一、设计题目
二、设计目的
三、设计要求
四、设计思想说明
五、系统结构的说明
六、数据结构的说明
七、程序清单:注意加注释(包含关键字、方法、变量等),在每个模块前加注释(该部分小组成员应该突出自己做的模块)
八、使用说明书(即用户手册)(内容包含如何登录、退出等操作说明)
九、体会,建议
十、参考文献。