报告太大啦,就分成几次发了,祝大家期末快乐!
目录
1. 引言
随着科学技术的高速繁荣,各式各样的操作系统应运而生、更新发展[1]。作为操作系统五大功能之中的进程管理与文件管理,学习和掌握它们的重要性不言而喻。
本课程设计将从实际出发,利用Java语言模仿解决“生产者-消费者”问题,并设计开发小型多用户文件管理系统。从而,帮助学生深入理解进程管理与文件管理的运行机理,加强对操作系统内部功能和实现方法的认识,提高程序设计能力、编程能力、分析解决问题能力。
1.1 任务要求
1.1.1 “生产者-消费者”问题
(1)任务背景
进程是操作系统进行资源分配和调度的基本单位,作为程序独立运行的载体保障其正常执行。自操作系统引入并发程序设计技术后,在多道程序环境下,进程同步执行,提高了系统的资源利用率,但也打破了程序执行结果的再现性[2]。
针对生产者、消费者共享有限资源时出现执行结果不唯一、死锁等现象,主要原因便是案例本身存在问题,需要设置临界区,加入同步机制。
(2)任务描述
针对上述问题,要求在Linux操作系统下,通过Java虚拟机模仿“生产者-消费者”问题,逐步实现多进程创建、临界区设置、资源共享管理等,以进程同步互斥来解决实际的类“生产者消费者”问题。
(3)实现意义
该任务旨在深入了解进程的概念以及其同步互斥的原理,为学习和深入使用Linux操作系统夯实基础。并且,以实际案例为基础,为之后研究类似的问题提供设计思路和解决方案。
(4)问题描述
- 设计符合现实情况的同步算法解决“生产者-消费者”问题;
- 如何区别多个生产者和消费者;
- 如何实现多个生产者和消费者对于共享资源区的操作。
1.1.2 多用户文件系统
(1)任务背景
内存作为计算机的组成硬件属于易失性存储器,在断电之后其存储的二进制信息会随之消失,虽然拥有超高的存取速度但容量十分有限。针对以上两个问题,计算机发展出外存(硬盘等),大部分系统与用户的程序、数据在没有使用到时都存储在外存,只有需要时才会被调入。
如果用户直接进行文件管理,需要充分了解存储特性、物理地址和逻辑地址等专业知识,大大提高了管理难度。因此,在该背景下操作系统中内嵌了文件系统,提供了文件管理功能——管理外存文件,实现基本的存取、多用户共享、文件保护等操作。
(2)任务描述
在Linux操作系统下,设计一个多用户的文件管理系统,实现对文件的增删改查基本操作,并辅之以自己特色的文件保护功能。
(3)实现意义
该任务旨在深入了解文件管理系统的层次结构设计,熟悉多用户访问文件的权限管理。并且,以自己设计的小型文件管理系统为基础,为日后开发类似管理系统提供自己独特的创新思想与实现方式。
(4)问题描述
- 设计实现文件管理系统的增删改查基本功能;
- 设计实现文件保护功能。
1.2 选题
笔者选择“生产者-消费者”问题+多用户文件系统作为本次课程设计的主题。
(1)B类1:用JAVA语言模仿“生产者-消费者”问题
该任务内容摘要如下:
- 通过Java语言的wait()和notify()命令模拟操作系统中的P/V操作;
- 为每个生产者/消费者产生一个线程,设计正确的同步算法;
- 每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的当前全部内容、当前指针位置和生产者/消费者线程的自定义标识符;
- 生产者和消费者各有两个以上;
- 多个生产者或多个消费者之间须共享对缓冲区进行操作的函数代码。
(2)C类:多用户文件系统
设计一个多用户文件系统,理解文件系统的层次结构,完成基本的文件系统create、open、close、read/write等基本功能,并实现文件保护操作。实现以此为基础加入自己设计功能的小型文件系统。要求:
- 解读部分Linux文件系统源码,绘出功能结构框图;
- 本系统为多用户系统,可定义文件或目录的访问权限;
- 模拟文件的存储和索引,整个文件系统为树状结构;
- 实现文件/目录的基本命令,类似于Linux终端界面;
- 实现文件保护操作,满足读读允许、读写互斥、写写互斥;
- 用户界面友好,数据结构设计合理,用可视化控件的需要设计数据库。
2. 需求分析与设计
2.1 需求分析
(1)“生产者-消费者”问题
“生产者-消费者”问题是一个经典的进程同步问题。具体描述:有一群生产者进程在生产产品,并将此产品提供给消费者进程去消费。为使生产者进程和消费者进程能并发执行,在它们之间设置缓冲池,生产者进程可将它生产的产品放入一个缓冲区中,消费者进程可从一个缓冲区取得一个产品消费。
为模拟“生产者-消费者”问题,现存在以下需求:
- 可以初始化和修改生产者和消费者的数量、缓冲区个数、每个生产者生产产品的个数、每个消费者消耗产品的个数;
- 输出生产者、消费者同步执行情况下的具体执行过程;
- 在缓冲区已满时,生产者不能继续加入数据;
- 在缓冲区已空时,消费者不能继续取出数据。
(2)多用户文件系统
文件管理系统为多用户使用,故具备登录系统、注册用户的功能,各用户间的文件系统互不干扰,同时又要实现对文件增删改查、保护等功能。
针对多用户文件系统的功能要求,现存在以下需求:
- 实现多用户登录、注册文件系统;
- 实现用户对文件/目录的权限管理;
- 实现用户对文件的基本操作,包括创建、打开、修改、关闭、删除文件;
- 实现目录的自由切换;
- 实现文件的保护操作,包括读读允许、读写互斥、写写互斥;
- 实现用户使用完系统后登出系统或直接关闭系统。
2.2 系统框架和流程
2.2.1 “生产者-消费者”问题
假设有k个生产者生产产品,提供给m个消费者消耗,为使生产者和消费者并发执行,在两者之间设置一个具有n个缓冲区的缓冲池。所有的生产者进程和消费者进程均以异步方式运行,同一时间段生产者向缓冲池存入数据,消费者从缓冲池取出数据。但两者之间保持同步,即不允许消费者进程到一个空缓冲区取数据,也不允许生产者进程向一个满缓冲区存数据。其对应的系统框架图见下图2.1所示,系统流程图如下图2.2所示。
图2.1 “生产者-消费者”系统功能框架图
图2.2 “生产者-消费者”系统流程图
2.2.2 多用户文件系统
2.2.2.1 Linux文件系统源码解读
通过对Linux文件系统源码的大致解读,我了解到在Linux系统中,用户在硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的,Linux支持数十种文件格式。其对应的功能框架图如下图2.3所示。
图2.3 Linux文件系统的功能框架图
2.2.2.2 本系统的功能架构和流程图
参考Linux文件系统功能,本多用户文件系统分为用户管理模块、目录管理模块、文件管理模块共三个模块。其中:
用户管理模块:实现用户的注册、登录和注销共3个功能;
目录管理模块:实现创建目录、重命名目录、删除目录、查询目录、展示目录列表、打开目录、关闭目录、返回上一层目录操作共8个功能;
文件管理模块:实现创建文件、重命名文件、删除文件、查询文件、展示文件列表、打开文件、关闭文件、修改文件内容、文件权限设置共9个功能。
具体的功能框架图如下图2.4所示,系统流程图如下图2.5所示。
图2.4 多用户文件系统的功能框架图
图2.5 多用户文件系统流程图
2.3 系统流程和模块描述
2.3.1 “生产者-消费者”问题
2.3.1.1 生产者进程
先访问缓冲区,若缓冲区已有线程访问,则阻塞该生产者;若缓冲区空闲,则允许生产者访问。在被允许访问缓冲区后,判断该缓冲区是否已满,若缓冲区未满,则阻塞消费者,生产者向缓冲区存入数据;若已满则生产者无法存入数据,阻塞该生产者,等到下次消费者消耗缓冲区中的数据时,该生产者才能被唤醒,开始往缓冲区添加数据。示意图如下所示。
图2.6 “生产者-消费者”问题的生产者模块图
2.3.1.2 消费者进程
先访问缓冲区,若缓冲区已有线程访问,则阻塞该消费者;若缓冲区空闲,则允许消费者访问。在被允许访问缓冲区后,判断该缓冲区是否空余,若缓冲区盈余,则阻塞生产者,消费者从缓冲区取出数据;若缓冲区空余,则消费者无法取出数据,阻塞该消费者,等到生产者往缓冲区添加数据之后,再唤醒该消费者。示意图如下所示。
图2.7 “生产者-消费者”问题的消费者模块图
2.3.1.3 用例图
“生产者-消费者”的用例图如下图2.8所示。
图2.8 “生产者-消费者”问题的用例图
2.3.1.4 时序图
“生产者-消费者”的时序图如下图2.9所示。
图2.9 “生产者-消费者”问题的时序图
2.3.2 多用户文件系统
2.3.2.1 系统模块总述
本系统为包含UI交互界面的多用户文件系统,具备注册、登录功能,并且包含对目录和文件的各种常见操作,包括增删改查、打开关闭、权限设置等。系统对应的功能图如下图2.9所示。
图2.10 “生产者-消费者”问题的系统功能图
2.3.2.2 用例图
多用户文件系统的用例图2.11如下所示。
图2.11 多用户文件系统用户用例图
2.3.2.3 登陆注册模块
该系统像Windows操作系统一样,需要用户先登录才能进行系统操作,若用户没有账户则必须先进行注册。注册登陆后,用户只能对属于自己的目录和文件进行操作,实现多用户的权限限制。
注册模块:运行文件系统的可执行文件,点击登录界面的“注册”按钮跳转进入注册界面。用户设置用户名和密码后点击“注册”按钮,若用户名已存在,则提示“用户已存在”要求重新输入;若用户名不存在则提示注册成功并返回登录界面。系统会自动将用户名和密码保存在user.csv文件中。
登录模块:运行文件系统的可执行文件,后台读取user.csv文件中的用户名和密码,待用户写入用户名和密码,并按下Login按钮之后,验证用户名是否存在以及密码是否正确,密码不正确则提示并清空用户输入的密码。
图2.12 多用户文件系统-登录注册模块时序图
2.3.2.4 目录管理模块
(1)目录列表显示
用户登录之后,系统会自动显示该系统下所有用户的目录和文件。并且,显示目录按钮可以用来刷新,比如在新建、删除、重命名一个文件或目录后刷新可以显示当前目录。
图2.13 多用户文件系统-目录列表展示时序图
(2)创建目录
系统在自行设定的初始盘块中查找一个未使用的文件块,若还有未使用的文件块,则提示用户输入目录名,当用户创建目录成功时将目录名、目录下的文件数、剩余的目录项、上级目录号以及该目录下的文件结点保存在对应的目录文件中。
图2.14 多用户文件系统-创建目录时序图
图2.15 多用户文件系统-创建目录流程图
(3)打开目录
在UI界面的目录下选择要打开的目录,再点击打开按钮。系统判断用户是否拥有打开权限,即判断需打开的目录是否为该用户自身创建,若否则提示无操作权限;若是则打开成功,界面显示选择目录下的目录列表。
图2.16 多用户文件系统-打开目录时序图
图2.17 多用户文件系统-打开目录流程图
(4)删除目录
在UI界面的目录下选择要删除的目录,再点击删除按钮,系统通过递归函数删除该目录下的目录和文件。
图2.18 多用户文件系统-删除目录时序图
图2.19 多用户文件系统-删除目录流程图
(5)修改目录
在UI界面的目录下选择要重命名的目录,对其目录名进行修改,系统会更新目录名称。
图2.20 多用户文件系统-修改目录流程图
图2.21 多用户文件系统-修改目录流程图
(6)返回上一级目录
选择返回按钮,系统会跳回到上一级目录,并对上一级目录列表进行展示。
图2.22 多用户文件系统-返回上一级目录时序图
图2.23 多用户文件系统-返回上一级目录流程图
(7)查询目录
选择查询按钮,系统跳出查询弹窗,用户输入要查询的目录名,系统会在列表中显示查找到的目录。
图2.24 多用户文件系统-搜素目录时序图
图2.25 多用户文件系统-搜素目录流程图
2.3.2.4 文件管理模块
(1)创建文件
文件和目录的数据类型一样,只是文件类别标识不同,创建文件同样是查找一个在自行设定的初始盘块中未使用的文件块,若还有未使用的文件块,则提示用户输入文件名和文件的模式(只读或可读可写),当用户创建文件成功时将文件所有者id、文件模式、文件内容保存地址写入相应的文件块,并更新当前目录相对应的目录文件。
图2.26 多用户文件系统-创建文件时序图
图2.27 多用户文件系统-创建文件流程图
(2)重命名文件
在UI界面的目录下选择要修改的文件,修改文件名,系统会更新文件名称。
(3)修改文件读写权限
在UI界面的目录下选择要修改权限的文件,对其文件权限进行修改,r表示只读,w表示可读可写,系统会更新文件读写权限。
图2.28 多用户文件系统-修改文件流程图
图2.29 多用户文件系统-修改文件流程图
(4)删除文件
在UI界面的目录下选择要删除的文件,再点击删除按钮,系统删除对应的文件块和对应的文本内容文件。
图2.30 多用户文件系统-删除文件时序图
(5)查询文件
选择查询按钮,系统跳出查询弹窗,用户输入要查询的文件名,系统会在列表中显示查找到的文件。
图2.32 多用户文件系统-查询文件时序图
图2.33 多用户文件系统-查询文件流程图
(6)读写文件(打开文件、读文件、写文件)
在UI界面的目录下选择要打开的文件,再点击读写按钮,若文件是只读模式,则打开的文本只能查看不可编写,若文件是可读可写模式,则打开的文本可以进行编写,当编写完成点击保存按钮,文本内容被重新写入该文件相对应的文本文件中。
图2.34 多用户文件系统-读写文件时序图
图2.35 多用户文件系统-读写文件流程图