用户级线程和内核级线程

本文介绍了用户空间与内核空间的区别,以及用户级线程和内核级线程的概念和特点。用户级线程不依赖内核,调度以进程为单位,而内核级线程由内核管理,支持更高并发性。两种线程各有优缺点,如用户级线程创建快速,但面临系统调用阻塞问题;内核级线程能有效利用多处理器,但调度成本较高。操作系统如Linux、Windows等通常采用组合方式,实现用户级和内核级线程的混合模型。
摘要由CSDN通过智能技术生成


一、关于用户空间以及内核空间的介绍                      



       Linux为内核代码和数据结构预留了几个页框。这些页永远不会被转出到磁盘上。从 0x0 到 0xc0000000(PAGE_OFFSET) 的线性地址可由用户代码 和 内核代码进行引用。从0xc0000000(PAGE_OFFSET)到 0xffffffff的线性地址只能由内核代码进行访问。内核代码及其数据结构都必须位于这 1 GB的地址空间中,但是对于此地址空间而言,更大的消费者是物理地址的虚拟映射。

       这意味着在 4 GB 的内存空间中,只有 3 GB 可以用于用户应用程序。一个进程只能运行在用户方式(usermode)或内核方式(kernelmode)下。用户程序运行在用户方式下,而系统调用运行在内核方式下。在这两种方式下所用的堆栈不一样:用户方式下用的是一般的堆栈,而内核方式下用的是固定大小的堆栈(一般为一个内存页的大小)


       每个进程都有自己的 3 G 用户空间,它们共享1GB的内核空间。当一个进程从用户空间进入内核空间时,它就不再有自己的进程空间了。



二、用户级线程(User-Level Thread)和内核线线程(Kernel-Level Thread)


1.线程实现的分类理解1


       线程的实现可以分为两类:用户级线程(User-Level Thread)和内核线线程(Kernel-Level Thread)。后者又称为内核支持的线程或轻量级进程。

      用户线程:指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。另外,用户线程是由应用进程利用线程库创建和管理,不依赖于操作系统核心。不需要用户态/核心态切换,速度快。操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少。

      内核线程:  由操作系统内核创建和撤销。内核维护进程及线程的上下文信息以及线程切换。一个内核线程由于I/O操作而阻塞,不会影响其它线程的运行。Windows <

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值