当前位置:文档之家› 实验四 ramdisk 根文件系统的制作

实验四 ramdisk 根文件系统的制作

实验四 ramdisk 根文件系统的制作
实验四 ramdisk 根文件系统的制作

实验四ramdisk根文件系统的制作

一.实验目的

1.熟悉根文件系统组织结构;

2.定制、编译ramdisk根文件系统。

二.实验设备

1.硬件:EduKit-IV 嵌入式教学实验平台、Mini2410 核心子板、PC 机;

2.软件:Windows 2000/NT/XP、Ubuntu 8.04、其他嵌入式软件包。

三.实验内容

利用6.3 中的已经完成的文件系统,生成一个根文件系统镜像。

四.实验原理

ramdisk是内核初始化的时候用到的一个临时文件系统,是一个最小的linuxrootfs系统,它包含了除内核以外的所有linux系统在引导和管理时需要的工具,做为启动引导驱动,包含如下目录:

bin,dev,etc,home,lib,mnt,proc,sbin,usr,var。还需要有一些基本的工具:sh,ls,cp,mv……(位于/bin 目录中);必要的配置文件:inittab,rc,fstab……位于(/etc目录种);必要的设备文件:/dev/tty*,/dev/console,/dev/men……(位于/dev目录中);sh,ls等工具必要的运行库:glibc。1.制作ramdisk根文件系统映像

1)单击菜单应用程序->附件->终端打开终端,设置环境变量:

$ source /usr/local/src/EduKit-IV/Mini2410/set_env_linux.sh

$ source /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/path.sh

2)执行命令切换到ramdisk实验目录下:

$cd $SIMPLEDIR/6.4-ramdisk

3)运行脚本文件:

$ sudosh ramdisk-install.sh

shell 脚本命令说明:

#!/bin/bash

#

# ramdisk-install.sh - Make ramdiskfilesystem.

#

# Copyright (C) 2002-2007

# Created. lusi

sudodd if=/dev/zero of=ramdiskbs=1M count=2

......

sudogzip -v9 ramdisk

sudochmod 777 ramdisk.gz

sudormdir temp

sudocp -av ramdisk.gz /home/example

创建一个空的ramdisk镜像:

sudodd if=/dev/zero of=ramdiskbs=1M count=2

用dd命令建立了一个名为ramdisk的ramdisk基本文件;ramdisk image 文件名为ramdisk,

大小为2M。

格式化文件系统:

sudo echo "y" | sudo mke2fs -m 0 -N 3500 ramdisk

挂载文件系统:

sudomkdir -p temp

sudo mount -o loop ramdisk temp

拷贝 6.3 节中已经创建好的文件结构到temp 文件夹:

sudocp -av root-mini/* temp/

卸载;

sudoumount temp

生成压缩文件;

sudogzip -v9 ramdisk

修改root-mini.gz 的执行权限;

sudochmod 777 ramdisk.gz

删除临时文件夹ramdisk,拷贝生成的ramdisk根文件系统映像到home/example 目录。

sudormdir temp

sudocp -av ramdisk.gz /home/example

2.固化引导ramdisk文件系统

用户可以根据前面章节内容(章节4.6.1)更新刚制作生成的ramdisk.gz 到Mini2410-IV 的NandFlash中,或者在Ubuntu 下采用minicom终端更新。使用minicom固化ramdisk文件系统映像的方法跟前节固化vivi映像的步骤相似,启动vivi后,输入命令使用xmodem协议来传送新制作好的ramdisk文件系统映像ramdisk.gz(/home/example/ramdisk.gz):

vivi> load flash ramdisk x

后面的步骤参考前节vivi的传送,仅需要把需要传送的文件名替换为mdisk.gz

即可,传送完毕minicom串口终端打印信息如下:

图6-4-1 ramdisk映像传送完毕

重启实验系统,并按空格进入到vivi的命令行界面,输入命令修改vivi启动参数为引导ramdisk根文件系统启动:

vivi>param set ramdisk_copy 1

vivi>param set linux_cmd_line "initrd=0x30800000,0x200000 root=/dev/ram

console=ttySAC1"

vivi>param save

重新启动实验系统,将可以在minicom终端看到ramdisk文件系统的完成信息:VIVI version 0.1.4 (embest@ embest -laptop) (gcc version 2.95.3 20010315 (release)) #TMMU table base address = 0x33DFC000

Succeed memory mapping.

NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V0M)

Could not found stored vivi parameters. Use default vivi parameters.

Press Return to start the LINUX now, any other key for vivi

Copy linux kernel from 0x00030000 to 0x30008000, size = 0x001d0000 ... size = 14

done

zImage magic = 0x016f2818

Copy ramdisk from 0x00200000 to 0x30800000, size = 0x00200000 ... size = 2097152

done

Setup linux parameters at 0x30000100

linux command line is: "initrd=0x30800000,0x200000 root=/dev/ram console=ttySAC"

MACH_TYPE = 193

NOW, Booting Linux......

Uncompressing Linux.............................................................

……

Bluetooth: Core ver 2.7

NET: Registered protocol family 31

Bluetooth: HCI device and connection manager initialized

Bluetooth: HCI socket layer initialized

S3C2410 DMA Driver, (c) 2003-2004 Simtec Electronics

DMA channel 0 at c4800000, irq 33

DMA channel 1 at c4800040, irq 34

……

Bluetooth: L2CAP socket layer initialized

Bluetooth: RFCOMM ver 1.5

Bluetooth: RFCOMM socket layer initialized

Bluetooth: RFCOMM TTY layer initialized

Bluetooth: BNEP (Ethernet Emulation) ver 1.2

Bluetooth: BNEP filters: protocol multicast

802.1Q VLAN Support v1.8 Ben Greear

All bugs added by David S. Miller

RAMDISK: Compressed image found at block 0

EXT2-fs warning: maximal mount count reached, running e2fsck is recommended VFS: Mounted root (ext2 filesystem).

Mounted devfs on /dev

Freeing init memory: 420K

init started: BusyBox v1.4.2 (2008-05-28 09:24:20 CST) multi-call binary Starting pid 762, console /dev/console: '/etc/init.d/rcS'

Please press Enter to activate this console.

Starting pid 772, console /dev/console: '/bin/sh'

running /etc/profile

~#

实验三 文件系统实验

实验三文件系统实验 一.目的要求 1. 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 2. 要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 二.例题: ●设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行 用户可以打开5个文件。 ●程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。 另外,为打开文件设置了运行文件目录(AFD)。 ●为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读 写指针,并不进行实际的读写操作 ●算法与框图: 1.因系统小,文件目录的检索使用了简单的线性搜索。 2.文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位 为0,则表示不允许读写、执行。 3.程序中使用的主要设计结构如下: ●主文件目录和用户文件目录(MFD、UFD) ●打开文件目录(AFD)(即运行文件目录) MDF: (1)用户名 (2)文件目录指针 (3)用户名 (4)文件目录指针 UFD (1)文件名

(2)保护码 (3)文件长度 (4)文件名 AFD (1)打开文件名 (2)打开保护码 (3)读写指针 文件系统算法的流程图如下:

三.实验题: 1.增加2~3个文件操作命令,并加以实现。(如移动读写指针,改变文件属性, 更换文件名,改变文件保护级别)。 2.编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信 息,不需要打入冗长的命令。 3.设计一个树型目录结构的文件系统,其根目录为root,各分支可以是目录, 也可以是文件,最后的叶子都是文件。 4.根据学校各级机构,编制一文件系统。

实验六 文件系统设计结果

实验六文件系统设计 1.目的和要求 本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。 2.实验内容 为DOS系统设计一个简单的二级文件系统,可以实现下列几条命令DIR 列文件目录 CREATE 创建文件 DELETE 删除文件 MODIFY 修改文件 OPEN 打开文件 CLOSE 关闭文件 列目录时要列出文件名,物理地址,保护码和文件长度。 3.实验环境 ①PC兼容机 ②Windows、DOS系统、Turbo c 2.0 ③C语言 4.实验提示 ①首先应确定文件系统的数据结构:主目录、活动文件等。主目录文件的形式存放于磁盘,这样便于查找和修改。 主目录结构: Ufdname 用户名 Ufdfile 指向用户的活动文件 活动文件结构: Fpaddr 文件物理地址 Flength 文件长度 Fmode 文件属性(file mode:0-Read Only;1-Write Only;2-Read and Write(default)) Fname 文件名称 ②用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2…并

以编号作为物理地址,在目录中进行登记。

③本程序需要在c:下建一个名为osfile的目录及一个名为file的子目录,在利用程序创建了文件系统后,可以在这个文件夹下查看到相关的内容。5.实验程序 #include "stdio.h" #include "string.h" #include "conio.h" #include "stdlib.h" #define MAXNAME 25 /*the largest length of mfdname,ufdname,filename*/ #define MAXCHILD 50 /*the largest child*/ #define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/ typedef struct /*the structure of OSFILE*/ { int fpaddr; /*file physical address*/ int flength; /*file length*/ int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write(default);*/ char fname[MAXNAME]; /*file name*/ } OSFILE; typedef struct /*the structure of OSUFD*/ { char ufdname[MAXNAME]; /*ufd name*/ OSFILE ufdfile[MAXCHILD]; /*ufd own file*/ }OSUFD; typedef struct /*the structure of OSUFD'LOGIN*/ { char ufdname[MAXNAME]; /*ufd name*/ char ufdpword[8]; /*ufd password*/ } OSUFD_LOGIN; typedef struct /*file open mode*/ { int ifopen; /*ifopen:0-close,1-open*/ int openmode; /*0-read only,1-write only,2-read and write,3-initial*/ }OSUFD_OPENMODE; OSUFD *ufd[MAXCHILD]; /*ufd and ufd own files*/ OSUFD_LOGIN ufd_lp;

文件系统实验报告

嵌入式系统实验报告(二) --嵌入式文件系统的构建 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发行版集

(完整版)linux文件系统管理-权限管理实验4报告

实验报告 课程Linux系统应用与开发教程实验名称linux文件系统管理-权限管理(高级设置) 一、实验目的 1、掌握Linux文件系统权限的设置 2、掌握linux用户帐号与组管理 3、掌握linux 文件共享的设置方法 4、掌握linux 文件共享的权限设置方法 二、实验内容 1、使用root帐号通过系统提供的6个虚拟控制台登陆到linux,或在x-windows开启一个终端。 2、完成以下的实验内容 (1)、假设你是系统管理员:现要在公司linux服务器系统中新增一些用户与一个用户组。 ?使用groupadd account 添加一个名为account的组 ?使用useradd -G account acc-user1,(该命令将添加一个用户名为acc-user1的用户, 同时会建立一个与用户名同名的私有组(该私有组为用户的默认组,这个组中只有一个用户名),并把该用户将加入account的标准组,同时,按同样的方法建立acc-user2、acc-user3、acc-user4。 ?建立用户后,请使用x-window中的用户与组管理工具查看用户与组建立情况,检查用户与组的归属情况。 (2)、开启多个控制台,分别使用acc-user1、acc-user2、acc-user3登陆系统(可以在控制台分别登陆,也可以在X-windows中多开几个终端程序,默认使用root登陆,然后使用su命令通过切换用户的方式登陆,其语法为“su - user-name”,提示可以在登陆成功后运行命令“id”查看当前登陆的用户属于哪些组,当前的默认组是什么?) (3)、为account组建立一个公共共享目录/home/account-share,满足以下的权限设定要求,以及设置何种的umask: ?该目录的拥有者为acc-user1,所属组为account。 ?在该目录下建立一个/home/account-share/full-share的子目录,修改该目录的权限,使得account组的成员均能在对该目录有完全控制权限,account组外的其他用户没有任何权限,即account组的成员都可以在该目录下建立文件,同时在该子目录full-share下建立的文件,只有文件建立者有权限删除,并且每个用户在该子目录full-share下建立的文件也能自动与该account组成员可读共享。 ?在/home/account-share/为每个用户建立一个与用户名同名的子目录(如/home/account-share/acc-user1为用户acc-user1的目录,其拥有者为acc-user1,所在的组为account),配置该子目录的拥有者有完全控制权限,而同组用户只能读取,同时在用户在该目录下建立的文件,可供同组用户读。 (4)、考虑完成以上的共享目录权限设置,应注意哪些设置。包括目录的权限,目录的拥有者,目录所在的组,具体文件的权限,umask设置等。 (5)、实验报告应体现出使用不同身份的用户对所配置目录的访问测试过程。 三、实验环境 安装有vmware或visual pc软件的window主机,系统中有提供turbolinux或redhat的硬盘

实验四 文件系统实验

实验四文件系统实验 一 . 目的要求 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个文件操作命令,并加以实现。(如移动读写指针,改变文件属 性,更换文件名,改变文件保护级别)。 #include #include #include #define getpch(type) (type*)malloc(sizeof(type)) int userNum=0; struct mdf {

Linux文件系统实验

实验编号与实验名称: 文件系统实验 实验目的: 熟悉文件和目录的基本操作;了解Linux的/proc文件系统 实验内容及要求(详见实验讲义与实验指导书): 内容: 1)在/usr目录下创建一个目录usr_test和文本文件test,并建立一个test文件的链接 test02。通过修改test文件中的内容查看test和test02中内容的情况,并分析原因。 2)编写程序,从/proc文件中抽取内核参数(任意的2个参数即可,如CPU时钟速度信 息等) 3)实现文件的拷贝,即把一个文件内容复制到另一个文件 要求: 对于内容1),给出操作步骤和结果分析,需回顾第二次实验中练习过的Shell命令和教材中的文件和目录操作系统调用 对于内容2)和3)给出完整C语言代码或者代码截图和代码执行结果,可参考本文件“实验预读”中相关内容和教材P.149/266图4-5相关代码 实验用到的软件(:) VMware 实验内容及关键步骤(代码)Q2(60分) 1)在/usr目录下创建一个目录usr_test和文本文件test,并建立一个test文件的链接 test02。通过修改test文件中的内容查看test和test02中内容的情况,并分析原因。

分析:在linux系统中通过link连接就可以通过第三方的查询,通过link函数后test01被绑定给test02中,所以可以通过test02去查询。 2.编写程序,从/proc文件中抽取内核参数(任意的2个参数即可,如CPU时钟速度信息等)

3.实现文件的拷贝,即把一个文件内容复制到另一个文件

实验过程中遇到的问题解决办法与实验体会Q3(10分)得分: 评阅教师特殊评语: 评阅教师: 日期:

操作系统实验5文件系统:Linux文件管理

实验5 文件系统:Linux文件管理 1.实验目的 (1)掌握Linux提供的文件系统调用的使用方法; (2)熟悉文件和目录操作的系统调用用户接口; (3)了解操作系统文件系统的工作原理和工作方式。 2.实验内容 (1)利用Linux有关系统调用函数编写一个文件工具filetools,要求具有下列功能:*********** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 复制文件 5. 修改文件权限 6. 查看文件权限 7. 创建子目录 8. 删除子目录 9. 改变当前目录到指定目录 10. 链接操作 *********** 代码: #include #include #include #include #include #include #include #include void menu(void); void openfile(void); void writefile(void); void readfile(void); void copyfile(void); void chmd(void); void ckqx(void); void cjml(void); void scml(void); void ggml(void); void ylj(void); int main() { int choose; int suliangjin=1;

menu(); scanf("%d",&choose); while(choose!=0) { switch(choose) { case 1:openfile();break; case 2:writefile();break; case 3:readfile();break; case 4:copyfile();break; case 5:chmd();break; case 6:ckqx();break; case 7:cjml();break; case 8:scml();break; case 9:ggml();break; case 10:ylj();break; } menu(); scanf("%d",&choose); } return 0; } void menu(void) { printf("文件系统\n"); printf("1.创建新文件\n"); printf("2.写文件\n"); printf("3.读文件\n"); printf("4.复制文件\n"); printf("5.修改文件权限\n"); printf("6.查看文件权限\n"); printf("7.创建子目录\n"); printf("8.删除子目录\n"); printf("9.改变目前目录到指定目录\n"); printf("10.链接操作\n"); printf("0.退出\n"); printf("请输入您的选择...\n"); } void openfile(void) { int fd; if((fd=open("/tmp/hello.c",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");

Linux文件系统实验报告

黄冈师学院 提高型实验报告 实验课题文件系统的设计与实现(实验类型:□综合性 设计性□应用性) 实验课程操作系统原理 实验时间2015-2016 第二学期 学生何正发 专业班级软件工程1401 学号07

成绩: 一、实验目的和要求 1、熟悉操作系统设计的过程,巩固操作系统的基本知识,加深对操作原理、功能及各种不同的存储管理方法理解与应用; 2、学会运用各种语言、软件开发新软件的基本方法; 3、增强实际应用能力和动手操作能力。 二、实验条件 Win7 /Windows 8.1/Linux等操作系统,装有java、C、C++、C#等语言工具的环境。 三、实验原理分析 可以选择最佳适应算法,按照从小到大的次序组成空闲区自由链,当用户作业或进程申请一个空闲区时,存储管理 程序从表头开始查找,当找到第一个満足要求的空闲区时,停止查找。如果该空闲区大于请求表中的请求长 度,将减去请求长度后的剩余空闲区部分留在可用表中。回收时,从作链中删去要回收的作业块,同时在空 闲链中插入该作业大小的空闲区,并按顺序排列 四、实验方案或步骤 1、应用环境、需求分析 本模拟系统主要针对文件的管理和操作名主要有:创建用户、文件、文件夹,读文件,写文件,执行文件,关闭文件,删除用户、文件夹、文件的功能。 创建用户、文件、文件夹:在对系统发出操作命令之前必须先登录用户,然而登录之前必须创建该用户。在创建完后,可通过登录用户来创建文件和文件夹。在创建文件时可设置文件的属性和输入文件的容。 读文件:读取任何已创建的只读或读写文件的容;如果所要读的文件不是可读文件时,系统会显示该文件不可读;如果所读文件不存在,系统会显示文件不存在。 写文件用户可写或重写读写文件中的容,并保存文件中的重写容,以供下次读取;当所要写的文件不是可写的文件时,系统会显示该文件不可写;当所要写的文件并不存在时,系统会显示该文件不存在。

文件系统实验报告

实验二文件系统实验报告

一.实验简介 本实验要求在假设的I/O 系统之上开发一个简单的文件系统,这样做既能让实验者对文件系统有整体了解,又避免了涉及过多细节。用户通过create, open, read 等命令与文件系统交互。文件系统把磁盘视为顺序编号的逻辑块序列,逻辑块的编号为0 至L-1。I/O 系统利用内存中的数组模拟磁盘。 实际物理磁盘的结构是多维的:有柱面、磁道、扇区等概念。I/O 系统的任务是隐藏磁盘的结构细节,把磁盘以逻辑块的面目呈现给文件系统。逻辑块顺序编号,编号取值范围为0 至L .. 1,其中L 表示磁盘的存储块总数。实验中,我们可以利用字符数组ldisk[L][B] 构建磁盘模型,其中 B 表示每个存储块的长度。I/O 系统从文件系统接收命令,根据命令指定的逻辑块号把磁盘块的内容读入命令指定的内存区域,或者把命令指定的内存区域内容写入磁盘块。 我设计的文件系统拥有三个用户。 二.具体说明 1.文件系统的组织:磁盘的前k 个块是保留区,其中包含如下信息:位图和文件描述符。位图用来描述磁盘块的分配情况。位图中的每一位对应一个逻辑块。创建或者删除文件,以及文件的长度发生变化时,文件系统都需要进行位图操作。前k 个块的剩余部分包含一组文件描述符。每个文件描述符包含如下信息: ?文件长度,单位字节 ?文件分配到的磁盘块号数组。该数组的长度是一个系统参数。在实验中我们可以把它设置为一个比较小的数,例如3。 2.目录:我们的文件系统中仅设置一个目录,该目录包含文件系统中的所有文件。除了不需要显示地创建和删除之外,目录在很多方面和普通文件相像。目录对应0 号文件描述符。初始状态下,目录中没有文件,所有,目录对应的描述符中记录的长度应为0,而且也没有分配磁盘块。每创建一个文件,目录文件的长度便增加一分。目录文件的内容由一系列的目录项组成,其中每个目录项由如下内容组成: ?文件名 ?文件描述符序号 3.对文件的操作: 文件系统需提供如下函数;create, destroy, open, read, write。 ?create(filename): 根据指定的文件名创建新文件。 ?destroy(filename): 删除指定文件。 ?open(filename): 打开文件。该函数返回的索引号可用于后续的read, write, lseek, 或close 操作。 ?close(index): 关闭制定文件。 ?read(index, mem_area, count): 从指定文件顺序读入count 个字节mem_area 指定的内存位

FAT文件系统操作系统课程设计实验报告

操作系统课程设计之三 设计任务:模拟OS文件系统 在任一OS(Window或者Dos;也可以是在Linux下,但要求能将结果演示给老 师看)下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟OS 字 ,第 ⑤、每个目录实际能放下文件或子目录30项。 ⑸、文件系统空间分配: ①、第0个盘块(1k)存放磁盘信息(可以设定为格式说明“FAT32”、盘块大小,盘块数等 内容) ②、第1个盘块起,至125盘块,共125个盘块(125k)存放FAT内容 ③、第126、127(2个)盘块,存放位示图

④、从第128盘块至10000盘块,皆为数据(区)盘块,其逻辑编号从0开始,至 9872号数据盘块,即第0数据盘块为128号盘块,第1数据盘块为129号盘块,… ⑤、第0数据盘块(即128号盘块),存放根目录(同样只用一个盘块作根目录), 由于第0、1目录项为“.”(本目录), “..”(父目录),因此根目录下同样只能存放30个文件或目录,并且从第2个目录项开始。 ⑥、文件或子目录数据,放在第1数据盘块及以后的数据盘块中,由用户按需要使 用。 内容 ⑺、删除文件 #DelFile 文件名.扩展名,在文件所在的目录项中,将第一个字节变为0xE5,并同时修改FAT内容和位示图内容;如果文件不存在,给出出错信息 ⑻、文件拷贝 #CopyFile 老文件,新文件,为新文件创建一个目录项,并将老文件内容复制到新文件中,并同时修改FAT内容和位示图内容 ⑼、显示位示图内容

#ShowBitMP,将位示图内容(已有信息部分),显示在屏幕上(按十六进制)⑽、显示FAT内容 #ShowFAT,将FAT内容(已有信息部分),显示在屏幕上(按十六进制) 4、程序的总体流程为: ⑴、输出提示符#,等待接受命令,分析键入的命令; ⑵、对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令 关于对FAT表和MAP表的用法 1.当要用到数据块是,查询MAP表(因为只做比较查询即可),查询到的未用位置 置1,然后在FAT表上进行相应记录,在本程序做出的规定是,当文件夹FAT 表做-1,若是文件则按照FAT做对应的顺序记录,最后一块同样是-1结束,2.回收的时候,是按照FAT表的首项,做顺序置0,然后MAP也在相应位置置0

实验5添加一个文件系统

实验5 添加一个文件系统 实验目的 文件系统是操作系统中最直观的部分,因为用户可以通过文件直接地和操作系统交互,操作系统也必须为用户提供数据计算、数据存储的功能。本实验通过添加一个文件系统,进一步理解Linux中的文件系统原理及其实现。 深入理解操作系统文件系统原理 学习理解Linux的VFS文件系统管理技术 学习理解Linux的ext2文件系统实现技术 设计和实现自定义文件系统 实验内容 添加一个类似于ext2的自定义文件系统myext2。实验主要内容: 添加一个和ext2完全相同的文件系统myext2 修改myext2的magic number 修改文件系统操作 添加文件系统创建工具 实验指导 1. 问题描述

本实验的内容是要添加一个类似于ext2的自定义文件系统myext2。myext2文件系统的描述如下: 1、myext2文件系统的物理格式定义与ext2基本一致,除了myext2的magic number 是0x6666,而ext2的magic number是0xEF53。 2、myext2是ext2的定制版本,它只支持原来ext2文件系统的部分操作,以及修改了部分操作。 2. 实验步骤 提示:下面的操作步骤以3.6.6版本的内核为例,2.6.15版本的内核请参照教材,其它版本内核可能会有所区别。 2.1 添加一个和ext2完全相同的文件系统myext2 要添加一个与ext2完全相同的文件系统myext2,首先是确定实现ext2文件系统的内核源码是由哪些文件组成。Linux源代码结构很清楚地告诉我们:fs/ext2目录下的所有文件是属于ext2文件系统的。再检查一下这些文件所包含的头文件,可以初步总结出来Linux 源代码中属于ext2文件系统的有: fs/ext2/acl.c fs/ext2/acl.h fs/ext2/balloc.c fs/ext2/bitmap.c fs/ext2/dir.c

实验二--文件系统及磁盘管理

实验二文件系统及磁盘管理 1.文件系统管理 一、实验目的 ●掌握Linux下文件系统的创建、挂载与卸载。 ●掌握文件系统的自动挂载。 二、项目背景 某企业的Linux服务器中新增了一块硬盘/dev/sdb,请使用fdisk命令新建/dev/sdb1主分区和/dev/sdb2扩展分区,并在扩展分区中新建逻辑分区/dev/sdb5,并使用mkfs命令分别创建vfat和ext3文件系统。然后用fsck命令检查这两个文件系统;最后,把这两个文件系统挂载到系统上。 三、实验内容 练习Linux系统下文件系统的创建、挂载与卸载及自动挂载的实现。 四、实验步骤 子项目1.创建/dev/sdb1和/dev/sdb5 ●使用fdisk命令创建/dev/sdb1主分区。 ●使用fdisk命令创建/dev/sdb2扩展分区。

●使用fdisk命令创建/dev/sdb5逻辑分区。 ●输入子命令w,把设置写入硬盘分区表,退出fdisk并重新启动系统。 ●用mkfs命令在上述刚刚创建的分区上创建ext3文件系统和vfat文件系统。 ●用fsck命令检查上面创建的文件系统。 子项目2.挂载/dev/sdb1和/dev/sdb5 ●利用mkdir命令,在/mnt目录下建立挂载点,mountpoint1和mountpoint2。 ●把上述新创建的ext3分区挂载到/mnt/mountpoint1上。

●把上述新创建的vfat分区挂载到/mnt/mountpoint2上。 ●利用mount命令列出挂载到系统上的分区,查看挂载是否成功。 ●利用umount命令卸载上面的两个分区。 子项目3.实现/dev/sdb1和/dev/sdb5的自动挂载 ●编辑系统文件/etc/fstab文件,把上面两个分区加入此文件中。 ●重新启动系统,显示已经挂载到系统上的分区,检查设置是否成功。 子项目4.挂载光盘和U盘 ●取一张光盘放入光驱中,将光盘挂载到/media/cdrom目录下。查看光盘中的文件。 ●利用与上述相似的命令完成U盘的挂载与卸载。 五、实验思考题 1. 在Linux下能创建Windows 的分区吗?在Linux下能创建Windows的文件系统吗? Windows操作系统可以识别ext3文件系统吗? 2.系统挂装表的文件名?系统挂装表的作用是什么?其文件格式使什么? 3.利用mount命令挂装一个文件系统和将其写入/etc/fstab文件的区别是什么?

实验 文件系统管理

实训项目4 文件系统管理 一、实训目的 ●掌握Linux下文件系统的创建、挂载与卸载。 ●掌握文件系统的自动挂载。 二、项目背景 某企业的Linux服务器中新增了一块硬盘/dev/sdb,请使用fdisk命令新建/dev/sdb1主分区和/dev/sdb2扩展分区,并在扩展分区中新建逻辑分区/dev/sdb5,并使用mkfs命令分别创建vfat和ext3文件系统。然后用fsck命令检查这两个文件系统;最后,把这两个文件系统挂载到系统上。 三、实训内容 练习Linux系统下文件系统的创建、挂载与卸载及自动挂载的实现。 四、实训步骤 子项目1.创建/dev/sdb1和/dev/sdb5 ●使用fdisk命令创建/dev/sdb1主分区。 ●使用fdisk命令创建/dev/sdb2扩展分区。

●使用fdisk命令创建/dev/sdb5逻辑分区。 ●输入子命令w,把设置写入硬盘分区表,退出fdisk并重新启动系统。 ●用mkfs命令在上述刚刚创建的分区上创建ext3文件系统和vfat文件系统。 ●用fsck命令检查上面创建的文件系统。 子项目2.挂载/dev/sdb1和/dev/sdb5 ●利用mkdir命令,在/mnt目录下建立挂载点,mountpoint1和mountpoint2。

●把上述新创建的ext3分区挂载到/mnt/mountpoint1上。 ●把上述新创建的vfat分区挂载到/mnt/mountpoint2上。 ●利用mount命令列出挂载到系统上的分区,查看挂载是否成功。 ●利用umount命令卸载上面的两个分区。 子项目3.实现/dev/sdb1和/dev/sdb5的自动挂载 ●编辑系统文件/etc/fstab文件,把上面两个分区加入此文件中。 ●重新启动系统,显示已经挂载到系统上的分区,检查设置是否成功。 子项目4.挂载光盘和U盘 ●取一张光盘放入光驱中,将光盘挂载到/media/cdrom目录下。查看光盘中的文件。 ●利用与上述相似的命令完成U盘的挂载与卸载。 五、实训思考题 1. 在Linux下能创建Windows 的分区吗?在Linux下能创建Windows的文件系统吗?Windows操作

简单文件系统的实现实验报告

操作系统课程设计报告简单文件系统的实现 专业: 班级: 姓名: 学号: 老师:

一、课程设计的目的 1. 通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部数据结构、功能以及实现过程的理解。 二、课程设计要求 1. 在内存中开辟一个虚拟磁盘空间作为文件存储分区,在其上实现一个简单的基于多级目录的单用户单任务系统中的文件系统。在退出该文件系统的使用时,应将该虚拟文件系统以一个Windows 文件的方式保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。2文件存储空间的分配可采用显式链接分配或其他的办法。 3空闲磁盘空间的管理可选择位示图或其他的办法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,那么可以将位示图合并到FAT中。 文件目录结构采用多级目录结构。为了简单起见,可以不使用索引结点,其中的每个目录项应包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。 要求提供以下有关的操作命令: my_format:对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。 my_mkdir:用于创建子目录。 my_rmdir:用于删除子目录。 my_ls:用于显示目录中的内容。 my_cd:用于更改当前目录。 my_create:用于创建文件。 my_open:用于打开文件。 my_close:用于关闭文件。 my_write:用于写文件。 my_read:用于读文件。 my_rm:用于删除文件。 my_exitsys:用于退出文件系统。 三、程序的设计细想和框图 1.打开文件函数fopen() (1)格式:FILE *fopen(const char *filename,const char *mode) (2)功能:按照指定打开方式打开指定文件。 (3)输入参数说明: filename:待打开的文件名,如果不存在就创建该文件。 mode:文件打开方式,常用的有: "r":为读而打开文本文件(不存在则出错)。 "w":为写而打开文本文件(若不存在则创建该文件;反之,则从文件起始位置写,原内容将被覆盖)。 "a":为在文件末尾添加数据而打开文本文件。(若不存在则创建该文件;反之,在原文件末尾追加)。 "r+":为读和写而打开文本文件。(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变) 。 "w+":首先建立一个新文件,进行写操作,随后可以从头开始读。(若文件存在,原内容将全部消失) 。 "a+":功能与"a"相同;只是在文件末尾添加新的数据后,可以从头开始读。 另外,上述模式字符串中都可以加一个“b”字符,如rb、wb、ab、rb+、wb+、ab+等组合,

实验4(文件系统)

实验4 文件系统 一、目的与要求 1. 目的 文件系统是操作系统的一个重要组成部分,也是与用户关系极为密切的部分。学生应独立的用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深对教材中有关内容的理解。 2. 要求 (1)设计一个n个用户的文件系统,每个用户最多可保存m个文件。 (2)限制用户在一次运行中只能打开一个文件。 (3)系统应能检查输入命令的正确性,出错时要能显示出错原因。 (4)对文件必须设置保护措施,如只能执行,允许读,允许写等。在每次打开文件时,根据本次打开的要求,再次设置保护级别,即可有二级保护。 (5)对文件的操作至少应有下面几条命令: create 建立文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 (6)本次实验的上机时间为2~4学时。 二、实验内容 1. 题目 (1)本次实验设计一个共有10个用户的文件系统,每个用户最多可保存10个文件,一次运行过程中用户可同时打开5个文件。 (2)程序采用二级文件目录,即设置了主文件目录(MFD)和用户文件目录(UFD)。前者应包含文件主(即用户)及他们的目录区指针;后者应给出每个文件主占有的文件目录,即文件名、保护码、文件长度以及它们存放的位置等。另外为打开文件设置了运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。 (3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只修改读写指针,并不进行实际文件的读写操作。 2. 算法与框图

模拟文件系统实验报告

操作系统大型试验 实 验 报 告 姓名:XX 班级:软件工程110x 学号:201126630xxx

一、名称 操作系统大型试验。 二、目的 用C++编写出一个简单的模拟文件系统,实现目录的添加、删除、重命名,文件的添加、删除、重命名、文件和目录、文件的拷贝。 三、要求 开发工具:word,vc win32api 1.设计和实现一个简单的文件系统,要求包括目录、普通文件和文件的存储 2.文件系统的目录结构采用类似Linux的树状结构; 3.要求模拟的操作包括: a)目录的添加、删除、重命名; b)目录的显示(列表) c)文件的添加、删除、重命名 d)文件和目录的拷贝 4.用户进入时显示可用命令列表;用户输入help时显示所有命令的帮助文档;输入某个命令+?时显示该条命令的使用说明 5.用户输入exit时退出该系统 6.实验实现基于windows平台; 7.实验开发语言可以选用C/c++等 四、设计 1.主要思路说明 本模拟系统通过一个大小固定的数组要代表物理盘块,假设共有1024块,新增目录占一块,新增文件占一块,文件中可输入内容,内容假设定义为5个字符占一块,超出则应新申请空间。模拟物理盘块的数组中,数组内容为-99代表改物理盘块内容为空,可使用,其他数字均代表该物理盘块被占用,其中-3代表是占用文件的末结点,其他整数代表是文件内容的下一个寻址下标,另有一个string类型的数组来存储内容,模拟文件写入了对应下标的物理盘块中。设置了一个全局指针指向根结点,一个全局指针指向当前操作目录。搜索空白物理盘块时采用顺序搜索物理盘块数组。存储形式主要采用类似二叉树结构,如目录为根,目录下的第一个文件或目录存在根的子节点,目录下的其他文件或目录存在第一个文件或目录的兄弟节点,以此类推。 本程序仅seperate()函数使用现成代码,此函数功能为将输入命令串分离,仅仅起到美观作用,其余所有代码均为原创! 2.申优功能: 1)能实现动态增长,即当输入文件的内容大小大于分配的模拟物理盘块时系统能够自动寻找空物理盘块并分配,将超出的内容保存在新的物理盘块中,若超出模拟磁盘大小,则超出部分不保存且返回提示。 2)能实现级联删除,即当删除目录(文件夹)时,目录下的所有内容也应当删除并正确释放物理盘块空间。 3)能实现目录的复制,即复制目录时(文件夹)时,该目录下的所有文件和目录也应准确复制至目标目录中,并正确分配物理盘块空间。

实验四_文件系统实验

实验四文件系统实验 一 .目的要求 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个文件操作命令,并加以实现。(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。 #include #include #include 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;

文件系统存储空间管理模拟实验报告

课程名称计算机操作系统实验名称文件系统存储空间管理模拟 姓名____________________ 学号_______________________________ 专业班级_________________ 实验日期____________________________ 成绩______________________ 指导老师_________________________ 一、实验目的 根据提出的文件分配和释放请求,动态显示磁盘空闲空间的态以及文件目录的变化,以位示图和索引分配为例:每次执行请求后要求显示或打印位示图的修改位置、分配和回收磁盘的物理块地址、更新的位示图、目录。 二、实验原理 用数组表示位示图,其中的每一位对应磁盘一个物理块的状态,0表示、 空闲,1表示分配;当请求分配一个磁盘块时,寻找到数组中为0的位,计算相 对磁盘块号,并计算其在磁盘中的物理地址(柱面号、磁道号、物理块号),并将其状态由0变到1。当释放某一物理块时,已知其在磁盘中的物理地址,计算其相对磁盘块号,再找到位示图数组中的相应位,将其状态由1变为0。 三、主要仪器设备 PC机(含有VC) 四、实验内容与步骤 实验内容:1.模拟文件空间分配、释放过程,可选择连续分配、链式分配、索引分配方法;2.文件空闲空间管理,可采用空白块链、空白目录、位示图方法; 步骤如下: 1.输入磁盘基本信息参数,计算位示图大小,并随机初始化位示图; (1)磁盘基本信息:磁盘柱面数m,每柱面磁道数p,每磁道物理块数q; (2)假设采用整数数组存放位示图,则数组大小为: Size= ceil ((柱面数*每柱面磁道数*每磁道物理块数)/ (sizeof(int) *8 )) (3)申请大小为size的整数数组map,并对其进行随机初始化。 例如:假设m=2, p=4, q=8, 共有64个磁盘块,若sizeof(int)=2, 则位示图大小为4,map[4]如下: 位示图中每一位对应的相对磁盘块号如下图,磁盘块号由小到大对应于数组的低地址到高地址位上。即map[0]的第0位到第15位分别对应0号磁盘块到15号磁盘块的状态,map[1]的第0位到第15位对应16号磁盘块到31号磁盘块的状态,以此类

相关主题
文本预览
相关文档 最新文档