我读过“亚伯拉罕·西尔伯沙茨”的操作系统书中的“多到多模型”。在第四章中它说
“Solaris操作系统支持比Solaris 9更早版本的多到多模型,但是,从Solaris 9开始,该系统使用一对一的模型。”。
我的问题如下。可能是书中提到的答案,我不明白,我也在网上搜索,但是找不到有用的信息为什么会发生变化?
发布于 2016-02-22 01:46:20
我只研究过实现一些人所说的一对一模型的系统。这种一对一/多对多/多对一的国际水文学组织的分类是误导的。
这里的建议是,在“一对一模型”中,每个线程真正创建两个线程:内核模式线程和用户模式线程。实际上,所有这些都需要一个可以在用户模式和内核模式(即内核模式堆栈)中运行的线程。
线程可以在内核模式和用户模式(也可能是其他模式,也称为一对一模型)中运行,它的优点是线程可以完全独立地操作,并且实现起来可能更简单。每个线程都可以进入内核模式(例如执行I/O),而不阻塞任何其他线程。所谓的缺点是,这要求每个线程都有自己的内核模式堆栈。
同样,我还没有开发过多对一或多对多的系统,但我怀疑这些系统不是用单独的内核模式线程实现的,而是使用由多个线程共享的内核模式数据结构实现的。
多到多模式的问题是什么?
多对多、多对一的明显缺点是内核模式成为一种资源,其不可用性可能导致一组线程阻塞另一组线程。
假设您有3个内核模式“线程”和10个用户模式线程。如果4个用户模式线程同时尝试执行I/O,则第四个线程将阻塞,直到前三个线程中的一个完成为止。
它的实现也更加复杂,因为您必须将内核模式“线程”作为资源进行管理。
为什么会发生从多模型到多模型到一对一模式的转变?
我想不出一对多或多对多的任何实际好处,而且可以想到许多缺点(上面)。这可能就是发生变化的原因。
尽管如此,IMHO,这是解释线程的一种令人困惑的方式。
https://stackoverflow.com/questions/35538623
复制相似问题