如果您的系统调用只应报告统计信息,则可以使用内核中已有的上下文切换计数代码.

struct rusage {

...

long ru_nvcsw; /* voluntary context switches */

long ru_nivcsw; /* involuntary context switches */

};

您可以通过运行来尝试:

$/usr/bin/time -v /bin/ls -R

....

Voluntary context switches: 1669

Involuntary context switches: 207

其中“/ bin / ls -R”是任何程序.

通过在内核源代码中搜索“struct rusage”,您可以在kernel / sys.c中找到更新rusage结构的this accumulate_thread_rusage.它从struct task_struct * t读取;字段t-> nvcsw;和t-> nivcsw;:

1477 static void accumulate_thread_rusage(struct task_struct *t,struct rusage *r)

1478 {

1479 r->ru_nvcsw += t->nvcsw; // <<=== here

1480 r->ru_nivcsw += t->nivcsw;

1481 r->ru_minflt += t->min_flt;

1482 r->ru_majflt += t->maj_flt;

然后你应该在kernel文件夹中搜索nvcsw和nivcsw来查找内核如何更新它们.

4124 if (likely(prev != next)) { // <= if we are switching between different tasks

4125 sched_info_switch(prev,next);

4126 perf_event_task_sched_out(prev,next);

4127

4128 rq->nr_switches++;

4129 rq->curr = next;

4130 ++*switch_count; // <= increment nvcsw or nivcsw via pointer

4131

4132 context_switch(rq,prev,next); /* unlocks the rq */

指针switch_count是同一文件的line 4091或line 4111.

linux 系统调用时怎么知道当前上下文属于那个进程,linux – 编写系统调用来计算进程的上下文切换...相关推荐

  1. linux字符界面忘记登录密码,个性化修改Linux登录时的字符界面

    如果采用root账号登录编辑/etc/bashrc内容,那所有其他帐号登录都会提示相同的内容,如果想每个用户进行配置,那就去每个帐号的目录下去配置吧. 这里提供改一个文件所有帐号都能看到的个性显示内容 ...

  2. linux启动 profile,Linux 启动时profile、bashrc、~/.bash_profile、~/.bashrc、~/.bash_profile执行顺序以及文件说明...

    Linux 启动时profile.bashrc.~/.bash_profile.~/.bashrc.~/.bash_profile执行顺序以及文件说明 一.执行顺序 登录linux时,/etc/pro ...

  3. 【Linux 内核】CFS 调度器 ③ ( 计算进程 “ 虚拟运行时间 “ )

    文章目录 一.计算进程 " 虚拟运行时间 " 一.计算进程 " 虚拟运行时间 " 在上一篇博客 [Linux 内核]CFS 调度器 ② ( CFS 调度器 &q ...

  4. Linux内核设计与实现 总结笔记(第五章)系统调用

    系统调用 内核提供了用户进程和内核交互的接口,使得应用程序可以受限制的访问硬件设备. 提供这些接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行. 一.内核通信 系统调用在用户空间进程和硬件设备之间 ...

  5. Linux入门时必学文件处理个命令

    Linux系统信息存放在文件里,文件与普通的公务文件类似.每个文件都有自己的名字.内容.存放地址及其它一些管理信息,如文件的用户.文件的大小等.文件可以是一封信.一个通讯录,或者是程序的源语句.程序的 ...

  6. 初步了解Linux strace 命令和跟踪进程产生的系统调用

    strace strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切 ...

  7. linux写时复制技术初探

    COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了"写时复制"技术,也就是只 ...

  8. Linux 写时复制机制原理

    在 Linux 系统中,调用 fork 系统调用创建子进程时,并不会把父进程所有占用的内存页复制一份,而是与父进程共用相同的内存页,而当子进程或者父进程对内存页进行修改时才会进行复制 -- 这就是著名 ...

  9. Linux写时拷贝技术(copy-on-write)

    COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了"写时复制"技术,也就是只 ...

最新文章

  1. 序列拼接工具Bowtie使用说明
  2. Matlab | Matlab从入门到放弃(9)——浮点数取整
  3. 2017.9.19 禁忌 失败总结
  4. Servlet的生命周期和工作原理
  5. 彻底理解SVD奇异值分解(singular value decomposition)
  6. java ee 结构图,javaee体系结构图
  7. 计算机网络-应用层笔记
  8. Quartz 数据库表
  9. 加上华为mate30系列,9月还有5场新机发布会,你更期待哪场
  10. 英语作文《健康的重要性》
  11. 【Java】面向对象编程题
  12. 陶哲轩实分析 习题6.6.5
  13. mina自定义编解码
  14. Kafka入门经典教程
  15. java第一个代码Hello,World
  16. 跨平台长连接组件设计及可插拔改造
  17. Dirty Approach之无招胜有招
  18. 机器学习必备:2018年前20名Python人工智能和机器学习开源项目
  19. 四:es聚和函数Aggregations
  20. Uipath学习(1):Uipath变量及数据类型

热门文章

  1. SpringBoot 整合Redis 单机、哨兵、集群
  2. Linux Shell脚本专栏_批量主机远程执行命令脚本_08
  3. window下远程监控linux下tomcat的jvm
  4. html-文本框和单选框
  5. .class和getClass()的区别
  6. php mysql 地理位置_PHP MySql和地理位置
  7. 易商云页面认证失败是什么情况_Serverless 云原生框架 Malagu:认证与授权
  8. 5求的值c语言编辑,C语言中怎样求1+3+5~~~~~+9值并 – 手机爱问
  9. BugkuCTF-Crypto题你喜欢下棋吗
  10. java减治法深度优先查找_排序|减治法实现排序