操作系统——课程设计1

报告太大啦,就分成几次发了,祝大家期末快乐!

目录

1. 引言

1.1 任务要求

1.1.1 “生产者-消费者”问题

(1)任务背景

(2)任务描述

(3)实现意义

(4)问题描述

1.1.2 多用户文件系统

(1)任务背景

(2)任务描述

(3)实现意义

(4)问题描述

1.2 选题

(1)B类1:用JAVA语言模仿“生产者-消费者”问题

(2)C类:多用户文件系统

2. 需求分析与设计

2.1 需求分析

(1)“生产者-消费者”问题

(2)多用户文件系统

2.2 系统框架和流程

2.2.1 “生产者-消费者”问题

2.2.2.1 Linux文件系统源码解读

2.2.2.2 本系统的功能架构和流程图

2.3 系统流程和模块描述

2.3.1 “生产者-消费者”问题

2.3.1.1 生产者进程

2.3.1.2 消费者进程

2.3.1.3 用例图

2.3.1.4 时序图

2.3.2 多用户文件系统

2.3.2.1 系统模块总述

2.3.2.2 用例图

2.3.2.3 登陆注册模块

2.3.2.4 目录管理模块

(1)目录列表显示

(2)创建目录

(3)打开目录

(4)删除目录

(5)修改目录

(6)返回上一级目录

(7)查询目录

2.3.2.4 文件管理模块

(1)创建文件

(2)重命名文件

(3)修改文件读写权限

(4)删除文件

(5)查询文件

(6)读写文件(打开文件、读文件、写文件)


 

1. 引言

随着科学技术的高速繁荣,各式各样的操作系统应运而生、更新发展[1]。作为操作系统五大功能之中的进程管理与文件管理,学习和掌握它们的重要性不言而喻。

本课程设计将从实际出发,利用Java语言模仿解决“生产者-消费者”问题,并设计开发小型多用户文件管理系统。从而,帮助学生深入理解进程管理与文件管理的运行机理,加强对操作系统内部功能和实现方法的认识,提高程序设计能力、编程能力、分析解决问题能力。

1.1 任务要求

1.1.1 “生产者-消费者”问题

(1)任务背景

进程是操作系统进行资源分配和调度的基本单位,作为程序独立运行的载体保障其正常执行。自操作系统引入并发程序设计技术后,在多道程序环境下,进程同步执行,提高了系统的资源利用率,但也打破了程序执行结果的再现性[2]。

针对生产者、消费者共享有限资源时出现执行结果不唯一、死锁等现象,主要原因便是案例本身存在问题,需要设置临界区,加入同步机制。

(2)任务描述

针对上述问题,要求在Linux操作系统下,通过Java虚拟机模仿“生产者-消费者”问题,逐步实现多进程创建、临界区设置、资源共享管理等,以进程同步互斥来解决实际的类“生产者消费者”问题。

(3)实现意义

该任务旨在深入了解进程的概念以及其同步互斥的原理,为学习和深入使用Linux操作系统夯实基础。并且,以实际案例为基础,为之后研究类似的问题提供设计思路和解决方案。

(4)问题描述

  1. 设计符合现实情况的同步算法解决“生产者-消费者”问题;
  2. 如何区别多个生产者和消费者;
  3. 如何实现多个生产者和消费者对于共享资源区的操作。

1.1.2 多用户文件系统

(1)任务背景

内存作为计算机的组成硬件属于易失性存储器,在断电之后其存储的二进制信息会随之消失,虽然拥有超高的存取速度但容量十分有限。针对以上两个问题,计算机发展出外存(硬盘等),大部分系统与用户的程序、数据在没有使用到时都存储在外存,只有需要时才会被调入。

如果用户直接进行文件管理,需要充分了解存储特性、物理地址和逻辑地址等专业知识,大大提高了管理难度。因此,在该背景下操作系统中内嵌了文件系统,提供了文件管理功能——管理外存文件,实现基本的存取、多用户共享、文件保护等操作。

(2)任务描述

在Linux操作系统下,设计一个多用户的文件管理系统,实现对文件的增删改查基本操作,并辅之以自己特色的文件保护功能。

(3)实现意义

该任务旨在深入了解文件管理系统的层次结构设计,熟悉多用户访问文件的权限管理。并且,以自己设计的小型文件管理系统为基础,为日后开发类似管理系统提供自己独特的创新思想与实现方式。

(4)问题描述

  1. 设计实现文件管理系统的增删改查基本功能;
  2. 设计实现文件保护功能。

1.2 选题

笔者选择“生产者-消费者”问题+多用户文件系统作为本次课程设计的主题。

(1)B类1:用JAVA语言模仿“生产者-消费者”问题

该任务内容摘要如下:

  1. 通过Java语言的wait()和notify()命令模拟操作系统中的P/V操作;
  2. 为每个生产者/消费者产生一个线程,设计正确的同步算法;
  3. 每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的当前全部内容、当前指针位置和生产者/消费者线程的自定义标识符;
  4. 生产者和消费者各有两个以上;
  5. 多个生产者或多个消费者之间须共享对缓冲区进行操作的函数代码。

(2)C类:多用户文件系统

设计一个多用户文件系统,理解文件系统的层次结构,完成基本的文件系统create、open、close、read/write等基本功能,并实现文件保护操作。实现以此为基础加入自己设计功能的小型文件系统。要求:

  1. 解读部分Linux文件系统源码,绘出功能结构框图;
  2. 本系统为多用户系统,可定义文件或目录的访问权限;
  3. 模拟文件的存储和索引,整个文件系统为树状结构;
  4. 实现文件/目录的基本命令,类似于Linux终端界面;
  5. 实现文件保护操作,满足读读允许、读写互斥、写写互斥;
  6. 用户界面友好,数据结构设计合理,用可视化控件的需要设计数据库。

 

2. 需求分析与设计

2.1 需求分析

(1)“生产者-消费者”问题

“生产者-消费者”问题是一个经典的进程同步问题。具体描述:有一群生产者进程在生产产品,并将此产品提供给消费者进程去消费。为使生产者进程和消费者进程能并发执行,在它们之间设置缓冲池,生产者进程可将它生产的产品放入一个缓冲区中,消费者进程可从一个缓冲区取得一个产品消费。

为模拟“生产者-消费者”问题,现存在以下需求:

  1. 可以初始化和修改生产者和消费者的数量、缓冲区个数、每个生产者生产产品的个数、每个消费者消耗产品的个数;
  2. 输出生产者、消费者同步执行情况下的具体执行过程;
  3. 在缓冲区已满时,生产者不能继续加入数据;
  4. 在缓冲区已空时,消费者不能继续取出数据。

(2)多用户文件系统

文件管理系统为多用户使用,故具备登录系统、注册用户的功能,各用户间的文件系统互不干扰,同时又要实现对文件增删改查、保护等功能。

针对多用户文件系统的功能要求,现存在以下需求:

  1. 实现多用户登录、注册文件系统;
  2. 实现用户对文件/目录的权限管理;
  3. 实现用户对文件的基本操作,包括创建、打开、修改、关闭、删除文件;
  4. 实现目录的自由切换;
  5. 实现文件的保护操作,包括读读允许、读写互斥、写写互斥;
  6. 实现用户使用完系统后登出系统或直接关闭系统。

2.2 系统框架和流程

2.2.1 “生产者-消费者”问题

假设有k个生产者生产产品,提供给m个消费者消耗,为使生产者和消费者并发执行,在两者之间设置一个具有n个缓冲区的缓冲池。所有的生产者进程和消费者进程均以异步方式运行,同一时间段生产者向缓冲池存入数据,消费者从缓冲池取出数据。但两者之间保持同步,即不允许消费者进程到一个空缓冲区取数据,也不允许生产者进程向一个满缓冲区存数据。其对应的系统框架图见下图2.1所示,系统流程图如下图2.2所示。

8a2bfd644166474f8588b92a344a077b.png

 图2.1 “生产者-消费者”系统功能框架图

f6a57b43323b4d9eb3ac6b00bcaa9d2e.png

图2.2 “生产者-消费者”系统流程图 

2.2.2 多用户文件系统

2.2.2.1 Linux文件系统源码解读

通过对Linux文件系统源码的大致解读,我了解到在Linux系统中,用户在硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的,Linux支持数十种文件格式。其对应的功能框架图如下图2.3所示。

d315444bc53a4056a5d57daa4b0d8f6c.png

图2.3 Linux文件系统的功能框架图

2.2.2.2 本系统的功能架构和流程图

参考Linux文件系统功能,本多用户文件系统分为用户管理模块、目录管理模块、文件管理模块共三个模块。其中:

用户管理模块:实现用户的注册、登录和注销共3个功能;

目录管理模块:实现创建目录、重命名目录、删除目录、查询目录、展示目录列表、打开目录、关闭目录、返回上一层目录操作共8个功能;

文件管理模块:实现创建文件、重命名文件、删除文件、查询文件、展示文件列表、打开文件、关闭文件、修改文件内容、文件权限设置共9个功能。

具体的功能框架图如下图2.4所示,系统流程图如下图2.5所示。

9fd012e3d82c4fd69df188c18830e0c0.png

 图2.4 多用户文件系统的功能框架图

7dc7b13b4a514f80b42fbff90ed67e1e.png

图2.5 多用户文件系统流程图

2.3 系统流程和模块描述

2.3.1 “生产者-消费者”问题

2.3.1.1 生产者进程

先访问缓冲区,若缓冲区已有线程访问,则阻塞该生产者;若缓冲区空闲,则允许生产者访问。在被允许访问缓冲区后,判断该缓冲区是否已满,若缓冲区未满,则阻塞消费者,生产者向缓冲区存入数据;若已满则生产者无法存入数据,阻塞该生产者,等到下次消费者消耗缓冲区中的数据时,该生产者才能被唤醒,开始往缓冲区添加数据。示意图如下所示。

5a05d16f94ca46a3a24bfc902dbca873.png

图2.6 “生产者-消费者”问题的生产者模块图

2.3.1.2 消费者进程

先访问缓冲区,若缓冲区已有线程访问,则阻塞该消费者;若缓冲区空闲,则允许消费者访问。在被允许访问缓冲区后,判断该缓冲区是否空余,若缓冲区盈余,则阻塞生产者,消费者从缓冲区取出数据;若缓冲区空余,则消费者无法取出数据,阻塞该消费者,等到生产者往缓冲区添加数据之后,再唤醒该消费者。示意图如下所示。

00f4635a5d304af6acf3f615f1c652dc.png

图2.7 “生产者-消费者”问题的消费者模块图

2.3.1.3 用例图

“生产者-消费者”的用例图如下图2.8所示。

bc7f21fc7bd34652b80d3ccbb0e78533.png

图2.8 “生产者-消费者”问题的用例图

2.3.1.4 时序图

“生产者-消费者”的时序图如下图2.9所示。

d08b3befb8b64c2b919563519399420b.png

图2.9 “生产者-消费者”问题的时序图

2.3.2 多用户文件系统

2.3.2.1 系统模块总述

本系统为包含UI交互界面的多用户文件系统,具备注册、登录功能,并且包含对目录和文件的各种常见操作,包括增删改查、打开关闭、权限设置等。系统对应的功能图如下图2.9所示。

8690ae6c2dfa47bca340e9310ceb6acd.png

图2.10 “生产者-消费者”问题的系统功能图

2.3.2.2 用例图

多用户文件系统的用例图2.11如下所示。

50ffb68c936b4d29ac6d601bf3b9c998.png

图2.11 多用户文件系统用户用例图

2.3.2.3 登陆注册模块

该系统像Windows操作系统一样,需要用户先登录才能进行系统操作,若用户没有账户则必须先进行注册。注册登陆后,用户只能对属于自己的目录和文件进行操作,实现多用户的权限限制。

注册模块:运行文件系统的可执行文件,点击登录界面的“注册”按钮跳转进入注册界面。用户设置用户名和密码后点击“注册”按钮,若用户名已存在,则提示“用户已存在”要求重新输入;若用户名不存在则提示注册成功并返回登录界面。系统会自动将用户名和密码保存在user.csv文件中。

登录模块:运行文件系统的可执行文件,后台读取user.csv文件中的用户名和密码,待用户写入用户名和密码,并按下Login按钮之后,验证用户名是否存在以及密码是否正确,密码不正确则提示并清空用户输入的密码。

7cd8fe0ce8be429bb9d210ccd11234f6.png

图2.12 多用户文件系统-登录注册模块时序图

2.3.2.4 目录管理模块

(1)目录列表显示

用户登录之后,系统会自动显示该系统下所有用户的目录和文件。并且,显示目录按钮可以用来刷新,比如在新建、删除、重命名一个文件或目录后刷新可以显示当前目录。

386778451b2b48798bb590977143a71f.png

图2.13 多用户文件系统-目录列表展示时序图

(2)创建目录

系统在自行设定的初始盘块中查找一个未使用的文件块,若还有未使用的文件块,则提示用户输入目录名,当用户创建目录成功时将目录名、目录下的文件数、剩余的目录项、上级目录号以及该目录下的文件结点保存在对应的目录文件中。

4eef7de6e7c7494a8e1707050d408fae.png

图2.14 多用户文件系统-创建目录时序图

45a363d7ee464eb6895b2a5a2649a279.png

图2.15 多用户文件系统-创建目录流程图

(3)打开目录

在UI界面的目录下选择要打开的目录,再点击打开按钮。系统判断用户是否拥有打开权限,即判断需打开的目录是否为该用户自身创建,若否则提示无操作权限;若是则打开成功,界面显示选择目录下的目录列表。

80979536b6064f1ea8b1a9c08050c34f.png

图2.16 多用户文件系统-打开目录时序图

dd62543f9b084518aa211c115be37d73.png

图2.17 多用户文件系统-打开目录流程图

(4)删除目录

在UI界面的目录下选择要删除的目录,再点击删除按钮,系统通过递归函数删除该目录下的目录和文件。

8fd0738192ab433aaa96344584e8ff74.png

图2.18 多用户文件系统-删除目录时序图

d1e1b634aa9542429a3c2668ec913133.png

图2.19 多用户文件系统-删除目录流程图

(5)修改目录

在UI界面的目录下选择要重命名的目录,对其目录名进行修改,系统会更新目录名称。

e7228cf98973417f8b9a579881e41422.png

图2.20 多用户文件系统-修改目录流程图

8a394e37f08044a1b7dbfeade6f36b14.png

图2.21 多用户文件系统-修改目录流程图

(6)返回上一级目录

选择返回按钮,系统会跳回到上一级目录,并对上一级目录列表进行展示。

f6c19a85d0954443adb00c24a2377807.png

图2.22 多用户文件系统-返回上一级目录时序图

15b0026c6eed4694b4b4b1b1ff0b8095.png

图2.23 多用户文件系统-返回上一级目录流程图

(7)查询目录

选择查询按钮,系统跳出查询弹窗,用户输入要查询的目录名,系统会在列表中显示查找到的目录。

751c97a916614ac6a1ae4949238d2121.png

图2.24 多用户文件系统-搜素目录时序图

1cfaa86ac24847d7af90d4f19fe2604d.png

图2.25 多用户文件系统-搜素目录流程图

2.3.2.4 文件管理模块

(1)创建文件

文件和目录的数据类型一样,只是文件类别标识不同,创建文件同样是查找一个在自行设定的初始盘块中未使用的文件块,若还有未使用的文件块,则提示用户输入文件名和文件的模式(只读或可读可写),当用户创建文件成功时将文件所有者id、文件模式、文件内容保存地址写入相应的文件块,并更新当前目录相对应的目录文件。

10fc498f4d704881a6844044a5dc6e2b.png

图2.26 多用户文件系统-创建文件时序图

c152b1ab5ba1480981fb616cca6e1c1b.png

图2.27 多用户文件系统-创建文件流程图

(2)重命名文件

在UI界面的目录下选择要修改的文件,修改文件名,系统会更新文件名称。

(3)修改文件读写权限

在UI界面的目录下选择要修改权限的文件,对其文件权限进行修改,r表示只读,w表示可读可写,系统会更新文件读写权限。

5d303e45de6c47e1b7c7cc73012ed531.png

图2.28 多用户文件系统-修改文件流程图

608b0108680f48b2a6a32af632070a5f.png

图2.29 多用户文件系统-修改文件流程图

(4)删除文件

在UI界面的目录下选择要删除的文件,再点击删除按钮,系统删除对应的文件块和对应的文本内容文件。

02a3a41b55714c7e85e7e718b6635756.png

图2.30 多用户文件系统-删除文件时序图

3765c188d3674dce85ff02a0b944f85d.png

(5)查询文件

选择查询按钮,系统跳出查询弹窗,用户输入要查询的文件名,系统会在列表中显示查找到的文件。

c5d0e3209bd241d381f035ff78c03cd5.png

 图2.32 多用户文件系统-查询文件时序图

52adda4e4cc948d8b17630574907d0d4.png

图2.33 多用户文件系统-查询文件流程图

(6)读写文件(打开文件、读文件、写文件)

在UI界面的目录下选择要打开的文件,再点击读写按钮,若文件是只读模式,则打开的文本只能查看不可编写,若文件是可读可写模式,则打开的文本可以进行编写,当编写完成点击保存按钮,文本内容被重新写入该文件相对应的文本文件中。

e79ddd59c9994545a552094819fd8e51.png

图2.34 多用户文件系统-读写文件时序图

00e7c0560fa9469abc52eca80bcfda96.png

图2.35 多用户文件系统-读写文件流程图

 

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
酒店管理系统是一个常见的数据库课程设计项目,它涉及到数据库设计、数据模型、触发器、前后端连接等多个方面。以下是一个简单的介绍: 1. 数据库设计:酒店管理系统的数据库设计是整个项目的基础。它包括定义表、字段、主键、外键等。可以使用E-R图来表示实体和关系,以及流程图和模块图来表示系统的功能和模块。 2. 触发器:触发器是数据库中的一种特殊对象,它可以在特定的数据库操作(如插入、更新、删除)发生时自动执行一些操作。在酒店管理系统中,可以使用触发器来实现一些业务逻辑,例如在预订房间时自动更新房间的状态。 3. Python编程:在酒店管理系统中,可以使用Python编程语言来实现一些功能,例如与数据库的交互、数据处理、界面设计等。同时,还可以使用一些第三方库来简化开发过程,例如Django、Flask等。 4. 前后端连接:酒店管理系统通常包括一个前端界面和一个后端数据库。前端界面用于用户交互和数据展示,后端数据库用于存储和管理数据。可以使用Python的Web框架(如Django)来实现前后端的连接,通过HTTP请求和数据库交互来实现数据的增删改查。 总结起来,酒店管理系统是一个综合性的数据库课程设计项目,涉及到数据库设计、触发器、Python编程和前后端连接等多个方面。通过这个项目,你可以学到数据库设计的基本原理和方法,以及如何使用Python来实现一个完整的应用系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阮阮的阮阮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值