高级OS实验一文件系统
高级OS实验一文件系统实验报告

实验1:Vnod e和Inod e数据结构及缓存一、实验内容及目的为了更好地支持多种类型的文件系统,Solaris操作系统在设计上使用了一种特殊的结构:虚拟文件系统框架。
在虚拟文件系统中,操作系统内核通过vnode来识别每个活动文件,对于一个具体的文件系统,例如UFS,则是由Inode来识别具体的文件。
本实验的目的是观察Solaris操作系统内核中Vnode和Inode数据结构,了解它们之间的关系,同时学习使用mdb 在内核中查找指定的数据结构。
二、实验步骤1.启动一个shell,使用vi编辑器生成文件/work/exp_design/test.txt,内容为字符串“This is a file for UFS testing.”。
2.退出vi编辑器,使用命令#/usr/sfw/bin/gcc file_access.c编译生成可执行程序a.out。
3.运行“mdb -k”,进入内核模块调试程序。
4.启动另一个shell,运行./a.out。
结果为:The file descriptor returned is 3The data read from the file tis This is a5.切换回正在运行mdb的shell,获取进程a.out的地址:> ::ps!grep a.outR 843 804 843 804 0 0x42004000 ffffffff83d25dd8 a.out ffffffff83d25dd8这个地址是proc类型的数据,也就是进程的pcb。
6.使用命令fd获得有关这个进程打开文件的file类型数据结构的地址。
> fffffffff83d25dd8::fd 3ffffffff84ldee387.打印出这个file数据结构的内容。
> ffffffff84ldee38::print struct file{f_tlock = {_opaque = [0]}f_flag = 0xlf_pad = 0xbaddf_vnode = 0xffffffff84181140f_offset = 0x9f_cred = 0xfffffff83a95bd0f_audit_data = 0f_count = 0x1}其中f_vnode就是这个文件的vnode地址。
高级操作系统实验报告

一、实验背景与目的随着计算机技术的飞速发展,操作系统作为计算机系统的核心,其重要性日益凸显。
为了更好地理解操作系统的工作原理和设计思想,我们选择了高级操作系统课程,并完成了以下实验:1. 实验背景本次实验基于Linux操作系统,通过对Linux系统内部结构和操作过程的研究,掌握Linux系统的基本操作、文件系统管理、进程管理、内存管理、设备管理等方面的知识。
2. 实验目的(1)熟悉Linux操作系统的基本操作,包括登录、退出、文件与目录操作等。
(2)掌握Linux系统下的进程管理,包括进程的创建、调度、同步、通信等。
(3)了解Linux系统下的内存管理,包括虚拟内存、页面置换算法等。
(4)学习Linux系统下的设备管理,包括设备驱动程序、I/O调度等。
二、实验内容与步骤1. 实验一:Linux基本操作(1)实验目的:熟悉Linux系统的基本操作。
(2)实验步骤:① 登录Linux系统。
② 使用命令行查看系统信息,如CPU型号、内存大小等。
③ 创建和删除文件与目录。
④ 查看文件内容。
2. 实验二:文件系统管理(1)实验目的:掌握Linux系统下的文件系统管理。
(2)实验步骤:① 使用命令行查看文件系统类型。
② 查看文件系统分区。
③ 使用命令行创建和删除文件系统。
④ 使用命令行挂载和卸载文件系统。
3. 实验三:进程管理(1)实验目的:掌握Linux系统下的进程管理。
(2)实验步骤:① 使用命令行查看系统进程。
② 创建和终止进程。
③ 调整进程优先级。
④ 实现进程同步与互斥。
4. 实验四:内存管理(1)实验目的:了解Linux系统下的内存管理。
(2)实验步骤:① 使用命令行查看内存信息。
② 查看内存分配情况。
③ 实现页面置换算法。
5. 实验五:设备管理(1)实验目的:学习Linux系统下的设备管理。
(2)实验步骤:① 使用命令行查看设备信息。
② 编写简单的设备驱动程序。
③ 实现I/O调度。
三、实验结果与分析1. 实验结果通过本次实验,我们成功完成了以下任务:(1)熟悉了Linux操作系统的基本操作。
操作系统文件管理系统模拟实验

操作系统文件管理系统模拟实验在计算机科学中,操作系统是一种系统软件,负责管理计算机硬件和软件资源,并为用户和应用程序提供接口。
文件管理系统是操作系统的一个重要组成部分,它负责管理计算机系统中的文件和目录,以及提供对它们的访问和操作。
本次实验旨在模拟操作系统中文件管理系统的基本功能和操作。
我们将使用一个虚拟的文件系统,通过命令行界面来模拟用户与文件系统的交互。
以下是实验的具体内容和步骤:1. 创建虚拟文件系统首先,我们需要创建一个虚拟的文件系统。
文件系统由文件和目录组成,可以通过树状结构来表示。
我们可以使用一个数据结构来模拟文件系统的存储和管理。
2. 初始化文件系统在开始操作文件系统之前,我们需要初始化文件系统。
这包括创建根目录和设置当前目录为根目录。
3. 文件和目录的创建与删除文件和目录是文件系统的基本单位。
我们可以通过命令来创建和删除文件和目录。
例如,使用"mkdir"命令创建一个目录,使用"touch"命令创建一个空文件,使用"rm"命令删除文件或目录。
4. 文件和目录的访问权限文件和目录可以设置不同的访问权限,以保护文件系统的安全性。
我们可以使用"chmod"命令来修改文件或目录的权限。
权限通常包括读、写和执行权限。
5. 文件和目录的重命名和移动我们可以使用"mv"命令来重命名文件或目录,使用"cp"命令来复制文件或目录,使用"mv"命令来移动文件或目录。
6. 文件和目录的查找和显示我们可以使用"ls"命令来显示当前目录下的文件和目录,使用"cd"命令来切换当前目录,使用"pwd"命令来显示当前目录的路径。
此外,我们还可以使用"find"命令来查找文件或目录。
7. 文件和目录的读写操作文件可以被读取和写入。
OS实验报告(1)

(4)作业中指令的访问次序按下述原则生成:
•50%的指令是顺序执行的。
•25%的指令是均匀分布在前地址部分。
•25%的指令时均匀分布在后地址部分。
具体实施办法参见实验指导书。
3实验结果(给出编写的程序源代码和运行结果的截图)
(2)假设初始状态下,可用的内存空间为640KB,并有下列的请求序列:
•作业1申请130KB。
•作业2申请60KB。
•作业3申请100KB。
•作业2释放60KB。
•作业4申请200KB。
•作业3释放100KB。
•作业1释放130KB。
•作业5申请140KB。
•作业6申请60KB。
•作业7申请50KB。
计算机操作系统
实验报告
学号:
姓名:
提交日期:
XXXX-XX-XX
成绩:
东北大学秦皇岛分校
实验1使用动态优先权的进程调度算法的模拟
1实验目的
(1)加深对进程概念的理解
(2)深入了解系统如何组织进程,创建进程
(3)进一步认识如何实现处理机调度
2实验内容
(1)实现对N个进程采用动态优先权优先算法的进程调度。
(2)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:
进程标识ID。
进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。
进程已占用的CPU时间CPUTIME。
进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。
进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,将进入阻塞状态。
1实验目的
文件系统 实验报告

文件系统实验报告引言文件系统是操作系统中的一部分,用于管理计算机中的文件和目录。
它提供了数据的存储、访问、组织和管理功能,是操作系统的基础之一。
本实验通过实现一个简单的文件系统来深入理解文件系统的原理和实现方式。
实验目的1. 了解文件系统的基本概念和原理;2. 学习文件系统的设计和实现方法;3. 掌握文件系统的基本操作。
实验环境本次实验使用的是Ubuntu 20.04操作系统。
实验步骤1. 文件系统的设计在开始实现文件系统之前,我们首先需要设计文件系统的结构和功能。
1.1 文件系统的结构文件系统通常由三个主要部分组成:文件控制块、目录和数据块。
文件控制块用于存储文件的属性和元数据,目录用于组织文件和子目录,数据块用于存储文件的实际内容。
1.2 文件系统的功能文件系统需要提供以下功能:- 文件的创建、读取、修改和删除;- 目录的创建、读取、修改和删除;- 文件和目录的查找;- 文件的权限管理。
2. 文件系统的实现2.1 文件系统的初始化在实现文件系统之前,我们首先需要初始化文件系统。
包括创建超级块、位图和根目录,并将它们写入磁盘。
2.2 文件和目录的操作在文件系统中,我们需要实现文件和目录的基本操作,包括创建文件、创建目录、读取文件内容、修改文件内容和删除文件。
2.3 文件系统的其他操作除了基本的文件和目录操作之外,文件系统还需要实现其他一些功能,如文件查找、权限管理等。
3. 文件系统的测试在完成文件系统的实现后,我们需要对其进行测试,以验证其功能是否正常。
3.1 创建文件和目录我们首先创建一些文件和目录,检查它们是否被正确地写入磁盘,并且能够被正确地读取。
3.2 读取和修改文件我们随机选择一些文件,读取它们的内容,并对其内容进行修改。
修改后,我们再次读取文件,确保修改成功。
3.3 删除文件和目录我们尝试删除一些文件和目录,并检查它们是否被成功地删除。
4. 结果与讨论经过测试,我们发现我们实现的文件系统功能正常,能够按照我们的预期进行文件和目录的创建、读取、修改和删除等操作。
OS实验思考题参考答案

int execv(const char *path,char *const argv[]);
int execvp(const char *file,char *const argv[]):
(2)进程的控制实验
pid_t wait(int *stat_loc);
pid_t waitpid(pid_t pid,int *stat_loc,int options);
wait 系统调用会使父进程阻塞直到一个子进程结束或者是父进程接受到了一个信号.如 果没有父进程没有子进程或者他的子进程已经结束了 wait 回立即返回.成功时(因一个子进 程结束)wait 将返回子进程的 ID,否则返回-1,并设置全局变量 errno.stat_loc 是子进程的退出状 态.子进程调用 exit,_exit 或者是 return 来设置这个值. 为了得到这个值 Linux 定义了几个宏来 测试这个返回值.
当 fork 掉用失败的时候(内存不足或者是用户的最大进程数已到)fork 返回-1,否则 fork 的返回值有重要的作用.对于父进程 fork 返回子进程的 ID,而对于 fork 子进程返回 0.我们 就是根据这个返回值来区分父子进程的.
父进程创建一个子进程的目的是由于 Linux 是一个多用户操作系统,在同一时间 会有许多的用户在争夺系统的资源.有时进程为了早一点完成任务就创建子进程来争夺资源. 一旦子进程被创建,父子进程一起从 fork 处继续执行,相互竞争系统的资源.有时候我们希望 子进程继续执行,而父进程阻塞直到子进程完成任务.这个时候我们可以调用 wait 或者 waitpid 系统调用.
操作系统虚拟文件系统实验报告

操作系统虚拟文件系统实验报告一、实验目的本实验旨在帮助学生理解操作系统中虚拟文件系统的概念和工作原理,通过实际操作来深入学习和掌握相关知识。
二、实验环境本次实验使用的操作系统为Linux,实验工具为虚拟机软件VMware Workstation。
三、实验步骤1. 创建虚拟机:首先启动VMware Workstation,创建一个新的虚拟机并安装Linux操作系统。
2. 挂载文件系统:在Linux系统中,使用命令行工具挂载一个文件系统到指定的目录,例如将/dev/sdb1挂载到/mnt目录下。
3. 创建文件:在挂载后的文件系统中,通过命令行工具创建若干个文件和目录,可以使用touch和mkdir命令。
4. 编辑文件内容:使用vim或者其他文本编辑工具,在创建的文件中添加一些内容。
5. 查看文件系统信息:使用df命令查看当前系统的文件系统使用情况,通过ls命令查看文件和目录的信息。
6. 卸载文件系统:使用umount命令卸载之前挂载的文件系统。
7. 实验总结:对本次实验的操作过程和结果进行总结,思考在实际应用中虚拟文件系统的意义和作用。
四、实验结果分析通过本次实验,我深入理解了操作系统中虚拟文件系统的概念和原理。
在实际操作过程中,我掌握了如何挂载和卸载文件系统,创建和编辑文件内容,以及查看文件系统信息的方法。
这些基本操作对于日常的系统管理和开发工作具有重要意义,能够有效地提高工作效率和便捷性。
五、实验感想本次实验虽然只是简单的操作演示,但对我理解操作系统的文件系统和虚拟化技术有着重要的意义。
通过亲身操作,我对虚拟文件系统的工作原理有了更加直观的认识,对操作系统中文件管理的流程和方式也有了更深入的理解。
这对我今后的学习和工作都具有积极的促进作用,我会继续学习和提升相关知识和技能,努力成为一名优秀的操作系统工程师。
六、实验总结通过本次操作系统虚拟文件系统的实验,我进一步巩固了相关知识,增强了对操作系统的理解和掌握。
文件系统实验报告

一、实验目的1. 理解文件系统的基本概念和组成。
2. 掌握文件系统的创建、删除、修改和查询等基本操作。
3. 了解文件系统的性能分析和优化方法。
4. 提高对文件系统原理的理解和实际操作能力。
二、实验环境1. 操作系统:Windows 102. 文件系统:NTFS3. 实验软件:Windows资源管理器、Notepad++等三、实验内容1. 文件系统的基本概念和组成(1)文件:存储在文件系统中的数据单元,可以是程序、文档、图片等。
(2)目录:用于组织文件的结构,类似于文件夹。
(3)文件系统:管理存储设备上文件和目录的数据结构。
2. 文件系统的创建、删除、修改和查询等基本操作(1)创建文件:使用Notepad++创建一个名为“test.txt”的文本文件。
(2)创建目录:在Windows资源管理器中,创建一个名为“test”的目录。
(3)删除文件:选中“test.txt”文件,按Delete键删除。
(4)删除目录:选中“test”目录,按Delete键删除。
(5)修改文件:使用Notepad++打开“test.txt”文件,修改内容后保存。
(6)查询文件:在Windows资源管理器中,通过路径或搜索功能查找“test.txt”文件。
3. 文件系统的性能分析和优化方法(1)查看磁盘空间使用情况:在Windows资源管理器中,选中磁盘分区,查看磁盘空间使用情况。
(2)清理磁盘:使用Windows自带的磁盘清理工具清理磁盘垃圾文件。
(3)优化文件系统:使用Windows自带的磁盘碎片整理工具优化文件系统。
四、实验结果与分析1. 创建文件和目录实验结果显示,使用Notepad++创建了一个名为“test.txt”的文本文件,使用Windows资源管理器创建了一个名为“test”的目录。
2. 删除文件和目录实验结果显示,成功删除了“test.txt”文件和“test”目录。
3. 修改文件实验结果显示,使用Notepad++修改了“test.txt”文件的内容,并成功保存。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九章文件系统9.1 概述操作系统作为计算机最重要的系统软件必须提供数据存储、数据处理、数据管理的基本功能。
数据存储通常是以文件形式存放在磁盘或其他外部存储介质上,因此文件系统在操作系统中占有非常重要的地位。
为了同时支持多个文件系统,Solaris操作系统实现了一个虚拟的文件系统框架,并在此框架下实现了多个文件系统类型,例如UFS文件系统和NFS文件系统。
我们设计的文件系统实验分为四个部分:①观察Vnode和Inode数据结构,熟悉文件在操作系统内部的控制结构;②观察VFS文件系统cache,学习操作系统中文件系统缓存的设计;③观察UFS的文件数据在磁盘上的组织方式,了解文件系统真正的存储结构;④观察ZFS的文件数据在磁盘上的组织方式,了解Sun公司下一代文件系统的存储结构。
9.2 实验1:Vnode和Inode数据结构及缓存9.2.1 实验内容及目的为了更好地支持多种类型的文件系统,Solaris操作系统在设计上使用了一种特殊的结构:虚拟文件系统框架。
在虚拟文件系统中,操作系统内核通过vnode来识别每个活动文件,对于一个具体的文件系统,例如UFS,则是由Inode来识别具体的文件。
本实验的目的是观察Solaris操作系统内核中Vnode和Inode数据结构,了解它们之间的关系,同时学习使用mdb在内核中查找指定的数据结构。
9.2.2 预备知识Solaris操作系统通过VFS接口来使用文件系统,因此Solaris可以支持多个不同的文件系统,Vnode代表内核中一个活动文件,它定义了对文件操作的接口,并且将所有对文件的操作定向到相应的特定文件系统函数上。
对每一个活动文件、每一个目录和每一个安装的文件系统都分配唯一的Vnode。
Vnode代表内核中的一个文件,作为对象,它封装了文件的状态和对此文件执行的操作。
Vnode对象隐藏了每个具体文件系统对这些操作的实现,并将独立于文件系统的数据和对文件的操作暴露给内核的其他部分。
因此,Vnode (/usr/include/sys/vnode.h)包含三个重要元素(如图9-1所示):●独立于文件系统的数据------Vnode自身的信息,如类型(v_type)、状态标志(v_flags)、执行的文件系统、引用记数等。
●实现文件方法的函数------指向文件系统相关函数集的指针。
●特定文件系统数据-----指向具体文件系统的数据。
在UFS中,所有文件相关的信息都保存在一个称为Inode (/usr/include/sys/fs/ufs_inode.h)的索引节点中。
Inode节点有2种,一种保存在磁盘上,称为on-disk inode;另一种称为in-core inode,在某一具体文件被打开时在内核中创建。
Inode的结构如图9-2所示。
204 第9章图9-1 Vnode 数据结构图9-2 在in-core inode 中包含on-disk inode在图9-2中,struct icomon 就是on-disk inode ,它的大小是128字节。
当in-core inode 被创建的时候,on-disk inode 的信息被包含在其中(也就是struct icomon )。
实验的过程:打开一个磁盘文件,用mdb 在内核中通过进程控制块查找vnode 和相应的inode 。
9.2.3 实验步骤1)启动一个shell ,使用vi 编辑器生成文件/work/exp_design/test.txt ,内容为字符串“Thisis a___文件系统205file for UFS testing.”。
2)退出vi编辑器,使用命令#/usr/sfw/bin/gcc file_access.c编译生成可执行程序a.out。
3)运行“mdb -k”,进入内核模块调试程序。
4)启动另一个shell,运行./a.out。
The file descriptor returned is 3The data read from the file tis This is a5)切换回正在运行mdb的shell,获取进程a.out的地址:> ::ps!grep a.outR 843 804 843 804 0 0x42004000 ffffffff83d25dd8 a.outffffffff83d25dd8这个地址是proc类型的数据,也就是进程的pcb。
6)使用命令fd获得有关这个进程打开文件的file类型数据结构的地址。
> fffffffff83d25dd8::fd 3ffffffff84ldee387)打印出这个file数据结构的内容。
> ffffffff84ldee38::print struct file{f_tlock = {_opaque = [0]}f_flag = 0xlf_pad = 0xbaddf_vnode = 0xffffffff84181140f_offset = 0x9f_cred = 0xfffffff83a95bd0f_audit_data = 0f_count = 0x1}其中f_vnode就是这个文件的vnode地址。
8)打印出vnode结构的内容。
> ffffffff84181140::print struct vnode{v_lock = { _opaque = [ 0 ]}v_flag = 0x10000v_count = 0x2v_data = 0xfffffff8417f7a8v_vfsp = rootv_stream = 0v_type = 1 (VREG)v_rdev = 0xffffffffffffffffv_vfsmountedhere = 0206 第9章v_op = 0xffffffff80dda0c0v_pages = 0xfffffffffabbe0b0v_npages = 0v_msnpages = 0v_scanfront = 0v_scanback = 0v_filocks = 0v_shrlocks = 0v_nbllock = {_opaque = [ 0 ]}v_cv = {_opaque = 0}v_locality = 0v_femhead = 0v_path = 0xffffffff83ed8b88 “/work/exp_design/test/txt”v_rdcnt = 0x1v_wrcnt = 0v_mmap_read = 0v_mmap_write = 0v_mpssdata = 0v_scantime = 0v_mset = 0v_msflags = 0v_msnext = 0v_msprev = 0v_mslock = {_opaque = [0]}}从v_path可以看到,当前的Vnode节点就是我们所打开的文件/work/exp_design/test.txt。
9)Vnode结构中,v_data数据项就是当前Vnode下层的文件系统节点地址,因为我们打开的是一个UFS磁盘数据文件,所以这里指向的是一个内核Inode。
使用print 命令打印这个Inode节点的内容。
> ffffffff8417f7a8::print struct inode{ i_chain = [ 0xffffffff810721b0, 0xfffffff810721b0 ]i_freef = 0xffffffff8417f7a8i_freeb = 0xffffffff8417f7a8i_ic = {ic_smode = 0x8180ic_nlink = 0x1ic_suid = 0ic_sgid = 0ic_lsize = 0x2cic_atime = { tv_sec = 0x45f654f4tv_usec = 0xbe42e___文件系统207 }ic_mtime = {tv_sec = 0x45a71fa6tv_usec = 0x4fc3b}ic_ctime = {tv_sec = 0x45c14e2etv_usec = 0xbea5f}ic_db = [ 0x366745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]ic_ib = [ 0, 0, 0 ]ic_flags = 0ic_blocks = 0x2ic_gen = 0x1e6e850eic_ahadow = 0ic_uid = 0ic_gid = 0ic_oeftflag = 0}i_vnode = 0xffffffff84181140i_devvp = 0xffffffff80e51c40i_dev = 0x6600000000i_number = 0x6671bi_diroff = 0i_ufsvfs = 0xffffffff80e4e400i_dquot = 0i_rwlock = {_opaque = [ 0 ]}i_contents = {_opaque = [ 0 ]}i_tlock = {_opaque = [ 0 ]}i_nextr = 0x1000i_flag = 0x40i_seq = 0xffi_cachedir = 1 (CD_ENABLED)i_mapcnt = 0i_map = 0i_rdev = 0i_delaylen = 0i_delayoff = 0i_nextrio = 0x1000i_wrirtes = 0i_wrcv = {_opaque = 0}i_doff = 0xd8090d80i_ufs_acl = 0208 第9章i_danchor = {dca_dircache = 0dca_lock = {_opaque = [ 0 ]}}i_writer = 0}可以看到,Inode结构中有一项i_vnode指向对应的Vnode,i_ic指向on-disk inode。
9.3 实验2:观察VFS文件系统cache9.3.1 实验内容和目的由于文件系统设计大量的I/O操作,因此成为现代操作系统的一个性能瓶颈。
操作系统中改善文件系统性能的一个重要方法是设计文件系统cache。
本实验的目的是观察Solaris操作系统内核中VFS文件系统的文件数据cache、vnode/文件名cache(dnlc)/inode cache。
通过这个实验,我们可以学习文件系统的cache设计。
9.3.2 预备知识在Solaris操作系统内核中,所有的物理页都映射为vnode/offset对。
对于文件来说,如果一个文件的数据被操作系统读入内存,数据所存放的页和这个文件对应同一个vnode,offset则是物理页中数据在文件中的偏移。