16.2 How would you measure the time spent in a context switch?

上下文转换发生在两个进程之间,比如让一个等待进程进入执行和让一个运行进程进入等待,这些在多任务中发生。操作系统需要把等待进程的信息放入内存和把当前运行的进程信息保存下来。为了解决这个问题,我们记录在切换进程时的最后和第一个指令的时间点,比如我们有两个进程P1和P2,P1在执行P2在等待,当我们切换P1和P2时,假设发生在P1的第N个指令,我们用tx,k来表示进程x的第k个指令的时间点,那么切换的时间为t2,1-t1,n

那么问题是我们怎么知道什么时候转换发生,我们又不能记录进程的每个指令的时间点。另外还有转换是由操作系统的安排算法管理的,而且有很多核心线程也要用上下文转换。其他进程也可能竞争CPU或内核处理中断。用户不能控制外部的上下文转换,比如在时间t1,n,内核决定处理中断,那么上下文转换的时间就会延长。为了克服这些困难,我们需要建立一个上下文使得P1执行完,P2马上就能运行。我们可以建立一个数据通道Data Chanel,例如管道Pipe,在P1和P2之间,就像两个进程在打乒乓球,使用数据权标Data Token。

我们让P1当发送者,P2当接受者。开始时,P2在等待,当P1执行了,它发送了数据权标给P2,然后等着读取一个回执。但是由于P2还没能执行,所以P1没有回执,进行被阻碍了,释放了CPU。上下文转换发生了,任务分配器必须选另一个进程执行,且P2处于准备执行状态。当P2运行了,P1和P2的角色互换了,P2现在是发送者而P1是接受者,当P2发回执给P1,整个过程就完成了:

1. P2等待P1发送消息。

2. P1记录时间点。

3. P1给P2发送消息。

4. P1试图读取回执,这包括了一个上下文转换。

5. P2准备就绪并接到了消息。

6. P2发送回执给P1。

7. P2尝试读取P1的回执,这包括了一个上下文转换。

8. P1准备就绪且接到了消息。

9. P1记录时间点。

那么步骤2到9之间的时间差T,表示为T = 2 * (Td + Tc + Tr),其中Td和Tr表示发送和接受消息时间,Tc表示状态转换的时间。那么现在问题是要求Td + Tr的值,即为P1发送信息给自己到接受到消息的时间,这不包括状态转换的时间因为是发给自己。由于可能存在的未知中断,所以我们需要重复多次,取最小的Tc当做结果。

这也只是一个近似结果,因为我们这么做有个假设就是当P2接到消息后马上就开始运行,这得根据任务分配器的实现方法,所以只是个近似值。

CareerCup All in One 题目汇总

[CareerCup] 16.2 Measure Time in a Context Switch 测量上下文转换的时间相关推荐

  1. 汉字转换成html,汉字与16进制、汉字与Html转义符的转换

    汉字与16进制.汉字与Html转义符的转换 package test; import java.io.UnsupportedEncodingException; import java.net.URL ...

  2. 16进制ff转化为二进制_3秒钟快速转换十六进制为二进制

    这里介绍下如何快速将十六进制转换为二进制: 举例,ipv6地址:FE80::1 先将FE80拆分为FE和80,我们知道F是十进制的15,E为14,我们知道二进制的八位组,全为1时(1111 1111) ...

  3. C# 16进制与字符串、字节数组之间的转换

    在串口通讯过程中,经常要用到 16进制与字符串.字节数组之间的转换 字符串转16进制字节数组  1         private static byte[] strToToHexByte(strin ...

  4. 从Java视角理解CPU上下文切换(Context Switch)

    在高性能编程时,经常接触到多线程. 起初我们的理解是, 多个线程并行地执行总比单个线程要快, 就像多个人一起干活总比一个人干要快. 然而实际情况是, 多线程之间需要竞争IO设备, 或者竞争锁资源,导致 ...

  5. Async Program 基本知识 (Process、Thread、Context Switch)

    处理序 (Process): 作为隔离应用程式的基本单位 例如:开启了一个程式,载入记忆体后,运行的instantce 就叫 Proces. 每一个 Process 占用 memory section ...

  6. 用汇编实现2进制到16进制 2进制到10进制转换并按要求输出

    用汇编实现2进制到16进制 2进制到10进制转换并按要求输出 起因 题目要求 题目样例 实现代码 验证结果 最后 起因 我因为上课摸鱼,所以当时没学习的时间现在都要补回来. 三天,大概花了15个小时写 ...

  7. linux 上下文切换时间,CPU上下文切换的次数和时间(context switch)

    什么是CPU上下文切换?css 如今linux是大多基于抢占式,CPU给每一个任务必定的服务时间,当时间片轮转的时候,须要把当前状态保存下来,同时加载下一个任务,这个过程叫作上下文切换.时间片轮转的方 ...

  8. 压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate

    上篇讲如何用LoadRunner监控Linux的性能指标 ,但是关于CPU的几个指标没有搞清楚,下面就详细说说. CPU Utilization 好理解,就是CPU的利用率,75%以上就比较高了(也有 ...

  9. 衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate

    CPU Utilization 好理解,就是CPU的利用率,75%以上就比较高了(也有说法是80%或者更高).除了这个指标外,还要结合Load Average和Context Switch Rate来 ...

最新文章

  1. Java的IO操作(二) - 带缓冲区的流对象、写入基本数据类型、实现命令行中的copy命令...
  2. 指令集及流水线基本概念
  3. 在WPF的WebBrowser控件中抑制脚本错误
  4. OCA读书笔记(1) - 浏览Oracle数据库架构
  5. 电脑维修:电脑维修必备工具整理
  6. java tcp 监听端口_【TCP/IP】端口未监听,还能访问成功?
  7. 苹果企业证书_IOS福利9月15日苹果企业证书已更新!重新下载即可!
  8. 前端 - token 是什么?为什么每次请求头(HEADS)里要携带它?___请求时,为什么要携带token?
  9. PERL模拟飞鸽传书文件传输总结
  10. vue3中setup()函数的使用一
  11. 嵌入式系统--ARM微处理器概述
  12. 利用github协作开发步骤
  13. jQuery对表格的操作
  14. uni-swipe-action失效?
  15. 玩客云安装linux系统的好处,玩客云armbian安装aria2+ariaNG过程记录
  16. 如何合并多个.xlsx文件到一个Excel表格(office16)
  17. 17 个 JVM 参数
  18. 快看看用Python生成Excel炫酷图表,不然你就OUT了
  19. 我们做不到一刀劈死它,但可以先切断它的一根脚趾头
  20. SQL语句查询不同年龄段人数

热门文章

  1. 超全药理学问答题汇总
  2. FAST300M无线宽带路由器FW300R(从)桥接TPLINK路由器(主)
  3. 前端(三)——HTML之表单
  4. Icarus Verilog与GTKWave简介及其下载安装
  5. 样机模型尺寸怎么改_土耳其五代机全尺寸样机模型首次亮相巴黎航展,这不是玩票,是一架认真设计的五代机!...
  6. 详解 GNU C 标准中的 typeof 关键字
  7. 大学电路题目怎么搜_电路(二),中国大学MOOC(慕课)答案公众号搜题
  8. 电工结业试卷_电工电子考试试(含答案).doc
  9. 边缘检测的简单例子(MATLAB)
  10. Python 参考文档