S********p 发帖数: 35 | 1 【 以下文字转载自 SanFrancisco 讨论区 】
发信人: proceed (波丝), 信区: SanFrancisco
标 题: Re: 大家看看阿三在onsite的时候怎么黑我的
发信站: BBS 未名空间站 (Mon Sep 30 00:14:31 2013, 美东)
你的第一个问题其实答的不够专业,如果我在1年前去答也会大概这么答,但是1年后的
今天,已经被微软的内核搞得焦头烂额的我,如果看到你这个回答,出于都是同胞,我
会再换一种方式问你(烙印肯定不会了):告诉我context switch的过程。
其实invalid/flush cache是很快的,而且都有专门的coprocessor去做,跑os的核发个
指令就可以忙其他的了,TLB的处理也非常快速,MMU会取代主核取干事情。
真正花费时间的事我觉得是决定去做context switch的过程 和决定哪个thread去接盘
cpu 的过程。
决定去做context switch的过程 :
这部分必定伴随着异常,异常意味着要从用户模式先切换到系统模式,然后处理可能到
来的时钟中断(用来判断quantum is over,进而要去进入中断模式,处理完时钟中断要
返回系统模式),然后处理reschedule的命令,处理完reschedule的命令要从系统模式
返回用户模式,里外里切换了很多次模式;
决定哪个thread去接盘cpu 的过程:
在处理reshedule 命令的时候,大部分时间不是用在swap寄存器了,而是用在判断哪个
thread 应该被swap进cpu上了。我了解得微软的内核是有一个备选线程,同时还有一个
32个元素的hash表,表里的元素都是线程,不同优先级的线程。context switch会拿备
选线程的优先级和hash表里的线程还有当前正在跑得线程作比较,判断出优先级最高的
能跑得线程,然后再去swap 新线程的register(其实这部分时间少的可怜,倒是另外一
部分时间长--“维护线程数据结构”,因为线程的数据结构里有很多信息很多是关于他
为什么要sleep,在等哪个event,他前面是哪个线程,后面是哪个线程,他的event 都被
那几个其他线程等,等等等等, 这一块我也稀里糊涂的)
不是碰到很多微软内核的问题,我还正不知道这么多,今天既然看到你问这个问题了,
我就把我最近看到的都说说,对我自己也是个总结。 | S********p 发帖数: 35 | | f*******t 发帖数: 7549 | 3 不明觉厉
★ 发自iPhone App: ChineseWeb 7.8
【在 S********p 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 大家看看他答的对吗?
| h*******e 发帖数: 6167 | 4 确实是不明觉历!
【在 f*******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 不明觉厉 : : ★ 发自iPhone App: ChineseWeb 7.8
| S********p 发帖数: 35 | | A*****i 发帖数: 3587 | |
|