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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1)windows 7 上,利用虚拟机软件 VMware 软件搭建的 linux 平台: ◎Ubuntu 11.10 (安装包:ubuntu-11.10-desktop-i386) ◎内核:linux-headers-3.0.0-12-generic
(2)更改 root 登录: 在现阶段 Ubuntu 的系统中,是不允许直接以 root 身份登录系统的,但是在
①基本 fork()程序,调用显示一个父进程和两个子进程的结构如下:
if((pid_1=fork())==0)
{
printf("Childபைடு நூலகம்1# is running......\n");
//第一个子进程
Child 1#
show(argc,argv,"This is Child 1#"); 口
}
//调用函数显示窗
__________________________ 第 2页 /共 35页
计算机科学与技术学院
操作系统课程设计实验报告
1 课程设计目的
(1)掌握 Linux 操作系统的使用方法; (2)了解 Linux 系统内核代码结构; (3)掌握实例操作系统的实现方法。
U201014281
2 课程设计环境搭建
图 3-2 复制后 target.txt 文件的具体内容 (2)实现三个进程之间的并发程序:
这里需要用到课程实验时的 fork( )程序以及 GTK 的图形显示。
__________________________ 第 6页 /共 35页
计算机科学与技术学院
操作系统课程设计实验报告
U201014281
gtk_container_set_border_width (GTK_CONTAINER (vbox), 100);//设定
宽度;
__________________________ 第 8页 /共 35页
计算机科学与技术学院
操作系统课程设计实验报告
gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_show (vbox);
else
{
if((pid_2=fork())==0){
printf("Child 2# is running......\n");
//第二个子进程
Child 2#
show(argc,argv,"This is Child 2#");
//调用函数显示窗

}
else {
printf("Parent # is running......\n");
return 0;
//判断目的文件时候能创建
}
while((c=fgetc(fsource))!=EOF)
{
fputc(c,ftarget);
//按字符读取和写入数据
}
③执行结果如下: 将 source/source.txt 文件拷贝到到 target.txt,开始时如下图 3-1 所示:
图 3-1 复制开始前 source/source.txt 文件内容 利用 mycopy 程序复制,查看 target.txt 文件复制结果如下图 3-2 所示:
gtk_widget_show (label);
sprintf (id_char, "父进程 ID:%d", getppid ());
// 显 示
PPID 号
label = gtk_label_new (id_char);
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 10);
做课设的过程中,需要大量的使用 root 权限来进行命令的操作。如果以普通用 户登录 ubuntu,会连编辑一个文件都非常周折。为此,我找到了一种修改系统 文件,以达到直接使用 root 身份登录的方法:
◎开始的时候,只能以普通用户登录,用 Ctrl+Alt+T 打开终端: 初始化/修改 root 密码
__________________________ 第 9页 /共 35页
计算机科学与技术学院
操作系统课程设计实验报告
U201014281
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 10); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_widget_grab_default (button);
口标题;
gtk_container_set_border_width (GTK_CONTAINER (window), 20);//设
定宽度;
//使用 gtk_vbox_new 函数建立纵向组装盒;
//为了显示构件,必须将构件放入组装盒中,并将组装盒放在窗口内;
vbox = gtk_vbox_new (FALSE, 10);
5.内容三:掌握添加设备驱动程序的方法
5.1 内容要求 …………………………………………………………………17 5.2 设计过程及实现 …………………………………………………………17
6.内容四:理解和分析/proc 文件
6.1 内容要求 …………………………………………………………………22 6.2 设计过程及实现 …………………………………………………………22
华中科技大学
嵌入式操作系统课程设计实验报告
院 系: 专 业: 班 级: 姓 名: 指导老师: 报告时间:
计算机科学与技术学院
计算机科学与技术学院
计算机科学与技术学院
操作系统课程设计实验报告
U201014281
目录
1.课程设计目的…………………………………………………………3 2.课程设计环境搭建……………………………………………………3 3.内容一:熟悉和理解 Linux 编程环境
__________________________ 第 4页 /共 35页
计算机科学与技术学院
操作系统课程设计实验报告
U201014281
3 内容一:熟悉和理解 Linux 编程环境
3.1 内容要求 (1)编写一个 C 程序,实现文件拷贝功能 (2)编写一个 C 程序,使用 Linux 下的图形库,分窗口显示三个并发进程运行; 3.2 设计过程及实现 (1)文件拷贝:
①文件的拷贝主要的思想就是利用文件指针操作,在两个文件之间进行按字符 的 fget 和 fput。从而完成整个文件的拷贝操作。在这个基本功能之外,需要增 加程序的健壮性,具体有以下几个方面:
·源文件是否存在且能读取数据; ·是否能创建目的文件,且能向里面写入数据; ·程序需要的 argc 参数个数是否满足要求; ②基于以上几点和内容要求,主要的程序段如下:
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);//用来设定更改窗
sudo passwd root 用 vi 编辑器修改这个文件:
sudo vi /etc/lightdm/lightdm.conf 在文件最后加入这么一行代码:
greeter-show-manual-login=true 然后保存退出,sudo reboot 重启系统。之后就可以输入 root 用户登录。 (3)在添加系统调用中用到的其他内核包: ◎下载和当前实验环境最为接近的系统版本(这点很重要)
if(argc!=3)
//判断参数个数是否为 3 ,否则返回
{
printf("Error in argc!\n");
return 0;
}
if( (fsource=fopen(argv[1],"rb"))==NULL )
{
printf("Error in open source file!\n"); //判断源文件是否能打开和读出
使用 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
return 0;
}
if( (ftarget=fopen(argv[2],"wb"))==NULL )
{
__________________________ 第 5页 /共 35页
计算机科学与技术学院
操作系统课程设计实验报告
U201014281
printf("Error in open target file!\n"); 和写入
__________________________ 第 3页 /共 35页
计算机科学与技术学院
操作系统课程设计实验报告
U201014281
(4)在调用 linux 图形库时需要安装 GTK 环境: ◎安装 gcc/g++/gdb/make 等基本编程工具 apt-get install build-essential Tip:如果提示由于依赖项不能安装,需要使用 apt 的强化版 aptitude,这
3.1 内容要求……………………………………………………………………5 3.2 设计过程及实现……………………………………………………………5
4.内容二:掌握添加系统调用的方法
4.1 内容要求……………………………………………………………………9 4.2 设计过程及实现……………………………………………………………9
gtk_widget_show (label);
button = gtk_button_new_with_label ("close"); 按钮
//关闭窗口
//信号登记函数,监听按钮的 clicked 事件。 //当窗口 clicked 时, gtk_widget_destroy 就会被调用。 //而 gtk_widget_destroy 函数又调用 gtk_main_quit() 结束程序运行。 g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (gtk_widget_destroy), window);
//父进程 Parent
#
//由于父进程需要显示全部子进程 PID,所以这里直接用参数画窗口
}
}
__________________________ 第 7页 /共 35页
计算机科学与技术学院
操作系统课程设计实验报告
U201014281
②调用 GTK 显示窗体函数模块的结构: void show(int argc,char *argv[ ],char *title ) {
gtk_init (&argc, &argv);
//初始化工具包并且获取命令行
参数;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); //创建新的窗
口;
//设定窗口的位置;
gtk_window_set_position(GTK_WINDOW(window),
apt-get install gnome-core-devel ◎安装 GTK 核心组件:
apt-get install libgtk2.0-dev 这个安装完成后,GTK 环境就基本搭建成功,网上有些教程说要安装其他配 置文件,经我亲测,发现只要安装 libgtk2.0-dev 这个包就能搞定。
U201014281
//使用 gtk_box_pack_start 函数将构件放到组装盒中;
sprintf (id_char, "%s ,My ID:%d", title,getpid ()); 号
label = gtk_label_new (id_char);
//显示 PID
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 10);
个工具可以自动分析软件包依赖,系统一般不自带,需要先安装,具体过程是: apt-get install aptitude aptitude install build-essential
aptitude 这个工具很强大,对于解决软件包安装时的依赖问题很有帮助。 ◎安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件:
相关文档
最新文档