操作系统原理--课程设计报告.docx
《操作系统原理--课程设计报告.docx》由会员分享,可在线阅读,更多相关《操作系统原理--课程设计报告.docx(34页珍藏版)》请在咨信网上搜索。
1、课 程 设 计 报 告课程名称:操作系统原理院 系 : 计算机科学与技术 专业班级 : CS140 _ _ 学 号 : U201414_ 姓 名 : _ _ 指导教师 : _ _ 完成时间 : 2017年3月11日_ 华 中 科 技 大 学 课 程 设 计 报 告目 录1实验目的22实验环境23实验内容23.1实验一23.2实验二23.3实验三33.4实验四33.5实验五(选做)34设计与实现34.1实验一34.2实验二64.3实验三94.4实验四115心得体会14321 实验目的掌握Linux操作系统的使用方法;了解Linux系统内核代码结构;掌握实例操作系统的实现方法;2 实验环境本次课程
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),分窗口显示三个并发进程的运行(一个窗口实时显示当前时间,一个窗口实时监
3、测CPU的利用率,一个窗口做1到100的累加求和,刷新周期分别为1秒,2秒和3秒)。3.2 实验二要求掌握添加系统调用的方法,采用编译内核方法,添加一个新的系统调用,实现文件拷贝的功能,另外编写一个应用程序,测试新增加的系统调用。3.3 实验三掌握增加设备驱动程序的方法。采用模块方法,添加一个新的字符设备驱动程序,实现打开/关闭,读/写等基本操作。另外编写一个应用程序,测试新添加的驱动程序。3.4 实验四要求理解和分析/proc文件。(1)了解/proc文件的特点和使用方法;(2)监控系统状态,显示系统部件的使用状态;(3)用图形界面实现系统监控状态,包括CPU和内存利用率、所有进程信息等(可
4、自己补充、添加其他功能);3.5 实验五(选做)要求理解和掌握文件系统的设计方法(选做)。设计、实现一个模拟的文件系统。包括文件/目录创建/删除,目录显示等基本功能(可自行扩充文件读/写、用户登录、权限控制、读写保护等其他功能)。4 设计与实现4.1 实验一4.1.1 实验要求要求熟悉和理解Linux下的编程环境。4.1.2 实验设计及调试(1)编写一个C程序,其内容为实现文件拷贝的功能。这个实验的思路是声明两个文件指针*fp_read和*fp_write,前者用来打开要读的文件,后者打开要写的文件,再创建一个1000个字节大小的缓冲区buff,然后调用fread将内容从文件1读到buff里,
5、再调用fwrite把内容从buff写到文件2中。这个实验重点要掌握fread和fwrite的使用方法,注意它们的参数和返回值。代码见附件中源码。实验结果如下图4.1:图4.1 运行之前图运行./lab1_1 text1.txt text2.txt后结果如下图4.2:图4.2 运行之后图由上图可见text1.txt成功拷贝至text2.txt(2)编写一个C程序,本次实验使用的是图形界面GTK,分窗口显示三个并发进程的运行(一个窗口实时显示当前时间,一个窗口实时监测CPU的利用率,一个窗口做1到100的累加求和,刷新周期分别为1秒,2秒和3秒)。这个实验要用到gtk,首先要配置gtk,在终端中输
6、入:sudo apt-get install libgtk2.0-dev涉及到3个进程的并发,所以要调用函数fork来创建3个进程。我的思路是在这3个进程中分别创建一个线程,去完成相应的功能:显示当前时间,监测CPU利用率,做累加求和。分别通过函数void havetime()、void cpu_usage()、void add()实现,在main函数里,初步画出3个进程相应的界面。具体的是调用gtk_window_new()函数创建一个窗口、gtk_window_set_title()设置窗口标题、gtk_window_set_position设置窗口在屏幕的位置、gtk_label_new
7、()创建一个标签用来显示文本、gtk_container_add()把标签添加到窗口中、gtk_widget_show_all()来展示需要展示的控件。例如创建第一个线程:g_thread_create(GThreadFunc)havetime, NULL, FALSE, NULL);通过在线程havetime()中实时更新标签label的内容,然后在main()中创建的窗口中展示来完成所要求的功能。进程2和3所要求的功能也是通过这种方法实现。注意用到gtk的编译命令与以往不同,为:gcc -o lab1_2 lab1_2.c pkg-config -cflags -libs gtk+-2.0
8、代码见附件中的源码,实验结果如下图4.3:图4.3 运行结果图小插曲:在调用sprintf(s,CPU利用率为%f% ,usage)想把利用率的“%”拷进缓冲区s后打印出来时,一个百分号是不能够打印出来的,要写两个%,如想要打印两个%,则要写4个%,以此类推。4.2 实验二4.2.1 实验要求要求掌握添加系统调用的方法,采用编译内核方法,添加一个新的系统调用,实现文件拷贝的功能,另外编写一个应用程序,测试新增加的系统调用。4.2.2 实验设计及调试(1) 下载一个内核https:/www.kernel.org/pub/linux/kernel/v4.x/下载linux-4.4.4.tar.gz
9、在 /usr/src/ 目录下解压(用超级用户权限),(2) 编写新的系统调用程序用户空间所使用的open、read、write、close函数此时对应内核函数为 sys_open、 sys_read、 sys_write、 sys_close。首先通过sys_open()打开源文件和目标文件,分别返回文件描述符source和dest,然后把当前的用户地址范围保存在fs,再把当前内存访问地址范围设置为内核的内存地址访问范围,再通过sys_read()把源文件内容写到buf,再用sys_write()把buf内容写到dest,接着用sys_close()来关闭文件,最后再把内存访问地址范围设置为
10、用户的。保存fs是避免使用的缓冲区超过了用户空间的地址范围而报错。把自己写的这个系统调用程序添加至/usr/src/linux-4.4.4/kernel目录下的sys.c最后。(3) 添加系统调用号在 /usr/src/linux-4.4.4/arch/x86/entry/syscalls目录下修改 syscall_64.tbl 文件,添加一个自己的调用程序的系统调用号,我的之前用到了325好,所以添加326号,如下:326 common mysyscallsys_mysyscall(4) 添加系统调用程序的声明在/usr/src/linux-4.4.4/include/linux 目录下的s
11、yscalls.h最后加上自己添加的系统调用程序的声明如下:asmlinkage int sys_mysyscall(char* sourceFile,char* destFile);(5) 编译、安装内核在 /usr/src/linux-4.4.4 目录下对内核选项进行配置:sudo make menuconfig图4.4 内核配置图选择save后退出接下来就是漫长的编译内核了(4个线程跑会快一些):sudo make -j 4大概1个小时左右编译完毕,再安装内核:sudo make modules_install /安装内核模块sudo make install /安装内核安装完毕后重启,
12、在Ubuntu高级选项中进入新的内核。(6) 编写系统调用测试程序#include #include int main()syscall(326,text1.txt,text2.txt);return 0; 实验结果如下图4.5:图4.5 运行之前的图./lab2 后如下图:图4.6 运行之后的图可见系统调用成功。4.3 实验三4.3.1 实验要求掌握增加设备驱动程序的方法。采用模块方法,添加一个新的字符设备驱动程序,实现打开/关闭,读/写等基本操作。另外编写一个应用程序,测试新添加的驱动程序。4.3.2 实验设计及调试(1)添加设备驱动原理:linux设备一般分为:字符设备、块设备和网络设备
13、。驱动程序运行在内核空间,应用程序通常通过文件系统接口函数访问/dev目录下的设备文件来访问驱动程序。编写设备驱动程序的主要工作就是编写file_operations子函数,这次实验主要完成的就是file-operations数据结构中的.open.release.read.write4个模块,file_operations结构的每个域都对应一个系统调用。用户进程利用系统调用在对设备文件进行诸如read/write等操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取该数据结构相应的函数指针,接着把控制权交给该函数。(2) 编写Makefile文件Makefile文件用于编译
14、设备驱动程序,其内容如下:iifeq ($(KERNELRELEASE),) KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd)modules:$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesmodules_install:$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_installclean:rm -rf *.o * core .depend .*.cmd *.ko *.mod.c .tmp_versions.PHONY: modules
15、 modules_install cleanelse obj-m := mydev.oendif(3) 编写设备功能函数编写设备驱动程序的主要工作就是编写子功能函数。open()函数用来打开一个设备,在该函数中可以对设备进行初始化。如果这个函数被赋值NULL,那么设备打开永远成功,并不会对设备产生影响。release()函数用来释放open()函数中申请的资源,并在文件引用计数为0时,被系统调用。其对应应用程序的close()方法,但并不是每一次调用close()方法,都会触发release()函数,只有在打开的所有设备文件都释放后,该函数才会被调用。read()函数用来从设备中获取数据,成功
16、时返回读取的字节数,失败时返回一个负的错误码。write()函数用来写数据到设备中。成功时该函数返回写入的字节数。详细实现见附件中源码。(4) 设备驱动程序安装 make,调用Makefile编译设备驱动程序图4.7 make图编译成功,生成mydev.ko文件 sudo insmod mydev.ko 挂载模块,再查看设备的主设备号:cat /proc/devices图4.8 主设备号的图可见系统为mydev生成的主设备号为248 sudo /dev/mydev c 248 0 mydev是设备文件的名字,“c”是指创建的是字符设备文件,248是主设备号,0是从设备号。图4.9 生成设备文件
17、图可见生成了正确的设备文件mydev(5) 测试驱动程序测试程序实现的是先从设备中读出里面初始的字符串U201414813,再把一个字符串写进去,然后再读出来,测试程序详见附件源码,测试实验结果如下图:先运行命令执行程序:sudo ./test图4.10 结果图可见打开、读、写均正确。最后执行sudo rmmod mydev 来删除模块sudo rm /dev/mydev 来删除设备文件4.4 实验四要求理解和分析/proc文件。4.4.1 实验要求了解/proc文件的特点和使用方法;监控系统状态,显示系统部件的使用状态;用图形界面实现系统监控状态,包括CPU和内存利用率、所有进程信息等(可自
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 原理 课程设计 报告
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。