云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 《操作系统》基本课程实验指导书-2014

《操作系统》基本课程实验指导书-2014

  • 62 次阅读
  • 3 次下载
  • 2025/5/30 20:56:29

moremsec = (1000000 - c2_virtt.it_value.tv_usec)/1000;

printf(\

t1=(10-c2_proft.it_value.tv_sec)*1000+(1000000-c2_proft.it_value.tv_usec)/1000 + c2_proft_secs*10000;

+

t2=(10-c2_virtt.it_value.tv_sec)*1000+(1000000-c2_virtt.it_value.tv_usec)/1000 c2_virtt_secs*10000;

}

moresec = (t1 - t2)/1000;

moremsec = (t1 - t2) % 1000;

printf(\fflush(stdout); exit(0); }//endc2

//parent

//setparent signal handle

signal(SIGALRM,p_sighandle); signal(SIGVTALRM,p_sighandle); signal(SIGPROF,p_sighandle);

ini_value.it_interval.tv_sec = 10; ini_value.it_interval.tv_usec = 0; ini_value.it_value.tv_sec = 10; ini_value.it_value.tv_usec = 0;

//set parent timer

setitimer(ITIMER_REAL,&ini_value,NULL); setitimer(ITIMER_VIRTUAL,&ini_value,NULL); setitimer(ITIMER_PROF,&ini_value,NULL);

fib = fibonacci(36);

getitimer(ITIMER_PROF,&p_proft); getitimer(ITIMER_REAL,&p_realt); getitimer(ITIMER_VIRTUAL,&p_virtt);

printf(\

moresec = 10 - p_realt.it_value.tv_sec;

moremsec = (1000000 - p_realt.it_value.tv_usec)/1000;

printf(\

moresec = 10 - p_proft.it_value.tv_sec;

moremsec = (1000000 - p_proft.it_value.tv_usec)/1000;

printf(\

moresec = 10 - p_virtt.it_value.tv_sec;

moremsec = (1000000 - p_virtt.it_value.tv_usec)/1000;

printf(\

t1= (10 - p_proft.it_value.tv_sec)*1000 + (1000000 - p_proft.it_value.tv_usec)/1000 + p_proft_secs*10000;

t2 = (10 - p_virtt.it_value.tv_sec)*1000 + (1000000 - p_virtt.it_value.tv_usec)/1000 + p_virtt_secs*10000;

moresec = (t1 - t2)/1000;

moremsec = (t1 - t2) % 1000;

printf(\

fflush(stdout); //wait c1,c2 terminal wait(&status); wait(&status); return 0; }//end main

int fibonacci(int n) {

if( n == 0 ) return 0;

else if( n == 1 || n == 2) return 1;

else return(fibonacci(n-1)+fibonacci(n-2) ); }

static void c1_sighandle(int s) { }

static void c2_sighandle(int s) {

switch(s){ case SIGALRM:c2_realt_secs+=10;break;

case SIGVTALRM:c2_virtt_secs+=10;break;

switch(s){

case SIGALRM:c1_realt_secs+=10;break;

case SIGVTALRM:c1_virtt_secs+=10;break; case SIGPROF:c1_proft_secs+=10;break; default :break;

}

} { }

case SIGPROF:c2_proft_secs+=10;break;

default :break; }

static void p_sighandle(int s)

switch(s){ case SIGALRM:p_realt_secs+=10;break; case SIGVTALRM:p_virtt_secs+=10;break; case SIGPROF:p_proft_secs+=10;break; default :break;

}

3.3 实验2.3内核模块

1、实验目的

模块是Linux系统的一种特有机制,可用以动态扩展操作系统内核功能。编写实现某些特定功能的模块,将其作为内核的一部分在管态下运行。本实验通过内核模块编程在/porc文件系统中实现系统时钟的读操作接口。

2、实验内容

设计并构建一个在/proc文件系统中的内核模块clock,支持read()操作,read()返回值为一字符串,其中包块一个空各分开的两个子串,为别代表xtime.tv_sec和xtime.tv_usec。

3、实验原理

Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合。在装载这些模块式,将它的代码链接到内核中。Linux模块可以在内核启动时装载,也可以在内核运行的过程中装载。如果在模块装载之前就调用了动态模块的一个函数,那么这次调用将会失败。如果这个模块已被加载,那么内核就可以使用系统调用,并将其传递到模块中的相应函数。

4、实验步骤

?

编写内核模块

文件中主要包含init_module(),cleanup_module(),proc_read_clock()三个函数。其中init_module(),cleanup_module()负责将模块从系统中加载或卸载,以及增加或删除模块在/proc中的入口。read_func()负责产生/proc/clock被读时的动作。 ?

编译内核模块Makefile文件 Makefile CC=gcc

MODCFLAGS := -Wall -D__KERNEL__ -DMODULE –DLINUX

clock.o :clock.c /usr/include/linux//version.h $(CC) $( MODCFLAGS) –c clock.c

echo insmod clock.o to turn it on echo rmmod clock to turn ig off echo

编译完成之后生成clock.o模块文件。 ? 内核模块源代码clock.c #define MODULE

#define MODULE_VERSION #define MODULE_NAME

#include #include #include

int proc_read_clock(char* page, char** start, off_t off,

int count,int* eof,void* data)

{

int len;

struct timeval xtime;

do_gettimeofday(&xtime);

len = sprintf(page,\printk(\return len;

“1.0” “clock”

}

// proc_dir_entry数据结构

struct proc_dir_entry* proc_my_clock;

int init_module()

{

printk(\

my_clock=create_proc_read_entry(\printk(KERN_INFO“%s %s has initialized.\\n”,

MODULE_NAME,MODULE_VERSION);

return 0; }

void cleanup_module() {

printk(\

remove_proc_entry(proc_my_clock->name, &proc_root); printk(KERN_INFO“%s %s has removed.\\n”,

MODULE_NAME,MODULE_VERSION);

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

moremsec = (1000000 - c2_virtt.it_value.tv_usec)/1000; printf(\ t1=(10-c2_proft.it_value.tv_sec)*1000+(1000000-c2_proft.it_value.tv_usec)/1000 + c2_proft_secs*10000; + t2=(10-c2_virtt.it_value.tv_sec)*1000+(1000000-c2_virtt.it_value.tv_usec)/1000 c2_virtt_secs*10000; }

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com