OS中线程的实现有三种,一种是用户级线程ULT(UserLevelThreads),一种是内核支持线程KST(KernelSupportedThreads),还有一种是前两种的组合方式。
所以我们大可以将OS实现线程的方式分为两类,一类是用户级,一类是内核级。这两类的不同在于用户级线程是在用户空间实现的,而内核级线程是在OS内核空间实现的。设置用户级线程的系统,调度是以进程为单位的。而设置了内核级进程的而是以线程为单位进行调度的。
OS内核常驻在内存中,所以将内存空间分为内核空间和用户空间。 线程在内核中实现有以下几个好处
a.内核可以在多处理器系统中调度同一进程中的多个线程并行执行。
b.如果某一个进程中的线程阻塞了,可以跨进程调度其他线程进行执行
c.线程的切换速度快,开销小。并且内核本身支持多线程技术可以提高系统的执行速度和效率。
但是也有个缺点,当用户将线程交付下来时要将线程由用户态切换为核心态再进行调度等操作,因此也会造成模式切换的开销较大。
a.首先线程的切换不需要转换到内核空间,所以节省了模式切换的开销
b.用户级线程的实现和OS平台无关,对于线程管理的代码是属于用户程序的一部分。用户级线程甚至可以在不支持线程机制的OS上实现。
用户级线程的缺点:
一个进程被分配一个CPU,同一时刻只能有一个线程运行。
若进程中的正在运行的线程阻塞,则当前进程的其他线程全被阻塞。
组合方式: 组合方式综合前两种的优点,分为三种模型:多对一、一对一、多对多 简单理解下就是 不同数量的用户级线程 搭配
不同数量的内核级线程。此处不再做过多的介绍。
以上便是操作系统中线程的实现