博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Operating System-Thread(3)用户空间和内核空间实现线程
阅读量:5856 次
发布时间:2019-06-19

本文共 1661 字,大约阅读时间需要 5 分钟。

http://www.cnblogs.com/Brake/archive/2015/12/02/Operating_System_Thread_Part3.html 本文主要内容: 操作系统用户空间和内核空间简介 在用户空间实现线程 在内核空间实现线程 用户空间和内核空间线程混合使用 一、用户空间和内核空间简介 用户空间:User space,内核空间:Kernel Space。这两个是操作系统的重要概念之一,今天为了线程做一下简单的介绍: 内核空间用于运行操作系统核心组件,比如内存管理组件,IO交互组件,文件管理、中断管理组件等,同时驱动程序(Driver)也运行在内核空间。 用户空间,用于运行普通应用程序。 示意图: 二,在用户空间实现线程 用户空间的线程由进程通过一些已有的Library进行创建,非系统调用(system call)内核对此毫无知晓。实现如下图所示。 在用户空间实现线程,线程运行在运行时系统中(run-time system)。内核对此一无所知,对于内核来说,它这是在处理一个单线程的进程而已。在用户空间实现线程时,每一个进程针对自己的线程维护了一个线程表(Thread Table),该表保存了线程运行的各种变量,比如寄存器,PC,状态等等,线程表用进程的运行时系统来维护,当一个线程被block,她的当前运行状态会被保存在线程表中,当再次启动时,也会读取线程表中已经保存的状态,从该状态进行再次运行。 2.1 优势 线程的创建有run-Time system通过调用现有的Library的Procedure完成,创建和销毁进程的开销非常小。 因为内核对线程没有感知,用户空间的线程可以运行在不支持线程的操作系统中 因为线程由同一个运行时进行维护,在同一个进程内部,线程的切换没有必要和内核大交道,所以线程之间的切换的开销非常小,没有Context Switch,也没有内存缓存的刷新重置。 用户空间的线程可以自定义调度算法,程序员完全可以自己写一套针对自己程序的线程调度算法 2.2 劣势 因为对于内核来说,不管进程里面有多少个线程,内核任然按照单线程进程来处理这个进程,所以统一时间一个进程里面只能有一个线程运行,就算有多个cpu空闲,也只能有一个线程运行,所以无法最大限度的使用资源 当然由于只能有一个线程运行,当某一个线程被block后,整个进程都会被block。 对于单进程的系统,用户态的线程如果有一个启动,就会永远运行,无法被切换到另外一个线程,这里还是与第一条有关,对于CPU来说,这个进程就只有一个线程,另外因为是单进程,也就不会有中断(trap、Interrupt)让cpu切换到其他进程的请求。当然这个问题用户可以实现自己的算法进行调度和改善(在run-time system中实现) 三、在内核空间实现线程 内核空间的线程全部有操作系统内核创建,实现如下图所示。 内核线程同样有线程表(Thread table),不过这个线程表是保存在内核中,其功能和用户空间线程表的功能一样,都是用于保存线程的数据。线程的调度由操作系统内核来实现。 内核线程和用户空间线程基本从性能各方面来说基本是相反地 3.1 优势 线程表包含所有进程的线程,所有一个进程的可能有多个线程同时在多个cpu上同时运行 一个线程被block不会导致整个进程被block,CPU会看是不是有其他线程可以运行。 3.2 劣势   1。创建线程消耗非常大,需要在用户空间和内核之间切换。   2。当然发生线程的Context切换时,程序也要从用户态和内核态之间互相切换,开销大 四、用户空间和内核空间线程混合使用 上面的两种线程的实现方式都有明显的优缺点,最好的方案其实就是将两者结合,一个程序可以既有用户空间的线程,也可以用内核空间的线程。 具体实现方式是,内核线程可以在其之上有一部分用户空间的线程。内核只调度内核的线程。 至于什么样的比例,怎么实现。 又回到程序=数据结构+算法这个话题了。。。
你可能感兴趣的文章
CTDB
查看>>
bson和json性能对比
查看>>
Ext4.2 动态checkbox
查看>>
图解RHEL 6 64位 安装详细过程
查看>>
阅读一百本计算机著作
查看>>
iOS开发之常用的那些工具类和方法
查看>>
this详解:JAVASCRIPT中的this到底是谁?
查看>>
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
IT运维36计
查看>>
IKAnalyzer中文分词器
查看>>
OSPF报头及各种报文格式详解
查看>>
DNS正反解析、主从复制、子域授权、安全相关配置
查看>>
Kubernetes、Mesos和Swarm:Rancher编排引擎的比较
查看>>
反射一些理解
查看>>
BI报表分析和数据可视化,推荐这三个开源工具!
查看>>
电商大战近火对垒,比价为王的后市场较量
查看>>
windwos7出现windwos 7601错误,背景变黑,用激活软件激活不了的解决办法
查看>>
TMG发布远程桌面
查看>>
阿里云爬虫风险管理产品商业化,为云端流量保驾护航
查看>>
基于泛型编程的序列化实现方法
查看>>