linux操作系统操作系统课程设计报告Word格式文档下载.doc
- 文档编号:13065380
- 上传时间:2022-10-04
- 格式:DOC
- 页数:51
- 大小:1.41MB
linux操作系统操作系统课程设计报告Word格式文档下载.doc
《linux操作系统操作系统课程设计报告Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《linux操作系统操作系统课程设计报告Word格式文档下载.doc(51页珍藏版)》请在冰豆网上搜索。
2.了解Linux系统内核代码结构
3.掌握实例操作系统的实现方法。
二、课设内容
1.掌握Linux操作系统的使用方法,包括键盘命令、系统调用;
掌握在Linux下的编程环境。
(一)编一个C程序,其内容为实现文件拷贝的功能;
(二)编一个C程序,其内容为分窗口同时显示三个并发进程的运行结果。
要求用到Linux下的图形库。
2.掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。
另编写一个应用程序,调用新增加的系统调用(实现的功能为文件拷贝)。
3.掌握增加设备驱动程序的方法。
通过模块方法,增加一个新的设备驱动程序,其功能可以简单(实现字符设备的驱动)。
4.了解和掌握/proc文件系统的特点和使用方法(选做)
(一)了解/proc文件的特点和使用方法;
(二)监控系统状态,显示系统中若干部件使用情况;
(三)用图形界面实现系统监控状态。
5.设计并实现一个模拟的文件系统(选做)
多用户的多级目录的文件系统设计。
多用户、多级目录、login(用户登录)、系统初始化(建文件卷、提供登录模块)、文件的创建、文件的打开、文件的读、文件的写、文件关闭、删除文件、创建目录(建立子目录)、改变当前目录、列出文件目录、退出。
三、课设说明
Linux系统版:
Fedora5.06.0……
ubuntu10.0411.10
内核版本linux-2.6.x,尽量使用2.6.32以前的内核版本。
四、考核要求
1)必须独立完成课程设计内容,不分小组,不能有相同的拷贝;
2)上机考试:
学生根据老师提出的要求,演示所完成的系统;
并回答老师的问题;
第4周周四:
上午1班、下午2班周五上午:
3班、下午4班
3)评分方法:
完成1、2题,得50-55分;
完成1、2、3题,得55-65分;
完成1、2、3、4(5)题,得70--90分;
报告:
10分。
4)上交:
课程设计报告(打印/电子档),内容包括调试记录和程序清单(附注释)。
第六周前以班为单位交应用系办公室罗老师处。
五、参考资料
i.Linux的“man”帮助
ii.《Linux内核2.4版源代码分析大全》
iii.《Linux内核源代码分析》
iv.《Linux编程白皮书》
v.参考网站:
课设内容与过程
一、掌握Linux操作系统的使用方法,包括键盘命令、系统调用;
(一)编一个C程序,其内容为实现文件拷贝的功能.
a)任务分析
在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器。
gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了.-o选项我们已经知道了,表示我们要求输出的可执行文件名.-c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件.-g选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息.知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了,如果想要知道更多的选项,可以查看gcc的帮助文档(可以用mangcc来查看),那里有着许多对其它选项的详细说明。
文件拷贝的C程序主要用到如下几个函数:
open:
打开文件
close:
关闭文件
read:
读操作
write:
写操作
open函数有两个形式.如下:
intopen(constchar*pathname,intflags);
intopen(constchar*pathname,intflags,mode_tmode);
其中pathname是我们要打开的文件名(包含路径名称,缺省是认为在当前路径下面).flags可以去下面的一个值或者是几个值的组合.组合使用时候用竖线“|”隔开。
O_RDONLY:
以只读的方式打开文件.
O_WRONLY:
以只写的方式打开文件.
O_RDWR:
以读写的方式打开文件.
O_APPEND:
以追加的方式打开文件.
O_CREAT:
创建一个文件.//创建一个不存在的文件。
O_EXEC:
如果使用了O_CREAT而且文件已经存在,就会发生一个错误.
O_NOBLOCK:
以非阻塞的方式打开一个文件.
O_TRUNC:
如果文件已经存在,则删除文件的内容.
前面三个标志只能使用任意的一个.
如果使用了O_CREATE标志,那么我们要使用open的第二种形式.还要指定mode标志,用来表示文件的访问权限.
b)程序源代码见实现文件拷贝的源程序
c)程序运行结果
源程序通过编译后会生成可执行文件mycopy,执行mycopy之前,/usr目录下的文件a.txt内容见图1,文件b.txt内容见图2。
图1执行mycopy前a.txt的内容
图2执行mycopy前b.txt的内容
执行mycopy后,目录/usr下文件b.txt内容见图3,由图可知,文件a.txt的内容正确无误的拷贝到了文件b.txt中,故程序运行结果完全正确。
图3执行mycopy后b.txt的内容
通俗的讲,程序是一个包含可以执行代码的文件,是一个静态的文件。
而进程是一个开始执行但是还没有结束的程序的实例。
一个程序可能有许多进程,而每一个进程又可以有许多子进程.依次循环下去,而产生子孙进程.为了区分各个不同的进程,系统给每一个进程分配了一个ID(就象我们的身份证)以便识别.为了充分的利用资源,系统还对进程区分了不同的状态,将进程分为新建,运行,阻塞,就绪和完成五个状态。
当一个进程调用了fork以后,系统会创建一个子进程.这个子进程和父进程不同的地方只有他的进程ID和父进程ID,其他的都是一样,就像父进程克隆(clone)自己一样。
当然创建两个一模一样的进程是没有意义的。
为了区分父进程和子进程,我们必须跟踪fork的返回值.当fork调用失败的时候(内存不足或者是用户的最大进程数已到)fork返回-1,否则fork的返回值有重要的作用.对于父进程fork返回子进程的ID,而对于fork子进程返回0.我们可以根据这个返回值来区分父子进程。
编译GTK程序与编译普通的C程序需要用到不同的命令。
比如程序名为threeproc,则编译命令为:
gcc`pkg-config--cflags--libsgtk+-2.0`threeproc.c-othreeproc。
其中pkg-config读取GTK附带的.pc文件来决定编译GTK程序需要的编译选项,pkg-config--cflagsgtk+-2.0列出include目录,pkg-config--libsgtk+-2.0列出编译连接库。
命令中的单引号是键盘上“1”键前面的那个,而不是回车键左边的那个,否则会出错。
--libs、--cflags中都是两个横线。
b)程序源代码见显示三个并发进程的源程序
我写的程序有三个并发进程,并且分别利用三个窗口进行显示,显示框中各有一个进度条,但是其各自的刷新频率不一样,直观感受就是三个进度条不一致。
窗口上面显示了各个进程的ID,可以看到三个进程的ID是不一样的。
显示框中还有一个退出按钮,结果见图4。
图4三个并发进程的显示
二、掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。
另编写一个应用程序,调用新增加的系统调用。
系统调用是应用程序和操作系统内核之间的功能接口,通过系统调用进程可由用户模式转入内核模式,在内核模式下完成相应的服务之后再返回到用户模式。
系统调用的主要目的是使得用户可以使用操作系统提供的有关设备管理、输入/输出系统、文件系统和进程控制、通信以及存储管理等方面的功能,而不必了解系统程序的内部结构和有关硬件细节,从而起到减轻用户负担和保护系统以及提高资源利用率的作用。
本次课设,我通过编译内核的方式,增加了一个系统调用,其功能为文件拷贝。
b)程序源代码见添加的系统调用源代码和测试程序
c)实验过程与步骤
1、wgetsourcehttp:
//www.kernel.org/...sourcecode,下载linux源码,我下载的版本是linux-2.6.33.20.
2、sudo–s,切换到root用户
3、tar-xjvflinux-2.6.33.20.解压内核到/usr/src/
4、打开/usr/src/linux-source-2.6.33.20/kernel/sys.c,在最后添加自己的系统调用程序sys_mycopy.注意把代码放在EXPORT_SYMBOL_GPL(orderly_poweroff);
之前。
5、打开/usr/src/linux-source-2.6.35/arch/x86/kernel/syscall_table_32.s,然后在最后一行.longsys_XXXX的下一行添加.longsys_mycopy,并且后面的号码为系统调用号。
我的是338.
6、打开/usr/src/linux-2.6.33.20/include/asm-generic/unistd.h,在#undef__NR_syscalls的前面加上
#define__NR_mycopy244
__SYSCALL(__NR_mycopy,sys_mycopy)
同时将#undef__NR_syscalls后面的数字加1.
7、编译内核
首先进入解压目录:
cd/usr/src/linux-source-2.6.35。
运行命令makeclean
makemenuconfig
makebzImage
cparch/x86/boot/bzImage/boo
makemodules
makemodules_install
makeinstall
cd/boot
mkinitramfs-oinitrd.img-2.6.33.202.6.33.20
修改grub.cfg增加一个启动项,代码如下:
menuentry'
Ubuntu,withLinux2.6.33.20'
--classubuntu--classgnu-linux--classgnu--classos{
recordfail
insmodpart_msdos
insmodext2
setroot='
(hd0,msdos1)'
search--no-floppy--fs-uuid--set64f525ed-3b34-4403-bb04-96bf47d14da1
linux /boot/vmlinuz-2.6.33.20root=UUID=64f525ed-3b34-4403-bb04-96bf47d14da1roquietsplash
initrd /bo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 操作系统 课程设计 报告