日度归档:2015年3月24日

测量程序执行时间-2进程调度 计时器中断

摘自“深入理解计算机系统”
进程调度方式:
外部事件,例 敲击键盘 磁盘操作 网络活动 都会产生中断信号,这些中断信号使得操作系统调度程序得以运行,可能还会切换到另一进程。即使没有这样的事件,我们也希望处理器从一个进程切换到另一个,这样用户看上去就好像处理器在同时执行许多程序一样。出于这个原因,计算机有一个外部计时器,它周期性地向处理器发送中断信号。这些中断信号之间的时间被称为间隔时间。当计时器中断发生时,操作系统调度程序可以选择要么继续当前正在执行的进程,要么切换到另一进程。这个间隔必须设置得足够短,以保证处理器在任务间切换得足够频繁,能够提供在同时执行多个任务的假象。另一方面,从一个进程切换到另一个进程需要几千个时钟周期来保存当前进程的状态,并且为下一个进程准备好状态,因此将间隔设置得太短会导致性能很差。根据处理器以及处理器的配置情况,典型的计时器间隔范围是1~10ms。
从系统的角度说明了在计时器间隔为10ms的系统上假设的250ms的操作。在这段时间内有两个活动的进程:A和B。处理器交替地执行进程A的一部分,然后再执行B的一部分,以此类推。当处理器执行这些进程时,它要么运行在用户模式,执行应用程序的指令,要么运行在内核模式,代表程序执行操作系统函数,例 处理缺页 输入 输出 回想一下,内核操作被认为是每个普通进程的一部分,而不是一个独立的进程。每次有外部事件或计时器中断时,都会调用操作系统调度程序。在图中,计时器中断的发生是由短线标记。
当调度程序从进程A切换到进程B时,它必须进入内核模式保存进程A的状态,然后恢复B的状态。因此,在每次从一个进程过渡到另一个进程期间,是有内核活动的。

javascript jquery 扩展方法

1 jquery 如何编写 扩展方法 ?
在jquery的命名空间$.fn,可以为jquery加上方法和属性,对jquery的每一个实例都有效
例如扩展一个方法 $.fn.testAddFun=function(){alert(‘我是扩展方法!’);}
$(“#object”).testAddFun(); 将会弹出 我是扩展方法!

2.1 jquery extend方法

< script language="javascript" type="text/javascript">

$.fn.fun1 = function(a) {
$a= $.extend( {
showInfo: “无信息”,
style: {
“color”: “blur”,
“font-size”:”24px”
}},a
);

return $(this).css({
“color”: $a.style.color,
}).html($a.showInfo);

}
function test()
{
alert(“a”);
$(‘#info’).fun1({showInfo:”插件编写”,style:{“color”:”red”,”font-size”:”50px”}});
}
< /script>
jquery-extend
2.2 使用jquery extend 可以叠加变量结果,让变量存储最近的一份变量
$.extend(
{ name: “nameA”, location: { city: “shenZhen” } },
{ last: “lastB”, location: { state: “F” } }
);
结果:
=> { name: “nameA”, last: “lastB”, location: { state: “F” } }
.extend() 复合叠加
$.extend( true,
{ name: “nameA”, location: { city: “shenZhen” } },
{ last: “lastB”, location: { state: “F” } }
);
结果
=> { name: “nameA”, last: “lastB”,
location: { city: “ShenZhen”, state: “F” } }

2.3 为jquery添加全局方法
< script type="text/javascript" language="javascript">
$.extend({
jiaFa:function(a,b){return a+b;},
jianFa:function(a,b){return a-b},
chengFa:function(a,b){return a*b;};
} });

var a = $.jiaFa(3,5)+$.jianFa(3,5)+$.chengFa(3,5);
alert(a);
< /script>