文件系统实验报告

文件系统实验报告
文件系统实验报告

嵌入式系统实验报告(二)

--嵌入式文件系统的构建

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本地增加的库

VFS

Linux文件系统有两个特性,一个是对文件的操作可以跨文件系统执行,另一个是内核把对所有资源的操作都看做文件操作,不仅是普通文件、目录,还是字符设备、块设备,在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_SMP

struct list_head__percpu*s_files;

#else

struct 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成员保存了具有本文件系统类型的超级块列表。支持的文件系统类型可以通过cat/proc/filesystems在用户空间查看,未被使用的会在前面显示nodev。

我在查看的时候发现有一个文件系统名字是rootfs,难道根文件系统跟ext2一样也是一种文件系统?查阅资料知,rootfs是一个special filesystem,只提供一个空目录以及为其他真实的文件系统提供一个初始的挂载点。主要是便于更换挂载的根文件系统。而且根文件系统有些情况下会挂两次的,比如硬盘和rmdisk同时存在的时候。

链接

软链接和硬链接是常见的两个概念。硬链接类似于两个地址变量指向了同一个地址,对其中一个变量的操作可以被另一个“察觉”,只不过在文件系统中不是通过地址操作,而是通过两个文件名指向同一个节点(inode)。软链接,也称符号链接,类似快捷方式,它有自己的节点,数据指向原文件,再通过原文件指向原节点,完成链接。

如图,建立硬链接后删除原文件仍然可以通过链接打开,但是对软链接中间有一环断开则不能完成功能。链接通过ln[source][tatget]建立,默认建立硬链接,硬链接不能跨文件系统,且只有超级管理员配合-d选项可以对目录建立硬链接(不保证成功,will probably fail due to system restrictions),-s选项建立软链接。

本实验中系统库以符号链接的方式维护,使以下两个功能同时完成:1、方便地完成lib 文件的升级和还原;2、不用频繁改动调用过系统库函数的文件。

挂载

linux利用挂载方式组合不同分区形成一个完整目录,即将原目录树的某一个节点作为待挂载目录的根目录,形成一个完整的树,从而通过这个目录读写设备、文件或目录。挂载的命令格式是mount[device][dir],常用的参数有-t(指定挂载设备的文件系统类型)和-o(指定选项)。linux下磁盘分区和目录关系如下:1、任何分区必须挂载到某个目录上;2、目录是逻辑上的,分区是物理上的;3、linux分区必须挂载到目录上才能读写。

分区和目录使用情况可以用fdisk、df或du命令查看。

通过编辑/etc/fstab文件可以修改linux开机时自动挂载的文件系统列表,每一行包含六项参数,依次是:,比如/dev/hda2 /ext3defaults11表示将磁盘hda2挂载为根目录,采用ext3文件系统,参数缺省。缺省参数包括:rw(可读写),suid(开启用户ID和群组ID设置位),dev(可解读文件系统上的字符或区块设备),exec(可执行二进制文件),auto(自动挂载),nouser(一般用户无法挂载),async(输入输出非同步)。

五常见的文件系统类型

文件系统

磁盘高级光盘存档系统AdvFS Be文件系统(BFS)Btrfs Coda CrossDOS光盘存档系统(DFS)Episode EFS exFAT ext ext2ext3ext3cow ext4FAT

FAT12FAT16FAT16B FAT32全局文件系统(GFS)分层文件系统(HFS)

HFS Plus高性能文件系统IBM通用并行文件系统JFS Macintosh文件系

统MINIX NetWare文件系统NILFS Novell存储服务NTFS QFS QNX4FS

ReiserFS Reiser4SpadFS UBIFS Unix文件系统Veritas文件系统

(VxFS)VFAT任意位置写入文件布局(WAFL)XFS Xsan

光盘HSF ISO9660ISO13490UDF

闪存/固态硬盘FAT exFAT CHFS FFS2F2FS JFFS JFFS2LogFS NVFS

YAFFS UBIFS

分布式Coda DCE/DFS CXFS GFS2Google文件系统OCFS2QFS 网络存储设备AFS OpenAFS AFP MS-DFS GPFS Google文件系统Lustre NCP NFS

POHMELFS Hadoop HAMMER SMB(CIFS)

特殊cramfs FUSE SquashFS UMSDOS UnionFS

伪系统和虚拟configfs devfs procfs specfs sysfs tmpfs WinFS

加密EncFS EFS ZFS

linux系统支持的文件系统种类众多,仅列举实验指导书中提及的类别。

1ext

延伸文件系统(Extended file system),也称扩展文件系统,于1992年4月发表,是为linux核心所做的第一个文件系统。最早由Rémy Card所创作,采用Unix文件系统的元数据结构,以克服MINIX文件系统性能不佳的问题。它是在linux上,第一个利用虚拟文件系统实现出的文件系统,在linux核心0.96c版中首次加入支持,最大可支持2GB的文件系统。1993年1月,ext2加入linux内核支持中,用于替代ext1,它是多个linux发行版的默认文件系统。2001年发布ext3,2006年10月发布ext4。

EXT文件系统磁盘布局如下:

2NFS

网络文件系统(Network File System,NFS),一种使用于分散式文件系统的协议,由升阳公司(SUN,后被Oracle收购)开发,于1984年向外公布,不久之后即广为业界及学术界所接受。尽管当时不同的大学及实验室已研发了多种分布式文件系统,然而NFS是第一个能够于学术及商业上成功应用的产品。其后升阳为了使NFS成为一种标准,于1989年正式公开发布其接口,使得更多厂商能够把NFS加入其产品之中。NFS是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在Unix系统间实现磁盘文件共享的一种方法。NFS是一个成功的文件共享方法,但它最大的问题是它不太适合于大型的分散式系统。

3JFFS2

JFFS2(Journalling Flash File System Version2),是Redhat公司开发的闪存文件系统,其前身是JFFS,最早只支持NOR Flash,自2.6版以后开始支持NAND Flash,极适合使用于嵌入式系统。

由于闪存的擦写特性,一开始人们采取在文件系统和物理层之间加一个闪存转换层(MTD是其中一种)的方式,使文件系统像对一个块设备一样操作,但是带来了一系列问题:需要磨损平衡、效率低、不安全。这就要求转换层能理解上层文件系统的操作,并针对闪存作出优化,但这使得整个系统效率低下。针对这一情况,瑞典的Axis Communications AB 公司开发出JFFS1文件系统,后被Redhat移植并改进为专为闪存提供的JFFS2。

4YAFFS2

YAFFS(Yet Another Flash File System)是由Aleph One公司所发展出来的NAND flash嵌入式文件系统。

在YAFFS中,最小存储单位为一个Page,文件内的数据是存储在固定512bytes的Page 中,每一个Page亦会有一个对应的16bytes的Spare。YAFFS采用Tree Node Structure,由多个Tree Node(Tnode)所组成,其时间复杂度相当于O(log N),故地址转换时间较JFFS (O(N))更迅速,使得它具有更快的挂载和运行速度。目前YAFFS在将Data写入Flash Memory时会运行Garbage Collection,考虑NAND的特性提供损耗平衡功能。

YAFFS1和YAFFS2主要差异在于Page读写大小,YAFFS2可支持到每页2K,远高于YAFFS的512字节,因此对大容量NAND flash更具优势。

5ramdisk

RAMDISK是通过使用软件将内存模拟当做硬盘来使用的一种技术。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。相对于传统的硬盘文件访问来说,这种技术可以极大的提高在其上进行的文件访问的速度。但是RAM的易失性也意味着关闭电源后的数据将会丢失。

六文件系统制作

本次实验利用busybox制作文件系统,并在开发板上启动。busybox源码可从

https://www.360docs.net/doc/0e13839404.html,/下载。

1、配置文件系统

解压busybox源码压缩包(本次实验采用的版本为1.21.1)至个人目录。执行make menuconfig进行设置,命令输入窗口需要至少19行80列,否则不能用图形界面配置。如果报错提示缺少curses.h文件,执行apt-get install libncurses5-dev安装内核编译工具。

在Busybox Settings-->Build Options中设置为静态编译并修改交叉编译器,Busybox Settings-->Installation Options中可以修改安装路径,默认为./_install。

保存设置退出后依次执行make和make install,则busybox目录下会出现_install目录。

进入安装目录察看,当前目录下有bin/usr/sbin/三个文件夹和linuxrc链接指向busybox。

mkdir etc创建系统管理配置文件夹,并添加文件。

vim inittab

#/etc/inittab

::sysinit:/etc/init.d/rcS初始化脚本

::askfirst:-/bin/sh

::once:/usr/sbin/telnetd-l/bin/login

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount-a-r

vim rc要求可执行属性chmod775rc

#!/bin/sh#!表示调用/bin/sh

hostname x210

mount-t proc proc/proc挂载proc

/bin/cat/etc/motd显示motd的内容,我修改为显示rc(本文件)

中的内容/bin/cat/etc/rc

vim motd系统启动后在屏幕上打印的信息

Welcome to ARM-LINUX WORLD

ported by138352019clk

mkdir init.d

ln-s rc init.d/rcS

inittab中指定了初始化脚本为rcS,我第一次敲错命令没有链接正确,发现不运行也能正常启动。

返回安装目录,mkdir dev新建设备管理目录,按指导书要求添加节点。添加节点的语法为mknod[OPTION]https://www.360docs.net/doc/0e13839404.html, TYPE[MAJOR MINOR],选项一般为-m,表示按mode方式,后面依次为设备名,设备类型(c表示字符b表示块设备p表示FIFO),主次设备号。可以看到console和tty主设备号为5,console表示控制台终端(即显示器),tty是用户当前登陆的终端,而ttyn称为虚拟终端,主设备号为4。

mkdir proc新建空目录供proc文件系统调用

mkdir lib建立库目录,并将交叉编译器目录下的ld-2.10.1.so,libc-2.10.1.so,libm-2.10.1.so 复制到lib/下并作符号链接。利用find可以看到arm-2009q3/arm-none-linux-gnueabi/libc/lib/、arm-none-linux-gnueabi/libc/armv4t/lib/、arm-none-linux-gnueabi/libc/thumb2/lib/下均有这三个共享库,且这三个目录下文件数量和名称都相同,只是大小不同,因为是二进制文件,所以无法用diff比较不同。因为busybox之前选择了静态编译,这些库对系统启动没有影响,是为了测试动态链接程序运行而添加。

ln–s ld-2.10.1.so ld-linux.so.3动态加载器

ln–s libc-2.10.1.so libc.so.6标准C库函数

ln–s libm-2.10.1.so libm.so.6数学库

为NFS挂载,新建/mnt空文件夹。

2、制作ramdisk文件映像

配置内核使内核支持ramdisk,General setup-->Initial RAM filesystem and RAM disk (initramfs/initrd)support选中,Device drivers-->Block devices-->RAM block device support 选中,并设置RAM disk size,因为我们要做的文件系统映像大小8M,即8192K,所以设置为8192。

接下来我们开始制作文件系统,先生成一个固定大小的文件,然后格式化成ext2格式,使之从逻辑上等同于一个文件系统,然后对这个文件作修改。

dd if=/dev/zero of=ramdisk_img bs=1k count=8192

zero文件为”\0”生成一个大小为1k*8192的文件,dd命令是转换并复制一个文件,常用的参数有bs:每次读写多少字节,if,of:输入输出文件,count:复制这么多区块。

mke2fs ramdisk_img格式化为ext2此时文件大小8388608 mkdir/mnt/ramdisk

sudo mount ramdisk_img/mnt/ramdisk

ls/mnt/ramdisk可以看到已经存在lost+found文件夹

sudo cp./_install/*/mnt/ramdisk/-r

sudo umount/mnt/ramdisk/文件大小仍为8388608。可以看出,虽然形式上ramdisk_img是一个文件,但它的大小不变且可以挂载,像一个磁盘分区。8388608=1k*8192,就是一开始生成的大小。

gzip ramdisk_img压缩为.gz格式并复制到/tftpboot下载启动,gunzip解压。

3、缩小busybox体积

以默认配置编译后在busybox下查看可以看到一个名为busybox的可执行文件,大小2001304,file busybox看到这是一个静态链接编译的ARM平台可执行文件,初步判断这个文件就是集成了许多小程序的busybox可执行文件。一开始我感到奇怪,制作文件系统映像的过程中并没有涉及busybox文件夹中的内容,它是如何体现到我的映像中的,进入安装目录查看linuxrc链接目录指向bin/busybox,进入bin/,发现这个目录下只有一个可执行文件busybox,其余均为符号链接且指向busybox。后面可以看到,这个busybox和之前看到的那个busybox可执行文件的大小是同步变化的,即复制过来的。

bin/文件夹下有大约87个符号链接,每个大小7字节,busybox大小2001304,但是bin/文件夹大小4096,后来我意识到与windows文件夹大小的概念不同,linux中文件夹存储的是指向其目录包含的文件或文件夹的指针,利用ls-s命令可以查看文件夹(指针队列)大小,利用du可以查看文件夹及其包含的文件占用大小,均以block(一般4K)为单位。尝试查看根目录下文件夹大小,一般都是4K的倍数,但有一个例外,/run的大小为900。

重新配置config,减小busybox体积。首先取消静态编译,体积904524,下载可正常启动。

coreutils中提供了许多小命令的可选项,我把除cat外所有命令去除,体积835420,可正常启动,能cat显示文件内容,不过启动时提示rcS不能运行。把cat功能取消,添加ls 方便查看busybox大小确认。

然后我把Networking Utilities中所有服务取消,体积646264,正常启动。本想设置静态IP就可以不用每次都设置但是ip address不可更改。

恢复默认设置。

4、rcS、linuxrc、sbin/init的区别(PC)

linuxrc执行init进程初始化文件。主要工作是把已安装根文件系统中的/etc安装为ramfs,并拷贝/mnt/etc/目录下所有文件到/etc,这里存放系统启动后的许多特殊文件;接着Linuxrc重新构建文件分配表inittab;之后执行系统初始化进程/sbin/init。

init.d/rcS完成各个文件系统的mount,再执行/usr/etc/rc.local;通过rcS可以调用dhcp 程序配置网络。rcS执行完了以后,init就会在一个console上,按照inittab的指示开一个shell,或者是开getty+login,这样用户就会看到提示输入用户名的提示符。

七实验体会、小结及建议

1、比较romfs、ext2fs/ext3fs、jffs2等文件系统的优缺点?

romfs:传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以XIP(eXecute In Place,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。

ext:可以实现快速符号链接,类似于WINDOWS文件系统的快捷方式,可将目标名称直接存储在索引及诶单表中,提高了访问速度。支持的内存大至4TB,文件名称很长,可达1024个字符,管理者在创建系统文件时更具需要选择存储逻辑块的大小。

jffs2:JFFS2支持数据压缩,多种文件节点类型,是一种基于FLASH的日志文件系统,提高了对闪存的利用率,降低了内存的损耗。通过JFFS2,可以通过FLASH来存储数据,将FLASH当做硬盘来使用,而且系统运行的参数可以实时保存在FLASH中,在系统断电后数据不会丢失。它在嵌入式系统中很受欢迎。

八参考文献

《嵌入式系统X210V3实验指导书》,南京大学,电子科学与工程学院,2013年8月维基百科https://www.360docs.net/doc/0e13839404.html,/

IBM developerWorks中国:Linux文件系统

https://www.360docs.net/doc/0e13839404.html,/developerworks/cn/linux/theme/filesystem.html

文件系统实验报告

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

C++图书管理系统实验报告

面向对象程序设计(C++语言)课程设计 设计说明书 图书管理系统的设计与实现 起止日期:年月日至年月日 学生姓名 班级 学号 成绩 指导教师(签字) 计算机与通信学院 年月日 图书管理系统

一.需求分析 图书馆是目前生活中除了网络外的另一个获取知识的重要场所。利用图书管理系统对图书记录进行统一管理,包括新增图书记录,更改图书记录,删除图书记录等功能,实现图书管理工作的系统化,规范化和自动化,为图书管理提供便利。同时是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。有助于加深对面向对象程序设计中基础理论和基本知识的理解,培养了实践能力,促进理论与实践的结合。 二.设计要求: 1.图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时 间、价格等。试设计一图书信息管理系统,使之能提供以下功能: 2.系统以菜单方式工作 3.图书信息录入功能(图书信息用文件保存)--输入 4.图书信息浏览功能--输出 5.查询和排序功能:(至少一种查询方式)--算法 6.按书名查询 7.按作者名查询 8.图书信息的删除与修改(可选项) 三.概要设计 1、类的设计 ①、Book类的设计(内部函数流程图):

②、BDatabase类的设计: ③、主函数流程图:

4多态的实现 class People { public: virtual void card(){cout<<"card people"<

《管理信息系统》课程设计实验报告

《管理信息系统》课程设计实验报告 课程名称:管理信息系统 指导老师: ******* 院系:商学院 专业班级: ******** 姓名: ******** 学号: ******** 实验日期: 2011.7.11 实验地点:一机房

《管理信息系统》课程设计任务书 一.课程设计目的及意义: 《管理信息系统》课程设计是在完成《管理信息系统》课程学习之后的一次实践性教 学,是本课程理论知识的一次综合运用。通过本课程设计,能够进一步加深对信息、信息系 统、管理信息系统等基础理论知识的理解,能初步掌握结构化的生命周期法、面向对象法等 系统工程方法,进一步加强熟练应用管理信息系统的操作技能,并能够借助于管理信息系统 解决实际问题。 二.课程设计要求: 1.本课程设计时间为一周。 2.本课程设计以教学班为单位进行上机操作及实验。 3.按照任务要求完成课程设计内容。 三.课程设计任务要求: 1.任务内容:进入山东轻工业学院主页,在“网络资源”区域进入“网络教学平台”,输入各自的用户名和密码(学生学号及密码),进入本网络教学平台系统,在充分熟悉本系统 的前提下,完成下列任务要求。 2.任务要求: ①按照课程讲解的系统分析步骤和理论对本系统进行系统分析。 ②绘制不少于 3 个的主要业务流程图。 ③描述上述主要业务流程图的逻辑处理功能。 ④分析本系统的优缺点,提出改进意见,并描述改进的逻辑处理功能,绘制业务流 程图。 四.课程设计评分标准: 按照《管理信息系统课程设计大纲》的要求,本课程 1 学分,采用百分制计分,其中 任务要求②占30 分,任务要求③占30 分,任务要求④占30 分,考勤及实践表现占10 分。五.本课程设计自2011 年 6 月 27 日至 2011 年 7 月 1 日。

Linux文件系统实验报告

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

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

图书管理系统uml实验报告.doc

面向对象分析与设计大作业 学院:计算机科学与工程学院 班级:计算机软件 3 学生姓名:陈俊伟 学号:2174 指导老师:苏锦钿 提交日期:

华南理工大学 面向对象分析与设计大作业课程实验报告 实验题目 :_____ 图书管理系统 uml 图__________________________ 姓名 :___ 陈俊伟 ________学号:_ 2174_____ 班级 : ___09 软件 3 班________ 组别 : ________ 合作者 : __________________ 指导教师 : ______ 苏锦钿 __________ 实验概述 【实验目的及要求】 一.目的 1.掌握面向对象技术的基本原理和各种相关概念; Rational Rose 2003 、 IBM 2. 熟练掌握 UML的基本知识和9 种常见的 UML图形 , 并能够利 用 Software Architecture、或trufun UML工具进行建模; 3.根据问题进行学习,拓广、深化; 4.独立完成一个应用程序的分析、设计和建模,为以后软件项目的开发打下实践基础。 【实验原理】 UML建模,就是用模型元素来组建整个系统的模型,模型元素包括系统中的类、类和类 之间的关联、类的实例相互配合实现系统的动态行为等。UML提供了多种图形可视化描 述模型元素,同一个模型元素可能会出现在多个图中对应多个图形元素,人们可以从多 个视图来考察模型。UML建模主要分为结构建模、动态建模和模型管理建模 3 个方面,第 1 个方面是从系统的内部结构和静态角度来描述系统的,在静态视图、用例视图、实施视 图和配置视图中适用,采用了类图、用例图、组件图和配置图等图形。例如类图用于描述系 统中各类的内部结构(类的属性和操作)及相互间的关联、聚合和依赖等关系, 包图用于描述系统的分层结构等;第 2 个方面是从系统中对象的动态行为和组成对象间的相互 作用、消息传递来描述系统的,在状态机视图、活动视图和交互视图中适用,采 用了状态机图、活动图、顺序图和合作图等图形,例如状态机图用于一个系统或对象从 产生到结束或从构造到清除所处的一系列不同的状态;第 3 个方面描述如何将模型自身组织到高层 单元,在模型管理视图中适用,采用的图形是类图。建模的工作集中在前两 方面,而且并非所有图形元素都适用或需要采用

系统设计实验报告

系统设计实验报告——远程在线考试系统

目录软件需求说明书························1 引言··························· 1.1编写目的······················· 1.2背景························· 1.3定义························· 1.4参考资料······················· 2 程序系统的结构························ 3 程序设计说明·························

1引言 1.1编写目的 本文档的编写目的是为远程在线考试系统项目的设计提供: a.系统的结构、设计说明; b.程序设计说明; c. 程序(标识符)设计说明 1.2背景 随着网络技术的飞速发展,现在很多的大学及社会上其它的培训部门都已经开设了远程教育,并通过计算机网络实现异地教育。但是,远程教育软件的开发,就目前来说,还是处于起步的阶段。因此,构建一个远程在线考试系统,还是有很大的实际意义的。 根据用户提出的需求,本项目组承接该系统的开发工作 a.开发软件系统的名称:远程在线考试系统 b.本项目的任务提出者:福州大学软件学院 c.用户:各类大专院校学校、中小学校。 1.3定义 远程在线考试系统 远程在线考试系统是基于用Browser/Web模式下的,可以实现考试题库管理、多用户在线考试、自动阅卷功能的系统。

1.4参考资料 ?GB 8566 计算机软件开发规范 ?GB 8567 计算机软件产品开发文件编制指南?软件设计标准 ?《ASP与SQL-Server2000》清华大学出版社?《可行性研究报告》 ?《项目计划文档》 ? 2程序系统的结构 3程序1(标识符)设计说明

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

图书馆管理系统实验报告

华北科技学院计算机系综合性实验 实验报告 课程名称数据库系统 实验学期2009至2010学年第2学期学生所在系部计算机系 年级专业班级网络B081 学生姓名王明仁学号200807024102 任课教师郭红 实验成绩 计算机系制

《图书馆管理系统》课程综合性实验报告 开课实验室:基础62010年6月19日实验题目 一、实验目的 利用一种DBMS作为设计平台,理解并应用课程中关于数据库设计的相关理论,能按照数据库设计步骤完成完整的数据库设计,包括需求分析、概念设计、逻辑设计、物理设计和实施。同时能够正确应用各个阶段的典型工具进行表示。 二、设备与环境 (1)硬件设备:PC机一台 (2)软件环境:安装Windows操作系统,安装数据库管理系统SQL Server2000等。 三、实验内容 完整实践应用数据库设计的工程过程:需求分析\概念设计\逻辑设计\物理设计和实施: (1)需求分析:选定一个应用(如图书管理系统),对所设计的数据库系统进行调研分析,其结果应该准确表达出选定 应用的功能需求; (2)概念分析:使用E-R图作为描述工具.必要时描述出局部和全局的E-R图; (3)逻辑设计:将上述绘制的E-R图转化为相应的关系模式,并根据范式理论进行优化分析。要求的关系模式不少于 3个,并根据实际应用的需要设计必要的视图; (4)物理设计:根据设计的结构,说明系统已经有的索引,并根据需要设计必要的索引; (5)实施:以SQL SERVER为平台创建出完整的数据库.在数据库中要表现出的知识点包括 ①登录控制(标准登录和混合登录) ②数据完整性:参照完整性、实体完整性、自定义完整性(包括触发器) ③安全性设计:设置用户,并相应设计用户的权限或角色(用户设计至少3个,有不同的权限) ④使用触发器、游标或存储过程完成相关操作,至少使用1种技术。 (6)以上内容,请详细描述,并有必要抓图. 四、实验结果及分析 根据我设计的图书馆数据库管理系统,我作了如下分析: 图书馆提供图书借阅业务,读者借阅需先办理借书卡(用条码识别身份),并交纳一定的押金。不同的书有着不同的借阅期限,比如期刊和某些新书最多只能借阅七天,而另一些书则可以借阅半个月或最长三个月不等。逾期不还,或丢失、损坏书籍则予以罚款。在交纳罚款前,借书卡被冻结。不同类别的读者不着不同的借阅数量限制,比如有的一次可以借阅7本,有的只能借阅5本等。对逾期不还的,系统给出报警,并打印催还通知单。读者可以事先从网上查询拟借书刊是否存在,并可查询书刊存放地点。 我设计的图书管理系统,功能包括: 一.图书管理系统: 1.图书查询 2.新书登记 3.图书下架 二.读者信息管理: 1.办卡 2.信息 3.挂失 4.注销 5.冻结 三.借阅管理系统: 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 指定的内存位

C--大作业图书管理系统实验报告

附件1: 《面向对象程序设计》 大作业 题学专班姓目 院 业 级 名 学生成绩管理系统 文法学院 教育学 教育学1201 杨欣 指导教师鄢红国 2013 年12 月20 日学号:0121213640126

目录 一二三四五六七八十设计目的 (1) 大作业的内容 (2) 大作业的要求与数据 (3) 大作业应完成的工作 (4) 总体设计(包含几大功能模块) (5) 详细设计(各功能模块的具体实现算法——流程图) (6) 调试分析(包含各模块的测试用例,及测试结果) (7) 总结 (8) 参考资料 (9)

一二 大作业的目的 《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。 大作业的内容 对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数等) 进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.将图书的信息进行记录,信息内容包含:(1)图书的编号(2)图书的书名(3)图书的库存量。假设,现收集到了一个图书馆的所有图书信息,要求用C语言编写一个简单的图书管理系统,可进行录入、查询、修改和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。 三大作业的要求与数据 1、用C语言实现系统; 2、对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出. 3、图书信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够 完成以下功能: (1)每一条记录包括一本图书的编号、书名、库存量 (2)图书信息录入功能:(图书信息用文件保存,可以一次完成若干条记录 的输入。) (3)图书信息显示浏览功能:完成全部图书记录的显示。 (4)查询功能:完成按书名查找图书记录,并显示。 (5)图书信息的删除:按编号进行图书某图书的库存量. (6)借书登记系统:可以输入读者编号和所借书号来借书。 (7)还书管理系统:可以输入读者编号和所借书号来还书。 (8)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应 尽可能清晰美观!

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

河北大学工商学院 课程设计 题目:操作系统课程设计 学部信息学部 学科门类电气信息 专业计算机 学号2011482370 姓名耿雪涛 指导教师朱亮 2013 年6月19日

主要内容 一、设计目的 通过模拟操作系统的实现,加深对操作系统工作原理理解,进一步了解操作系统的实现方法,并可练习合作完成系统的团队精神和提高程序设计能力。 二、设计思想 实现一个模拟操作系统,使用VB、VC、CB等windows环境下的程序设计语言,以借助这些语言环境来模拟硬件的一些并行工作。模拟采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。 设计模板如下图: 注:本人主要涉及设备管理模块

三、设计要求 设备管理主要包括设备的分配和回收。 ⑴模拟系统中有A、B、C三种独占型设备,A设备1个,B设备2个,C设备2个。 ⑵采用死锁的预防方法来处理申请独占设备可能造成的死锁。 ⑶屏幕显示 注:屏幕显示要求包括:每个设备是否被使用,哪个进程在使用该设备,哪些进程在等待使用该设备。 设备管理模块详细设计 一、设备管理的任务 I/O设备是按照用户的请求,控制设备的各种操作,用于完成I/O 设备与内存之间的数据交换(包括设备的分配与回收,设备的驱动管理等),最终完成用户的I/O请求,并且I/O设备为用户提供了使用外部设备的接口,可以满足用户的需求。 二、设备管理函数的详细描述 1、检查设备是否可用(主要代码) public bool JudgeDevice(DeviceType type) { bool str = false; switch (type) { case DeviceType.a: {

实验四 文件系统实验报告

实验四文件系统实验 一 . 目的要求 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 #include #define MAXSIZE 100 #define ADDSIZE 50 #define PT elem+l-> length #define N 4 typedef struct term{/*班级和学期的结构体*/ char class1[10]; char term1[10]; }term; typedef struct student{/*学生成绩信息的结构体*/ term st;/*班级和学期结构体放于此结构体中*/ char num[10]; char name[12]; float course[4]; float total; float average; int bit; }lnode,*stu; typedef struct{ lnode *elem;/*指向上个结构体的指针*/ int size;/*最大能放lnode结构体成员的个数*/ int length;/*当前长度*/ }sqack,*sq; sqack *l; void init(void)/*动态分配存储空间*/ { l-> elem=(stu)malloc(MAXSIZE*sizeof(lnode)); l-> length =0; l-> size=MAXSIZE; } void input(void)/*输入学生的信息*/ { lnode *newbase,*p; char cla[10],ter[10],ch; int n,i; if(l-> length> =l-> size){ newbase=(stu)realloc(l-> elem,(l-> size +ADDSIZE)*sizeof(lnode));/*追加存储空间*/ l-> elem =newbase; l-> size +=ADDSIZE; } p=l-> elem; do { printf( "输入班级和学期(学期用这种格式,如2005年上学期2005 1,2005年下学期2005 2;先输入班级,回车后再输入学期)\n "); gets(cla); gets(ter); printf( "要输入多少个名单?"); scanf( "%d ",&n); printf( "输入学生的成绩\n学号\t姓名\t科目1\t科目2\t科目3\t科目4\n "); for(i=0;i num ,p-> name,p-> course[0],p-> course[1],p-> course[2],p-> course[3]); strcpy(p-> st.class1,cla); strcpy(p-> st.term1,ter); ++l-> length ; } printf( "要继续吗?(y/n) ");

图书馆管理信息系统实验报告完整版

图书馆管理信息系统实 验报告 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】

管理信息系统实验报告 系部名称:国际学院 专业名称:会计 班级:0911 姓名: 第一章图书馆管理信息系统的系统规划 图书馆管理项目开发背景及开发目的 传统的图书馆管理工作主要是由于书籍管理、借阅管理、图书管理查询。该工作主要由学校图书管理人员来完成。近年来,随着招生规模的持续壮大,图书馆的容量也不断增加,有关图书的各种信息量也成倍的增加。面对庞大的信息量,传统的人工式的管理导致工作繁重,人力物力过多的浪费,图书馆的管理成本高,然而工作效率却不高,工作质量也难以得到可靠的保证,从而影响了整个图书馆的运作及管理。 时代的进步,计算机越来越广泛的运用,原先主要由手工操作的图书管理,正在慢慢的由计算机代替,并且日益完善。图书管理系统就是为了解决和减轻繁琐的手工管理,使图书馆可以上升到一个完善的电子化,信息化管理。在全球信息化的今天,是同计算机进行生产和管理已经成为一种趋势。计算机可以为我们选择最优的方案来达到我们的要求。在图书馆这一环境中,使用计算机管理可以最大程度减少操作难度,减轻工作人员的劳动负担。实现“以人为本,科学管理,创建新型现代化学校图书馆”的目标 图书馆管理可行性分析 图书馆是图书馆管理系统是利用计算机技术使书籍管理、借阅管理、图书管理查询等有机的结合在一起方便图书管理人员进行统一高效率的管理。对于系统的结构特性设计,应遵循提高系统实用性和操作简便灵活性的设计的原则。在业务流程上遵循了手工管理时的操作流程,使学生很快掌握操作程序等。 经济性可行性研究

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

课程名称计算机操作系统实验名称文件系统存储空间管理模拟姓名学号 专业班级实验日期 成绩指导老师 一、实验目的 根据提出的文件分配和释放请求,动态显示磁盘空闲空间的 态以及文件目录的变化,以位示图和索引分配为例:每次执行请求后要求显示或打印位示图的修改位置、分配和回收磁盘的物理块地址、更新的位示图、目录。 二、实验原理 用数组表示位示图,其中的每一位对应磁盘一个物理块的状态,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号磁盘块的状

图书管理系统实验报告

上海电力学院 信息网络技术课程设计报告 题目: 图书馆借阅系统 姓名:白志强 学号:20111946 院系:电子与信息工程学院 专业年级:电子信息工程2011级

2014 年12月 5 日

●摘要 在大学生活中,图书馆是我们常去的一个地方,因而图书馆的管理无疑是我们需要关注的一个问题。 现在很多学校图书馆的借阅工作部分还是手工管理,工作效率很低并且不能及时了解图书的种类和学生们比较需求的图书等,不能更好的适应当前学生的借阅要求。计算机信息化管理有着存储量大,速度快等许多优点,提供给我们的处理信息及时快捷,因此利用计算机提供给我们的信息使学生们的借阅过程形成一整套动态的管理,能够极大提高图书馆理的效率,这也是学校的科学化,正规化管理。 图书借阅管理系统是一种信息管理系统,本系统采用数据库系统和VB平台,以https://www.360docs.net/doc/0e13839404.html, 为编程语言开发一个适合学校图书管理所需要的数据库管理软件。其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立数据一致性和完整性强、数据安全性好的数据库。而对于后者则要求应用程序功能完备,易使用等特点。 ●实验目的 本课程设计的目的是综合应用https://www.360docs.net/doc/0e13839404.html,软件以及SQL数据库设计实现图书借阅系统。 ●设计环境 软件:VS2008,SQL Server2008 ●设计内容 基本要求:通过编程软件使系统可以进行管理员模块和用户使用模块。 管理员模块:添加图书,查询图书,查询用户,添加用户。 使用者模块:借阅图书,归还图书。 ●设计流程图 图书管理系统 用户界面管理者界面

设计步骤 建立数据库,新建表如图所示 打开表如图

软件设计与体系结构实验报告

福建农林大学计算机与信息学院 实验报告 课程名称:软件设计与体系结构 姓名:陈宇翔 系:软件工程系 专业:软件工程 年级:2007 学号:070481024 指导教师:王李进 职称:讲师 2009年12月16日

实验项目列表

福建农林大学计算机与信息学院实验报告 学院:计算机与信息学院专业:软件工程系年级:2007 姓名:陈宇翔 学号:070481024 课程名称:软件设计与体系结构实验时间:2009-10-28 实验室田实验室312、313计算机号024 指导教师签字:成绩: 实验1:ACME软件体系结构描述语言应用 一、实验目的 1)掌握软件体系结构描述的概念 2)掌握应用ACMESTUDIO工具描述软件体系结构的基本操作 二、实验学时 2学时。 三、实验方法 由老师提供软件体系结构图形样板供学生参考,学生在样板的指导下修改图形,在老师的指导下进行软件体系结构描述。 四、实验环境 计算机及ACMESTUDIO。 五、实验内容 利用ACME语言定义软件体系结构风格,修改ACME代码,并进行风格测试。 六、实验操作步骤 一、导入Zip文档 建立的一个Acme Project,并且命名为AcmeLab2。如下图:

接着导入ZIP文档,导入完ZIP文档后显示的如下图: 二、修改风格 在AcmeLab2项目中,打开families下的TieredFam.acme.如下图: 修改组件外观 1. 在组件类型中,双击DataNodeT; 在其右边的编辑器中,将产生预览;选择Modify 按钮,将打开外观编辑器对话框。 2. 首先改变图形:找到Basic shape section,在Stock image dropdown menu中选 择Repository类型. 3. 在Color/Line Properties section修改填充颜色为深蓝色。 4. 在颜色对话框中选择深蓝色,并单击 [OK]. 5. 修改图形的边框颜色为绿色 7. 单击Label tab,在Font Settings section, 设置字体颜色为白色,单击[OK] 产生的图形如下图:

图书管理系统实验报告资料

齐鲁工业大学认知实习报告 院系名称理学院 学生姓名曹哲川 专业班级信计13-2 指导教师王林 二○一六年十二月九日

认知实习情况一览表

C语言见习报告 前言 随着随着信息化迅猛发展,在各应用领域,如应用软件、数字计算、嵌入式设备开发、游戏软件开发、系统软件和图形处理以及对性能要求严格的领域等等,都已广泛运用到C语言,C语言被称为广泛的语言之一,在一些对性能有严格要求的地方也需采用C语言进行编程。所以从整个IT行业的运行情况来看,C语言工程师重要地位明显。 同时C语言又是一门基础语言,其职位发展方向不仅仅局限于C 语言程序员,同时还可往网络工程师、嵌入式工程师、数据库工程师等方向发展,而这几大方向已出现了严重的人才匮乏的现象。C语言开发工程师人才的紧缺促使该职位更极具发展潜力。不仅IT专业企业需要C语言开发工程师,众多非IT企业也表示对开发工程师有很大的需求,IT行业目前在国内为朝阳产业,C语言工程师便是这朝阳产业中具发展潜力的岗位之一。 因此,需要安排此次见习式训练,是为我们将来能够顺利步入社会做的准备,作为学生我们更应该抓住这次机会,学习该行业方面的知识,扩充自己的知识储备,提高自己在社会中的竞争力。

1.实习目的 随着计算机技术的不断应用和提高,计算机已经深入到社会生活的各个角落。而中小型租、借书机构仍采用手工管理图书的方法,不仅效率低、易出错、手续繁琐,而且耗费大量的人力。为了满足其管理人员对图书馆书籍,读者资料,借还书等进行高效的管理,在工作人员具备一定的计算机操作能力的前提下,此图书管理系统软件力求提高其管理效率。 本文档的编写是为了完善图书管理系统软件的开发途径和应用方法。以求在最短的时间高效的开发图书管理系统。 2.软件需求 2.1 管理员登陆 管理员以正确的用户名和密码登录后可以进行图书的维护、读者的维护等操作。 2.2 用户管理 2.2.1 添加读者 将新的读者信息添加到读者信息表。 录入信息:读者编号,读者姓名,读者年龄,读者单位,联系电话,已借书籍信息等。 2.2.2 读者信息修改 读者信息出现错误的地方,进行修改。 2.2.3删除读者 根据读者编号,将过期的读者从读者信息中删除。 2.2.4 检索读者信息 根据读者编号或姓名,检索读者的基本信息。 2.3 图书管理 2.3.3新图书入库 工作人员录入图书名称,图书价格,图书作者,出版社,图书状态(在架或已借)、图书数量等信息。 2.3.2图书信息修改 当图书信息录入发生错误或图书信息发生变化时,更改图书的基本信息。 2.3.3删除图书 将损坏、废旧的图书从图书信息中删除。 2.3.4 检索图书 根据图书编号、名称或作者检索图书的基本信息。 2.4 借书管理 根据读者编号和书籍编号,进行借阅登记。 2.5 还书管理 根据读者编号和书籍编号进行还书操作,如果图书超期、或者图书损坏则进

操作系统课程设计实验报告proj2

操作系统课程设计报告 班级: 团队成员:

目录 ................................................................................................................ 错误!未定义书签。 一、实验要求:建立线程系统................................................................... 错误!未定义书签。 1.1Task 2.1实现文件系统调用 (3) 1.1.1题目要求 (3) 1.1.2题目分析与实现方案 (3) 1.1.3关键点与难点 (4) 1.1.4实现代码 (4) 1.2 Task 2.2 完成对多道程序的支持 (5) 1.2.1题目要求 (5) 1.2.2题目分析与实现方案 (5) 1.2.3关键点与难点 (6) 1.2.4实现代码 (7) 1.3 Task 2.3 实现系统调用 (7) 1.3.1题目要求 (7) 1.3.2题目分析与实现方案 (8) 1.3.3关键点与难点 (9) 1.3.4实现代码 (9) 1.4 Task 2.4 实现彩票调度 (10) 1.4.1题目要求 (10) 1.4.2题目分析与实现方案 (10) 1.4.3关键点与难点 (11) 1.4.4实现代码 (11) 二、测试结果............................................................................................ 2错误!未定义书签。

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

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

一、课程设计的目的 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+等组合,

相关文档
最新文档