添加系统调用实验报告Word格式文档下载.docx

上传人:b****6 文档编号:20645923 上传时间:2023-01-24 格式:DOCX 页数:18 大小:1.59MB
下载 相关 举报
添加系统调用实验报告Word格式文档下载.docx_第1页
第1页 / 共18页
添加系统调用实验报告Word格式文档下载.docx_第2页
第2页 / 共18页
添加系统调用实验报告Word格式文档下载.docx_第3页
第3页 / 共18页
添加系统调用实验报告Word格式文档下载.docx_第4页
第4页 / 共18页
添加系统调用实验报告Word格式文档下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

添加系统调用实验报告Word格式文档下载.docx

《添加系统调用实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《添加系统调用实验报告Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。

添加系统调用实验报告Word格式文档下载.docx

tar-zxf

、解压后如下

、拷贝linux,命名为-rlinux

、移动到根目录,替换掉.config

、进入目录,配置和编译内核模块

makeoldconfig

{

makedep

makeclean

makebzImage

makemodules

内核安装与测试

安装内核映像文件

cparch/i386/boot/bzImage/boot/

拷贝和安装Linux系统映射文件,并创建其与系统映射文件之间的符号链接

执行命令makemodules_install以安装可动态加载的内核模块

添加启动项的配置

利用vi编辑器,vi

查看/所在的位置,为/dev/sda3

重新启动系统,从自己创建的内核启动系统

启动后查看内核

分别用uname–r,和dmesg查看

三、Linux系统调用添加与实现

在内核增加系统调用

结构体structsrz_rusage可声明如下:

.

structsrz_rusage{

structtimevalru_utime;

/*usertimeused*/

structtimevalru_stime;

/*systemtimeused*/

longru_majflt;

/*majorpagefaults*/

longru_minflt;

/*minorpagefaults*/

longru_nswap;

/*swaps*/

};

添加到下的中

添加的系统调用名称为:

intget_process_usage(pid_t,structsrz_rusage*);

参考的getrusage和sys_getrusage的代码在下面

 

分析getrusage()和sys_getrusage()的源代码

1)数据结构rusage在头文件中定义。

structrusage{

structtimevalru_utime;

structtimevalru_stime;

longru_maxrss;

/*maximumresidentsetsize*/

longru_ixrss;

/*integralsharedmemorysize*/

longru_idrss;

/*integralunshareddatasize*/

longru_isrss;

/*integralunsharedstacksize*/

longru_minflt;

/*pagereclaims*/

longru_majflt;

/*pagefaults*/

longru_nswap;

/*swaps*/

longru_inblock;

/*blockinputoperations*/

longru_oublock;

/*blockoutputoperations*/

longru_msgsnd;

/*messagessent*/

longru_msgrcv;

/*messagesreceived*/

longru_nsignals;

/*signalsreceived*/

longru_nvcsw;

/*voluntarycontextswitches*/

longru_nivcsw;

/*involuntary"

*/

2)函数getrusage()的作用是获取系统资源使用情况。

/*

*Itwouldmakesensetoputstructrusageinthetask_struct,

*exceptthatwouldmakethetask_structbe*reallybig*.After

*task_structgetsmovedintomalloc'

edmemory,itwould

*makesensetodothis.Itwillmakemovingtherestoftheinformation

'

*alotsimpler!

(Whichwe'

renotdoingrightnowbecausewe'

renot

*measuringthemyet).

*

*ThisisSMPsafe.Eitherwearecalledfromsys_getrusageonourselves

*below(weknowwearen'

tgoingtoexit/disappearandonlywechangeour

*rusagecounters),orwearecalledfromwait4()onaprocesswhichis

*eitherstoppedorzombied.Inthezombiedcasethetaskwon'

tget

*reapedtillshortlyafterthecalltogetrusage(),inbothcasesthe

*taskbeingexaminedisinafrozenstatesothecounterswon'

tchange.

*FIXME!

Getthefaultcountsproperly!

intgetrusage(structtask_struct*p,intwho,structrusage*ru)

structrusager;

memset((char*)&

r,0,sizeof(r));

switch(who){

caseRUSAGE_SELF:

=CT_TO_SECS(p->

;

=CT_TO_USECS(p->

:

=p->

min_flt;

maj_flt;

nswap;

break;

caseRUSAGE_CHILDREN:

cmin_flt;

cmaj_flt;

cnswap;

default:

+p->

min_flt+p->

maj_flt+p->

nswap+p->

<

returncopy_to_user(ru,&

r,sizeof(r))-EFAULT:

0;

}

3)sys_getrusage()只是调用了内核函数getrusage(),是内核提供给用户的接口。

asmlinkagelongsys_getrusage(intwho,structrusage*ru)

if(who!

=RUSAGE_SELF&

&

who!

=RUSAGE_CHILDREN)

return-EINVAL;

returngetrusage(current,who,ru);

[

编写应用程序调用该系统(调用)过程

在中添加函数get_process_usage()和系统调用函数sys_get_process_usage()的代码;

int 

get_process_usage(struct 

task_struct 

*p,struct 

srz_rusage 

*ru) 

struct 

r;

memset((char 

*) 

r, 

0, 

sizeof(r));

ongSYMBOL_NAME()]的清单,该清单用来对sys_call_table[]数组进行初始化,该数组包含指向内核中每个系统调用的指针。

我们在清单最后添加一行:

.longSYMBOL_NAME(sys_get_process_usage)

编译安装内核以后的启动界面

四、编写程序调用新的系统调用

程序一

头文件

testsyscallpid_no

执行结果

Dmesg查看信息

程序二

dmesg查看

附件:

源程序一

第一种实现方法

//

#include<

/root/<

/root/源程序

//

#include"

"

>

intget(pid_tpid);

intmain(intargc,char*argv[])

pid_tpid;

pid=atoi(argv[1]);

get(pid);

intget(pid_tpid)

structsrz_rusageru;

longr=0;

if(pid<

=0){

printf("

\nerror:

Pidmustint!

\n\n"

);

return0;

r=syscall(238,pid,&

ru);

if(!

r)

{

ShangRongZhusuccess!

printf("

User_time:

\t%dseconds:

%dmseconds\n"

System_time:

%dmseconds\n"

printf("

Minlostpage:

\t%d\n"

;

Maxlostpage:

Changepagetimes:

\t%d\n"

else

Error,cheakthepid:

\n"

r);

第二种实现方法

#define__NR_get_process_usage238

_syscall2(long,get_process_usage,pid_t,pid,structsrz_rusage*,ru)

r=get_process_usage(pid,&

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1