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. CPU上下文切换的次数和时间(context switch)

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

  2. [转帖]How long does it take to make a context switch?

    How long does it take to make a context switch?   FROM: http://blog.tsunanet.net/2010/11/how-long-do ...

  3. How long does it take to make a context switch?

    FROM: http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html That's a interesti ...

  4. [Chapter 3 Process]Practice 3.4 Describe what happens when a context switch occurs if the new context is already loaded into one of the register sets.

    3.4 The Sun UltraSPARC processor has multiple register sets. Describe what happens when a context sw ...

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

    1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串   //十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToSt ...

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

    从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态   在高性能编程时,经常接触到多线程. 起初我们的理解是, 多个线程并行地执行总比单个线程要快, 就像多个人一起干活总比一个人干要快 ...

  7. Context Switch Definition

    A context switch (also sometimes referred to as a process switch or a task switch) is the switching ...

  8. Context Switch and System Call

    How many Context Switches is “normal”? This depends very much on the type of application you run. If ...

  9. C# 16进制与字符串、字节数组之间的转换 (转载)

    1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制 Console.WriteLine(, )); //十进制转八进制 Console.WriteLine(, )); / ...

随机推荐

  1. 命令模式/command模式/行为型模式

    举个栗子 指挥官向士兵下达命令,士兵执行 实现代码如下: class Soldier { public void exe() { System.out.println("执行命令" ...

  2. 标准MDL方法修改Page、NonPage内存的属性

    typedef struct _REPROTECT_CONTEXT { PMDL   Mdl; PUCHAR LockedVa; } REPROTECT_CONTEXT, * PREPROTECT_C ...

  3. SSH框架应用解析

    一.什么是SSH SSH 不仅仅只是一个框架,而是由多个框架集成而来,是 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架,结构清晰.可复用性好. ...

  4. ZOOKEEPER3.3.3源码分析(四)对LEADER选举过程分析的纠正

    很抱歉,之前分析的zookeeper leader选举算法有误,特此更正说明. 那里面最大的错误在于,leader选举其实不是在大多数节点通过就能选举上的,这一点与传统的paxos算法不同,因为如果这 ...

  5. JAVA Day6

    1.对象:用来描述客观事物的一个实体,由一组属性和方法组成 2.属性--对象具有的各种特征    *每个对象的每个属性都拥有特定值    *例如:张浩和李明的年龄.姓名不一样 3.方法--对象执行的操 ...

  6. Delphi 2009 泛型容器单元(Generics.Collections)[1]: TList<T>

    Delphi 2009 新增了泛型容器单元: Generics.Collections, 同时还有一个 Generics.Defaults 单元做支持. Generics.Collections 包含 ...

  7. 【面试题】TB

    动态库与静态库区别: 堆栈区别,这样区分的意义: 不用第三个变量,交换两个变量的值: 链表公共节点: 判断链表是否有环: 常用排序算法,哪个可以链表实现: 哪科学的好,感兴趣: 项目介绍,遇到的最大问 ...

  8. Eclipse快捷键/快捷操作汇总

    1.建立.切换不同的工作空间: 工作空间是放置项目的,它是项目的集合,多个工程放在一个工作空间上容易出问题,建议把不同项目存放在单独的工作  空间内,让项目代码更加有序 file → switch w ...

  9. HowTo:使用数据流读写消息

      本文主要演示使用TPL 数据流库从数据流块(dataflow block)读写消息. 提供了同步方法和异步方法. 主要使用BufferBlock,其既能作为message source,有能作为m ...

  10. POJ1815 Friendship(字典序最小最小割割边集)

    看了题解.当时也觉得用邻接矩阵挺好写的,直接memset:然而邻接矩阵不懂得改,于是就放开那个模板,写了Dinic.. 方法是,按字典序枚举每一条满流的边,然后令其容量减1,如果最大流改变了,这条边就 ...