文件系统实验报告

合集下载

操作系统-第四次实验报告-文件系统

操作系统-第四次实验报告-文件系统
操作系统实验报告 文件系统
全部代码可执行
实验介绍
本实验要求在假设的I/O 系统之上开发一个简单的文件系统, 这样做既能让实验者对文 件系统有整体了解,又避免了涉及过多细节。用户通过create, open, read 等命令与文件系统 交互。文件系统把磁盘视为顺序编号的逻辑块序列,逻辑块的编号为0 至L-1。I/O 系统利 用内存中的数组模拟磁盘。 实际物理磁盘的结构是多维的:有柱面、磁道、扇区等概念。I/O 系统的任务是隐藏磁 盘的结构细节,把磁盘以逻辑块的面目呈现给文件系统。逻辑块顺序编号,编号取值范围为 0 至L -1,其中L 表示磁盘的存储块总数。实验中,我们可以利用字符数组ldisk[L][B] 构 建磁盘模型,其中B 表示每个存储块的长度。I/O 系统从文件系统接收命令,根据命令指定 的逻辑块号把磁盘块的内容读入命令指定的内存区域, 或者把命令指定的内存区域内容写入 磁盘块。内存区域内容写入磁盘块。
整体组织
注:我定义的文件系统中,磁盘分为两大部分:数据区和保留区。其中保留区中又包含位图区和文件 描述符区,数据区的首部是文件的目录项,也就是说,文件的目录项在文件创建时会创建相应的目录 项在数据区的文件首部;而位图区用于表征数据的占用情况,例如数据区的第 N 块被分配了,那么位 图区中也要做相应的改变。
struct filesign { int file_length; int filesign_flag; int file_block;
int file_block_ary[FILE_BLOCK_LENGTH]; }; struct contents { char filename[FILE_NAME_LENGTH];
文件的读 int read(int,int,int)

文件操作的实验报告

文件操作的实验报告

文件操作的实验报告1. 实验背景文件是计算机中存储数据的一种重要方式,在实际应用中,经常需要对文件进行读写与操作。

本实验旨在通过实际操作,掌握文件的打开、读写、复制和关闭等基本操作。

2. 实验内容本实验分为四个部分,分别是文件的打开、读写、复制和关闭操作。

2.1 文件的打开文件的打开是文件操作的第一步,通过打开文件可以获得对文件的访问权限。

在本实验中,我们使用Python语言进行文件操作。

下面是打开文件的示例代码:pythonfile = open("test.txt", "r")在上述代码中,"test.txt"是指要打开的文件名,"r"表示以只读方式打开文件。

如果需要以写入方式打开文件,可以使用"w"作为参数。

2.2 文件的读写文件的读写是文件操作的核心内容之一。

通过读取文件,可以获得文件中的内容;而通过写入文件,可以向文件中写入内容。

下面是读取文件内容和写入文件内容的示例代码:python读取文件内容content = file.read()写入文件内容file.write("Hello, World!")在上述代码中,`read()`函数用于从文件中读取所有内容,`write()`函数用于向文件中写入指定的内容。

2.3 文件的复制文件的复制是文件操作中常见的需求之一。

通过文件的复制,可以将一个文件的内容复制到另一个文件中。

下面是文件复制的示例代码:python打开源文件和目标文件source_file = open("source.txt", "r")target_file = open("target.txt", "w")读取源文件内容content = source_file.read()写入目标文件target_file.write(content)关闭文件source_file.close()target_file.close()在上述代码中,我们首先打开源文件和目标文件,然后读取源文件的内容并写入目标文件,最后关闭文件。

文件服务实验报告(3篇)

文件服务实验报告(3篇)

第1篇实验名称:文件服务系统设计与实现实验目的:1. 了解文件服务的概念和基本原理。

2. 掌握文件系统的设计方法和实现技巧。

3. 熟悉文件操作的编程实践。

4. 提高团队协作和问题解决能力。

实验时间:2023年X月X日实验地点:实验室实验人员:XXX、XXX、XXX实验环境:1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse4. 文件系统:本地文件系统一、实验背景随着信息技术的飞速发展,文件服务在日常生活中扮演着越来越重要的角色。

文件服务是指通过网络将文件存储、管理和共享的服务,它为用户提供了一种方便、高效的数据存储和交换方式。

本实验旨在设计和实现一个简单的文件服务系统,实现对文件的创建、读取、写入和删除等基本操作。

二、实验内容1. 文件服务系统需求分析(1)功能需求- 文件创建:用户可以创建新的文件。

- 文件读取:用户可以读取指定文件的全部内容。

- 文件写入:用户可以写入指定文件的内容。

- 文件删除:用户可以删除指定文件。

(2)性能需求- 系统响应时间:在正常情况下,系统对用户请求的响应时间应小于2秒。

- 系统并发处理能力:系统应能够同时处理多个用户请求。

2. 文件服务系统设计(1)系统架构文件服务系统采用C/S(客户端/服务器)架构,客户端负责用户界面和与用户的交互,服务器负责文件存储和管理。

(2)模块划分- 客户端模块:实现用户界面和与用户的交互。

- 服务器模块:实现文件存储、管理和共享。

- 文件管理模块:负责文件的创建、读取、写入和删除等操作。

3. 文件服务系统实现(1)客户端实现客户端采用Java Swing框架实现,包括以下功能模块:- 登录模块:用户输入用户名和密码进行登录。

- 文件操作模块:实现文件创建、读取、写入和删除等操作。

(2)服务器实现服务器采用Java Socket编程实现,包括以下功能模块:- 连接模块:负责与客户端建立连接。

- 文件管理模块:实现文件创建、读取、写入和删除等操作。

文件管理实验报告答案(3篇)

文件管理实验报告答案(3篇)

第1篇一、实验目的1. 理解文件管理的概念和作用。

2. 掌握文件系统的基本操作,如创建、删除、复制、移动等。

3. 学会使用文件管理工具,提高文件管理效率。

二、实验环境1. 操作系统:Windows 102. 文件管理工具:Windows资源管理器3. 实验设备:计算机三、实验内容1. 文件系统的基本概念文件系统是操作系统用来组织和管理文件的一种机制。

它主要包括以下内容:(1)文件:数据的基本单位,可以存储信息、程序等。

(2)目录:文件系统的组织单位,用于存放文件和子目录。

(3)路径:文件在文件系统中的位置,由目录名和文件名组成。

2. 文件系统的基本操作(1)创建文件:在指定目录下创建一个新的文件。

操作步骤:1)打开Windows资源管理器;2)找到要创建文件的目录;3)右键单击空白区域,选择“新建”;4)选择文件类型,如文本文档、Word文档等;5)输入文件名,点击“确定”。

(2)删除文件:删除指定的文件。

操作步骤:1)打开Windows资源管理器;2)找到要删除的文件;3)右键单击文件,选择“删除”;4)在弹出的确认对话框中点击“是”。

(3)复制文件:将文件从一个目录复制到另一个目录。

操作步骤:1)打开Windows资源管理器;2)找到要复制的文件;3)右键单击文件,选择“复制”;4)打开目标目录,右键单击空白区域,选择“粘贴”。

(4)移动文件:将文件从一个目录移动到另一个目录。

操作步骤:1)打开Windows资源管理器;2)找到要移动的文件;3)右键单击文件,选择“剪切”;4)打开目标目录,右键单击空白区域,选择“粘贴”。

3. 文件管理工具的使用(1)文件搜索:在文件系统中快速找到所需的文件。

操作步骤:1)打开Windows资源管理器;2)在地址栏输入文件名或部分内容;3)按Enter键或点击搜索按钮。

(2)文件预览:查看文件内容,如图片、文档等。

操作步骤:1)打开Windows资源管理器;2)找到要预览的文件;3)双击文件,系统会自动打开相应的应用程序进行预览。

最新文件管理实验报告

最新文件管理实验报告

最新文件管理实验报告
在本次实验中,我们对最新的文件管理系统进行了一系列的测试和评估。

实验的主要目的是验证该系统在处理大量文件时的效率、安全性以及用户体验。

以下是实验的主要发现和结论。

一、系统性能测试
1. 读写速度:通过对比不同大小文件的读写时间,我们发现该系统采用了优化的读写算法,显著提高了文件操作的速度。

2. 多任务处理能力:实验中模拟了多用户同时进行文件操作的场景,系统展现出良好的并发处理能力,无明显延迟现象。

二、安全性评估
1. 加密机制:系统内置了先进的加密算法,对存储的文件进行实时加密,有效防止了数据泄露。

2. 权限管理:通过设置不同的用户权限,系统能够精确控制文件的访问和操作权限,确保了数据的安全性。

三、用户体验分析
1. 界面设计:系统提供了直观的用户界面,使得文件管理变得简单易行,即使是非专业用户也能快速上手。

2. 搜索效率:系统具备强大的搜索功能,支持关键词、文件类型等多种搜索方式,大大提升了查找文件的效率。

四、问题与改进建议
1. 在处理超大型文件时,系统偶尔会出现性能下降的情况,建议进一步优化文件处理算法。

2. 尽管系统提供了基本的备份功能,但缺乏自动化和云同步的选项,建议增加这些功能以提高数据的可靠性。

综上所述,最新的文件管理系统在性能、安全性和用户体验方面均表现出色,但仍有改进空间。

我们期待开发团队能够根据这些反馈继续优化产品,以满足更广泛的用户需求。

操作系统实验-文件系统扩展实验报告

操作系统实验-文件系统扩展实验报告

实验报告要求1.实验名称:文件系统扩展实验2.实验要求:对【程序5_9】进行扩展,要求参数为目录名,且其下至少有三层目录,分别用深度遍历及广度遍历两种方法对此目录进行遍历,输出此目录下所有文件的大小及修改时间。

3.实验目的:(在实验过程中应用的操作系统理论知识)1.熟悉和应用深度优先和广度优先遍历算法2.熟练掌握linux 系统下关于文件系统的API3.掌握有关数据结构和指针的应用4.掌握使用gdb 调试的方法5.掌握实际运用中堆栈的内存分配4.实验内容:(为完成实验,如何进行程序设计)DFS:整体思路: 从所给的目录进入,按照reddir打开指针的顺序开始逐个遍历,遇到文件就按照规定格式输出信息。

遇到目录就对该目录进行DFS,之后返回上一级继续遍历。

当当前目录没有文件时返回流程图:重点部分: 重点是DFS 对退出循环和回溯时间点的把握。

这里退出循环的时间点是当前目录没有可读文件或者目录。

回溯时间点是当读到的文件为目录时,进入下一层DFS BFS:整体思路:利用队列,参考二叉树的层次遍历。

先将根目录入队,循环出队列。

进入目录后,当读取到文件时,输出信息;当读取到目录时,将目录入队,继续读取下一个文件;当当前目录的文件遍历完成时,退出此目录循环,从队列中弹出一个目录,再进入循环。

当队列为空时,退出。

流程图:重点部分: 1. 队列的建立,队列使用链表连接,存放字符串数据,要注意内存的分配和释放2.入队出队的时机;先将根目录入队,退出循环的条件为队列为空。

入队的条件为当前文件为目录。

出队的条件为一个目录遍历完毕。

5.程序:(较之已有程序有修改的、新增的程序段加下划线)#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<sys/types.h>#include<sys/stat.h>#include<dirent.h>#include<time.h>#include<string.h>#include<ctype.h>/*辅助函数输出文件的大小和最后修改时间*/static int get_file_size_time(const char *filename){struct stat statbuf;if(stat(filename,&statbuf)==-1) //取filename 的状态{printf("Get stat on %s Error:%s\n",filename,strerror(errno));return(-1);}if(S_ISDIR(statbuf.st_mode))return(1); //判断是否是目录文件if(S_ISREG(statbuf.st_mode)) //判断是否是普通文件printf("\t size:%ld bytes\t modifiedate: %s\n",statbuf.st_size,ctime(&statbuf.st _mtime)); //输出文件的大小和最后修改时间return(0);}/******************************** BFS 利用队列********************************************/// 在strcpy 指针前要先申请空间struct node {char* data;struct node* next;// struct node* pre;} *head,*tail,*tmp; // 头节点,尾节点,临时节点count++; }6.运行结果:(进行反白处理后截图)DFS:BFS7.实验总结:编程、调试过程中遇到的问题及解决办法。

实验四文件系统实验

实验四文件系统实验

实验四文件系统实验一. 目的要求1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。

从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

2、要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。

二. 例题:1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。

2、程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。

另外,为打开文件设置了运行文件目录(AFD)。

3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。

4、算法与框图:①因系统小,文件目录的检索使用了简单的线性搜索。

②文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。

③程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD)打开文件目录(AFD)(即运行文件目录)文件目录指针文件名··文件系统算法的流程图如下:三. 实验题:1、增加2~3个文件操作命令,并加以实现。

(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。

代码如下://1、增加2~3个文件操作命令,并加以实现。

(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。

#include<iostream>#include<string>#include<conio.h>using namespace std;struct TYPE_UFD{string File_Name;bool Read;bool Write;bool Execute;int Length_File;};struct TYPE_MFD{string User_Name;TYPE_UFD *Pointer;};struct TYPE_AFD{int File_ID;bool Read;bool Write;bool Execute;int Pointer;};class TYPE_FILE_SYSTEM{public:void Initial( void );void Start( void );private:int _Number_Users;int _Number_Files;int _MaxNumber_Open_Files;TYPE_MFD *_MFD;TYPE_UFD *_UFD;TYPE_AFD *_AFD;};void TYPE_FILE_SYSTEM::Initial( void ){_Number_Users = 10;_Number_Files = 10;_MaxNumber_Open_Files = 5;_UFD = new TYPE_UFD [_Number_Users*_Number_Files];_MFD = new TYPE_MFD [_Number_Users];int i=0;for( i=0 ; i<_Number_Users ; i++ ){_MFD[i].Pointer = &(_UFD[i*_Number_Files]);}_AFD = new TYPE_AFD [_MaxNumber_Open_Files];_MFD[0].User_Name = "zaq";_UFD[0].File_Name = "file1.txt";_UFD[0].Length_File = 10;_UFD[0].Read = true;_UFD[0].Write = false;_UFD[0].Execute = true;_UFD[1].File_Name = "file2.txt";_UFD[1].Length_File = 20;_UFD[1].Read = true;_UFD[1].Write = false;_UFD[1].Execute = false;for( i=2 ; i<_Number_Files ; i++ ){_UFD[i].File_Name = "";_UFD[i].Length_File = -1;_UFD[i].Read = false;_UFD[i].Write = false;_UFD[i].Execute = false;}}void TYPE_FILE_SYSTEM::Start( void ){int User_ID;int i,temp_int;string temp;char choice;int Number_Open_Files;string User_Name;string Command;TYPE_UFD *UFD;do{do{cout << "已创建用户名为zaq\n指令有:create delete open dir diropen write read logout shutdown \n\n";cout << "请输入用户名:";cin >> User_Name;for( User_ID=0 ; User_ID<_Number_Users ; User_ID++ ){if( _MFD[User_ID].User_Name == User_Name )break;}if( User_ID == _Number_Users )cout << "用户名错误,请再次输入." << endl;}while( User_ID == _Number_Users );cout << "欢迎登录, " << User_Name << " !" << endl;UFD = _MFD[User_ID].Pointer;for( i=0 ; i<_MaxNumber_Open_Files ; i++ ){_AFD[i].File_ID = -1;}Number_Open_Files = 0;do{cout << "C:\\" << User_Name << ">" ;cin >> Command;if( Command == "dir" ){cout << endl;cout << "打开用户" << User_Name <<"的文件" << endl;cout << "\t" << "State\t" << "Length\t" << "File name" << endl;for( i=0 ; i<_Number_Files ; i++ ){if( UFD[i].Length_File != -1 ){cout << "\t" ;if( UFD[i].Read == true )cout << "R";elsecout << "-";if( UFD[i].Write == true )cout << "W";elsecout << "-";if( UFD[i].Execute == true )cout << "E";elsecout << "-";cout << "\t";cout << UFD[i].Length_File;cout << "\t";cout << UFD[i].File_Name << endl;}}cout << endl;}else if( Command == "diropen" ){cout << endl;cout << "打开用户" << User_Name << "的文件"<<endl;cout << "\t" << "State\t" << "Open File name" << endl;for( i=0 ; i<_MaxNumber_Open_Files ; i++ ){if( _AFD[i].File_ID != -1 ){cout << "\t" ;if( _AFD[i].Read == true )cout << "R";elsecout << "-";if( _AFD[i].Write == true )cout << "W";elsecout << "-";if( _AFD[i].Execute == true )cout << "E";elsecout << "-";cout << "\t";cout << UFD[_AFD[i].File_ID].File_Name << endl;}}cout << endl;}else if( Command == "create" ){for( i=0 ; i<_Number_Files ; i++ )if( UFD[i].Length_File == -1 )break;if( i == _Number_Files )cout << "Error: 已有名为" << _Number_Files << " 的文件." << endl;else{cout << "请输入新文件信息:" << endl;cout << "文件名: ";cin >> temp;UFD[i].File_Name = temp;cout << "文件权限: ";cout << "Read (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )UFD[i].Read = true;elseUFD[i].Read = false;cout << endl;cout << "Write (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )UFD[i].Write = true;elseUFD[i].Write = false;cout << endl;cout << "Execute (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )UFD[i].Execute = true;elseUFD[i].Execute = false;cout << endl;cout << "Length :";cin >> temp_int;if( temp_int > 0 )UFD[i].Length_File = temp_int;cout << "新文件" << UFD[i].File_Name << " 已建立!" << endl;}}else if( Command == "delete" ){cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{UFD[i].Length_File = -1;cout << "文件" << UFD[i].File_Name << " 已删除." << endl;}}else if( Command == "open" ){if( Number_Open_Files == _MaxNumber_Open_Files )cout << "Error: 你已经打开了" <<Number_Open_Files << " 文件." << endl;else{cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{Number_Open_Files++;for( temp_int=0 ;temp_int<_MaxNumber_Open_Files ; temp_int++ )if( _AFD[temp_int].File_ID == -1 )break;_AFD[temp_int].File_ID = i;_AFD[temp_int].Pointer = 0;cout << "请定义打开方式:" << endl;if( UFD[i].Read == true ){cout << "Read (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )_AFD[temp_int].Read = true;else_AFD[temp_int].Read = false;cout << endl;}else_AFD[temp_int].Read = false;if( UFD[i].Write == true ){cout << "Write (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )_AFD[temp_int].Write = true;else_AFD[temp_int].Write = false;cout << endl;}else_AFD[temp_int].Write = false;if( UFD[i].Execute == true ){cout << "Execute (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )_AFD[temp_int].Execute = true;else_AFD[temp_int].Execute = false;cout << endl;}else_AFD[temp_int].Execute;cout << "文件" << temp << " 已打开." << endl;}}}else if( Command == "logout" ){cout << "再见, " << User_Name << " !" << endl;break;}else if( Command == "close" ){cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{for( temp_int=0 ;temp_int<_MaxNumber_Open_Files ; temp_int++ )if( _AFD[temp_int].File_ID == i )break;if( temp_int == _MaxNumber_Open_Files )cout << "文件" << temp << " 未打开." << endl;else{_AFD[temp_int].File_ID = -1;Number_Open_Files--;cout << "文件" << temp << " 已关闭." << endl;}}}else if( Command == "read" ){cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{for( temp_int=0 ;temp_int<_MaxNumber_Open_Files ; temp_int++ )if( _AFD[temp_int].File_ID == i )break;if( temp_int == _MaxNumber_Open_Files )cout << "文件" << temp << " 未打开." << endl;else{if( _AFD[temp_int].Read == true )cout << "文件" << temp << " 成功读取." << endl;elsecout << "Error: 文件打开模式错误." << endl;}}}else if( Command == "write" ){cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{for( temp_int=0 ;temp_int<_MaxNumber_Open_Files ; temp_int++ )if( _AFD[temp_int].File_ID == i )break;if( temp_int == _MaxNumber_Open_Files )cout << "文件" << temp << " 未打开." << endl;else{if( _AFD[temp_int].Write == true )cout << "文件" << temp << " 成功写入." << endl;elsecout << "Error: 文件打开模式错误." << endl;}}}else if( Command == "shutdown" ){cout << "正在注销........" << endl;cout << "再见, " << User_Name << " !" << endl;cout << "正在关机.........." << endl;break;}else{cout << "指令错误,请再次输入." << endl;}}while( Command != "logout" && Command != "shutdown" );}while( Command != "shutdown" );}int main(){TYPE_FILE_SYSTEM FS;FS.Initial();FS.Start();return 0;}2、编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信息,不需要打入冗长的命令。

2023年最新的操作系统文件管理实验报告三篇

2023年最新的操作系统文件管理实验报告三篇

2023年最新的操作系统文件管理实验报告三篇操作系统文件管理实验报告一篇一、实训主要内容Word排版,表格制作与编辑。

Powerpoint的制作,初步认识计算机办公应用OFFICE。

二、实训过程第一天:初步熟悉计算机的性能和认识Word;第二天:练习Word题;第三天:认识Powerpoint并对昨天的Word练习予以测试;Excel实训作业第四天:将Word表格与Powerpoint的制作熟悉巩固;第五天:老师再次对我们Word与Powerpoint测验以及教我们一些有用的技能与方法,初步认识计算机办公应用。

OFFICE。

三、实训心得体会很快的,一个假期又过来了,面对本学期最后一次的校园生活实训,想着刚刚过去的最后一个周,紧张沉默之后更多的是感慨,印在脑海里的每一个足迹都是那么的深,真的说不出是什么感觉,伴着时间,就像是在和自己的影子赛跑,不可能从真实的两面去看清它,只是经意不经意的感受着有种东西在过去,也许更适合的只有那句话:时不待我,怎可驻足一周,短短的一周,我学到了很多不知道的东西,实在是感受颇深。

当今企业竞争范围的伴随社会市场经济的发展以及信息化程度的不断提高而日益扩大,这样就要求企业在各个方面加强管理,要求企业有更高的信息化集成来实现对企业的整体资源进行集成管理。

现代企业都意识到,企业之间的竞争是综合实力的竞争,要求企业有更强的资金实力,具备强有力的管理能力和更快的市场响应速度。

因此,引入计算机系统的意义是非常重大的。

在社会主义市场经济高速发展的今天,如果计算机的各项管理运做仍然停滞在以纸、笔为主要工具的阶段,就会因为信息量的快速增长而无法迅速、准确的运用计算机完成各项工作,这样,必将成为企业各方面发展的一个瓶颈。

而在当代这个以信息时代为主题的社会里,计算机技术高速发展,将信息技术应用于对现代企业的管理日益普及。

计算机技术不但可以提高信息的处理速度和提高信息处理的准确性,更重要的是,可以进一步的解放劳动力,将他们分配到更需要人力资源的岗位上去,从而加快社会工作的现代化、综合化的发展步伐。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式系统实验报告(二)--嵌入式文件系统的构建138352019陈霖坤一实验目的了解嵌入式操作系统中文件系统的类型和作用了解JFFS2文件系统的优点及其在嵌入式系统中的作用掌握利用Busybox软件制作嵌入式文件系统的方法掌握嵌入式linux文件系统的挂载过程二实验内容与要求编译BusyBox,以BusyBox为基础,构建一个适合的文件系统;制作ramdisk文件系统映像,用你的文件系统启动到正常工作状态;研究NFS作为根文件系统的启动过程。

三Busybox介绍BusyBox最初是由Bruce Perens在1996年为Debian GNU/Linux安装盘编写的,其原始构想是希望在一张软盘上能放入一个开机系统,以作为急救盘和安装盘。

后来它变成了嵌入式Linux设备和系统和Linux发布版安装程序的实质标准,因为每个Linux可执行文件需要数Kb的空间,而集成两百多个程序的BusyBox可以节省大量空间。

Busybox集成了包括mini-vi编辑器、/sbin/init、文件操作、目录操作、系统配置等应用程序。

Busybox支持多种体系结构,可以选择静态或动态链接,以满足不同需要。

四linux文件系统文件系统是对一个存储设备上的数据和元数据进行组织的机制,linux文件系统接口设计为分层的体系结构,从而将用户接口层、文件系统实现层和操作存储设备的驱动程序分隔开。

在文件系统方面,linux可以算得上操作系统中的“瑞士军刀”。

Linux支持许多种文件系统,从日志型文件系统到集群文件系统和加密文件系统,而且对于使用标准的和比较奇特的文件系统以及开发文件系统来说,linux是极好的平台,这得益于linux内核中的虚拟文件系统(VFS,也称虚拟文件系统交换器)。

文件结构Windows的文件结构是多个并列的树状结构,不同的磁盘分区各对应一个树。

Linux的文件结构是单个的树,最上层是根目录,其它目录都从根目录生成。

不同的linux发行版集成的功能和界面不同,但文件系统的结构是统一的,一些标准的目录有:/bin二进制可执行命令/dev设备特殊文件/etc系统管理和配置文件/etc/rc.d启动的配置文件和脚本/home用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示/lib标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件/sbin系统管理命令,这里存放的是系统管理员使用的管理程序/tmp公用的临时文件存储点/root系统管理员的主目录(呵呵,特权阶级)/mnt系统提供这个目录是让用户临时挂载其他的文件系统。

/lost+found这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下*.chk)就在这里/proc虚拟的目录,是系统内存的映射。

可直接访问这个目录来获取系统信息。

/var某些大文件的溢出区,比方说各种服务的日志文件/usr最庞大的目录,要用到的应用程序和文件几乎都在这个目录。

其中包含:/usr/bin众多的应用程序/usr/sbin超级用户的一些管理程序/usr/include linux下开发和编译应用程序所需要的头文件/usr/lib常用的动态链接库和软件包的配置文件/usr/src源代码,linux内核的源代码就放在/usr/src/linux里/usr/local/bin本地增加的命令/usr/local/lib本地增加的库VFSLinux文件系统有两个特性,一个是对文件的操作可以跨文件系统执行,另一个是内核把对所有资源的操作都看做文件操作,不仅是普通文件、目录,还是字符设备、块设备,在linux中都是被当成文件看待。

实现这一特性的关键就是虚拟文件系统(Virtual File System),它是位于实际文件系统上方的一个软件层,使用户空间的程序能够利用这个接口控制不同的文件系统。

VFS有四个主要的数据结构,定义在源码目录的include/linux/fs.h和dcache.h下(只列举涉及整体架构的成员,其余成员限于篇幅不多做展开):superblock:超级块,存储一个已安装的文件系统的控制信息,代表一个已安装的文件系统;每次一个实际的文件系统被安装时,内核会从磁盘的特定位置读取一些控制信息来填充内存中的超级块对象。

一个安装实例和一个超级块对象一一对应。

结构体如下:struct super_block{//fs.h第1240行超级块结构struct list_head s_list;//指向超级块链表的指针......struct file_system_type*s_type;//文件系统类型struct super_operations*s_op;//超级块操作列表......struct list_head s_inodes;//所有节点......#ifdef CONFIG_SMPstruct list_head__percpu*s_files;#elsestruct list_head*s_files;//所有文件#endif......struct list_head s_instances;//同具有该类型文件系统的超级块......};......struct super_operations{//fs.h第1602行超级块操作结构......struct inode*(*alloc_inode)(struct super_block*sb);//该函数在给定的超级块下创建并初始化一个新的索引节点对象......void(*read_niode)(struct inode*);//该函数从磁盘上读取索引节点,并动态填充内存中对应的inode对象的剩余部分......};inode:索引节点,存储了文件的相关信息,代表了存储设备上的一个实际的物理文件。

当一个文件首次被访问时,内核会在内存中组装相应的索引节点对象,以便向内核提供对一个文件进行操作时所必需的全部信息;这些信息一部分存储在磁盘特定位置,另外一部分是在加载时动态填充的。

结构体如下:struct inode{//fs.h第527行节点结构......struct inode_operations*i_op;//索引节点操作表struct file_operations*i_fop;//该索引节点对应文件的文件操作集struct super_block*i_sb;//相关的超级块......};......struct inode_operations{//fs.h第1557行索引节点操作结构......int(*create)(struct inode*,struct dentry*,int,struct nameidata*);//该函数为dentry对象所对应的的文件创建一个新的索引节点,主要是由open()系统来调用struct dentry*(*lookup)(struct inode*,struct dentry*,struct nameidata*);//在特定目录中寻找dentry对象所对应的的索引节点......};dentry:目录项,比如路径/usr/src/linux-headers-3.8.0-33/include/linux/dcache.h,斜杠分隔开的每一项都是目录项,在这个例子中就是usr、src、linux-headers-3.8.0-33、include、linux、dcache.h,引入目录项的概念主要是出于方便查找文件的目的,VFS在遍历路径名的过程中现场将它们逐个解析成目录项。

不同于前面两个对象,目录项没有对应的磁盘数据结构。

结构体如下:struct dentry{//dcache.h第103行目录项机构......struct inode*d_inode;//相关的索引节点struct dentry*d_parend;//父目录的目录项struct qstr d_name;//目录项名字......struct lis_head d_subdirs;//子目录......struct dentry_operations*d_op;//目录项操作列表struct super_block*d_sb;//文件超级块......};......struct dentry_operations{//dcache.h第146行目录项操作结构int(*d_recalidate)(struct dentry*,struct nameidata*);//判断目录项是否有效int(*d_hash)(struct dentry*,struct qstr*);//为目录项生成散列值......};file:文件,是已打开的文件在内存中的表示,主要用于建立进程和磁盘上的文件的对应关系。

它由sys_open()现场创建,由sys_close()销毁。

文件对象和物理文件的关系有点像进程和程序的关系一样。

当我们站在用户空间来看待VFS,我们像是只需与文件对象打交道,而无须关心超级块,索引节点或目录项。

因为多个进程可以同时打开和操作同一个文件,所以同一个文件也可能存在多个对应的文件对象。

文件对象仅仅在进程观点上代表已经打开的文件,它反过来指向目录项对象(反过来指向索引节点)。

一个文件对应的文件对象可能不是惟一的,但是其对应的索引节点和目录项对象无疑是惟一的。

struct file{//fs.h第767行文件结构......struct list_head f_list;//文件对象链表struct dentry*f_dentry;//相关目录项对象struct vfsmount*f_vfsmnt;//相关的安装文件系统struct file_operations*f_op;//文件操作表......};......struct file_operations{//fs.h第1526行文件操作......ssize_t(*read)(struct file*,char__user*,size_t,loff_t*);//文件读操作......ssize_t(*write)(struct file*,const char__user*,size_t,loff_t*);//文件写操作......int(*readdir)(struct file*,void*,filldir_t);//读取目录......int(*open)(struct inode*,struct file*);//文件打开操作......};此外,VFS还关心两个比较重要的结构,向内核注册的文件系统和挂载的文件系统列表:struct file_system_type{//fs.h第1814行注册的文件系统类型const char*name;//文件系统类型名int fs_flags;......struct file_system_type*next;//指向下一个文件类型struct list_head fs_supers;//对应此文件类型的超级块};strruct vfsmoount{//mount.h第52行挂载的文件系统struct list_head mnt_hash;struct vfsmount*mnt_parent;struct dentry*mnt_mountpoint;struct dentry*mnt_root;struct super_block*mnt_sb;struct list_head mnt_mounts;struct list_head mnt_child;atomic_t mnt_count;int mnt_flags;char*mnt_devname;struct list_head mnt_list;};内核支持的文件系统类型在编译时建立,以file_system_type结构体的形式保存,结构体以next成员形成链表(哪怕系统中没有该文件系统的分区),其中fs_supers成员保存了具有本文件系统类型的超级块列表。

相关文档
最新文档