ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:47.50KB ,
资源ID:4519152      下载积分:5 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4519152.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     索取发票    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(操作系统课程设计汇本报告.docx)为本站上传会员【二***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

操作系统课程设计汇本报告.docx

1、课程设计报告课程名称:操作系统原理院系:计算机科学与技术专业班级:CS140 _学号:U202114_姓名:_指导教师:_完成时间:2021年3月11日一(4) 设备驱动程序安装 make,调用Makefile编译设备驱动程序图 4.7make 图编译成功,生成mydev.ko文件sudo insmod mydev.ko挂载模块,再查看设备的主设备号: cat /proc/devices图4.8主设备号的图可见系统为mydev生成的主设备号为248 sudo /dev/mydev c 248 0mydev是设备文件的名字,“c”是指创立的是字符设备文件,248是主设备 号,()是从设备号。图4

2、.9生成设备文件图可见生成了正确的设备文件mydev(5) 测试驱动程序测试程序实现的是先从设备中读出里面初始的字符串U202114813,再把一个字符串写进去,然后再读出来,测试程序详见附件源码,测试实验结果如以下图:先运行命令执行程序:sudo ./test图4.10结果图可见翻开、读、写均正确。最后执行 sudo rmmod mydev来删除模块sudo rm /dev/mydev来删除设备文件4.4 实验四要求理解和分析/proc文件。4.4.1 实验要求了解/proc文件的特点和使用方法;监控系统状态,显示系统部件的使用状态; 用图形界面实现系统监控状态,包括CPU和内存利用率、所有

3、进程信息等可自己 补充、添加其他功能。4.4.2 实验设计及调试这个实验主要是对/proc文件的理解和对gtk的熟练运用。我用gtk里的笔记本 构件画了 3 个页面,分别 为 page one、page two、page threeopage one:显示CPU利用率计算和显示CPU直接用到的实验一第二个局部的显示CPU利用率局部,不同 的是这儿用到了笔记本控件,要把“page one”作为一个button加到notebook上, 还要把算出来的CPU利用率作为一个标签内容加到notebook上,即:GtkWidgct *button4 = gtk_labcl_ncw(Page one);la

4、bel 1 = gtk_label_new(Hbegin);/ 全局标签 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), labcll, button4);/ 笔记 本容器、子控件、标题名然后创立一个线程去计算CPU利用率,然后实时更新显示出来。page two:显示所有进程信息用gtk来画这个界面的逻辑是:最大的逻辑控件是笔记本notebook,把一个hbox 添加到notebook里,再把显示所有进程信息的表clist添加到一个滚动窗口 scrolled_window里,再把这个scrollcd_vindov添加到hbox左边局部;hbox

5、右边局 部包括一个vbox,这个vbox _h面是一个frame来显示进程大致情况,下面是一个 button用来刷新进程。如以下图4.11:r 11 Hcvscrolled_windowclistKp,int *q,int 这些数字 次态、优先 中的总进程 )遍历时统 显.示出来,notebookclist t *r,int *s)函 文件夹的 级、占用巾 数、运行E 计出来的。 通过void rGtkWidget *burton2 = gtk_button_new_wichabel(刷新g_signal_connect_svapped (G_OBJECT (button2), clicked

6、,G_C/LLBACK (refresh), clist); 当button2上发生click事件时就调用refresh完成刷新。page three:显示一些根本的CPU信息这页就是简单的创立两个frame 1和血me2来显示CPU局部信息和操作系统的局部信息。frame 1 中:CPU 名称通过 char* get_cpu_name(char xbufl)函数获得,CPU 类型通 过 char* get_cpu_type(char *buf2)函数获得,CPU 主频通过 char* get_cpu_f(char *buf3) 函数获得,这3个信息都是从/proc/cpuinfo中读出来的,

7、其中涉及到一些简单的字 符串的判断等操作,在此不加赘述;framc2中:操作系统名称是通过char *gct_os_t)pc(char *bufl)函数获得的,操作 系统版本是通过char *get_os_version(char *buf2)函数获得的,它们都返回一个缓冲区 指针,用以在主函数main中显示。3个页面的详细代码见附件中源码。编译:gcc -o lab4 lab4.c pkg-config cflags libs gtk+-2.0 执行:./lab4实验结果如以下图4.12、4.13、4.14:图4.12第一个页面图图4.13第二个页面图图4.14第三个页面图5心得体会本次课程

8、设计,第一个题目第一问很简单,因为之前在实验中写过文件拷贝的 程序,所以很快就顺利实现了,要注意fopcn、fread、fwrite几个函数的用法,第二 问刚开场不知怎么做,主要是因为之前没接触过gtk这种画界面的环境,在网上查 阅相关资料后发现套路都是一样的,个人觉得把握住gtk中控件的概念,实现简单 的界面都还是比较简单的,除了 gtk,在CPU利用率的计算上还卡了一段时间,主 要是没弄清到底应该怎么计算,查了大量资料后找到一种比较简单的计算方法去实 现,结果也很准确;第二题和第三题是同一类型,都是需要对内核、系统调用、设 备驱动文件有很好的理解才能很快做出来,自己还掌握得不是很好,所以也

9、花了不 少的时间去查资料、实现要求的功能,但现在回过头来看收获很大,对课上所学的 局部内容有了更加深刻的理解,对linux系统调用和设备文件有了更深的认识;第四 题确实是花的时间最多的,因为不仅涉及到复杂的gtk运用,还包括对/proc文件的 理解,这两方面都是查了大量资料后才一点点完成的,时间花了,确实也有了成效, 看到自己画的界面和读出的进程、CPU信息,成就感瞬间爆棚,但这还远远不够, 相信以后学习工作中还会遇到更加困难的类似的问题,这次课设只是打下了个小小 的根底,任重道远!总之,这次课设受益匪浅。6 附录源码实验一:第一题:#include #dcfine buffer_size 1

10、000int main(int argc,char *argv)if(argc != 3) 输入3个参数printf(input error!n);return 0;charbuffbuffcr_sizc = 0; 缓冲区初始化为0int nrcad = 0;FILE *fp_read = NULL;FILE *fp_write = NULL;if(fp_read = fbpen(argv1,”rb”)= NULL)printf(cant open %s,arg-(l);return 1;if(fp_write = fbpen(argv2 ,Hwb) = NULL)printf(cant op

11、en %s,argr2);return 1;vhile(nrcad = frcad(l)uffsizeof(char),buffer_size,fp_rcad)0) /实际读到字符数 nrcad Rvritc(buff,sizcof(char),nrcad,fp_vritc);fclosc(fp_rcad);fclose(fp_vrite);return 0;第二题:/include #include #include GtkWidget*window;GtkWidget*label;void havctimcO int i;命(;计+)time_t titner = timefNUI J);

12、char sl000 = 0;sprintf(s,local time is %s”,ctimc(&timcr);格式化字符串写入 s/*sleep for a second*/sleep(1);gclk_thrcads_enter();gtk_label_set_text(G T K_L A B EL(label),s); gdk_threads_leave();void cpu_usagc() FILE *fp;char cpu5;char buff1000 = 0;char s1000 = 0;long int user,nice,sys,idle,iowait,irq,softirq;

13、long int sl,s2,idlcl,idlc2; float usage;vhile(l)fp = fopenf*/proc/stat,rn);if(fp = NULL)pcrrorffbpcn);exit(0);fgets(buff,sizeof(l)uff),fp);/从文件构造体指针中读取数据sscanffbuf%s%d%d%d%d%d%d%d”,cpu,&user,&nice,&sys,&idl&iowait,&irq,&softirq); si = uscr+nicc+sys+idlc+iowait+irq+softirq;idlel = idle;rcwind(m);slee

14、p ;/mcmsct(buff,0,sizeof(buff);/cpu0 = W;user = nice 二 sys = idle = iowait = irq = softirq 二 0;fget5(buff,sizeof(buff),fp); sscanf(buff,%s%d%d%d%d%d%d%d”,cpu,&user,&nice,&sys,&idle,&iovait,&irq,&scFtirq); s2 = user+nice+sys+idle+iowait+irq+softirq;idlc2 = idle;usage = (float)(s2 - si - (idle2-idlel)

15、/(s2 - s1)*100;sprintf(s;CPU 利用率为%f% H,usage);gd k_th read s_cn ter 0;gtkJabel_set_text(GTK_LABEL(label),s);gclk_thrcads_leave();fclose(fp);sleep(l);void add。int j = 1;int sum = 0;int suml = 0; for(;jl01;j+) suml = sum+j; chars1000 = 0;sprintf(s,%d + %d = %d,sum,j,suml); sleep(3);gdk_th read s_cn te

16、r 0;gtk_label_set_text(GTK_LABEL0abel) ,s);gclk_thrcads_lcave();sum = suml;int main(int argc,char *arg )int pid_l,pid_2,pid_3;if(pid_l = forkQ) = 0)gtk_init(&ar 穿,&argv);window = gtk_window_new(GTI_WIND(W_TOPLEVEL);gtk_wi ndov_sct_ti tlc(GTI_WI N DO W (window) /child 1 progress1);gtk_vi ndov_sct_pos

17、i tion (G1*K_WIN DOW(xvindow) ,G1K_WIN_POS_N ON E); gtk_container_set_border_width(GTK_CONTAlNER(windov),100);nownowlabel = gtk_labcl_ncw(nov lets begin!1); gtk_containcr_add(GTK_CONT/INER(window),label); gtk_widget_show_all(windov);g_signal_conncct(window,destroy,G_C/LLBACK(gtk_main_quit),NULL);7*线

18、程的初始化*/if(!g_thread_supported() g_thread_init(NULL); gdk_threads_initQ;/*创立残程*/ g_thrcad_crcatc(GThrcadFunc)havetimc, NULL, FALSE, NULL);else if(pid_2 = fbrkQ)二二 0)( gtk_init(&argc,&argvr);window = gtk_window_ncw(GTK_WINDOW_TOPLEVEL); gtk_windov_sct_titlc(GTI_V(INDOW(window)/child 2 progress1); gtk_

19、window_set_position(GTK_WlND()W(winclow),GTK_WlN_POS_NONE); gtk_container_set_border_width(GTI0 & dest0)do i=sys_read(source,buf,4096); sys_writc(dcst,buf,i);vhilc(i); sys_close(source); sys_close(dest); set_fs(fs); return 10;teste:#include #include int main syscall(326,textl.txt,text2.txt); return

20、0;实验三:mydev.c:#includc linux/kcrncl.h#include linux/modulc.h#include linux/fs.h#include linux/init.h/include linux/typcs.h”#include linux/errno.hH#include linux/uaccess.h#include Ulinux/kdev_t.h#dcfine BUFFER_SIZE 1024static int my_open(struct inode *inode, struct file *file);static int my_rclcase(s

21、truct inode *inodc, struct filestatic ssize_t my_read(struct filechar _user *user, size_t t, *0;static ssize_t my_vrite(struct file *file, const char _user *user, size_t t, *f);static char messageBUFFER_SIZE = ”U202114813”;static int device_num = 0;/static int counter = 0;/static char* devname = myd

22、ev;struct file_operations pstruct = (.read = my_read,.write = my_write,.open = my_opcn,.release = my_rclcasc;int init_module()int ret;ret = register_chrdev(O,devname,&pstruct);if(rct0)(printkfregist failuren);return -1;else printkfthc device has been registered!n);device_num = ret;prinrk(*the virtua

23、l devices major number %d.n, device_num); prinrkfOr you can see it by usingn,r); printkCvlmore /proc/deviccsn);printkfTo talk to the driver,create a dev file withn,t); printkfmknod /dev/myDevice c %d On, device_num);printkf,Use rmmode* to remove the modulen); return 0;)void cleanup_moduleO unregiste

24、r_chrdev(device_num,devname); printkfunrcgistcr it successn);static int my_opcn (struct inode *inode,struct file *file) ( printk(main device : %dn, M/J()R(inode-i_rdev); printkfslave device : %dn, MINOR(inode-i_rdev); prinrk(,%d times to call rhe deviccn, +counter); try_module_get(THIS_MODULE);retur

25、n 0;stauc int my_rclease(struct inode *inode,struct file *file)printk(Device rclcascd!n); module_put(THIS_MODl;LE); return 0;)static ssize_t my_vrite(struct file const char _user *user,size_t*f) if(copy_fr()tn_user(message,user,sizeof(message) return -EFAULT;return sizeof(message);static ssize_t my_

26、read(srruct file * file,char _user +user,size_t*。if(copv_to_uscr(user,message,sizcof(messagc)return -EFAULT;return sizeof(message);teste:/include include #include #include #include #include #include #define MAX_SIZE 1024in( main(void)int fH;char bufMAX_SIZE;char get(MAX_SIZE;char devName20, dir50 =

27、/dev/;systcm(ls /dev/);printf(Plcasc input the devices name you wanna to use gets(devName);srrcat(dir, devName);fd = open(dir, O_RDWR | O_NONBLOCK);if(fd !=-1)read(fd, buf, sizeof(buf);printffThe device was ini ted with a string: %sn, buf);/*测试写*/printf(Please input a string :n);gets(get);write(fcl,

28、 get, sizeof(get);/*测试读*/rcad(fd, bug sizcof(buf);systcmfdmcsg);printf(nThc string in the device now is : %sn, buf); closc(fd);return 0; elseprintf(Device open failedn); return -1;makefile:ifeq (S(KERNELRELEASE),)KERNELDIR ?= /lib/modules/$(shell uname -r)/buildPWD := $(shell pwd)modules:S(MAKE) -C

29、S(KF.RNELDIR) M=$(PWD) modules modulcs_install:S(MAKE) -C $(KERNEIJD1R) M=$(PWD) modulcsjnstall clean:rm -rf *.o * core .depend .* d *.ko *.mcd.c .tmp_versions .PHONY: modules modulcs_install cleanelseobj-m := mydev.oendif实验四:#include /gcc -o lab4 lab4.c pkg-config -cflags -libs gtk+-2.0char *txt_pi

30、d=NULL;GtkWidget *labell;char* get_cpu_name(char *bufl) 获取 epu 名称FILE * fp;int i = 0;char *buf_ = bufl;fp = fopen(/proc/cpuinfo,r);for(i = 0;iv5j+)fgets(bufl,256,fp);fbr(i = 0p256p+)(if(buf_i = :*) break;i = i+2;buf_ = buf_ + i;buf_31 = 0;fclose(fp);return buf_;char* get_cpu_type(char *buf2) /epu 类型

31、FILE * fp;int i = 0;char *buf_ = buf2;fj) fopenf/proc/cpuinfo);fbr(i = 0p2p+)fgcts(bufl,256,fp);fbr(i = O;iv2560+)if(buLi = :) break;i = i+2;buf_ = buf_ + i;buL12 = 8;fclose(fj);return bull;char* gct_cpu_f(char *buf3) /cpu 主频FILE * fp;int i = 0;char +buf_ = buf3;fp = fopenf 7 proc/cpuinfb,r*);for(i

32、= 0;iv7;i+)fgcts(buL,256,fp);fbr(i = 0;id_namc) 0 =48&(ptr-d_name) 0 d_name);fp=fopcn (b u f, r);fgcts(buffcr,1024,fp); fclose(fp);for(i=0;i1024+)if(bufferO= *) break;buffcri=,0,;strcpy(proc_pid,buffer);i+=2; buffcr+=i;fbr(i=0;ivl024;i+)if(buffcrij=)*) break;buffer二0; strcpy(proc_name,buffer);i+=2;b

33、uffcr2=buffcr+i; buffer2l=0,;strcpy(proc_stat,huffbr2); for(i=O,j=O;i 1024&j V15;i+) if(buffer2p=, *) j+;) buffer2+=i;for(i=0;ivl024;i+)if(buffer2p= *) break; buffcr2i=,0,;strcpy(proc_pri,buffer2); for(j=0;il 024&j V4;i+) if(buffer2p= *) j+; buffcr2+=i; for(i=0;i1024;i+) if(bufQr2i二二*) break; buffcr2i=,0,;strcpy(proc_takcup,buffcr2);

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服