华中科技大学计算机学院操作系统课程设计报告1Word格式.docx
- 文档编号:15923143
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:32
- 大小:27.75KB
华中科技大学计算机学院操作系统课程设计报告1Word格式.docx
《华中科技大学计算机学院操作系统课程设计报告1Word格式.docx》由会员分享,可在线阅读,更多相关《华中科技大学计算机学院操作系统课程设计报告1Word格式.docx(32页珍藏版)》请在冰豆网上搜索。
4.内容二:
掌握添加系统调用的方法
4.1内容要求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯9
4.2设计过程及实现⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯9
5.内容三:
掌握添加设备驱动程序的方法
5.1内容要求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯17
5.2设计过程及实现⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯17
6.内容四:
理解和分析/proc文件
6.1内容要求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯22
6.2设计过程及实现⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯22
__________________________
第2页/共29页
1课程设计目的
(1)掌握Linux操作系统的使用方法;
(2)了解Linux系统内核代码结构;
(3)掌握实例操作系统的实现方法。
2课程设计环境搭建
(1)windows7上,利用虚拟机软件VMware软件搭建的linux平台:
◎Ubuntu11.10(安装包:
ubuntu-11.10-desktop-i386)
◎内核:
linux-headers-3.0.0-12-generic
(2)更改root登录:
在现阶段Ubuntu的系统中,是不允许直接以root身份登录系统的,但是在
做课设的过程中,需要大量的使用root权限来进行命令的操作。
如果以普通用
户登录ubuntu,会连编辑一个文件都非常周折。
为此,我找到了一种修改系统
文件,以达到直接使用root身份登录的方法:
◎开始的时候,只能以普通用户登录,用Ctrl+Alt+T打开终端:
初始化/修改root密码
sudopasswdroot
用vi编辑器修改这个文件:
sudovi/etc/lightdm/lightdm.conf
在文件最后加入这么一行代码:
greeter-show-manual-login=true
然后保存退出,sudoreboot重启系统。
之后就可以输入root用户登录。
(3)在添加系统调用中用到的其他内核包:
◎下载和当前实验环境最为接近的系统版本(这点很重要)
使用apt-getinstalllinux-source
-3.0.0命令,
◎下载结果是linux-source-3.0.0.tar.bz2
◎解压命令:
tar–xjvflinux-source-3.0.0.tar.bz2–C/usr/src
◎解压后,在/usr/src目录下得到内核文件夹linux-source-3.0.0
第3页/共29页
(4)在调用linux图形库时需要安装GTK环境:
◎安装gcc/g++/gdb/make等基本编程工具
apt-getinstallbuild-essential
Tip:
如果提示由于依赖项不能安装,需要使用apt的强化版aptitude,这
个工具可以自动分析软件包依赖,系统一般不自带,需要先安装,具体过程是:
apt-getinstallaptitude
aptitudeinstallbuild-essential
aptitude这个工具很强大,对于解决软件包安装时的依赖问题很有帮助。
◎安装libgtk2.0-devlibglib2.0-dev等开发相关的库文件:
apt-getinstallgnome-core-devel
◎安装GTK核心组件:
apt-getinstalllibgtk2.0-dev
这个安装完成后,GTK环境就基本搭建成功,网上有些教程说要安装其他配
置文件,经我亲测,发现只要安装libgtk2.0-dev这个包就能搞定。
第4页/共29页
3内容一:
3.1内容要求
(1)编写一个C程序,实现文件拷贝功能
(2)编写一个C程序,使用Linux下的图形库,分窗口显示三个并发进程运行;
3.2设计过程及实现
(1)文件拷贝:
①文件的拷贝主要的思想就是利用文件指针操作,在两个文件之间进行按字符
的fget和fput。
从而完成整个文件的拷贝操作。
在这个基本功能之外,需要增加程序的健壮性,具体有以下几个方面:
·
源文件是否存在且能读取数据;
是否能创建目的文件,且能向里面写入数据;
程序需要的argc参数个数是否满足要求;
②基于以上几点和内容要求,主要的程序段如下:
if(argc!
=3)//判断参数个数是否为3,否则返回
{
printf("
Errorinargc!
\n"
);
return0;
}
if((fsource=fopen(argv[1],"
rb"
))==NULL)
Errorinopensourcefile!
//判断源文件是否能打开和读出
if((ftarget=fopen(argv[2],"
wb"
Errorinopentargetfile!
\n"
//判断目的文件时候能创建和写入
while((c=fgetc(fsource))!
=EOF)
fputc(c,ftarget);
//按字符读取和写入数据
第5页/共29页
③执行结果如下:
将source/source.txt文件拷贝到到target.txt,开始时如下图3-1所示:
图3-1复制开始前source/source.txt文件内容
利用mycopy程序复制,查看target.txt文件复制结果如下图3-2所示:
图3-2复制后target.txt文件的具体内容
(2)实现三个进程之间的并发程序:
这里需要用到课程实验时的fork()程序以及GTK的图形显示。
①基本fork()程序,调用显示一个父进程和两个子进程的结构如下:
if((pid_1=fork())==0)
Child1#isrunning......\n"
show(argc,argv,"
ThisisChild1#"
//第一个子进程Child1#
//调用函数显示窗口
else
if((pid_2=fork())==0){
Child2#isrunning......\n"
ThisisChild2#"
//第二个子进程Child2#
else{
Parent#isrunning......\n"
//父进程
Parent#
//由于父进程需要显示全部子进程
PID,所以这里直接用参数画窗口
第6页
/共29
页
②调用GTK显示窗体函数模块的结构:
voidshow(intargc,char*argv[],char*title)
gtk_init(&
argc,&
argv);
//初始化工具包并且获取命令行参数
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
//创建新的窗口
;
//设定窗口的位置
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
//监听窗口的destroy事件;
g_signal_connect(G_OBJECT(window),
"
destroy"
G_CALLBACK(destroy_progress),NULL);
gtk_window_set_title(GTK_WINDOW(window),title);
//用来设定更改窗口标题
gtk_container_set_border_width(GTK_CONTAINER(window),20);
//设定宽度
//使用gtk_vbox_new函数建立纵向组装盒;
//为了显示构件,必须将构件放入组装盒中,并将组装盒放在窗口内;
vbox=gtk_vbox_new(FALSE,10);
gtk_container_set_border_width(GTK_CONTAINER(vbox),100);
//设定宽度;
gtk_container_add(GTK_CONTAINER(window),vbox);
gtk_widget_show(vbox);
//使用gtk_box_pack_start函数将构件放到组装盒中;
sprintf(id_char,"
%s,MyID:
%d"
title,getpid());
label=gtk_label_new(id_char);
gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,10);
gtk_widget_show(label);
//显示
PID
号
父进程ID:
getppid());
PPID号
gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华中科技大学 计算机 学院 操作系统 课程设计 报告