在用户空间实现线程
先决条件:进程和线程的区别,用户级线程和内核级线程的区别
介绍 :
在一个操作系统中,有许多程序,操作系统和用户共享计算机系统的硬件和软件资源。为了确保不正确的程序不会损害其他程序或操作系统,它区分了用户定义的代码和操作系统代码。
方法是,只有代表操作系统执行的任务才有硬件支持,称为内核模式,而代表用户应用程序执行的任务则没有,称为用户模式。
- 内核模式是一种特权模式,进程可以访问所有资源,例如硬件、内核数据、操作系统内核代码。
- 基本的区别在于,在内核模式下,内核可以直接访问硬件,而在用户模式下则不然。但是,当用户应用程序从操作系统请求服务时,系统必须从用户模式转换到内核模式。
理解这个概念的更好方法是查看下图。
线程是一个执行单元,它是进程的一部分。它共享进程的资源。它由调度程序调度。有两种方法可以实现线程,它们要么在用户空间中,要么在内核中。
线程可以在用户空间实现,不需要内核的支持。如果我们在用户空间中实现一个线程,会发生以下事情——
- 相应的代码和使用的数据结构存储在用户空间中。
- 如果调用 API,则会导致用户空间中的本地系统调用,而不是系统调用。
- 线程完全由运行时系统管理,内核对此一无所知。
用户级线程模型:
用户空间中的线程可以使用以下四种方法中的任何一种来实现:-
- 一对一
- 多对一
- 多对多
- 两级。
在上述每个模型中,用户空间的线程都映射到内核线程或更确切地说是虚拟处理器的线程。
1.一对一:
在这种类型的模型中——
- 每个用户级线程都映射到一个单独的内核级线程。
- 用户空间中的每个线程都在单独的内核级线程上执行。
- 在这里,内核必须提供一个系统调用来创建一个新的内核线程。
2. 多对一:
在这种类型的模型中——
- 用户空间的多个线程映射到内核级别的单个线程。
- 换句话说,所有用户级线程都在同一个内核线程上执行。
- 由于只有一个内核线程,因此一次只能运行一个用户级线程。
- 每个用户线程进行系统调用以创建新的内核线程。
3. 多对多:
在这种类型的模型中——
- 用户级别的 n个线程被映射到在m个内核级别线程上执行。
4. 两级:
在这种类型的模型中——
- 这是多对多和一对一模型的混合版本。
- 只允许将有限的一组用户线程绑定到单个内核线程。
好处 :
我们已经看到了什么是线程,用户级线程与内核级线程有何不同以及不同类型的用户线程。但是使用用户级线程背后的动机是什么?让我们来看看它的一些优点:-
- 由于不需要系统调用,因此整个过程既快速又高效。
- 简单的组织,因为线程是在不干预内核的情况下创建、切换和管理的。
- 它可以在操作系统不支持内核级线程的系统上实现。
缺点:
每个优点都有相应的缺点——
- 糟糕的调度,比如为一个进程分配一个空闲线程或阻塞一个进程,因为一个线程持有一个锁。
- 性能可能不一致。
在我们的 youtube 频道上通过免费直播课程学习所有 GATE CS 概念。