天津科技大学操作系统课程设计
天津科技大学计算机操作系统实验报告-实验二

2016-2017学年第一学期计算机操作系统实验报告专业:计算机科学与技术班级:141011班学号:14101103姓名:傅开煤提交日期:2016年11月8日实验二Windows线程同步机制【开发语言及实现平台或实验环境】C++/C#Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET【实验目的】(1) 了解Windows线程同步机制;(2) 了解互斥体,并通过查阅资料理解互斥体对象的使用方法;(3) 了解事件,并通过查阅资料理解事件对象的使用方法;(4) 了解关键区,并通过查阅资料理解关键区对象的使用方法;(5) 了解信号量,并通过查阅资料理解信号量对象的使用方法;(6) 利用Windows线程同步机制,模拟生产者消费者问题。
【实验要求】(1) 逐程序进行简要分析、运行各程序并仔细阅读注释;(2) 查阅MSDN或其他资料,掌握相关系统调用使用方法和参数含义;(3) 完成实验报告。
【实验结果与分析】1.(1)多次运行2-1(mutex).cpp后,其中之一的执行结果如下图:(2)多次运行修改之后的2-1(mutex).cpp,其中之一的执行结果如下图:分析:修改之前,在指定暂停的时间Sleep(1000)内,thread1和thread2随机售票,出现多种情况;将两个子函数中注释掉的Sleep(1)语句让其可用后,thread1和thread2交替售票,即thread1在其暂停的时间Sleep(1)内,thread2获得了对共享对象hMutex的所有权,开始售票,同理当thread2在其暂停的时间Sleep(1)内,thread1获得了对共享对象hMutex 的所有权,开始售票,这样thread1和thread2就实现了交替售票。
2.(1)多次运行2-2(event).cpp后,其中之一的执行结果如下图:(2)多次运行修改之后的2-2(event).cpp,其中之一的执行结果如下图:3. (1)多次运行2-3(critical_section).cpp后,其中之一的执行结果如下图:(2)多次运行修改之后的2-3(critical_section).cpp,其中之一的执行结果如下图:分析:以上2-2(event).cpp 、2-3(critical_section).cpp的分析与2-1(mutex).cpp相同。
操作系统课程设计

操作系统课程设计一、课程目标知识目标:1. 理解操作系统的基本概念、功能、类型和结构,掌握操作系统的五大核心功能模块(处理器管理、存储器管理、设备管理、文件管理、用户接口);2. 掌握操作系统的发展历程、主要操作系统(如Windows、Linux、Mac OS)的特点及应用场景;3. 了解操作系统的设计与实现原理,包括进程管理、内存管理、设备管理、文件系统等关键技术;4. 学会使用操作系统提供的命令行或图形界面进行基本的系统操作与维护。
技能目标:1. 培养学生对操作系统的实际操作能力,能够熟练使用至少一种操作系统进行日常管理与维护;2. 培养学生运用操作系统原理解决实际问题的能力,如分析系统性能、诊断故障、优化配置等;3. 提高学生的编程能力,使其能够编写简单的系统程序或脚本,实现特定功能。
情感态度价值观目标:1. 培养学生对操作系统的兴趣,激发学生学习计算机科学的热情;2. 培养学生的团队合作意识,使其在讨论、分析、解决问题的过程中学会倾听、交流、协作;3. 培养学生具备良好的信息素养,关注操作系统领域的最新发展,增强信息安全意识。
课程性质:本课程为计算机科学与技术专业(或相关领域)的必修课,具有较强的理论性和实践性。
学生特点:学生已具备一定的计算机基础知识,具有较强的学习兴趣和动手能力,但可能对操作系统原理的理解和应用尚有不足。
教学要求:注重理论与实践相结合,以案例驱动、任务导向的方式进行教学,注重培养学生的实际操作能力和问题解决能力。
通过本课程的学习,使学生能够掌握操作系统的基本原理,提高实际应用水平,为后续专业课程学习打下坚实基础。
二、教学内容1. 操作系统概述:介绍操作系统的基本概念、功能、类型,比较不同操作系统的特点,分析操作系统的发展趋势。
教材章节:第一章 操作系统概述2. 进程与线程管理:讲解进程与线程的概念、状态与转换,进程调度算法,同步与互斥,死锁与饥饿问题。
教材章节:第二章 进程管理3. 存储管理:介绍内存分配与回收策略,虚拟内存技术,页面置换算法,内存保护机制。
《操作系统》课程设计

《操作系统》课程设计一、课程目标知识目标:1. 让学生掌握操作系统的基本概念,包括进程、线程、内存管理、文件系统等核心知识;2. 了解操作系统的历史发展,掌握不同类型操作系统的特点及使用场景;3. 掌握操作系统的性能评价方法和常用的调度算法。
技能目标:1. 培养学生运用操作系统知识解决实际问题的能力,如分析系统性能瓶颈、优化系统资源分配等;2. 培养学生具备基本的操作系统编程能力,如进程创建、线程同步、文件操作等;3. 提高学生的团队协作能力和沟通能力,通过小组讨论和项目实践,学会共同解决问题。
情感态度价值观目标:1. 培养学生对操作系统学科的兴趣,激发学生的学习热情,使其形成积极向上的学习态度;2. 培养学生具备良好的信息素养,尊重知识产权,遵循法律法规;3. 培养学生的创新精神和批判性思维,敢于质疑、勇于探索,形成独立思考的能力。
课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,提高学生的系统分析和编程能力。
学生特点:学生具备一定的编程基础和计算机系统知识,具有较强的逻辑思维能力和动手实践能力。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和项目实践,帮助学生将所学知识内化为具体的学习成果。
在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。
二、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、功能、类型及特点,对应教材第一章内容。
- 操作系统的起源与发展- 操作系统的功能与类型- 操作系统的主要特点2. 进程与线程:讲解进程与线程的概念、状态、调度算法,对应教材第二章内容。
- 进程与线程的定义与区别- 进程状态与转换- 进程调度算法3. 内存管理:分析内存管理的基本原理、策略和技术,对应教材第三章内容。
- 内存分配与回收策略- 虚拟内存技术- 页面置换算法4. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。
操作系统期末课程设计《操作系统原理课程设计》报告封面和要求

操作系统期末课程设计进程调度算法模拟一、设计目的编程实现进程调度的算法,更好地掌握操作系统的原理及实现方法,从而有利于把握进程调度细节。
二、设计要求(1)要求实现先来先服务,短作业优先,时间片轮转,高优先权调度算法四种算法并进行对比分析.(2)要求界面简单,易懂,关键代码部分要注释.(3)编程语言可以采用自己任意精通的语言三、设计思想说明先来先服务:程序的执行调度顺序按先进入队列的先获得执行,并且其他进程都不能中断正在执行的进程,要等进程完成后才能,让出CPU给其他进程。
执行的时候可以随时在队列中插入进程。
短作业优先:进程的调度顺序按程序的服务时间来决定,进程的执行顺序。
服务时间短的先被调用。
调度时先从队列中选取服务时间最短的进程来执行。
进程中途不能中断,即使此时队列中存在服务时间比其更短的进程,仍需要等待该进程执行完后才能被执行。
高优先权调度:选取进程中优先级最高的一个,以优先级的值大,优先级就大。
调度时总是选取队列中进程优先级最高的来执行,不管是否有某个进程在执行,只要存在比正在执行进程优先级高的进程,则就会立刻中断正在执行的进程,让给跟高优先级的进程。
时间片轮转:本课程设计采用多级反馈队列调度算法,设立4个进程队列,分给队列1的时间片为3秒,队列2的时间片为6秒,队列3的时间片为12秒,队列4的时间片为24秒。
队列1的优先级最高,队列4的优先级最低。
高优先级的队列没执行完,即不为空,就永远不执行其下面的低优先级的队列里面的进程。
当执行低优先级队列里面的进程时,突然间高优先级的队列插入了进程就立刻跳到高优先级的队列执行其里面的进程。
每个队列的进程都是按先来先执行的顺序执行。
进程初次执行肯定要进入队列1。
如何从头到尾执行一遍队列1中的进程是,存在某些进程在队列1的时间片内还没执行完,就把进程移交到下一个队列中。
每个队列都如此类推。
直到最后一个队列4,如果在队列4还有进程在本时间片内还没没执行完,就把该程序放到队尾,从新等待时间片执行。
天津科技大学嵌入式操作系统---第3章 基于linux的嵌入式软件开发

18:19
4
3.1.1 嵌入式软件体系结构
18:19
5
1. 设备驱动层
设备驱动层是嵌入式系统中必不可少的重 要部分,使用任何外部设备都需要有相应 驱动程序的支持,它为上层软件提供了设 备的操作接口。 上层软件不用理会设备的具体内部操作, 只需调用驱动层程序提供的接口即可。 驱动层一般包括硬件抽象层HAL、板级支 持包BSP和设备驱动程序。
18
3.2.2 基于开发板的二次开发
所谓二次开发是利用现成的开发板进行开发,不同于通用 计算机和工作站上的软件开发工程,一个嵌入式软件的开 发过程具有很多特点和不确定性。其中最重要的一点是软 件跟硬件的紧密耦合特性。 由于嵌入式系统的灵活性和多样性,这样就给软件设计人 员带来了极大地困难。第一,在软件设计过程中过多地考 虑硬件,给开发和调试都带来了很多不便;第二,如果所 有的软件工作都需要在硬件平台就绪之后进行,自然就延 长了整个的系统开发周期。这些都是应该从方法上加以改 进和避免的问题。 为了解决这个问题,通常的做法是基于某种开发板做二次 开发,从这个角度看,硬件开发所占的比重不到20%,而 软件开发的比重占到了80%。
3.1 嵌入式软件结构 3.2 嵌入式软件开发流程 3.3 嵌入式linux开发环境 3.4 嵌入式系统引导代码 3.5 linux内核结构及移植 3.6 嵌入式文件系统及移植 3.7 linux设备驱动概述 3.8 设备驱动程序接口 3.9 linux设备驱动开发流程
18:19 3
3.1 嵌入式软件结构
?在嵌入式开发中经常要面对设备驱动程序的开发嵌入式系统通常有许多设备用于与用户交互象触摸屏小键盘滚动轮传感器在嵌入式开发中经常要面对设备驱动程序的开发嵌入式系统通常有许多设备用于与用户交互象触摸屏小键盘滚动轮传感器rs232接口lcd等等
操作系统课程设计实验报告(附思考题答案)

操作系统课程设计实验报告(附思考题答案)课程设计(综合实验)报告( 2015 -- 2016 年度第 1 学期)名称:操作系统综合实验题目:oslab综合实验院系:计算机系班级:学号:学生姓名:指导教师:设计周数:分散进行成绩:日期:2015 年10 月29 日一、综合实验的目的与要求1. 理解和掌握操作系统的基本概念、基本组成与工作原理;2. 理解和掌握操作系统中主要功能模块的工作原理及其实现算法;3. 掌握软件模块设计技能;熟悉并能较好地利用软件开发环境独立编程、调试和分析程序运行情况,逐渐形成创新思维和从事系统软件的研究和开发能力。
二、实验正文实验1:实验环境的使用1.1实验目的:1.熟悉操作系统集成实验环境OS Lab 的基本使用方法。
2.练习编译、调试EOS 操作系统内核以及EOS 应用程序。
1.2实验内容:1.启动OS Lab2.学习OS Lab 的基本用法● 新建 Windows 控制台应用程序项目(1)在“文件”菜单中选择“新建”,然后单击“项目”。
(2)在“新建项目”对话框中,选择项目模板“控制台应用程序(c)”。
(3)在“名称”中输入新项目使用的文件夹名称“oslab ”。
(4)在“位置”中输入新项目保存在磁盘上的位置“C:\test ”。
(5)点击“确定”按钮。
● 生成、执行项目●3.EOS 内核项目的生成和调试● 新建 EOS 内核项目并按F7生成项目● 调试项目● 查看软盘镜像文件中的内容、EOS SDK (Software Development Kit )文件夹4.EOS 应用程序项目的生成和调试● 新建 EOS 应用程序项目● 修改 EOS 应用程序项目名称使用断点中断执行查看变量的值5.退出OS Lab6.保存EOS内核项目1.3思考与练习●在实验1中,生成EOS SDK文件夹的目的和作用是什么?答:SDK文件夹中提供了开发EOS应用程序需要的所有文件。
debug文件夹是在使用debug配置生成项目时生成的,其中存放了调试版本的EOS二进制文件。
天津科技大学嵌入式操作系统---第5章 嵌入式数据库

2. 嵌入式数据库的分类
可以按照嵌入的对象不同分为:软件嵌入数据 库、设备嵌入数据库、内存数据库。 也有人将它们粗略的分为:嵌入数据库、移动 数据库、小型的C/S结构数据库等。
小型C/S数据库。这种数据库其实是企业级数据库的 一个缩小版,缩小以后可以在一些实时性要求不高 的设备内运行。它只和操作系统有关,一般只能支 持一些常见的移动操作系统,如,Linux和 WindowsCE系列。
21
5.2 SQLite数据库
5.2.1 SQLite数据库概述 5.2.2 SQLite数据库的安装 5.2.3 SQLite数据库基本命令 5.2.4 SQLite数据库管理命令 5.2.5 SQLite的API函数 5.2.6 SQLite实例分析
22
5.2.1 SQLite数据库概述
1. 概述 2. SQLite组件 3. 数据类型
多线程编程
1
第5章 嵌入式数据库
5.1 嵌入式数据库概述 // 5.2 SQLite数据库 5.3 mSQL数据库 // 5.4 Berkeley DB数据库//
2
5.1 嵌入式数据库概述
5.1.1嵌入式数据库简介 5.1.2 嵌入式数据库的特点及分类 5.1.3 嵌入式数据库的应用
3
5.1.1嵌入式数据库简介
18
5.1.3 嵌入式数据库的应用
3.地理信息系统
地理信息包括的范围很广,在国外地理信息系统已经发 展了很多年,国内这几年也逐渐加大对地理信息系统方 面的投入。嵌入式数据库在地理信息系统方面的应用非 常广泛。如,空间数据分析系统、卫星天气数据、龙卷 风和飓风监控及预测等等。几乎涉及到地理信息的方方 面面。
14
1. 嵌入式数据库的特点
操作系统课程设计(完整规范版)

操作系统课程设计(完整规范版)一、设计目的操作系统课程设计旨在让学生深入了解操作系统的基本原理,掌握操作系统的设计与实现方法,培养学生在实际操作系统中分析和解决问题的能力。
通过本次课程设计,学生将能够:1. 加深对操作系统理论知识的理解与应用;2. 提高动手实践能力,培养创新精神和团队协作意识;3. 为今后从事操作系统相关领域的研究和工作奠定基础。
二、设计要求(1)进程管理:包括进程的创建、撤销、调度等;(2)内存管理:实现内存分配、回收、页面置换等;(3)文件系统:实现文件的创建、删除、读写等操作;(4)设备管理:实现设备的分配、回收、驱动等功能。
(1)代码规范:编写清晰、易读、易维护的代码;(3)团队协作:合理分工,确保团队成员共同参与、共同进步。
三、设计步骤1. 需求分析:分析课程设计所需实现的功能,明确各个模块的具体要求;2. 概要设计:根据需求分析,制定总体设计方案,划分模块,确定模块间接口;3. 详细设计:针对每个模块,进行具体实现方案的设计;4. 编码实现:按照设计文档,编写代码,实现各个功能模块;5. 测试与调试:对实现的功能进行测试,发现问题并进行调试;6. 优化与改进:根据测试结果,对代码进行优化,提高系统性能;四、预期成果1. 完成一套具有基本功能的模拟操作系统,能够演示进程管理、内存管理、文件系统和设备管理的主要操作;2. 提供完整的,包括注释,以便他人理解和学习;3. 形成一份详尽的课程设计报告,记录设计过程中的思考、遇到的问题及解决方案;4. 通过课程设计,提升个人在操作系统领域的理论知识和实践能力。
五、评价标准1. 功能完整性:各功能模块是否按照要求实现,系统是否能正常运行;3. 创新性:设计过程中是否有独特的想法,是否对现有技术有所改进;4. 团队协作:团队成员之间沟通是否顺畅,分工是否合理,协作是否高效;5. 文档质量:课程设计报告是否详细、准确,是否能够完整反映设计过程和成果。
操作系统课程设计

一、设计背景
操作系统是计算机科学与技术专业中一门重要的基础课程。通过操作系统课程的学习与设计,可以让学生综合运用所学的计算机基础知识与技术,深入理解操作系统的原理与设计,培养学生的系统分析与设计能力,提高其对计算机系统的理解和掌握。
二、设计目标
本次操作系统课程设计的目标是设计一个简单的操作系统,使学生能够通过该项目的实践,加深对操作系统原理的理解,掌握操作系统的设计与实现方法,培养学生的系统编程能力。
•进程管理模块:负责进程的创建、终止、调度等操作;
•内存管理模块:负责内存的分配与回收,实现虚拟内存管理;
•文件系统模块:负责文件的创建、打开、读写等操作;
•输入输出模块:负责处理输入输出设备的控制与数据传输。
2.
学生需要选择一种合适的进程调度算法,结合自己设计的操作系统,实现进程的调度与管理。可以选择的调度算法包括FCFS、SJF、RR、优先级调度等。
五、完成时间
学生需要根据教师的要求,按时完成操作系统课程设计的所有任务。完成时间一般为一个学期,具体时间安排由教师决定。
六、评价方法
学生的操作系统课程设计将进行评价,根据以下几个方面进行评分:
•设计报告质量:包括设计思路、实现方法和测试结果的描述与分析;
•系统功能完整性:系统的各个功能是否齐全并能正常运行;
•系统性能优化:是否进行了系统性能的优化,提高了系统的性能;
•代码质量:代码的规范性、可读性和可维护性;
•团队合作能力:学生在项目中的团队合作表现等。
七、ቤተ መጻሕፍቲ ባይዱ结
操作系统课程设计是一项重要的实践性项目,通过对操作系统的实际设计与实现,学生既可以提高对操作系统原理的理解,又可以培养系统编程与分析问题的能力。通过本次设计,学生可以更加深入地掌握操作系统的各个方面,为以后从事相关工作打下坚实的基础。
操作系统教程第四版课程设计

操作系统教程第四版课程设计一、课程介绍本课程是操作系统教程第四版的课程设计,旨在通过实践,帮助学生更深刻的理解和掌握操作系统的基本原理和应用技术。
该课程涵盖了进程管理、内存管理、文件系统、输入输出系统等内容,并要求学生编写各种操作系统模块的实现。
二、教学目标1.了解操作系统的基本原理和应用技术,理解操作系统的内核结构和运行机制。
2.掌握常用的进程管理、内存管理、文件系统、输入输出系统等操作系统模块的实现原理和实现方法,能够编写相应的操作系统模块。
3.培养学生的自主学习和问题解决能力,提高学生的动手实践能力和实际操作能力。
三、教学内容1. 进程管理1.进程管理的基本概念和原理。
2.进程状态、进程控制块、进程调度等相关知识。
3.进程同步和互斥机制,包括信号量、互斥量、条件变量等。
4.进程通信和IPC机制,包括管道、消息队列、共享内存、信号等。
2. 内存管理1.内存管理的基本概念和原理。
2.内存分配和回收算法,包括首次适应、最优适应、最坏适应等算法。
3.虚拟内存和页面置换算法,包括LRU、FIFO、CLOCK等算法。
3. 文件系统1.文件系统的基本概念和原理。
2.文件系统的组成和层次结构,包括文件目录、文件存储、文件分配等。
3.文件系统的缓存和缓存替换算法,包括FIFO、LRU等算法。
4. 输入输出系统1.输入输出系统的基本概念和原理。
2.输入输出设备的驱动程序实现和设备管理。
3.中断处理和DMA机制,包括中断优先级、中断向量表等。
4. 设计要求1.实现一个简单的操作系统内核,包括进程管理、内存管理、文件系统、输入输出系统等模块实现。
2.这个操作系统内核可以在基本硬件环境下运行,支持多道程序,多用户访问,可以支持多种文件系统格式。
3.学生需要用C、汇编等语言编写相应的代码,实现操作系统内核的各个模块,并进行相应的调试和测试。
4.学生需要撰写相应的实验报告,记录设计思路、代码实现和测试结果。
四、教学方法1.课堂讲解:老师通过课件和案例讲解操作系统的基本原理和应用技术。
操作系统课程设计(完整规范版)

操作系统课程设计(完整规范版)一、设计目的操作系统课程设计旨在让学生深入了解操作系统的基本原理,掌握操作系统设计与实现的基本方法,培养学生在操作系统领域的实际动手能力和创新思维。
通过本次课程设计,学生应能够: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. 技能提升:提高编程能力,掌握操作系统核心模块的设计与实现技巧。
计算机操作系统第二版课程设计 (2)

计算机操作系统第二版课程设计项目背景计算机操作系统是计算机科学与技术专业中非常重要的一门课程,它是计算机科学与技术专业学生的必修课之一。
本课程设计旨在帮助学生更好地掌握计算机操作系统的基本概念、原理和基本技术,从而提高他们的操作系统设计与开发能力。
项目任务本次课程设计包括两个部分:操作系统的基本逻辑设计和操作系统的实现。
在操作系统的基本逻辑设计中,学生需要按照操作系统的基本框架、组成结构和功能要求,完成一个简单的操作系统逻辑设计。
在操作系统的实现部分中,学生需要基于已经完成的逻辑设计,使用 C 语言编写出一个可运行的操作系统。
项目目标本次课程设计的目标如下:1.更好地了解计算机操作系统的基本概念、原理和基本技术,提高学生的操作系统设计与开发能力。
2.培养学生的编程能力和团队协作能力。
3.提高学生的综合素质和实践能力。
项目计划本次课程设计的计划如下:第一周1.了解操作系统的基本概念和发展历程;2.确定操作系统的基本逻辑设计框架;3.组建项目小组。
第二周1.完善操作系统的基本逻辑设计框架;2.确定操作系统的组成结构和功能要求;3.分工合作,完成操作系统的基本逻辑设计。
第三周1.完成操作系统的基本逻辑设计;2.对操作系统的逻辑设计进行评估和调整;3.学习 C 语言编程基础。
第四周1.确定操作系统的编程实现方案;2.确定编写操作系统的编程环境和工具;3.分工合作,开始编写操作系统的代码。
第五周1.检查操作系统的编程实现方案;2.继续编写操作系统的代码;3.调试检验操作系统的代码。
第六周1.总结操作系统的编程实现过程;2.提交操作系统的设计文档和编程代码;3.进行操作系统的演示和评估。
结论本次课程设计旨在帮助学生更好地掌握计算机操作系统的基本概念、原理和基本技术,从而提高他们的操作系统设计与开发能力。
通过本次课程设计,学生可以更好地了解计算机操作系统,增强编程能力和团队协作能力,提高综合素质和实践能力,为今后的职业发展打下坚实的基础。
《操作系统课程设计》

设计2 读者写者问题一、设计目的通过对操作系统内核实现代码的阅读、修改、设计,理解和掌握复杂的操作系统的工作原理。
理解进程及信号量的概念。
二、设计要求1、为每个读者/写者产生一个线程,设计正确的同步算法2、每个读者/写者对该存储区进行操作后,即时显示该存储区的全部内容、当前指针位置和读者/写者线程的自定义标识符。
3、读者应有3个以上,写者应有有两个以上。
4、多个读者/写者之间须共享对存储区进行操作的函数代码。
三、设计说明所谓读者写着问题,是指保证一个writer进程必须与其他进程互斥地访问共享对象的同步问题。
读者写者问题可以这样的描述,有一群写者和一群读者,写者在写同一本书,读者也在读这本书,多个读者可以同时读这本书,但是,只能有一个写者在写书,并且,读者必写者优先,也就是说,读者和写者同时提出请求时,读者优先。
当读者提出请求时需要有一个互斥操作,另外,需要有一个信号量S来当前是否可操作。
信号量机制是支持多道程序的并发操作系统设计中解决资源共享时进程间的同步与互斥的重要机制,而读者写者则是这一机制的一个经典范例。
主要设计流程图读者优先主程序()读者() 写者() 主控()写者优先流程图测试数据文件包括n 行测试数据,分别描述创建的n 个线程是读者还是写者,以及读写操作的开始时间和持续时间。
每行测试数据包括四个字段,各字段间用空格分隔。
第一字段为一个正整数,表示线程序号。
第二字段表示相应线程角色,R 表示读者是,W 表示写者。
第三字段为一个正数,表示读写操作的开始时间。
线程创建后,延时相应时间(单位为秒)后发出对共享资源的读写申请。
第四字段为一个正数,表示读写操作的持续时间。
当线程读写申请成功后,开始对共享资源的读写操作,该操作持续相应时间后结束,并释放共享资源。
下面是一个测试数据文件的例子:1, W,4, 5,2, W, 16, 4,3, R, 5, 2,4, W, 6, 5,5, R, 4, 3,在读者写者同时在队列中等待申请资时,读者优先调用资源。
天津科技大学操作系统实验

2012-2013学年第一学期计算机操作系统实验报告专业:软件工程班级:111033学号:11103325姓名:孟翔提交日期:2013年11月27日目录实验一 Windows多线程..................................................1实验二 Windows线程同步机制...........................................5 实验三 Windows线程通信................................................9 实验四银行家算法模拟.................................................15 实验五页面置换算法模拟...............................................22实验一 Windows多线程【开发语言及实现平台或实验环境】C++/C#Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET【实验目的】(1) 进一步理解操作系统的并发性;(2) 了解Windows线程创建方法,并通过查阅资料理解各参数的含义;(3) 了解多线程程序设计方法,并进行简单应用。
【实验要求】(1) 逐程序进行简要分析、运行各程序并仔细阅读注释;(2) 查阅MSDN或其他资料,掌握相关系统调用使用方法和参数含义;(3) 完成实验报告。
【相关知识】一、核对象(一) 核对象的概念核对象是核分配的一个存块,这种存块是一个数据结构,表示核对象的各种特征。
并且只能由核来访问。
应用程序若需要访问核对象,需要通过操作系统提供的函数来进行,不能直接访问核对象(Windows 从安全性方面来考虑的)。
核对象通过Create* 来创建,返回一个用于标识核对象的句柄,这些句柄(而不是核对象)可在创建进程围使用,不能够被传递到其他进程中被使用。
《计算机操作系统》课程设计

计算机操作系统课程设计1. 引言计算机操作系统是计算机科学与技术专业中一门重要的课程,它介绍了操作系统的基本概念、原理和设计方法,培养学生对计算机操作系统的理解和应用能力。
本文将介绍《计算机操作系统》课程设计的目标、内容和方法,并提供一些实用的学习资源和建议。
2. 课程设计目标《计算机操作系统》课程设计的主要目标是通过实践,帮助学生加深对操作系统概念和原理的理解,培养学生编写和调试操作系统的能力,提高解决实际问题的能力。
具体目标如下:- 理解操作系统的基本概念和原理; - 掌握操作系统的设计与实现方法; - 学会使用工具和技术进行操作系统的调试和测试;- 培养团队合作和解决问题的能力。
3. 课程设计内容《计算机操作系统》课程设计的内容包括以下几个方面:1. 进程管理:学生需要设计和实现一个简单的进程管理系统,包括进程的创建、调度和终止等功能,并实现进程间的通信和同步。
2. 文件系统:学生需要设计和实现一个简单的文件系统,包括文件的存储和管理、文件的读写等功能,并实现文件的保护和共享。
3. 内存管理:学生需要设计和实现一个简单的内存管理系统,包括内存的分配和释放、页面置换等功能,并实现进程的虚拟内存。
4. 设备管理:学生需要设计和实现一个简单的设备管理系统,包括设备的分配和释放、设备的控制和调度等功能,并实现设备的并发和互斥。
4. 课程设计方法《计算机操作系统》课程设计采用项目驱动的方法,学生将组成小组,每个小组负责完成一个操作系统的设计和实现。
具体方法如下: 1. 项目选择:学生可以自由选择他们感兴趣的项目,也可以从老师提供的项目中选择。
2. 项目计划:学生需要制定项目计划,包括项目的目标、任务和时间安排等。
3. 项目开发:学生按照项目计划开展项目开发工作,包括需求分析、系统设计、编码和测试等环节。
4. 项目评审:学生需要定期进行项目评审,包括项目进展、问题解决和改进措施等。
5. 项目展示:学生需要最后展示他们的项目成果,包括设计文档、源代码和演示等。
操作系统课程设计(完整规范版)

操作系统课程设计(完整规范版)一、引言操作系统是计算机系统的核心软件,它管理计算机的硬件资源,为应用程序提供运行环境。
本课程设计旨在通过实践,加深学生对操作系统原理的理解,提高学生的编程能力和系统设计能力。
二、课程目标1. 理解操作系统的基本原理和功能。
2. 掌握进程管理、内存管理、文件系统等核心模块的设计和实现。
3. 熟悉操作系统调度的基本算法。
4. 提高学生的编程能力和系统设计能力。
三、课程内容1. 操作系统概述操作系统的定义、功能和发展历程操作系统的基本组成和结构操作系统的类型和特点2. 进程管理进程的定义、状态和转换进程控制块(PCB)的结构和作用进程同步与互斥进程通信进程调度算法3. 内存管理内存管理的目标连续内存管理技术非连续内存管理技术页面置换算法4. 文件系统文件系统的定义和功能文件的结构和类型文件存储空间管理文件目录管理文件操作5. I/O系统I/O系统的功能和组成 I/O设备管理I/O调度算法缓冲管理6. 系统调用系统调用的定义和类型系统调用的实现机制常用系统调用分析7. 实验与课程设计实验目的和要求实验内容和步骤课程设计题目和要求课程设计报告格式四、课程考核1. 平时成绩(30%):包括课堂表现、实验报告和作业完成情况。
2. 实验成绩(30%):包括实验操作和实验报告。
3. 课程设计成绩(40%):包括设计报告、代码实现和答辩表现。
1. 《操作系统概念》作者:亚伯拉罕·西尔伯斯查茨等2. 《现代操作系统》作者:安德鲁·S·塔嫩鲍姆3. 《操作系统导论》作者:威廉·斯托林斯六、附录1. 课程设计报告模板2. 实验报告模板3. 课程设计答辩评分标准七、课程安排1. 理论学习操作系统概述(2课时)进程管理(4课时)内存管理(4课时)文件系统(4课时)I/O系统(2课时)系统调用(2课时)2. 实验与课程设计进程管理实验(2课时)内存管理实验(2课时)文件系统实验(2课时)I/O系统实验(2课时)课程设计(8课时)课程考核(2课时)八、实验与课程设计指导1. 实验指导进程管理实验:通过模拟进程的创建、撤销、阻塞和唤醒等操作,理解进程管理的原理。
天津科技大学操作系统课程设计报告

操作系统课程设计报告专业:学号:姓名提交日期:【设计目的】1、本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。
2、结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。
……………………………………..【设计内容】为Linux系统设计一个简单的二级文件系统。
要求做到以下几点:①可以实现下列几条命令:login 用户登录dir 列目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件cd 进出目录②列目录时要列出文件名,物理地址,保护码和文件长度③源文件可以进行读写保护………………………………….【实验环境】Windows7操作平台Visual Studio2010【相关知识综述】理解二级目录的文件系统的组织;掌握常用的数据结构;系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件;使用文件来模拟外存,进行数据结构设计和操作算法的设计,实现一个文件系统并实现基本的文件操作(为了简便文件系统,不考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容)。
【设计思路】采用的数据结构、主要的函数说明、程序流程设计等本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。
另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。
首先应确定文件系统的数据结构:主目录、子目录及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
用户创建的文件,可以编号存储于磁盘上。
如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记1.主要的数据结构#define MAXNAME 25 /*the largest length of mfdname,ufdname,filename表示三种文件的长度都为25*/#define MAXCHILD 50 /*the largest child每个用户下可以有50个文件*/#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno定义一个常量2500个扇区*/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;/*osf文件的数据结构*/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;2.主要函数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();3.总体功能程序结构图①打开命令的程序流程图②关闭命令的程序流程图③写命令程序流程图④删除命令的程序流程图:【源程序清单】#include "stdio.h"#include "string.h"#include "conio.h"#include "stdlib.h"#define MAXNAME 25 /*the largest length of mfdname,ufdname,filename表示三种文件的长度都为25*/#define MAXCHILD 50 /*the largest child每个用户下可以有50个文件*/#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno定义一个常量2500个扇区*/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;//osfile文件的数据结构,一级文件系统上创建的文件上例如W ANGFANG存储的就是这些内容typedef struct /*the structure of OSUFD*/{char ufdname[MAXNAME]; /*ufd name*/OSFILE ufdfile[MAXCHILD]; /*ufd own file*/}OSUFD;/*osf文件的数据结构*/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将osfile实例化ufd,有50个指向该结构的指针*/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定义了一个字符数组,存放用户名最大可放25个*/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语句的目的只是为了检测该文件是否存在,若不存在则创建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;//choicel=12时跳转到default:choiceend=0;因为while(1)所以要不断循环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;}}}else //如果没有登录成功printf("\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) /*remove the trailing blanks.除去末尾端的空格符号指针指向字符串第一个*/{int n=strlen(str)-1;//n为字符串的长度减1while(n>=0)//{if(*(str+n)!=' ')//末尾不存在空格{*(str+n+1)='\0';//'\0'表示结束符break;}else n--;//如果存在空格,则将空格去掉}if (n<0) str[0]='\0';return str;}char *ltrim(char *str) /*remove the heading blanks去掉前端空格.*/{strrev(str);//把字符串str的所有字符的顺序颠倒过来(不包括空字符NULL)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2014-2015学年第一学期操作系统课程设计实验指导书专业:软件工程班级:121031学号:121031姓名:提交日期:2015.1.7操作系统课程设计【设计题目】Linux二级文件系统设计【设计目的】(1)本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。
(2)结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。
(3)通过分对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力【设计内容】为Linux系统设计一个简单的二级文件系统。
要求做到以下几点:①可以实现下列几条命令:login 用户登录dir 列目录Attrib 修改文件属性create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件cd 进出目录②列目录时要列出文件名,物理地址,保护码和文件长度③源文件可以进行读写保护【开发语言及实现平台或实验环境】C++/VC++【相关知识综述】理解二级目录的文件系统的组织;掌握常用的数据结构;系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件;使用文件来模拟外存,进行数据结构设计和操作算法的设计,实现一个文件系统并实现基本的文件操作(为了简便文件系统,不考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容)。
【设计思路】本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。
另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。
首先应确定文件系统的数据结构:主目录、子目录及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
用户创建的文件,可以编号存储于磁盘上。
如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记1.主要的数据结构#define MAXNAME 25 /* mfdname,ufdname,filename表示三种文件的长度25*/#define MAXCHILD 50 /*the largest child每个用户下可以最多有50个文件*/#define MAX(MAXCHILD*MAXCHILD) /*the size of fpaddrno 定义一个常量2500个扇区*/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; /*osf文件的数据结构*/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;2.主要函数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();3.总体功能程序结构图(1)open():(4)delete【源程序清单】void OpenF(){char fname[MAXNAME];int i,k;if (strcmp(strupr(dirname),strupr(username))!=0){printf("\nError! You can only open file in yourself dir.\n");}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. file \'%s\' had been opened, it can not be opened again.\n",fname);}else{if((ufd[k]->ufdfile[i].fmode==0)||(ufd[k]->ufdfile[i].fmode==1)||(ufd[k]->ufdfile[i].fmode== 2)){ifopen[k][i].ifopen=1;ifopen[k][i].openmode=(ufd[k]->ufdfile[i].fmode);printf("\'%s\' has been opened successfully!",fname);}elseprintf("\n\'%s\' is a protected file, it can not be opened.",fname);}}else{printf("\nError.\'%s\' dose not exist.\n",fname);}}}void CloseF(){char fname[MAXNAME];int i,k;if (strcmp(strupr(dirname),strupr(username))!=0){printf("\nError.You can only modify filemode in yourself dir.\n");}else{printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if (i>=0){k=ExistD(username);if(ifopen[k][i].ifopen==0){printf("\nError. \'%s\' has been closed. you can not close it again.\n",fname);}else{ifopen[k][i].ifopen=0;ifopen[k][i].openmode=4;printf("\'%s\' has been closed successfully!",fname);}}else{printf("\nError. \'%s\' dose not exist.\n",fname);}}}void DeleteF(){char fname[MAXNAME];int i,k,x;char str[255],str1[255];if (strcmp(strupr(dirname),strupr(username))!=0){printf("\nError. You can only delete file in yourself dir.\n");}else{printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if (i>=0){k=ExistD(username);if(ufd[k]->ufdfile[i].fmode==3){printf("\n\'%s\' is a protected file, it can not be deleted.",fname);}else{if(ifopen[k][i].ifopen==1)printf("\n\'%s\' has been opened, it can not be deleted.",fname);else{itoa(ufd[k]->ufdfile[i].fpaddr,str,10);strcpy(str1,"file");strcat(str1,str);strcpy(str,"c:\\osfile\\file\\");strcat(str,str1);x =_unlink(str);fpaddrno[ufd[k]->ufdfile[i].fpaddr]=0;for(i;i<(fcount[k]-1);i++){ufd[k]->ufdfile[i]=ufd[k]->ufdfile[i+1];}fcount[k]--;printf("\'%s\' has been deleted successfully!",fname);}}}else{printf("\nError. \'%s\' dose not exist.\n",fname);}}}void WriteF(){char str[50],str1[50];int i,k,n=0;int length=0;char c;char fname[MAXNAME];char *rtrim(char *str);char *ltrim(char *str);int ExistF(char *filename);int ExistD(char *dirname);if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0){printf("\nError.Please convert to ufd dir before write.\n");return;}else{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)return;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==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); /*str形成路径c:\\osfile\\file\\filex*/fp_file=fopen(str,"wb+");printf("Please input text(\'#\' stands for end):\n");while((c=getchar())!='#'){fprintf(fp_file,"%c",c);if (c!='\n')length++;}getchar();fprintf(fp_file,"\n");fclose(fp_file);printf("write successfully!\n");ufd[k]->ufdfile[i].flength=length;}else{printf("\nError.\'%s\' has been opened with read ONL Y mode. It isn\'t write.\n",fname);}}else{printf("\nError.\'%s\' is in closing status. Please open it beforewrite\n",fname);}}else{printf("\nError. \'%s\' does not exist.\n",fname);}}}}【测试结果】登录helpdir,openwriteclosecls【设计总结】这两周的课程设计时间非常短,从中学习到很多知识,也为我们的学习提供了良好的实践平台。