当前位置:文档之家› 内核,文件系统实验报告一

内核,文件系统实验报告一

内核,文件系统实验报告一
内核,文件系统实验报告一

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

091180083刘浩通信工程

一、实验目的

了解嵌入式系统的开发环境,内核的下载和启动过程;了解Linux内核源代码的目录结构及相关内容;了解Linux内核各配置选项的内容和作用;掌握Linux 内核的编译过程;理解嵌入式操作系统文件系统的类型和作用;了解jffs2文件系统的优点及其在嵌入式系统中的作用;掌握busybox软件制作嵌入式文件系统的方法;掌握Linux嵌入式文件系统的挂载过程。

二、嵌入式系统开发实验

1、minicom和tftp

(1)串口通信的硬件基础:嵌入式系统一般通过异步串行接口(UART)进行初级引导。本实验中用到的是RS-232C标准的接口。

(2)软件结构:minicom

运行minicom,Ctrl+A-o进入minicom的configuration界面。对串行通信接口进行配置,如串行通信口的设置,波特率、数据位等串口参数的设置。保存好设置后以后可以不用再设置。

(3)bootloader引导:给开发板加电,任意按下一个键进入bootloader界面。可以通过命令行方式进行设置,按0进入命令行模式,出现>51board,可以设置开发板和pc机的ip地址:set myipaddr 192.168.207.113(设置开发板的ip 地址),set destipaddr 192.168.207.13(设置pc机的ip地址)。注意ip地址的设置:使其处于同一网段,并且避免和其他系统的ip发生冲突。

(4)通过bootloader的主菜单可以完成很多功能,3——下载内核,4——将内核烧进flash,5——下载文件系统,6——将文件系统烧进flash,7——启动嵌入式操作系统等。

由于bootloader需要从服务器上下载内核和文件系统,一般采用tftp服务。进入/etc/xinetd.d/tftp修改配置,注意一定要关闭防火墙,否则可能导致下载时出问题。再设置完后要重新启动tftp服务。

按下a——,写入下载的内核名和文件系统名(注意:这些文件必须在tftp服务的主目录/tftpboot下),之后就可以进行下载和启动。

2、pc机和开发板之间文件共享——NFS文件系统服务

NFS是在不同机器不同操作系统之间进行网络共享文件的服务系统。在嵌入式系统中目标机可以将宿主机的共享文档挂载在自己的系统中,从而,目标机使用宿主机上的远端文件就像是使用自己本地的文件一样,有利于嵌入式开发。

在pc机上要打开NFS服务:

#chkconfignfs on

#chkconfigportmap on

#service nfs restart

#service portmap restart

我们要查看服务器的共享目录是哪个目录时,需要在/etc/exports中查看或者修改设置。通过查看,发现默认的共享目录设置为/exp。当想修改共享目录时,可以编辑文件exports,保存退出后需要用#exportfs–a这条命令使设置生效。启动目标板操作系统后,用mount命令将主机的共享目录挂载在目标机的/mnt 目录下:

#mount 192.168.207.13:/exp /mnt

此条命令之前先要设置目标机的ip:#ifconfig eth0 192.168.207.113

3、编写应用程序,分别在主机和目标机上运行,注意区别

编写简单的c程序hello.c:

#include

int main()

{printf(“hello,world\n”);

return 0;

}

在主机上编译,gcc hello hello.c

执行./hello

显示hello,world

将hello可执行程序复制到/exp:cp hello /exp

在目标机上cd /mnt

./hello

出现错误。因为主机上编译生成的x86体系下的二进制代码,而目标机用的是arm体系。不能兼容。

在主机上用交叉编译器进行编译。本实验中用到的是arm-linux-gcc,所在目录/usr/local/arm-linux/bin.编译方法是:/usr/local/arm-linux/bin/arm-linux-gcc–o hello1 hello.c

或者先export PATH=/usr/local/arm-linux/bin:$PATH

然后gcc –o hello1 hello.c

在主机上运行./hello1

错误不能运行。因为可执行程序是arm代码。在x86上不能正确运行。

将hello1复制到共享目录/exp

在目标机上运行/mnt/hello1

显示hello,world

4归纳总结嵌入式系统下软件开发的一般流程

pc机上软件的编写——在pc机上编译及调试——在pc机上采用交叉编译器进行编译生成可执行程序——将可执行程序下载到目标机中——在目标机上运行程序

三、Linux内核配置和编译

1、内核源代码目录的简单介绍

本实验中用的是内核源码是linux-2.4.21-51Board_EDR在目录/usr/src/linux下。源代码树下有如下目录:arch(支持的微处理器体系结构),include(头文件),init(初始化代码),mm(内存管理代码),kernel (主要的内核代码),drives(所有的设备驱动程序),lib(库文件代码),net (网络相关代码),ipc(进程间通信的代码),fs(文件系统),scripts(配置内核的脚本文件)。

本实验中要求将目标板的启动画面换成自己设定的画面。做法是:

将/usr/src/linux目录下的内核源代码拷贝到自己的目录下,进入这个目录,在arch/arm下找到开发板启动画面的文件,将其删除,用自己的图画替换。注意,目标板只是别.ppm文件,所以需要改变原来图画的文件格式,可直接改文件后缀名,或者在终端中用命令:

convert xx.jpgxx.ppm

2、编译内核

进入内核源代码目录,输入:make menuconfig进入内核配置菜单,可以根据需要对内核配置项进行选择。配置变量有四种选择:y——静态编译进内核,m ——内核代码被编译成模块,n——表示不编译进内核,[ ]——表示配置变量的值为空。在配置过程中,可以通过help来帮助了解各个配置变量的功能,从而决定要不要把这项编译进内核。下面针对一些比较重要的内核配置项进行说明:

1.code maturity level options 代码的成熟程度。我在网上看到一篇文档中提到:要配置framebuffer必须将其选为y。故我在实验中将其选为y,其实不选也行。

2.Loadable module support.将不常用的设备模块化,动态地加载。这样能更加有效利用内存。所以最好选为y。

3.System type 处理器种类。本实验选“PXA270/210-based”——“XSBase270-EDR”

4.在Network device support,网络设备驱动。选择对应的网卡。本实验箱的网卡是“Ethernet 10M or 100Mbit””SMSC LAN91C111”,将其选为y 5.Console drivers.终端设备驱动配置。为了以后实验中要用到的支持图像的功能,要选择“support for framebuffer devices”和”PXA LCD support”。

上面这些配置很重要。其他的配置见实验讲义p20。

配置完之后选择保存,执行完之后会生成.config文件。然后执行make clean,清除以前构核过程中生成的目标文件、模块文件、核心和一些临时文件。再执行make dep,建立依赖关系,然后make,将生成核心vmlinux,再执行make zImage,则可以在arch/arm/boot下生成压缩的内核映像文件zImage。

3、通过bootloader加载引导内核

我们将生成的内核映像文件拷贝到/tftpboot下,以便开发板下载。

然后我们将内核下载到开发板。先保证电脑和开发板之间是连接的。在终端中输入minicom,给开发板上电,按照上一实验的方法进行下载,然后boot执行启动。看到开发板出现自己设置的启动画面。

在系统启动过程中,终端提示文件系统没有启动。原因可能是文件系统没有配置好,这将是下次实验的要求。在这次实验中不对其做过多分析。

4、总结内核映像文件的生成方法及其对操作系统的作用

Make menuconfig——make clean——make dep——make——make zImage

内核文件是操作系统的核心,负责系统的进程管理,内存管理,设备和文件管理等,决定着系统的性能和稳定性。

5、内核配置中哪些选项对操作系统的正常启动是必须的?

System type (系列选型);Character devices(字符设备驱动)中的Virtual terminal,support for console on serial support,support for console on virtual terminal,standard/generic serial support,unix98 PTY support; 文件系统(File System)

四、嵌入式文件系统的构建

1、linux文件系统的类型和优缺点比较

1、ext2fs/ext3fs可以实现快速符号链接,类似于Windows文件系统的快

捷方式,可将目标名称直接存储在索引节点表中,提高了访问速度;支持的内存大至4TB,文件名称很长,可达1024个字符;管理者在创建系统文件时根据需要选择存储逻辑块的大小。

这种文件系统稳定,可靠,健壮,在台式机、服务器、工作站中普遍使用。

2、jffs2支持数据压缩,多种文件节点类型,是一种基于FLASH的日志文

件系统,提高了对闪存的利用率,降低了内存的损耗。通过jffs2,可以通过flash来存储数据,将flash当作硬盘来使用,而且系统运行的参数可以实时保存在flash中,在系统断电后数据不会丢失。它在嵌入式系统中很受欢迎。

3、romfs是一种相对简单,占用空间较少的文件系统。它比ext2文件系统

代码少,而且它在建立系统超级块时需要更小的空间。但它只是可读文件系统,禁止写操作,因此系统同时需要虚拟盘(ramdisk)来支持临时文件和数据文件的存储。

2、busybox简单介绍和编译

Busybox 可编译成一个叫做busybox 独立执行程序,根据配置,可以执行几十个小应用程序。这其中包括一个迷你的 vi 编辑器,系统不可或缺的/sbin/init 程序,以及如ifconfig, ping,mkdir, mount, cat,ls等程序。Busybox将全部的功能都编译进去,也只有100多k。我们可以根据需要对其进行才将,使其规模更小。

1.将/exp 目录下的busybox-1.00-pre5.tar.gz压缩文件复制到自己的文件

夹/home /st /81180015 , 在该目录下解压缩tar zxvfbusybox-1.00-pre5.tar.gz

2.进入解压后的目录,执行make menuconfig,对busybox进行配置。配置过

程中要针对文件系统的需要进行配置。下面将针对几点注意事项进行分析:a在Build Option菜单下,可以选择静态库编译方式,

b在交叉编译器设置,在cross compiler prefix中输入/ usr/ local / arm-linux /bin / arm-linux-

c在 Installation Option菜单下,自定义安装目录,建议使用默认目录 . / _install

d在Init Utilities中配置初始化指令。其中init 选项必选,否则无法正常进入命令行界面的系统,若不选则会显示“kernel panic: no init”。

其他选项如:reboot,poweroff等都选上。因为在/etc/init.d中用到了。

e在Login/Password Mangement Utilities菜单下配置对用户登录/密码管理的配置。其中getty必选,因为在inittab文件中要用到该指令,若不选则在执行boot[7]开发板命令,系统启动过程中,会显示 could’t find “sbin/getty”。

f在Networking Utilities菜单下配置和网络有关的命令,为了使用网络连接,其中ping和ifconfig必选。

g在Another Bourne like shell菜单下指定shell(必须因为在启动时rc 中的/bin/sh中会使用指定的shell),否则在开发板启动时会出现错误“ Bummer, could not run ‘etc / init.d / rcS’ no such file or directory ”,“/ bin /sh”no such file or directory”。在实验中,当看到提示的错误之后,我在choose your default shell下选择了ash。

但重启开发板时仍然出现了上述的错误。于是我开始查看bin目录,发现找不到sh,有的是ash可执行程序。经过分析,我将inittab文件中的::askfirst:/bin/sh改成了::askfirst:/bin/ash,并将rc中的#!/bin/sh改成#!/bin/ash。重启开发板,错误被解决了。

h在Linux System Utilities中配置系统指令,为了使用NFS文件系统,要选择 mount ;Support mounting NFS file systems。此外umount 也应该选上,因为在inittab中有::shutdown:/bin/umount -a –r。

其他的选项要根据开发的需要进行选择。这些在实验记录中有详细的记录。

这里就不再诉述。

配置好busybox之后保存退出。make——make install,就会在安装目录_install看到bin,sbin等目录,和一些指向busybox的可执行程序的符号链接。

3、构建文件系统

创建常用目录,etc,dev,lib,proc。并在各目录下建立必要的文件。具体方法见实验指导书上的操作步骤和实验记录纸上的过程记录。

这里只就几个重要问题做说明:

etc/inittab是由系统启动程序init读取并解释执行的。Init进程是系统启动的第一个进程,是其他所有进程的父进程。下面对inittab中的字段进行说明:

/etc/inittab文件中每个登记项的结构都是一样的,共分为以冒号“:”分隔的4个字段。具体如下:

identifier : run_level : action : process

本实验中无须指定identifier和run_level。action动作关键字。action 用于指定init命令或进程对相应进程所实施的动作。本实验中包含的动作有:respawn(如果相应的进程还不存在,那么init就启动该进程,同时不等待该进程的结束就继续扫描/etc/inittab文件;当该进程死亡时,init 将重新启动该进程。如果相应的进程已经存在,那么init将忽略该登记项并继续扫描/etc/inittab文件)。sysinit(只有在启动或重新启动系统并首先进入单用户时,init才执行这些登记项)。askfirst(进入console之前先询问一下shell要不要进入)。ctrlaltdel:允许init在用户于控制台键盘上按下C t r l + A l t + D e l组合键时,重新启动系统。restart(系统重启的时候要执行的进程)。shutdown(系统关机时需要执行的进程)。

实验中编写的inittab文件的功能:在系统启动的时候执行/etc/init.d/rcS,即显示主机名是XScale270,将proc文件系统挂载到/proc 目录,然后执行一条打印命令,即打印出/etc/motd里的启动信息。在进入console终端之前先问候shell:press “ENTER” to enter console(具体我记不清楚了,就是这个意思)。init进程启动选择终端tty5和tty6。当重启系统时执行/sbin/init初始化程序,若用户按下ctr+alt+del时,重启系统。当关机时实行解挂和关机。

创建dev目录,这个目录下建立必要的目录。实验操作的时候将老师提供的文档复制到文档里,将前面的命令符$去掉后,在终端中粘贴一下就执行了所有的命令。这个目录下有很多设备,如终端设备,dsp,声卡,frame buffer 帧缓冲,硬盘(hda),鼠标,键盘,ram,触摸屏等。

建立lib目录,将交叉编译器链接库中路径下的几个库复制到lib目录,并做软链接。这样做的原因是:

Busybox本身不带glibc和uclibc,所以实验中要用静态链接的方式来运行应用程序,并且实验中要将这些库安装在/lib目录下。本实验中安装了三个库文件,ld-2.3.2.so,libc-2.3.2.so,libm-2.3.2.so。它们分别是linux 的动态加载器和libc标准的c库函数,和数学库。实验中还做了四个软链接,这些软链接使其不受版本的影响,从而具有向后兼容的作用,所有的linux

版本都能使用这些共享库。

4、制作JFFS2的文件映像

在busybox的目录下,用mkfs.jffs2制作JFFS2文件系统。命令为:mkfs.jffs2 –o fs.img–e 0x40000 –r _install -p -l

说明:-o 选项表示输出的文件系统镜像名为fs.img;-e选项表示所需内存至少为64K;-r表文件系统镜像所在的目录。-l表示制作一个小型的jffs2文件系统。

5、加载文件系统

用实验一中的方法加载内核和文件系统,启动开发板。

实验过程中,通过反复调试,修改开发板启动过程中的错误,将必要的配置选项加入后,开发板正常启动,出现了/etc/motd中要求显示的欢迎界面。进入开发板环境中,编写简单的应用程序来检测文件系统的可行性。在实验中,先建立/mnt目录,配置ip后,将/mnt目录挂载在主机的/exp共享目录下,然后编写简单的应用程序,hello.c。在主机上交叉编译后,在目标板上运行成功。

五、实验总结

花了五六次课的时间做上面三个实验,对嵌入式linux开发环境、内核和文件系统有了更加清楚的认识,明白了嵌入式系统的特点,如它不提供bios 程序,所以基本输入输出由程序员完成;缺乏友好的人机交互界面,开发能力不如通用计算机,存储空间有限。这些特点决定了嵌入式系统的开发

需要在宿主机上开发,通过交叉编译,利用串行口和网口进行开发。

试验一中我了解到了嵌入式系统的基本硬件设施,熟悉了几个接口:JTAG主要用于bootloader引导和调试,RS232串行接口用于bootloader初级引导。学会了用minicom这个串口通信软件建立开发板和宿主机之间的连接。明白了tftp协议传输的设置。通过网络文件系统NFS实现目录的挂载和文件的共享。

实验一是第一次接触嵌入式开发实验,很多东西都很陌生。实验中犯了很多错误,比如说实验过程中总是按照实验指导书的提示做,没有理解目录及操作的作用,以至于在目录挂载的时候,将/mnt目录挂载到了主机的/opt 目录,结果发现主机上交叉编译后,在目标机上没法正确运行。后来在看书和同学交流的帮助下,明白了NFS是有一个共享目录的,只能将主机的共享目录挂载到目标机上,否则无法实现共享。而共享目录和权限是在

/etc/exports中设定的。通过查看该文件可以知道现有的共享目录,实验室

是/exp;也可以通过编辑这个文件来修改共享目录。总之在实验中要明白实

验中每一个步骤的目的,搞清楚它们之间的联系,而不能照搬书上的内容。

实验二是内核的配置和编译,在实验过程中,我通过查看内核源码中的各个目录,结合书本知识,明白了内核各个目录的作用,也清楚了内核源码的结构。在内核配置时,我仔细查看了配置选项的功能,虽然有很多看不懂,而且实验之前内核选项已经基本配置好,不需要做太多的变更。实验中我又犯了比较低级的错误,在生成内核镜像后没有把它复制到正确的目录/tftpboot下,导致内核没法下载到开发板中。这说明我在实验一时没能理解/tftpboot的作用,它是tftp协议服务的主目录,文件只有放到这个目录下才能通过tftp服务下载。

实验三是文件系统的构建和编译。首先要理解busybox的作用。Busybox是一个集成的应用程序。文件系统中需要许许多多的程序,这些程序如果独立编译,会显得相当繁琐。利用busybox对应用程序进行裁剪,使其生成文件系统需要的应用程序。通俗地说Busybox是帮助构建文件系统的。实验开始时,我没有明白busybox的作用,也不清楚各个配置选项的功能,所有在一开始配置busybox时,只是简单地改了一下静态编译方式,设置了交叉编译的路径,其它的选项都没做改动。结果在建立好文件系统目录,生成文件系统镜像后加载文件系统并启动时发现文件系统中缺少很多选项和很多程序,系统无法正常启动。后来通过不断的完善,终于可以启动文件系统,并在开发环境下运行简单的程序。

实验的整个过程是比较曲折的,感觉自己在一直犯错误,然后纠正错误。

通过这次实验,基本上对嵌入式开发环境有了较深刻的认识。实验给我的经验是,以后在实验之前一定要多多查阅资料,帮助自己的理解。这样实验时才不会措手不及。

文件系统实验报告

嵌入式系统实验报告(二) --嵌入式文件系统的构建 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内核移植实验

合肥学院 嵌入式系统设计实验报告 (2013- 2014第二学期) 专业: 实验项目:实验四 Linux内核移植实验 实验时间: 2014 年 5 月 12 实验成员: _____ 指导老师:干开峰 电子信息与电气工程系 2014年4月制

一、实验目的 1、熟悉嵌入式Linux的内核相关代码分布情况。 2、掌握Linux内核移植过程。 3、学会编译和测试Linux内核。 二、实验内容 本实验了解Linux2.6.32代码结构,基于S3C2440处理器,完成Linux2.6.32内核移植,并完成编译和在目标开发板上测试通过。 三、实验步骤 1、使用光盘自带源码默认配置Linux内核 ⑴在光盘linux文件夹中找到linux-2.6.32.2-mini2440.tar.gz源码文件。 输入命令:#tar –jxvf linux-2.6.32.2-mini2440-20110413.tar对其进行解压。 ⑵执行以下命令来使用缺省配置文件config_x35 输入命令#cp config_mini2440_x35 .config;(注意:x35后面有个空格,然后有个“.”开头的 config ) 然后执行“make menuconfig”命令,但是会出现出现缺少ncurses libraries的错误,如下图所示: 解决办法:输入sudo apt-get install libncurses5-dev 命令进行在线安装ncurses libraries服务。

安装好之后在make menuconfig一下就会出现如下图所示。 ⑶配置内核界面,不用做任何更改,在主菜单里选择退出,并选“Yes”保存设置返回到刚命令行界面,生成相应配置的头文件。 编译内核: #make clean #make zImage 在执行#make zImage命令时会出现如下错误: 错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer 通过网上查找资料 于是在自己的mach-mini2440.c中加入 #include

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

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

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

操作系统简单文件系统设计及实现

简单文件系统的设计及实现 一、实验目的: 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) 一台运行Windows 2000 Professional或Windows 2000 Server的操作系统的计算机。 2) 计算机中需安装Visual C++ 6.0专业版或企业版 四、实验要求: (1)按照学校关于实验报告格式的要求,编写实验报告(含流程图); (2)实验时按两人一组进行分组,将本组认为效果较好的程序提交检查。

Linux文件系统实验报告

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

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

实验四 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

系统设计实验报告

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

目录软件需求说明书························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(标识符)设计说明

操作系统实验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");

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

实验四 文件系统实验报告

实验四文件系统实验 一 . 目的要求 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) ");

文件系统实验报告

实验二文件系统实验报告

一.实验简介 本实验要求在假设的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 指定的内存位

根文件系统移植

实验五根文件系统移植 实验目的: 通过本次实验,使大家学会根文件系统移植的具体步骤,并对根文件系统有更近一步的感官认识。让同学理解由于根文件系统是内核启动时挂在的第一个文件系统,那么根文件系统就要包括Linux启动时所必须的目录和关键性的文件,任何包括这些Linux 系统启动所必须的文件都可以成为根文件系统。 实验硬件条件: 1、实验PC机一台,TINY6410开发板一台 2、电源线,串口线,数据线。 实验软件条件: 1、VMware Workstation, 2、Ubuntu10.04 3、mktools-20110720.tar.gz 4、busybox-1.13.3-mini2440.tgz, 5、SecureCRT以及dnw烧写工具 实验步骤: 一、实验步骤 1.进入rootfs目录,查看压缩文件,具体操作指令如下:

2.发现有两个压缩文件夹,分别进行解压: 3.tar xvzf busybox-1.13.3-mini2440.tgz, 4.tar xvzf mktools-20110720.tar.gz,解压完成后, 5.查看文件夹#ls

二、实验步骤 1.修改架构,编译器#cd busybox-1.13.3/ 2.进入后查看#ls 3.#gedit Makefile 4.修改 164行 CROSS_COMPILE ?=arm-linux- 5.修改190行 ARCH ?= arm 6.保存后,退出!

三、实验步骤 1.修改配置 #make menuconfig 2.若出现如下提示

3.需调整到最大化。

4.把Busybox Settings -----→>Build Option ------→> Build BusyBox as astatic binary (no shared libs) 选择上,其他的默认即可。 然后一直退出,保存即可 5.接着执行 make接着执行 make install 6.最终生成的文件在_install 中 #cd _install

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

河北大学工商学院 课程设计 题目:操作系统课程设计 学部信息学部 学科门类电气信息 专业计算机 学号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、熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。 3、通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。 4、通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。 二、实验设备及软件: 一台PC(Linux系统) 三、实验方法(原理、流程图) 试验方法 (1)首先应当确定文件系统的数据结构:主目录、子目录以及活动文件等。主目录和子 目录都以文件的形式存放于磁盘,这样便于查找和修改。 (2)用户创建文件,可以编号存储于磁盘上。如file0,file1,file2…并以编号作为物理地 址,在目录中登记。 文件系统功能流程图 图1.文件系统总体命令分析

图 2.登录流程图图 3. ialloc流程图 图4.balloc流程图图5.密码修改流程图

图6.初始化磁盘 图 7.显示所有子目录 dir/ls 操作流程图

图8.创建文件 creatfile 、创建目录 mkdir 流程图 图9.改变当前路径 cd 操作流程图

实验原理 1.文件操作 ◆mkdir 创建目录文件模块,输入 mkdir 命令,回车,输入文件名,回车,即会在当前目录文件下创建一个名为刚刚输入的文件名的目录文件。在该创建过程中首先要判断该目录中有没有同名的文件,如果有的话就创建失败,还要判断在该目录下有没有创建文件的权限,有权限才可以创建。具体流程图查看第二节,系统流程图设计部分。 ◆del 删除文件模块,输入 del命令,回车,输入文件名,回车,即会在当前目录文件下删除一个名为刚刚输入的文件名的数据文件。在该删除过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了,还要判断在该目录下有没有删除文件的权限,有权限才可以删除。具体流程图查看第二节,系统流程图设计部分。 ◆ls 显示当前目录下所有目录的模块,输入 ls 命令,回车 ,即会在屏幕上显示当前目录下的所有目录。在该过程中要判断该目录中是否为空,如果为空就没有必要执行该操作了。执行操作时,要调用 readdir (INode inode )函数 ,先读入文件内容到 content 里面,然后直接输出。如果子目录里面还有子目录,则通过递归,一并输出来。具体流程图查看第二节,系统流程图设计部分。 ◆chmod 改变文件权限模块,输入 chmod 命令,回车,输入文件名,回车,即会根据不同类别的用户在屏幕上提示要改变哪一类用户的权限。如果是文件拥有者执行该操作,他可以选择修改自己、其他用户的权限;如果是文件所属组成员执行该操作,他可以选择修改自己、其他用户的权限;如果是其他用户执行该操作,他只能选择修改自己的权限;在该过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了。执行操作时,要判断对该文件有没有执行写操作的权利,没有就不能进行。具体流程图查看第二节,系统流程图设计部分。 ◆cd 改变当前所在目录的模块。输入 cd,回车,相应的字符串,回车,则会根据输入字符串的不同跳转到不同的目录下。如果字符串是‘ .’ ,则到当前目录;如果字符串是‘ ..’ ,则到父目录;如果字符串是‘/’ ,则到根目录;如果字符串是当前目录下的子目录,则到该子目录;如果字符串是一个决定路径,则到该绝对路径。当然在执行的时候要判断有没有该子目录或者该绝对路径,如果没有的话,就不能执行。具体流程图查看第二节,系统流程图设计部分。 2. 用户操作 ◆login 用户注销模块,输入 login ,回车,当前用户就退出了,需要重新登录。 ◆pw 用户修改口令模块,输入 pw ,回车,则会提示输入原始密码,输入正确了才可以提示输入新密码,并且要求新密码输入两次,两次一样了才能通过修改密码成功。具体流程图查看第二节,系统流程图设计部分。 ◆logout 用户退出系统模块,输入 logout ,回车,系统自动退出。

嵌入式Linux根文件系统制作

实训项目四-嵌入四Linux系统根文件系统制作一. 项目实施目的 了解 UP-CUP2440 型实验平台Linux 系统下根文件系统结构 掌握根文件系统的搭建过程 掌握busybox、mkcramfs等工具的使用方法 二. 项目主要任务 使用busybox生成文件系统中的命令部分,使用mkcramfs工具制作CRAMFS 格式的根文件系统。 分析根文件系统etc目录下重要配置文件的格式及语法,熟悉根文件系统的启动过程 三. 基本概念 1.文件系统基本概念 Linux的一个最重要特点就是它支持许多不同的文件系统。这使Linux非常灵活,能够与许多其他的操作系统共存。Linux支持的常见的文件系统有:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。随着时间的推移, Linux支持的文件系统数还会增加。Linux是通过把系统支持的各种文件系统链接到一个单独的树形层次结构中,来实现对多文件系统的支持的。该树形层次结构把文件系统表示成一个整个的独立实体。无论什么类型的文件系统,都被装配到某个目录上,由被装配的文件系统的文件覆盖该目录原有的内容。该个目录被称为装配目录或装配点。在文件系统卸载时,装配目录中原有的文件才会显露出来。在Linux 文件系统中,文件用i节点来表示、目录只是包含有一组目录条目列表的简单文件,而设备可以通过特殊文件上的I/O 请求被访问。 2.常见的嵌入式文件系统 嵌入式Linux系统一般没有大容量的磁盘,多使用flash存储器,所以多采用基于Flash(NOR和NAND)的文件系统或者RAM内存的文件系统。 (1)Flash根据结构不同分为 NOR Flash和NAND Flash。基于flash的文件系统主要有: jffs2:RedHat基于jffs开发的文件系统。

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

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

实验2.3_内核模块_实验报告

<内核模块>实验报告 题目: 内核模块实验 1、实验目的 模块是Linux系统的一种特有机制,可用以动态扩展操作系统内核功能。编写实现某些特定功能的模块,将其作为内核的一部分在管态下运行。本实验通过内核模块编程在/porc文件系统中实现系统时钟的读操作接口。 2、实验内容 设计并构建一个在/proc文件系统中的内核模块clock,支持read()操作,read()返回值为一字符串,其中包块一个空格分开的两个子串,分别代表https://www.doczj.com/doc/8f16905449.html,_sec和https://www.doczj.com/doc/8f16905449.html,_usec。 3、实验原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合。在装载这些模块时,将它的代码链接到内核中。Linux模块可以在内核启动时装载,也可以在内核运行的过程中装载。如果在模块装载之前就调用了动态模块的一个函数,那么这次调用将会失败。如果这个模块已被加载,那么内核就可以使用系统调用,并将其传递到模块中的相应函数。 4、实验步骤 编写内核模块 文件中主要包含init_module(),cleanup_module(),proc_read_clock()三个函数。其中init_module(),cleanup_module()负责将模块从系统中加载或卸载,以及增加或删除模块在/proc中的入口。read_func()负责产生/proc/clock被读时的动作。 内核编译部分过程:

过程持续较长时间. ●编译内核模块Makefile文件 Makefile CC=gcc MODCFLAGS := -Wall -D__KERNEL__ -DMODULE –DLINUX clock.o :clock.c /usr/include/linux//version.h $(CC) $(MODCFLAGS) –c clock.c echo insmod clock.o to turn it on echo rmmod clock to turn ig off echo 编译完成之后生成clock.o模块文件。 注:此参考makefile文件包含错误, 于是从网上寻找相关教程自行修改得到合适的Makefile文件 ●内核模块源代码clock.c #define MODULE #define MODULE_VERSION “1.0” #define MODULE_NAME “clock” #include #include #include int proc_read_clock(char* page, char** start, off_t off,int count,int* eof,void* data) { int len; struct timeval xtime;

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

福建农林大学计算机与信息学院 实验报告 课程名称:软件设计与体系结构 姓名:陈宇翔 系:软件工程系 专业:软件工程 年级: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] 产生的图形如下图:

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