杭电(杭州电子科技大学)操作系统实验一:Linux内核编译及添加系统调用(返回指定进程的相关时间信息)

前言

我是赵伟华老师的班级,我个人被分配到了“改变主机名称为自定义字符串”的题目,做了半个多月一直没弄出来就放弃了(编译成功但运行的时候进程会被杀死,在文章最后我会把这个题的代码po出来),后来才找老师换了个题。

赵伟华老师问的比较深入,所以需要提前查很多源码,我会在下面全po出来。

前排感谢刘瀚同学分享验收经验

实验要求

返回指定进程的相关时间信息,如进程创建时间、进程在用户态及内核态的运行时间、进程的所有子孙进程在用户态的运行时间及在内核态的运行时间等。

代码

①修改系统调用表(arch/x86/entry/syscalls/syscall_64.tbl)

335     64      mygettime               sys_mygettime

②申明系统调用服务例程(include/linux/syscalls.h)

asmlinkage long sys_mygettime(pid_t pid,u64 __user *start_time,u64 __user *utime,u64 __user *stime,int __user *num);

③实现系统调用服务例程(kernel/sys.c)

SYSCALL_DEFINE6(mygettime,pid_t,pid,u64 __user *,start_time,u64 __user *,utime,u64 __user *,stime,int __user *,num)
{
    u64 c_start_time,c_utime,c_stime;
    int c_num=0;
    struct pid *ppid;
    struct task_struct *p;
    struct task_struct *pp;
    
    ppid = find_get_pid(pid);
    p = pid_task(ppid,PIDTYPE_PID);
    c_start_time = p -> start_time;
    c_utime = p -> utime;
    c_stime = p -> stime;
    
    copy_to_user(start_time,&c_start_time,sizeof(c_start_time));
    copy_to_user(utime,&c_utime,sizeof(c_utime));
    copy_to_user(stime,&c_stime,sizeof(c_stime));

    list_for_each_entry(pp,&(p -> children),sibling)
     {
       
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值