内核级线程与用户级线程异同

这几天在和同学讨论的时候,对于内核线程和用户线程概念上出现了问题,在网上搜索了不少文章,感觉还是不是我想要的,下来查看了以前学习的操作系统才弄

明白,在这里将我的理解写出来让大家看看,和大家分享分享。。。

线程已经在许多系统中实现,到那时各个操作系统实现方式不完全相同。

比如在有的系统中,特倍是一些数据库管理系统如IBM的infomix系统,所实现的用户级线程(UserLevel Threads ,ULT);而另一些系统如(Mac os的前身Macintosh和OS/2操作系统)所实现的是内核支持线程 ( Kernel Supported threads, KST);还有一些是Solaris操作系统,则同时实现了这两中类型的线程。

  • KST

对于一切的进程,无论是系统进程还是用户进程,进程的创建和撤销,以及I/O操作都是利用系统调用进入到内核,由内核处理完成,所以说在KST下,所有进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。内核空间实现还为每个内核支持线程设置了一个线程控制快,内核是根据该控制快而感知某个线程是否存在,并加以控制。

优点:

  1.  在多处理器上,内核可以调用同一进程中的多个线程同时工作;
  2. 如果一个进程中的一个线程阻塞了,其他线程仍然可以得到运行;

缺点:对于用户线程的切换代价太大,在同一个线程中,从一个线程切换到另一个线程时,需要从用户态,进入到内核态并且由内核切换。因为线程调度和管理在内核实现。

  • ULT

用户进程ULT仅存在于用户空间中。对于这种线程的创建、撤销、线程之间的同步和通信等功能,都无需系统调用来实现。对于同一进程的线程之间切换仍然是不需要内核支持的。所以呢,内核也会是完全不会知道用户级线程的存在。

但是有一点必须注意:设置了用户级线程的系统,其调度荏苒是以进程为单位进行的哦。

优点:

  1. 线程切换不需要转换到内核空间,节省了宝贵的内核空间;
  2. 调度算法可以是进程专用,由用户程序进行指定;
  3. 用户级线程实现和操作系统无关;

缺点:

  1. 系统调用阻塞,同一进程中一个线程阻塞和整个进程都阻塞了。
  2. 一个进程只能在一个cpu上获得执行。
  • 组合方式

在很多的操作系统中ULT和KLT进行组合,整合了ULT和KLT的优点。

其实我认为,现在操作提供肯定都是支持组合方式的,比如windows以及Unix中很多也是。



你可能感兴趣的:(linux浅说)