共12条回复
楼长
·
尽情打怪
回复于 2014年07月19日
google的: 进程切换比线程切换开销大是因为进程切换时要切页表,而且往往伴随着页调度,因为进程的数据段代码段要换出去,以便把将要执行的进程的内容换进来。本来进程的内容就是线程的超集。而且线程只需要保存线程的上下文(相关寄存器状态和栈的信息)就好了,动作很小
2楼
·
youyongsong
回复于 2014年07月19日
在unix中:
- 同一个进程中的线程间进行切换,差不多仅需要切换线程的上下文(如寄存器状态等)
- 切换到已经映射好的进程,同样差多仅需要切换进程的上下文和页表切换
- 切换到尚未建立映射的进程,除了需要切换上下文、页表切换,更重要的是需要建立映射
- 不同进程的线程之间切换,开销同上一条
在上面所说的开销中,切换进程上下文开销很小几乎可忽略,而建立映射的开销是很大的。所以我认为线程与进程调度的开销差距主要在于是否需要建立映射。
3楼
·
4楼
·
Harrd
回复于 2014年07月19日
2楼 @youyongsong 请问您说的建立映射指的是什么映射?
另外,我认为一对多模型应该不用陷入内核是因为这种方法相当于编程语言自己实现的线程功能,这种情况下OS以进程作为最小调度单位,当时间片分给一个进程时,进程利用自己的代码来模拟线程,从而对内核是透明的,内核只看得到一个进程,所以这种方式不用陷入内核态
5楼
·
youyongsong
回复于 2014年07月19日
6楼
·
Harrd
回复于 2014年07月19日
5楼 @youyongsong 额 这个东西应该是在第一次创建进程就弄好了,也就是我们所说的页表。最多只是页表中的页可能在磁盘上,需要进行换页。换页的开销确实比较大,毕竟涉及磁盘调度,但这点跟我的问题没啥关系。。
7楼
·
youyongsong
回复于 2014年07月19日
8楼
·
Harrd
回复于 2014年07月19日
7楼 @youyongsong 那我们观点就基本一样。但页表的建立应该是在创建进程时而不是上下文切换。
9楼
·
youyongsong
回复于 2014年07月19日
10楼
·
Harrd
回复于 2014年07月19日
9楼 @youyongsong 我想你说的是缺页吧? 也就是页表项、、 关于这个建立映射有没有资料发出来看看,谢谢
本帖有12个回复,因为您没有注册或者登录本站,所以只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。