嵌入式课设报告---基于U盘的LINUX操作系统

嵌入式课设报告---基于U盘的LINUX操作系统
嵌入式课设报告---基于U盘的LINUX操作系统

华北水利水电学院课程设计报告

课程名称: 嵌入式系统

姓名:

学号:

班级:

专业: 电子信息工程

日期: 2013/7/4

目录

前言--------------------------------------------------------------------------2 1课程设计的目的和要求------------------------------------------------------2

1.1课程设计的目的---------------------------------------------------------2

1.2课程设计的基本要求-----------------------------------------------------2 2前期准备------------------------------------------------------------------2

2.1基本工作原理-----------------------------------------------------------3

2.2 开机载入程序GRUB2-----------------------------------------------------3

2.3 Busybox简介-----------------------------------------------------------4

2.4 根文件系统简介-------------------------------------------------------- 4

2.5 实验平台--------------------------------------------------------------5

2.6 实验流程--------------------------------------------------------------5 3编译linux内核-------------------------------------------------------------6 4制作启动盘-------------------------------------------------------------6 5建立根文件系统------------------------------------------------------------8 5.1 编译Busybox-----------------------------------------------------------8

5.2 建立文件系统-----------------------------------------------------------9

6 系统整合及测试------------------------------------------------------------12

7 实验心得------------------------------------------------------------------12 7参考文献-----------------------------------------------------------------13 附录----------------------------------------------------------------------13

前言

现在的计算机技术简直日新月异,U盘,固态硬盘等等存储介质做的可以越来越大,并越来越便宜。电脑已经不是稀罕物了,办公室,家里都有,并且还不只一台。电脑多了,给我们带来方便的同时,有时候也会弄得很麻烦。比如开发工具,写的文档,编的程序,在家里,办公室的电脑上都要装一装。很多实验室,生产线的在线控制,监测等等,这些的维护对一个技术人员来说工作量是非常的繁复。也许这些都可以随着技术的发展越来越方便。如果把操作系统装在U盘里,在家里,办公室,随便插在哪台机器上都可以启动自己的定制的桌面,工作的环境,是多么的方便啊!不必好几台机器都要同步文档,程序等等。

本课程设计就是构建一个基于U盘存储的linux操作系统,通过支持USB硬盘启动方式的PC机,可以启动U盘上的linux系统。

1 课程设计的目的和要求

1.1课程设计的目的

通过本次课程设计,学会如何构建一个基于U盘存储的linux操作系统,了解linux 操作系统的具体的构建过程,和linux操作系统的基本组成部分,以及掌握linux操作系统的基本操作

1.2 课程设计的基本要求

(1)通过实验开发平台提供的Linux操作系统中的make等工具重新配置新内核,在功能齐全的前提下,要求所配置的内核尽量小。

(2)制作一张启动盘(Boot Disk)。要求将该启动盘放于一张U盘上,用GRUB2引导程序引导,其引导内核为上面新配置的内核,同时考虑将它所引导的根文件系统放于同一U盘上。

(3)制作根文件系统盘。要求该启动盘也能放于同一张U盘上,并能通过上面做成的启动盘成功引导并进入系统,从而得到一个微型的Linux 操作系统。

2 前期准备

2.1 基本工作原理

一个Boot/Root 盘实际上是一个完整系统的缩影,基本上是放于一张U盘上的一个小型而自给自足的Linux系统,它能够执行一个完整系统的大部分功能。故在制作启动盘之前,你应该了解基本的Linux 启动流程。

开机后,系统执行存放在ROM中的BIOS程序,然后根据的设置BIOS决定是从硬盘还是软盘启动。若是从硬盘启动,则读入0柱面0磁头1扇区的MBR,引导系统的执行。一般在Linux OS中启动盘的0柱面0磁头1扇区中装的是启动装载器GRUB2,它定位内核并装载内核,最后执行内核。如果GRUB2装在MBR(Master Boot Record),则先由BIOS 把GRUB2代码调入内存,然后跳转执行GRUB2,再装载执行内核,即:BIOS -> GRUB2(在MBR中)-> KERNEL;一旦内核装载完毕后,开始初始化系统所有硬件设备,当硬件设备初始化完成后,启动过程会就此停止而等待根文件系统的装载。

接着,系统在根文件系统上找到init 程序并执行它,init 程序寻找它的配置文

/etc/inittab、/etc/rc.S,并开始执行其中的脚本,这些脚本是一些SHELL 命令的组合,用来执行下面一些命令,如加载所需的模块、装载SWAP、初始化网络、装载fstab 中列出的所有驱动器等,

至此,系统启动流程完毕

图 1 LINUX的启动流程

2.2 开机载入程序—GRUB2.0

GRUB2是一个在Linux 环境下编写的引导安装(Boot Loader)程序(故其安装和

配置都要在Linux下进行),其主要功能是引导Linux OS的启动。GRUB不仅可作为Linux 分区的引导扇区内的启动程序,而且可放入MBR中完全控制Boot Loader的全过程。此次课程设计使用的GRUB2,主要作用是引导扇区的启动程序,加载linux内核和根文件系统。

2.3 Busybox简介

Busybox 是一个集成了一百多个最常用linux命令和工具的软件。Busybox包含了一些简单的工具,例如ls、cat、cp等,甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小。我们平时用的那些linux命令就好比是分立式的电子元件,而Busybox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍,在嵌入式linux中,Busybox有非

常广的应用,另外,大多数linux发行版的安装程序中都有 Busybox的身影,安装linux的时候按ctrl+alt+F2就能得到一个控制台,而这个控制台中的所有命令都是指向Busybox 的链接。Busybox的小身材大作用的特性,给制作一张软盘的linux带来了及大方便。Busybox 被称作“The Swiss Army Knife of Embedded Linux”,Busybox实质是提供一个很小的可执行程序,通过对其的链接,可以建立其他常用的linux系统命令。它仅仅用一个可执行文件就可以提供一个基本的 Linux 操作系统所需的常用命令。不但体积小,配置起来也方便,只需很少的配置文件即可以运行。一个由 Busybox 构成的Linux 操作系统加上内核完全可以做到只占用 2、3M 空间,甚至可以更小。

Busybox 是 Linux下的一个开放源代码软件,编译的时候需要 gcc和glibc 的支持,也可以用 uClibc 代替 glibc。(glibc是gnu发布的libc库,即c运行库)。所以需要保证你的开发环境是否安装了gcc,若没安装,就可以通过命令apt-get install build-essential来安装。从Busybox的官方网站https://www.360docs.net/doc/c26594125.html,上下载Busybox的源代码。本课程设计所用的busybox版本是busybox-1.2.0.tar.bz2。

2.4 根文件系统简介

Windows操作系统可以将硬盘划分为C,D,E,F等各个盘分别访问,linux同理将MTD 设备划分为若干个分区,在不同的分区存放不同类别的文件。与windows的C盘类似,linux一样要在一个分区上存放系统启动所必需的文件如下图所示:

根文件系统必须包含支持完整Linux 系统运行所需要的每一个项目,为此它必须至少包括能让Linux系统运行的最起码需求(即基本的文件系统构架,其它需求可在系统运行时或系统运行之后动态加载):

1.最起码的目录:/dev,/bin,/sbin,/etc,/usr;

2.最基本的命令文件:ash(或bash 等,shell 是必不可少的),cp,rm,ls,mkdir,cd;

3.最起码的配置文件:rc,inittab,etc.;

4.最起码的设备文件:/dev/fd0,/dev/tty*,/dev/hd*,console,/dev/ram0,etc.;

上述文件大小远远小于4M,所用U盘大小为1G。当用U盘启动时,文件自己先解压到内存中,形成一个虚拟启动盘(Ramdisk),通过Ramdisk来控制启动。因此,为了能够创建以上的根文件系统,必须有一个空闲的能放下约4M 文件的Ramdisk。

2.5 实验平台

开发环境:虚拟机VMware9.0、Ubuntu12.10

开发工具:内核源码:linux-2.6.18.tar.bz2或安装linux的主机中/usr/kernel下的内核版本、Busybox版本:busybox-1.2.0.tar.bz2、U盘:Kingston2.0 4G

2.6 实验流程

操作系统的设计本身是一个非常复杂和困难的工作,本实验参考Linux 操作系统的启动流程和内核架构,按照如下流程实现了小型操作系统的设计:

a.编译linux内核

b.制作启动盘

c.建立根文件系统盘

d.系统整合及测试

3 编译linux内核

此步主要是剪裁linux内核,以求简洁实用,适合U盘(或嵌入式)系统。裁减内核的流程如下:

1、在编译之前需要准备以下几个软件包:build-essential,libcurses5-dev、

kernel-package(注:(1)#apt-cache policy XXX,查看软件XXX是否安装。(2)使用apt-get 所下载的用于安装的软件包,在/var/cache/apt/archives中,如果执行过apt-get clean,那么原始下载包就找不到了。)

=> apt-get install build-essential //安装gcc, make等

=> apt-get install libncurses5-dev //安装make menuconfig时必须的库文件

=> apt-get install kernel-package

2、下载linux内核,解压安装

可以从https://www.360docs.net/doc/c26594125.html, https://www.360docs.net/doc/c26594125.html, 上下载linux内核,可以直接使用安装linux的主机中/usr/kernel下的内核版本。在内核版本使用的问题,觉得应该多尝试几个不同的版本,内核版本不是越新越好,也不是越老越好。本课程设计编译内核版本为linux-2.6.18.tar.bz2,但在测试时使用的内核是主机本身的内核。具体操作如下:=>mkdir /usr/myos

=>cp linux-2.6.18.tar.bz2 /usr/myos/

=>cd /usr/myos

=>tar -jxvf linux-2.6.18.tar.bz2

=>cd linux-2.6.18

3、配置内核选项

=>make menuconfig

配置menuconfig里选项详见附录

4、编译内核

=>make

make完成后会在/usr/myos/linux-2.6.18/arch/i386/boot/目录下生成内核文件bzImage。这就是我们需要拷贝到U盘下的内核。

4制作启动盘

准备一个U盘,并在其上面建立linux分区和ext2文件格式。在对U盘进行分区

之前必须知道U盘在系统中设备文件,U盘在linux被识别scsi设备,因此系统分配给

U盘在系统中的设备文件一般为sda、sdb、sdc等,如果系统中只有一个scsi设备,则插入的第一个U盘的设备文件一般为/dev/sda。对于VMware下安装的linux系统而言,第一个U盘设备文件一般为/dev/sdb。实际的设备文件可以通过“fdisk - l“指令来查看。知道U盘设备文件之后,就可以对U盘进行分区和格式化,具体操作如下:

1、利用linux自带的fdisk工具格式化u盘为启动盘

=> fdisk -l //查看u盘的挂载点

=> fdisk /dev/sdb1 //进入fdisk,格式化u盘(注释,U盘在电脑上为第二块设备,故是sdb1)

=>Command (m for help ): m //输命令m查看可用命令及说明

=>Command (m for help ): d //删除旧分区

=>Command (m for help ): n //增加一个新分区

=>p //输入p,回车,设置该分区为主分区;

=>partition number(1-4):1 //输入1,建立一个分区,分区号为1

=>First cylinder(1-1019,default 1): //回车,选择默认

=>Last cylinder or +size or +sizeM or +sizeK(1-1019,default 1019)://同上

=>a //输入a,激活分区命令

=>1 //激活刚建的分区1

=>p //查看分区表,此时boot选项下出现*号,说明分区已被激活

=>w //将分区表写入并退出

2、将u盘格式化为 ext2格式

=> umount /dev/sdb1 //先卸载u盘

=> mke2fs /dev/sdb1 //格式化u盘

3、安装GRUB2

=>mount /dev/sdb1 /mnt //挂载u盘

=>grub-install --root-directory=/mnt /dev/sdb //安装开发主机的grub到u盘

4、在grub目录下建立配置文件grub.cfg

=>cp /boot/grub/grub.cfg /mnt/boot/grub //拷贝主机的grub.cfg

=>cd /mnt/boot/grub

=>gedit grub.cfg //删除不必要的菜单项并添加自己的菜单项,但需要权限

menue ntry “Hello My Mini OS{

insmod ext2

set root=(hd0,1)

linux /bzImage root=/dev/sdb1

root=UUID=e3c3f63c-9224-47cf-b0fb-47b4155cfe34 //我的U盘设备号initrd /image.gz

}//测试时内核用的是主机的内核vmlinuz-3.5.0-34-generic

5 建立根文件系统

5.1 编译Busybox

BusyBox是实现标准Linux工具的一个独立可执行方案。不但包含有简单的工具,如cat、ls等,还集成压缩了Linux更大、更复杂的工具和命令,例如grep、find、mount 以及telnet。利用它,我们可以建立我们需要的系统命令。具体操作如下:

1、下载解压安装Busybox

=>cp busybox-1.2.0.tar.bz2 /usr/myos/

=>cd /usr/myos

=>tar -jxvf busybox-1.2.0.tar.bz2

=>cd busybox-1.2.0

2、配置Busybox

=> make menuconfig

里面要选择的配置选项:

1).选择Busyboxsetting=>Build Options=>Build BUsyBox as a static binary (no shared libs)

2).Busyboxsetting=>Installation Options=>Don’t use /usr

3).shell=>job control(若不加,则tty can not access)

4). shell里面的ash

5). init utility里面的init

6).在coreutils里面,可选一些其他常用命令如ls、cd,mkdir……

其它选项可以采用默认值。之后选择保存,退出配置环境。

3、编译Busybox

=>make

4、安装Busybox

=>mkdir /home/filesystem //建立临时目录;

=>make PREFIX=/home/filesystem install //将编译busybox生成的文件保存到

/home/filesystem目录下

安装完成后,会在/home/filesystem目录下建立bin和sbin子目录,其中包含busybox可执行文件和所有busybox支持的命令对其的链接。通过查看bin和sbin可以清楚的看到busybox中究竟支持了那些命令和工具。如果需要的命令没有出现在这些目录中,就需要重新配置、编译busybox,使其支持。

5.2 建立文件系统

1、创建一些系统启动需要的配置文件inittab,rc.S,fstab

=> mkdir /home/filesystem/etc

=> cd /home/filesystem/etc

=> gedit inittab

在inittab文件中写入:

::sysinit:/etc/rc.S

::askfirst:/bin/ash

::respawn:-/bin/ash

::restart:/sbin/init

tty2::askfirst:-/bin/ash

::ctrlaltdel:/bin/umount -a –r

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

:shutdown:/sbin/swapoff –a

在rc.S文件中添加以下内容:

#!/bin/ash

cd /

mkdir /proc

mkdir /usr/sbin

echo "Processing etc/rc.S"

/bin/mount -t proc /proc /proc

echo"mount proc is done"

export PATH=/bin/:/sbin/:/usr/sbin/

mount -a

echo "****************************************************"

echo " Created by maoxinglin @ 2013.07.01"

echo " Good Luck"

echo "****************************************************"

这是一个脚本文件,可以在里面添加自动执行的命令。把rc.S文件的权限改为777 =>gedit fstab

添加以下内容:

# proc /proc proc defaults 0 0

/dev/sdb1 /media auto rw,user,noauto,exec,utf8 0 0 2、建立设备结点文件

=>mkdir /home/filesystem/dev

=>cd /home/filesystem/dev

=>mknod console c 5 1

=>mknod fb0 c 29 0

=>mknod hda b 3 0

=>mknod hda1 b 3 1

=>mknod loop0 b 7 0

=>mknod null c 1 3

=>mknod ram0 b 1 0

=>mknod tty c 5 0

=>mknod tty0 c 4 0

=>mknod tty1 c 4 1

=>mknod tty2 c 4 2

=>mknod tty3 c 4 3

=>mknod tty4 c 4 4

=>mknod tty5 c 4 5

=>ln -s fb0 fb

3、制作文件系统映像。

=> dd if=/dev/zero of=/home/image bs=1024 count=16384 //新建一个空的文件,大小为16M

=> losetup /dev/loop1 /home/image //把整个空文件映射到一个设备文件上面

=> mke2fs /dev/loop1 //格式化映像为ext2格式

=> mount /dev/loop1 /mnt/ //将格式化好的映像挂载到主机的文件系统上面来

=> cp /home/filesystem/* /mnt/ -ar //把我们建立好的文件系统从/home/filesystem 拷贝过来, 其中参数a表示拷贝符号链接

=> umount /dev/loop1 //把映像从系统中卸载出来

=> losetup -d /dev/loop1

=> sync //更新 i-node 表,并将缓冲文件写到硬盘中

=> cd /home

=> gzip -9 image //压缩制作好的映像

完成压缩文件系统镜像后,可以在/home下看到image.gz的压缩文件。这个就是我

们需要拷贝到U盘中文件系统镜像。

6 系统整合及测试

把在上面步骤中制作好的文件系统 image.gz 拷贝到U盘的/boot/下面。将内核镜

像bzImage文件,也拷贝它到u盘的/boot下面。卸载U盘。

重新开机,进入BIOS,设置USB为第一启动项,若进入引导界面,则grub启动成功,否则,grub程序错误,或者发生不可预知的错误,如果出现grub提示符,则表示找不到grub.cfg文件,需要考虑重做grub程序了,或者通过修改命令root {hdx,y},(x表示第x块硬盘,y表示第y分区),重启,若再不行,就需要重做grub。

正常出现菜单,则选择进入你所编写的linux,本设计为 Hello My MiNi OS,若点击出现file not found,则表示找不到内核,(我之前用2.6.18版本的内核,就是无法加载内核,更改为主机的内核版本时,就可以加载内核,并顺利进入文件系统)按ctr+alt+delete重启(虚拟机中按ctr+alt+insert重启),若正常,则进入程序,内核加载完之后跳转到busybox,出现命令提示符,因为本设计没有采用login程序,所以最后进入不需要登入。

关于测试命令行,输入一些在busybox编译时已加入的指令,如果可用,则这个设计已经基本能够顺利走下来,如果提示有需要用到命令没有找到,则在表示在编译busybox时没有加入这项命令,需要重新编译。

关于进一步测试系统是否能够识别U盘自身时,发现无法识别。这就意味着这个U盘系统只能在这个虚拟的文件系统下运行,无法从busybox中出来执行其他的程序。虽然后来经过尝试,但还是无法从busybox中出来,只能执行一些busybox的指令,如reboot、poweroff等。据初步估计这应该跟USB驱动模块以及一些库有些关系,内核没有把这些模块加载上,建文件系统时没有把与之相关的一些库拷贝进出。

7 实验心得

此次嵌入式系统课程设计让我进一步巩固了在课堂上所学到的知识,并运用到实际的设计当中。通过此次课设让我对嵌入式有了更深层次的了解,激发了对嵌入式的兴趣。其间,查阅资料、老师指导、与同学交流,反复修改,反复调试、虽然最终并没有做到老师的最终要求,从虚拟的文件系统中出来,执行自己的程序。但我还是收获很多,这其

中的每一个过程都是对自己能力的一次检验和充实。比如学会了查阅相关资料、分析问题,学会在一种方法走不通的时候,尝试其他别的方法来实现同一目的。这也提高了自己解决问题的能力。

通过这次课设了解嵌入式操作系统的启动流程,熟悉了内核裁剪移植以及根文件系统的设计步骤。学习了grub如何引导内核及文件系统镜像的方法,同时锻炼了工程设计实践能力,培养了自己独立设计能力,更加坚固了自己学习的信心,完善了自己前期理论学习的同时加强了自己的动手实践能力。

但通过此次课程设计也暴露了我们自己专业基础知识的很多不足之处,比如缺乏综合应用知识的能力,对材料的不了解等。明白自己知识还很浅薄,在以后的学习中不断的改进自身的这些缺点,提升自己。

8 参考文献

[1] 嵌入式系统原理与设计王勇编著.杭州:浙江大学出版社.2007.2

[2] https://www.360docs.net/doc/c26594125.html,/techdoc/system/2007/06/07/959536.shtml

[3] https://www.360docs.net/doc/c26594125.html,/uid-22028680-id-2421497.html

[4] https://www.360docs.net/doc/c26594125.html,/viewarticle.php?id=85280

[5] https://www.360docs.net/doc/c26594125.html,/techdoc/system/2009/07/04/1121966.shtml

[6] https://www.360docs.net/doc/c26594125.html,/view/d741c7fc0242a8956bece477.html

附录

在menuconfig中配置:

详细介绍内核配置选项及删改情况

第一部分:全部删除

Code maturity level options ---> 代码成熟等级选项

[]Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选。

第二部分:除以下选项,其它全部删除

General setup—〉

System V IPC (IPC:Inter Process Communication)

第三部分:除以下选项,其它全部删除

Loadable module support ---> 可引导模块支持建议作为模块加入内核

[] Enable loadable module support

[]Automatic kernel module loading

第四部分:全部删除

Block layer-----〉块设备

第五部分:除以下选项,其它全部删除

Processor type and features ---> 处理器类型

Subarchitecture Type (PC-compatible) ---> 这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构

(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。

Processor family(386) : 它会对每种CPU做最佳化,让它跑的好又快,一般来说,你是什么型号的就选什么型号的就好。我选的是386,这样内核会省下不少空间

第六部分:除以下选项,其它全部删除

Power management options (ACPI, APM) ---> 电源管理选项

[ ] Power Management Debug Support 电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。

ACPI Support ---〉高级电源接口配置支持,如果BIOS支持,建议选上这项[]Button

第七部分:除以下选项,其它全部删除

Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> 总线选项

[]PCI support

PCI access mode (Any) ---> PCI外围设备配置,强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct检测PCI设备。

第八部分:除以下选项,其它全部删除

Executable file formats --->

Kernel support for ELF binaries ELF是开放平台下最常用的二进制文件,它支持不同的硬件平台。一定要选。

第九部分:除以下选项,其它全部删除

Networking

Networking options --->

[]Unix domain sockets

[]TCP/IP networking

第十部分:除以下选项,其它全部删除

Device Drivers --->设备驱动

Block devices-------〉

[]Compaq SMART2 support

[] Compaq Smart Array 5xxx support

[]Loopback device support

[] RAM disk support

SCSI device support ---> 里面有关于USB支持的,要选择

[]SCSI device support USB要用,必须选择

[]legacy /proc/scsi/ support USB要用,必须选择

[]SCSI disk support USB要用,必须选择

SCSI Low-level drivers

[]Serial ATA(SATA) support

[]Intel PIIX/ICH SATA support 这个必须选择,否则无法产生引导文件

[]Via SATA support

Networking device support ---> 这个下面是选网卡驱动,一定要选

Ethernet(1000mbit)-?我的电脑是千兆网卡所以就选这个

[]broadcom Tigon3support

Input device support ---> 这个里面要设置你的鼠标键盘什么的

[]Provide legacy /dev/psaux device

Graphics support --->

[]Support for frame buffer devices 支持Frame buffer的,一定要选择USB support --->

[]USB device filesystem 这个好象是用U盘必须的

[]EHCI HCD (USB 2.0) support 有usb2.0就选上把,编译成模块

[]OHCI HCD support 必须选择,编译成模块

[]UHCI HCD (most Intel and VIA) support 必须选择,编译成模块

[]USB Mass Storage support 用U盘必须选择

USB Human Interface Device (full HID) support 里面选择usb鼠标和usb 键盘,如果你有一定选上这个必需选

HID input layer support 应该选择

/dev/hiddev raw HID device support如果这里有USB键盘和鼠标选项,一定要选择

第十一部分:除以下选项,其它全部删除

file systems --->文件系统

<*>Second extended fs support

Ext2 extended attributes

Ext2 POSIX Access Control Lists

Ext2 Security Labels

Ext3 journalling file system supportExt3 extended attributes

Ext3 POSIX Access Control Lists

Ext3 Security Labels 以上这些肯定是要选择的,linux的标准文件系统

Kernel automounter support 内核自动挂载的,当然要选

Kernel automounter version 4 support (also supports v3) 当然要选

DOS/FAT/NT Filesystems --->

DOS FAT fs support

MSDOS fs support

VFAT (Windows-95) fs support

NTFS file system support

Native language support?语言支持,这里就支持英语和汉语就行了,不多说了

[]NLS ISO 8859-1 必须选择,这个是关于U盘挂载的。

CD-ROM/DVD Filesystems ---> 这个是关于挂载ISO文件的,用的话就选。

<*>ISO 9660 CDROM file system support

余下部分: 全部删除

File Systems:

<*> Second extended fs support

<*> /proc support # proc文件系统很有用

<*> ext3

<*> FAT,FAT32,NTFS

<*> NFS support

Partion types: 选择PC BIOS

操作系统课程设计报告书

题目1 连续动态内存管理模拟实现 1.1 题目的主要研究内容及预期达到的目标 (1)针对操作系统中内存管理相关理论进行设计,编写程序并进行测试,该程序管理一块虚拟内存。重点分析三种连续动态内存分配算法,即首次适应算法、循环首次适应算法和最佳适应算法。 (2)实现内存分配和回收功能。 1.2 题目研究的工作基础或实验条件 (1)硬件环境:PC机 (2)软件环境:Windows XP,Visual C++ 6.0 1.3 设计思想 首次适应算法的实现:从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法的目的在于减少查找时间。为适应这种算法,空闲分区表中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高址空间保留大的空闲区。 循环首次适应算法的实现:在分配内存空间时,不再每次从表头开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。 最佳适应算法的实现:从全部空闲区中找到能满足作业要求的、且最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表中的空闲分区要按从小到大进行排序,从表头开始查找第一个满足要求的自由分配。 1.4 流程图 内存分配流程图,如图1-1所示。

图1-1 内存分配流程图内存回收流程图,如1-2所示。

图1-2 内存回收流程图 1.5 主要程序代码 (1)分配内存 void allocate(char z,float l) { int i,k; float ad; k=-1; for(i=0;i= l && free_table[i].flag == 1) if(k==-1 || free_table[i].length

华科操作系统实验

华科操作系统实验 Corporation standardization office #QS8QHH-HHGX8Q8-GNHHJ8

课程实验报告 课程名称:操作系统课程设计 专业班级: 学号: 姓名: 指导教师: 报告日期: 计算机科学与技术学院

目录

实验1:进程并发实验 1.1 实验概述 通过本次进程并发实验,让同学更加熟悉和理解Linux编程环境。 1.2 实验内容 本次实验的内容主要分为两个任务: 1.编写一个C程序,用read、write等系统调用实现文件拷贝功能。命令形式:copy <源文件名> <目标文件名> 2. 编写一个C程序,使用图形编程库 (QT/GTK)分窗口显示三个并发进程的运行(一个窗口实时显示当前系统时间,一个窗口循环显示0到9,一个窗口做1到1000的累加求和,刷新周期均为1秒)。 1.3 实验设计 任务1:实验1的第一个阶段需要实现一个简单的C语言程序,首先需要有一个复制的源文件,同时需要创建一个存放复制内容的复制文件,文件复制传输的中间站可以设置一个缓冲数组,此次试验设计了一个大小为10个字节的数组。打开复制源文件,返回一个INT标识,使用readbuf()函数,每次读取10个字节的内容,将内容存放到缓冲区数组,使用writebuf()函数将缓冲区的10个字节写到复制文件中,重复上述过程直到将整个复制过程完成。 任务2:实验的第二个阶段是实现进程的同步,实现的工具是QT。主要实现3个进程的同步,3个进程分别为:实时显示系统时间、循环显示0-9、显示1-1000的累加和。以上程序的刷新时间设置为1秒钟。使用的是c++编程语言。为了实现3个进程。需要为这3个进程分别创建3个不同的类,这3个不用的类具有不同的成员函数,使用成员函数来实现进程的所代表的具体细节。为了实现进程的结果能实时更新,需要调用connect()函数,该函数的功能是每当其中的timer每次发生变化时,就回调用该类的成员函数,也就是进程的具体实现,从而实时显示进程的细节内容。而3个进程的实现是在Main中创建3个类,对应3个进程,调用类的一些函数实现进程并发。

操作系统课程设计报告

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告 学院:计算机学院 专业班级: 13软件工程1班 提交时间: 2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。

二、环境条件 系统: WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景 计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。

(4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。 2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下:钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<

华中科技大学数据库实验报告

数据库实验报告 一.实验目的 运用所学知识设计并实现一个最小应用系统,初步了解数据库系统的开发过程,积累实际开发经验,为进一步的提高打下必备的基础 二.实验内容 实验一 1.建立数据库”选课信息” 2.在数据库中建立以下三张表 学生表(学号,姓名,性别,院系) 课程表(课程号,课程名,考试方式) 选课表(选课号,学号,课程号,成绩) 3.在JManager中直接插入、修改、删除记录 4.对所建立的三张表定义完整性约束及外键约束 5.采用 insert语句插入新记录 6.采用update语句修改元组信息 7.采用delete语句删除记录 实验二 1.采用sql语句完成对单表的简单查询 2.采用sql语句完成对单表的组合查询,适当引入集函数 3.采用sql语句完成对两表的简单联合查询 4.采用sql语句完成对三表的简单联合查询 5.定义视图并执行简单的查询操作 三. 实验过程 首先创建一个新数据库命名为CW,创建一个新用户,并且将CW的权限赋予给新用 户user1 CREATE DATABASE cw DATAFILE 'cw.dbf' SIZE 128; CREATE LOGIN USER1 IDENTIFIED BY USER11; CREATE USER user1 AT cw; ALTER USER https://www.360docs.net/doc/c26594125.html,er1 RELATED BY user1; GRANT RESOURCE TO user1 AT cw; 实验一 创建用户表STU,其中约束条件:学号SNO为主码,性别SEX默认为男 CREATE TABLE STU ( SNO VARCHAR(10) NOT NULL PRIMARY KEY, SEX VARCHAR(2) NOT NULL DEFAULT '男', DEP VARCHAR(20) NOT NULL, NAME VARCHAR(10) )

嵌入式课程设计报告

嵌入式课程设计报告设计题目:电子密码锁

、 摘要 随着科技和人们的生活水平的提高,实现防盗的问题也变得尤为突出,传统机械锁构造简单,电子锁的保密性高,使用灵活性好。根据需要设计运用W90P170开发板,制作一款电子密码锁,密码锁通过键盘输入密码,通过在LCD的文字和图片显示当前密码锁的状态。实现设置密码,密码验证,错误密码自锁、图片显示的功能。 目录

一、选题意义及系统功能 (3) 二、硬件设计及描述 (4) 三、软件设计及描述 (5) 四、程序代码 (6) 五、课程设计体会 (11) 六、运行结果 (12) 七、心得体会 (12) 八、参考文献 (13) 九、附录 (13) 一、选题意义及功能描述 1、选题意义 电子密码锁是通过密码输入来控制电路或是芯片工作,从而控制机械的开关闭合、开锁的电子产品。随着科技提高和人们生活水平的提高,对电子密码锁的需求增加。电子密码做较传统的机械锁安全性能更高。 特点如下: (1)保密性好,编程量大,随机开锁的成功率几乎为零。

(2)密码可变,用户可以随时改变密码,防止密码被盗,同时也可以避免人员的更替而使锁的密级下降。 (3)误码输入保护,输入密码多次错误是,系统进行自锁。 (4)无活动零件,不会磨损,寿命长。 (5)使用灵活性好,无需佩戴钥匙,操作简单。 2、功能描述 基本功能: (1)从键盘输入任意6位数字作为密码,将这六位数字经过USI总线存储到Flash芯片中,设置密码完成。 (2)从键盘输入密码,比较键盘输入的密码与Flash中存储的密码是否相同。 (3)如果密码正确,则LED灯点亮;如果密码不正确,则LED灯闪烁,而且如果连续三次输入密码错误则系统锁定,不允许再次输入密码。 扩展功能: (1)首先显示“请输入密码:”,显示密码锁背景图片1。 (2)如果密码正确则显示“密码正确”,显示成功进入系统的背景图片2。 (3)如果密码不正确则显示“密码不正确,请重新输入:” (4)如果连续三次输入密码错误则显示“对不起,您已经连续三次输入密码错误,系统锁定”,显示图片1。

华中科技大学计算机学院操作系统课程设计报告[1]

华中科技大学 嵌入式操作系统课程设计实验报告 院系: 计算机科学与技术学院 专业: 班级: 姓名: 指导老师: 报告时间: 计算机科学与技术学院

目录 1.课程设计目的 (3) 2.课程设计环境搭建 (3) 3.内容一:熟悉和理解Linux编程环境 3.1 内容要求 (5) 3.2 设计过程及实现 (5) 4.内容二:掌握添加系统调用的方法 4.1 内容要求 (9) 4.2 设计过程及实现 (9) 5.内容三:掌握添加设备驱动程序的方法 5.1 内容要求 (17) 5.2 设计过程及实现 (17) 6.内容四:理解和分析/proc文件 6.1 内容要求 (22) 6.2 设计过程及实现 (22)

1 课程设计目的 (1)掌握Linux操作系统的使用方法; (2)了解Linux系统内核代码结构; (3)掌握实例操作系统的实现方法。 2 课程设计环境搭建 (1)windows 7上,利用虚拟机软件VMware软件搭建的linux平台:◎Ubuntu 11.10 (安装包:ubuntu-11.10-desktop-i386) ◎内核:linux-headers-3.0.0-12-generic (2)更改root登录: 在现阶段Ubuntu的系统中,是不允许直接以root身份登录系统的,但是在做课设的过程中,需要大量的使用root权限来进行命令的操作。如果以普通用户登录ubuntu,会连编辑一个文件都非常周折。为此,我找到了一种修改系统文件,以达到直接使用root身份登录的方法: ◎开始的时候,只能以普通用户登录,用Ctrl+Alt+T打开终端: 初始化/修改root密码 sudo passwd root 用vi编辑器修改这个文件: sudo vi /etc/lightdm/lightdm.conf 在文件最后加入这么一行代码: greeter-show-manual-login=true 然后保存退出,sudo reboot 重启系统。之后就可以输入root用户登录。(3)在添加系统调用中用到的其他内核包: ◎下载和当前实验环境最为接近的系统版本(这点很重要) 使用apt-get install linux-source-3.0.0 命令, ◎下载结果是linux-source-3.0.0.tar.bz2 ◎解压命令:tar –xjvf linux-source-3.0.0.tar.bz2 –C /usr/src ◎解压后,在/usr/src目录下得到内核文件夹linux-source-3.0.0

操作系统课程设计报告

上海电力学院 计算机操作系统原理 课程设计报告 题目名称:编写程序模拟虚拟存储器管理 姓名:杜志豪.学号: 班级: 2012053班 . 同组姓名:孙嘉轶 课程设计时间:—— 评语: 成绩: 目录 一、设计内容及要求 (4) 1. 1 设计题目 (4) 1.2 使用算法分析: (4)

1. FIFO算法(先进先出淘汰算法) (4) 1. LRU算法(最久未使用淘汰算法) (5) 1. OPT算法(最佳淘汰算法) (5) 分工情况 (5) 二、详细设计 (6) 原理概述 (6) 主要数据结构(主要代码) (6) 算法流程图 (9) 主流程图 (9) Optimal算法流程图 (10) FIFO算法流程图 (10) LRU算法流程图 (11) .1源程序文件名 (11) . 2执行文件名 (11) 三、实验结果与分析 (11) Optimal页面置换算法结果与分析 (11) FIFO页面置换算法结果与分析 (16) LRU页面置换算法结果与分析 (20) 四、设计创新点 (24) 五、设计与总结 (27)

六、代码附录 (27) 课程设计题目 一、设计内容及要求 编写程序模拟虚拟存储器管理。假设以M页的进程分配了N

块内存(N

数据库课程设计报告案例2015

《数据库原理及应用课程设计》 系统开发报告 学号: 姓名: 题目:医院门诊管理系统 指导教师: 提交时间:2015年12月 计算机工程系

目录 目录 1绪论 (1) 2 医院门诊管理系统概述 (1) 2.1现状分析 (1) 2.2系统目标 (1) 2.3系统特点 (2) 3 医院门诊管理系统数据库设计 (2) 3.1需求分析 (2) 3.2数据库物理结构分析 (2) 3.2.1 设计策略 (3) 3.2.2 系统总体结构图 (3) 图2-1 系统总体结构图 (4) 3.2.3系统详细设计说明 (4) 3.3数据库概念结构设计 (5) 3.4数据库逻辑结构设计 (6) 3.4.1 实体 (6) 3.4.2 完整性约束................................................................................... 错误!未定义书签。 4 医院门诊管理系统数据库功能模块的创建 (7) 4.1 建立病人表,医生表,科室表 (7) 4.2 数据库的连接 (9) 4.3系统功能模块设置 (10) 5 总结 (11)

1绪论 在现代信息技术的基础上,随着人类对各种工程研究成果的逐步推广应用,不久的将来,医疗卫生领域对信息技术的依赖程度将远远超过目前电信、银行、航空业。医院信息化必将得到充分的重视和发展,而医院门诊收费系统就是医院信息化中的重要的一部分。随着计算机性能不断提高,价格不断下降,计算机已在医院医疗、教学、科研、管理等方面得到越来越广泛的应用。计算机化的医院信息系统已成为现代化医院运营过程中必不可少的基础设施与技术支撑环境。 计算机信息管理技术的应用,除了能在相当大的程度上代替人工作业,从而减少人员工作量,减轻工作负担,减少工作中因人为原因而产生的错误从而避免不必要的损失外,更重要的是能建立准确畅通、简便的信息流通渠道,为工作提供所需要的准确、及时的信息以帮助做出正确而及时的选择与决定,从而给采用这门技术的单位带来了巨大的可见或不可见的利益与效益。 2 医院门诊管理系统概述 2.1现状分析 医院的门诊每天都会接待大量的患者,使用医院门诊收费系统可以大大地提高工作效率,减少工作中可能出现的错误,是提高医院办公自动化水平的重要手段之一。其开发主要包括后台数据库的建立和维护以及前端应用程序界面开发两个方面。对于后台数据库的建立和维护要求建立起数据的一致性和完整性强、数据安全性好、符合3NF范式库。而前端应用程序的开发则要求应用程序能提供强大的数据操纵功能,界面友好、使 用简单方便等特点。在中国软件行业日益进步的今天,如何利用这些资源来帮助减轻医生和病人的负担,让医生们利用更多的时间去从事其他的事情。因而设计一个好的门诊收费信息系统,能提高医院的社会效益与经济效益。论文旨在论述医院门诊收费系统的设计与开发。 2.2系统目标 通过医院门诊收费系统的设计,熟练掌握Visual C++、SQL Server 2000等工具软件,系统地掌握需求分析、数据库设计、编码实现、测试等软件开发的流程,提高自身分析问题、解决问题的能力。

嵌入式系统实验报告

实验报告 课程名称:嵌入式系统 学院:信息工程 专业:电子信息工程 班级: 学生姓名: 学号: 指导教师: 开课时间:学年第一学期

实验名称:IO接口(跑马灯) 实验时间:11.16 实验成绩: 一、实验目的 1.掌握 STM32F4 基本IO口的使用。 2.使用STM32F4 IO口的推挽输出功能,利用GPIO_Set函数来设置完成对 IO 口的配置。 3.控制STM32F4的IO口输出,实现控制ALIENTEK 探索者STM32F4开发板上的两个LED实现一个类似跑马灯的效果。 二、实验原理 本次实验的关键在于如何控制STM32F4的IO口输出。IO主要由:MODER、OTYPER、OSPEEDR、PUPDR、ODR、IDR、AFRH和AFRL等8个寄存器的控制,并且本次实验主要用到IO口的推挽输出功能,利用GPIO_Set函数来设置,即可完成对IO口的配置。所以可以通过了开发板上的两个LED灯来实现一个类似跑马灯的效果。 三、实验资源 实验器材: 探索者STM32F4开发板 硬件资源: 1.DS0(连接在PF9) 2.DS1(连接在PF10) 四、实验内容及步骤 1.硬件设计 2.软件设计 (1)新建TEST工程,在该工程文件夹下面新建一个 HARDWARE文件夹,用来存储以后与硬件相关的代码。然后在 HARDWARE 文件夹下新建一个LED文件夹,用来存放与LED相关的代码。 (2)打开USER文件夹下的test.uvproj工程,新建一个文件,然后保存在 LED 文件夹下面,保存为 led.c,在led.c中输入相应的代码。

(3)采用 GPIO_Set 函数实现IO配置。LED_Init 调用 GPIO_Set 函数完成对 PF9 和 PF10 ALIENTEK 探索者 STM32F407 开发板教程 119 STM32F4 开发指南(寄存器版) 的模式配置,控制 LED0 和 LED1 输出 1(LED 灭),使两个 LED 的初始化。 (4)新建一个led.h文件,保存在 LED 文件夹下,在led.h中输入相应的代码。 3.下载验证 使用 flymcu 下载(也可以通过JLINK等仿真器下载),如图 1.2所示: 图1.2 运行结果如图1.3所示:

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

河北大学工商学院 课程设计 题目:操作系统课程设计 学部信息学部 学科门类电气信息 专业计算机 学号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: {

Oracle数据库课程设计报告

课程设计报告书

目录 第1章引言 (3) 第2章概要设计 (5) 2.1系统需求分析 (5) 2.2系统结构设计 (5) 2.3系统功能模块 (6) 第3章数据库分析 (7) 3.1 数据库总体设计 (7) 3.2 数据表设计 (7) 3.3 数据库的创建 (8) 3.4存储过程和触发器 (10) 第4章详细设计及测试 (12) 4.1 系统界面 (12) 4.2 主要代码设计 (15) 4.3 功能整体链接测试 (18) 第5章课程设计心得 (19)

第1章引言 1.设计目的 使用VC,C++,C#等作为前台开发工具,使用Oracle作为后台数据库,所设计的管理系统应包含输入输出、查询、插入、修改、删除等基本功能。根据题目的基本需求,设计系统界面、数据库、编写程序(Oracle),并写出课程设计报告 1、阅读资料:每个人必须提前阅读教材有关Oracle、VC、C++、C#应用方面的内容以及其它相关书籍。 2、需求分析:题目要求达到的功能,所提供的原始数据,需要输出的数据及样式等。 3、数据库的设计:根据要求设计数据库的结构,包括:表、数据完整性、关系、视图。 4、数据库的安全性设计:登录用户、数据库用户、数据库角色、命令许可等方面 涉及到数据的所有操作要求采用存储过程的方式进行。 2.设计要求 1.选好题目:先分组,每组两个人(或单独完成),必须确保每题有两组人员选做,班长将本班同学的选题情况汇总后于16周之前交。 2.独立思考,独立完成:课程设计中各任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝,否则不管是抄袭还是被抄袭,雷同的全部直接评定为不及格。 3.做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。 4.根据编程实现的结果,按课程设计报告的撰写规范完成数据库系统课程设计报告(课程设计报告中必须有相关原理分析、程序设计、程序实现和程序调试等内容);课程设计报告的具体要求如下: 1)课设报告按照规定用A4纸张进行排版打印,否则要求返工; 2)课设报告的内容顺序如下:封面—任务书—中文摘要—目录—正文—附录; 3)正文不少于4000字,正文部分至少包含以下内容,并可大致作如下安排 1.引言(包括设计目的、要求、设计环境、同组人员及分工等内容)

2012嵌入式系统课程设计报告书5

郑州航空工业管理学院嵌入式系统课程设计报告 题目:嵌入式Linux系统中无线网络的设计 20 – 20第学期 院系: 姓名: 专业: 学号: 指导老师: 电子通信工程系 2012年11月制

目录(在这里添加相应的目录)

一、引言 (同学们自己在这里添加相应的内容) 二、设计目的 三、设计要求 1. 任务要求 要求能独立地分析题目意义、设计实现步骤、画出硬件原理图及软件流程图、调试驱动模块。 该设计的具体要求如下: 2. 设计所需的软硬件设备 (1)硬件环境配置 计算机:Intel(R) Pentium(R) 及以上 内存:1GB及以上 实验设备:UP-NETARM2410-S嵌入式开发平台 (2)软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2 虚拟机:VMware WorkStation 7 Linux系统:Red Hat Enterprise Linux AS 4 (2.6.9-5.EL) 嵌入式交叉编译器:arm-linux-gcc 3.4.4版本 Linux内核版本:Linux-2.6.14 SKYEYE版本:skyeye-1.2.4 U-Boot版本:U-Boot-1.3.2 BusyBox版本:BusyBox-1.2.0 3. 课程设计报告内容 按该设计报告要求的模式格式提交课程设计报告书。 四、推荐的进展安排 五、考核评价

六、总体设计 (同学们自己在这里添加相应的内容)七、总结 (同学们自己在这里添加相应的内容)八、参考文献 (同学们自己在这里添加相应的内容)

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告学院:计算机学院 专业班级:13软件工程1班 提交时间:2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。 二、环境条件 系统:WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景

计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。 (4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。 2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下: 钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<

数据库课程设计报告完整版

数据库课程设计报告 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】

数据库课程设计 --JIA服装销售系统 指导老师:索剑 系名:计算机科学系 姓名:薛文科 班级:11计算机1班 目录 第一章绪论....................................................................... (3) 课题简介........................................................................ (3) 设计目的........................................................................ (3) 设计内容........................................................................ (3) 系统实验要求........................................................................ . (3) 第二章需求分析....................................................................... .. (3)

系统基本功能........................................................................ .. (3) 权限划分........................................................................ . (4) 系统运作流程........................................................................ . (4) 数据字典........................................................................ .. (5) 第三章概念结构设计 (7) 概念结构设计的方法与步骤 (7) 3.1.1概念结构设计的方法........................................................................ . (7) 3.1.2概念结构设计的步骤........................................................................ . (7) 数据抽象与局部视图设计........................................................................ . (8) 视图的集成........................................................................ (9) 第四章逻辑结构设计 (10) E-R图向关系模型的转换........................................................................ (10) 数据模型的优化........................................................................ (11) 数据库的结构........................................................................ . (11)

基于ARM9的人脸识别系统嵌入式报告课程设计

嵌入式课程设计报告 学院信息电子技术 专业通信工程 班级 学号 指导教师 2017年07月01日

基于ARM9的人脸识别系统 一、引言 人脸识别背景和意义 人脸识别系统的研究始于20世纪60年代,80年代后随着计算机技术和光学成像技术的发展得到提高,而真正进入初级的应用阶段则在90年后期,并且以美国、德国和日本的技术实现为主;人脸识别系统成功的关键在于是否拥有尖端的核心算法,并使识别结果具有实用化的识别率和识别速度;“人脸识别系统”集成了人工智能、机器识别、机器学习、模型理论、专家系统、视频图像处理等多种专业技术,同时需结合中间值处理的理论与实现,是生物特征识别的最新应用,其核心技术的实现,展现了弱人工智能向强人工智能的转化语音识别、体形识别等,而指纹识别、虹膜识别等都不具有自然性,因为人类或者其他生物并不通过此类生物特征区别个体。 人脸识别具有这方面的特点,它完全利用可见光获取人脸图像信息,而不同于指纹识别或者虹膜识别,需要利用电子压力传感器采集指纹,或者利用红外线采集虹膜图像,这些特殊的采集方式很容易被人察觉,从而更有可能被伪装欺骗。 二、系统设计 1、硬件电路设计 (1 ) ARM9处理器 本系统所采用的硬件平台是天嵌公司的TQ2440开发板,该开发板的微处理器采用基于ARM920T内核的S3C2440芯片。 ARM9对比ARM7的优势:虽然ARM7和ARM9内核架构相同,但ARM7 处理器采用3级流水线的冯?诺伊曼结构,而ARM9采用5级流水线的哈佛结构。增加的流水线设计提高了时钟频率和并行处理能力。5级流水线能够将每一个指令处理分配到5个时钟周期内,在每一个时钟周期内同时有5个指令在执行。在常用的芯片生产工艺下,ARM7 一般运行在100MHz左右,而ARM9则至少在200MHz 以上。指令周期的改进对于处理器性能的提高有很大的帮助。性能提高的幅度依赖于代码执行时指令的重叠,这实际上是程序本身的问题。对于采用最高级的语言,一般来说,性能的提高在30%左右。ARM7 -般没有MMU(内存管理单元),(ARM720T 有MMU)。 (2)液晶显示屏 为显示摄像头当前采集图像的预览,系统采用三星的320x240像素的液晶屏,大小为206.68cmo该液晶显示屏的每个像素深度为2bit,采用RGB565色彩空间。 (3)摄像头 摄像头采用市场上常见的网眼2000摄像头,内部是含CMOS传感器的OV511 + 芯片。CMOS传感器采用感光元件作为影像捕获的基本手段,核心是1个感光二极管,该二极管在接受光线照射之后能够产生输出电流,而电流的强度则与光照的强度对应。相对

华科_计算机系统实验报告

课程实验报告课程名称:计算机系统基础 专业班级: 学号: 姓名: 指导教师: 报告日期:年月日 计算机科学与技术学院

目录 实验1: (1) 实验2: (7) 实验3: (24) 实验总结 (34)

实验1:数据表示 1.1 实验概述 实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。 实验目标:加深对数据二进制编码表示的了解。 实验要求:使用有限类型和数量的运算操作实现一组给定功能的函数。 实验语言:c。 实验环境:linux 1.2 实验内容 需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。 1)位操作 表1列出了bits.c中一组操作和测试位组的函数。其中,“级别”栏指出各函数的难度等级(对应于该函数的实验分值),“功能”栏给出函数应实现的输出(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请查看bits.c中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用的操作符的最大数量。 你也可参考tests.c中对应的测试函数来了解所需实现的功能,但是注意这些测试函数并不满足目标函数必须遵循的编码约束条件,只能用做关于目标函数正确行为的参考。 表1 位操作题目列表

2)补码运算 表2列出了bits.c中一组使用整数的补码表示的函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。 表2 补码运算题目列表 3)浮点数操作 表3列出了bits.c中一组浮点数二进制表示的操作函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。注意float_abs的输入参数和返回结果(以及float_f2i函数的输入参数)均为unsigned int类型,但应作为单精度浮点数解释其32 bit二进制表示对应的值。 表3 浮点数操作题目列表

操作系统课程设计报告

课程设计报告课程名称:操作系统原理 院系:计算机科学与技术 专业班级: CS140 ____ __ 学号: U201414_____ 姓名: ______ ___ 指导教师: _______ __ 完成时间: 2017年3月11日_

目录 1实验目的 (2) 2实验环境 (2) 3实验内容 (2) 3.1实验一 (2) 3.2实验二 (2) 3.3实验三 (3) 3.4实验四 (3) 3.5实验五(选做) (3) 4设计与实现 (3) 4.1实验一 (3) 4.2实验二 (6) 4.3实验三 (9) 4.4实验四 (11) 5心得体会 (14)

1 实验目的 ·掌握Linux操作系统的使用方法; ·了解Linux系统内核代码结构; ·掌握实例操作系统的实现方法; 2 实验环境 本次课程设计采用的操作系统环境是windows10、Ubuntu双系统,Ubuntu系统版本号为16.04,内核版本号为linux 4.4.4;前两个实验在当前Ubuntu环境下完成,后两个实验在win10下虚拟机VirtualBox的Ubuntu 15.10(内核为linux4.2.0-42)中完成。 3 实验内容 3.1 实验一 要求熟悉和理解Linux下的编程环境。 (1)编写一个C程序,用fread、fwrite等库函数实现文件拷贝功能。 (2)编写一个C程序,使用基于文本的终端图形编程库(curses)或图形界面(QT/GTK),分窗口显示三个并发进程的运行(一个窗口实时显示当前时间,一个窗口实时监测CPU的利用率,一个窗口做1到100的累加求和,刷新周期分别为1秒,2秒和3秒)。 3.2 实验二 要求掌握添加系统调用的方法,采用编译内核方法,添加一个新的系统调用,实现文件拷贝的功能,另外编写一个应用程序,测试新增加的系统调用。

数据库课程设计报告 完整版

数据库课程设计 班级物联网1202 学号3120611027 姓名杨璐 指导老师年轶 2014 年 1 月

目录 一、引言 (2) 1.目的 (2) 2.题目 (2) 3.要求 (2) 二、系统的分析与设计 (3) 1.概念设计 (3) 2.逻辑设计 (3) 3.系统功能结构 (4) 4.完整性设计 (5) 三、系统的实现 (6) 四、课程设计小结 (22)

一、引言 1.目的 课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。课程设计的目的: (1)加深对数据库系统、软件工程、程序设计语言的理论知识的理解和应用水平; (2)在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高; (3)学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力; (4)为毕业设计和以后工作打下必要基础。 2.题目 题目2.设计一个大学教学数据库应用系统。 该系统涉及学生、教师、课程、分组、登记。数据见附表2。 因时间关系,只要求每个学生任选1个题目,如有时间﹑有兴趣,可做另外一题,酌情加分。 3.要求 运用数据库基本理论与应用知识,在微机RDBMS(SQL Server)的环境上建立一个数据库应用系统。要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。 (1)用E-R图设计选定题目的信息模型; (2)设计相应的关系模型,确定数据库结构; (3)分析关系模式各属于第几范式,阐明理由; (4)设计应用系统的系统结构图; (5)通过设计关系的主码约束、外码约束和使用CHECK实现完整性控制; (6)完成实验内容所指定的各项要求; (7)分析遇到的问题,总结并写出课程设计报告; (8)自我评价

相关文档
最新文档