




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-. z. . . . 资料 . .东北大学分校计算机与通信工程学院操作系统课程设计设计题目Linu*中的虚拟文件系统的分析专业名称计算机科学与技术班级*学生黎楠指导教师王翠荣设计时间2021年01月01日 2021年01月12日课程设计任务书专业:计算机科学与技术*:学生签名: 设计题目:Linu*中的虚拟文件系统的分析与进程管理器一、设计实验条件综合楼1208、1210实验室二、设计任务及要求Linu*中的虚拟文件系统的分析;进程管理器;三、设计报告的容设计题目与设计任务设计任务书题目一:Linu*中的虚拟文件系统的分析要求:虚拟文件系统(VFS)是物理文件系统与效劳之间的一个接口层。试说
2、明它与物理文件系统有何关系,以及VFS超级块地实现方法;题目二:进程管理器要求:在Linu*或Windows系统环境下,实现一个系统进程管理器,能够显示当前系统的活动进程信息进程名、用户、优先级、存使用等,并能完毕或创立特定进程。可参考Windows下“任务管理器功能。前言绪论(设计的目的、意义等)任何一个操作系统都是基于文件系统之上的,在Linu*操作系统中下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统,例如 e*t2,jffs 等。VFS处于文件系统的使用者与
3、具体的文件系统之间,将两者隔离开来。这种引入一个抽象层次的设计思想,即“上层不依赖于具体实现,而依赖于接口;下层不依赖于具体实现,而依赖于接口,就是著名的“依赖反转,它在 Linu*核中随处可见。所以对VFS与物理文件系统之间关系的分析以及VFS超级块的实现方法显得格外重要。而正是因为虚拟文件系统的存在,跨文件系统的文件操作才能得以实现。对虚拟文件系统的分析将有助于我们对Linu*文件系统的学习,同时对深入理解Linu*操作系统有很大帮助。设计主体各局部设计容、分析、结论等Linu*中的虚拟文件系统的分析【题目分析】虚拟文件系统Virtual File System, 简称 VFS, 是 Li
4、nu* 核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了核中的一个 抽象功能,允许不同的文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。VFS 支持的文件系统可以分为3 种类型:基于磁盘的文件系统、网络文件系统、特殊文件系统(虚拟文件系统)。为了能够支持各种实际文件系统,VFS 定义了所有文件系统都支持的根本的、概念上的接口和数据构造;同时实际文件系统也提供 VFS 所期望的抽象接口和数据构造,将自身的诸如文件、目录等概念在形式 上与VFS的定义保持一致。换句话说,一个实际的文件系统想要被 Linu* 支持,就必须提供一个符合VF
5、S标准的接口,才能与 VFS 协同工作。实际文件系统在统一的接口和数据构造下隐藏了具体的实现细节,所以在VFS 层和核的其他局部看来,所有文件系统都是一样的。图1VFS在核中与其他的核模块的协同关系【VFS与物理文件系统的关系】Linu* 的VFS 位于Linu* 整个文件系统的最上层,是一种软件机制,提供文件系统对用户命令、系统调用及核其他模块的统一接口,负责管理并控制下层的逻辑文件系统,使它们按照各自特定的模式正常运转,同时能够对用户提供尽可能一样的表现形式。VFS是物理文件系统与效劳之间的一个接口层,它对Linu*的每个文件系统的所有细节进展抽象,使得不同的文件系统在Linu*核心以及系
6、统中运行的进程看来都是一样的。严格的说,VFS并不是一种实际的文件系统。它只存在于存中,并没有真正存在于磁盘分区中,磁盘分区存放的是逻辑文件系统的容,所有VFS 的数据构造都是在系统启动之后才建立完成,并在系统关闭时撤销。同时,它必须和其他实际存在于磁盘的文件系统,比方Linu* 默认的e*t2 或者Windows NT 的NTFS 等逻辑文件系统一起,才能构成一个完整的文件系统。VFS 对逻辑文件系统进展抽象,采用统一的数据构造在存中描述所有这些文件系统,承受用户层的系统调用和核心层其他模块的,通过VFS 操作函数,按照一定的映射关系,把这些重新定向到逻辑文件系统中相应的函数调用,然后由逻辑
7、文件系统来完成真正的具体操作。这样,VFS 只负责处理设备无关的操作,主要是进展具体操作的映射关系。正是VFS的这种抽象的功能层次,保证了Linu* 系统可以支持多种不同的逻辑文件系统,所有文件系统都具有根本一样的外部表现,而且可以方便地进展相互。针对下层的逻辑文件系统,Linu* 系统中的VFS 为它们提供一致的接口,统一管理各种逻辑文件系统,包括进展文件系统的注册和注销、安装和卸载等,提供限额机制,对用户存储空间进展有效的控制。对文件操作进展适当的转换,转交由具体的逻辑文件系统进展处理,然后把具体的操作结果提供应上层的调用者。针对上层,VFS为用户层函数调用和核其他模块的提供 接口,承受并
8、返回由具体逻辑文件系统完成的结果。此外,VFS还负责管理文件系统的各种缓冲区,保证文件系统的整体效率。从本质上讲,文件系统是特殊的数据分层存储构造,它包含文件、目录和相关的控制信息。为了描述这个构造,Linu*引入了一些根本概念:文件 一组在逻辑上具有完整意义的信息项的系列。在Linu*中,除了普通文件,其他诸如目录、设备、套接字等 也以文件被对待。总之,“一切皆文件。目录 目录好比一个文件夹,用来容纳相关文件。因为目录可以包含子目录,所以目录是可以层层嵌套,形成 文件路径。在Linu*中,目录也是以一种特殊文件被对待的,所以用于文件的操作同样也可以用在目录上。目录项 在一个文件路径中,路径中
9、的每一局部都被称为目录项;如路径/home/source/helloworld.c中,目录 /, home, source和文件 helloworld.c都是一个目录项。索引节点 用于存储文件的元数据的一个数据构造。文件的元数据,也就是文件的相关信息,和文件本身是两个不同 的概念。它包含的是诸如文件的大小、拥有者、创立时间、磁盘位置等和文件相关的信息。超级块 用于存储文件系统的控制信息的数据构造。描述文件系统的状态、文件系统类型、大小、区块数、索引节 点数等,存放于磁盘的特定扇区中。如上的几个概念在磁盘中的位置关系如图4所示。图2磁盘与文件系统VFS依靠四个主要的数据构造和一些辅助的数据构造来
10、描述其构造信息,这些数据构造表现得就像是对象; 每个主要对象中都包含由操作函数表构成的操作对象,这些操作对象描述了核针对这几个主要的对象可以进展的操作。下列图就是逻辑上对VFS及其下层实际文件系统的组织图,可以看到用户层只能于VFS打交道,而不能直接实际的文件系统,比方E*T2、E*T3、PROC,换句话说,就是用户层不用也不能区别对待这些真正的文件系统,不过,SOCKET虽然也属于VFS的管辖围,但是有其特殊性,就是不能像翻开大局部文件系统下的“文件一样翻开socket,它只能被创立,而且核中对其有特殊性处理。图3逻辑上对VFS及其下层实际文件系统的组织图【超级块的实现方法】VFS描述文件系
11、统使用超级块和inode 的方式,所谓超级块就是对所有文件系统的管理机构,每种文件系统都要把自己的信息挂到super_blocks这么一个全局链表上。核中是分成2个步骤完成:首先每个文件系统必须通过register_filesystem函数将自己的file_system_type挂接到file_systems这个全局变量上,然后调用kern_mount函数把自己的文件相关操作函数集合表挂到super_blocks上。每种文件系统类型的读超级块的例程get_sb必须由自己实现。图4超级块的实现存储一个已安装的文件系统的控制信息,代表一个已安装的文件系统;每次一个实际的文件系统被安装时,核会从磁盘
12、的特定位置读取一些控制信息来填充存中的超级块对象。一个安装实例和一个超级块对象一一对应。 超级块通过其构造中的一个域s_type记录它所属的文件系统类型。VFS超级块是各种逻辑文件系统在安装时建立的,并在这些文件系统卸载时自动删除,它只存在于存中。VFS中保存了系统中挂接的文件系统的链表以及这些文件系统对应的VFS超级块。系统启动后所有被初始化的文件系统都要向VFS登记。每个已安装的文件系统由一个VFS 超块表示,它包含如下信息:Device:表示文件系统所在块设备的设备标志符。例如系统中第一个IDE 硬盘的设备标志符为0*301。Inode pointers:这个mounted inode指
13、针指向文件系统中第一个inode。而covered inode指针指向此文件系统安装目录的inode。根文件系统的VFS超块不包含covered指针。Blocksize:以字节记数的文件系统块大小,如1024 字节。Superblock operations:指向此文件系统一组超块操纵例程的指针。这些例程被VFS 用来读写inode和超块。File System type:这是一个指向已安装文件系统的file_system_type构造的指针。File System specific:指向文件系统所需信息的指针。一个超级块对应一个文件系统(已经安装的文件系统类型如e*t2,此处是实际的文件系统
14、)。之前我们已经说了文件系统用于管理这些文件的数据格式和操作之类的,系统文件有系统文件自己的文件系统,同时对于不同的磁盘分区也有可以是不同的文件系统。则一个超级块对应一个独立的文件系统,保存文件系统的类型、大小、状态等等。(“文件系统和“文件系统类型是不同的概念,一个文件系统类型下可以包括很多文件系统即很多的super_block)对于不同的文件系统有不同的super_block,对于不同的super_block的操作也是不同的,所以我们在下面的super_block构造中可以看到上面说的抽象的struct构造(例如下面的:struct super_operations):(linu*核2.4
15、.37)图5Struct super_operations解释字段:s_list:指向超级块链表的指针,这个struct list_head是很熟悉的构造了,里面其实就是用于连接关系的prev和ne*t字段。核中的构造处理都是有讲究的(核协议栈中也说过),核单独使用一个简单的构造体将所有的super_block都起来,但是这个构造不是super_block本身,因为本身数据构造太大,效率不高,所有仅仅使用structlist_head prev;list_head ne*t;这样的构造来将super_block中的s_list起来,则遍历到s_list之后,直接读取super_block这么长
16、的一个存块,就可以将这个super_block直接读进来!这样就很快捷方便!这也是为什么s_list必须放在第一个字段的原因。s_dev:包含该具体文件系统的块设备标识符。例如,对于/dev/hda1,其设备标识符为0*301s_blocksize:文件系统中数据块大小,以字节单位s_blocksize_bits:上面的size大小占用位数,例如512字节就是9 bitss_dirt:脏位,标识是否超级块被修改s_ma*bytes:允许的最大的文件大小(字节数)struct file_system_type *s_type:文件系统类型(也就是当前这个文件系统属于哪个类型.e*t2还是fat3
17、2)要区分“文件系统和“文件系统类型不一样!一个文件系统类型下可以包括很多文件系统即很多的super_block,后面会说!struct super_operations *s_op:指向*个特定的具体文件系统的用于超级块操作的函数集合struct dquot_operations *dq_op:指向*个特定的具体文件系统用于限额操作的函数集合struct quotactl_ops *s_qcop:用于配置磁盘限额的的方法,处理来自用户空间的请求s_flags:安装标识s_magic:区别于其他文件系统的标识s_root:指向该具体文件系统安装目录的目录项s_umount:对超级块读写时进展同
18、步s_lock:锁标志位,假设置该位,则其它进程不能对该超级块操作s_count:对超级块的使用计数s_active:引用计数s_dirty:已修改的索引节点inode形成的链表,一个文件系统中有很多的inode,有些inode节点的容会被修改,则会先被记录,然后写回磁盘。s_locked_inodes:要进展同步的索引节点形成的链表s_files:所有的已经翻开文件的链表,这个file和实实在在的进程相关的s_bdev:指向文件系统被安装的块设备u:u联合体域包括属于具体文件系统的超级块信息s_instances:具体的意义后来会说的!(同一类型的文件系统通过这个子墩将所有的super_bl
19、ock连接起来)s_dquot:磁盘限额相关选项super_block存在于两个链表中,一个是系统所有super_block的链表,一个是对于特定的文件系统的super_block链表。所有的super_block都存在于 super_blocks(VFS管理层) 链表中:图6超级块与VFS管理层链表对于特定的文件系统(文件系统层的具体文件系统), 该文件系统的所有的super_block 都存在于file_sytem_type中的fs_supers链表中;而所有的文件系统,都存在于file_systems链表中.这是通过调用register_filesystem接口来注册文件系统的。 int
20、 register_filesystem(struct file_system_type * fs)图7文件系统层的具体文件系统的超级块进程管理器【任务描述】在Windows系统环境下,实现一个系统进程管理器,能够显示当前系统的活动进程信息进程名、进程ID、优先级、线程数、存使用等,并能完毕或创立特定的进程。【源代码】Form1:using System;using System.Collections.Generic;using System.ponentModel;using System.Data;using System.Drawing;using System.Te*t;using
21、System.Windows.Forms;using System.Threading;using System.Diagnostics;using System.Management;namespace 进程管理器publicpartialclassForm1 : Form public Form1() Initializeponent();this.listView1.Columns.Add(进程名, 65, HorizontalAlignment.Center);this.listView1.Columns.Add(进程ID, 65, HorizontalAlignment.Center
22、);this.listView1.Columns.Add(线程数, 65, HorizontalAlignment.Center);this.listView1.Columns.Add(优先级, 65, HorizontalAlignment.Center);this.listView1.Columns.Add(占用存, 65, HorizontalAlignment.Center);this.listView1.View = System.Windows.Forms.View.Details; privatevoid getProcessInfo() try listView1.Items.
23、Clear();Process MyProcesses = Process.GetProcesses(); listView1.Items.Clear();Process AllProcesses = Process.GetProcesses();foreach (Process MyProcess in AllProcesses) ListViewItem item1 = newListViewItem(MyProcess.ProcessName + .e*e, 0); /映像名称/item1.Checked = true; item1.SubItems.Add(MyProcess.Id.T
24、oString(); /进程PID item1.SubItems.Add(MyProcess.BasePriority.ToString();/优先级 item1.SubItems.Add(MyProcess.Threads.Count.ToString();/线程数 item1.SubItems.Add(MyProcess.WorkingSet64 / 1024).ToString() + K);/存大小 listView1.Items.AddRange(newListViewItem item1 ); catch privatevoid Form1_Load(object sender,
25、EventArgs e) getProcessInfo(); privatevoid button1_Click(object sender, EventArgs e) listView1.Refresh(); getProcessInfo(); privatevoid button3_Click(object sender, EventArgs e) if (listView1.SelectedItems.Count = 0)return;ListViewItem items = listView1.SelectedItems0;string StrPro = items.Te*t; /获取
26、选中的进程名int pid = int.Parse(items.SubItems1.Te*t); /获取选中的进程的PIDProcess SelPro = newProcess();int flag = 0; /异常标志。如果 Process.GetProcessById(pid)出现异常,不执行完毕.try SelPro = Process.GetProcessById(pid); catch (ArgumentE*ception ae) flag+;MessageBo*.Show(ae.Message); if (0 = flag) if (DialogResult.OK = Messag
27、eBo*.Show(string.Format(确定要完毕进程 0 吗., StrPro), 提示, MessageBo*Buttons.OKCancel, MessageBo*Icon.Information) try SelPro.Kill(); /完毕进程 getProcessInfo(); /完毕进程后刷新listview catch (Win32E*ception ioe) /获取异常信息 MessageBo*.Show(ioe.Message); catch (InvalidOperationE*ception ioe) MessageBo*.Show(ioe.Message);
28、button1_Click(sender, e); privatevoid listView1_SelectedInde*Changed(object sender, EventArgs e) privatevoid button2_Click(object sender, EventArgs e) Form2 dlg = newForm2();if (dlg.ShowDialog() = DialogResult.OK) try Process.Start(dlg.FileName); catch (System.ponentModel.Win32E*ception) MessageBo*.
29、Show(String.Format(cant find the files 0,please make sure of the name of files then try again。n press start to search files, dlg.FileName); button1_Click(sender, e); Form2:using System;using System.Collections.Generic;using System.ponentModel;using System.Data;using System.Drawing;using System.Linq;
30、using System.Te*t;using System.Windows.Forms;using System.Management;namespace 进程管理器publicpartialclassForm2 : Form public Form2() Initializeponent(); StartPosition = FormStartPosition.CenterParent; privatevoid button1_Click(object sender, EventArgs e) DialogResult = DialogResult.OK; privatevoid button2_Click(object sender, EventArgs e) Dial
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 住宅水管安装合同标准文本
- ppp公路合同样本
- 买房垫资合同标准文本
- 个人租铺合同范例
- 个人木炭售卖合同标准文本
- 供热转包合同范例
- 公司车辆审代办合同标准文本
- 临时支座合同样本
- 休闲农场招租合同范例
- 个人房屋转让合同样本
- GB/T 4706.24-2024家用和类似用途电器的安全第24部分:洗衣机的特殊要求
- 6.2.2 直线的点斜式方程与斜截式方程-【中职】高一数学课件(高教版2021基础模块下册)
- 氧气瓶安全操作规程流程(15篇范文)
- 基于PLC的自动洗车控制系统设计-毕业论文
- 第二单元 音乐故事(二)-《大海与辛巴达的船》教学设计 2023-2024学年人教版初中音乐 九年级上册教案1000字
- 胰体尾切除术
- 光伏发电的现状及发展前景
- 2023-2024学年广东省广州市天河区八年级(下)期中数学试卷(含解析)
- MT-T 1199-2023 煤矿用防爆柴油机无轨胶轮运输车辆安全技术条件
- 安全生产目标考核表
- 第3课古代西亚非洲文化教学设计-高中历史选择性必修三
评论
0/150
提交评论