对内核,内核线程,用户线程,用户态,内核态,进程等理解

最近一直在研究操作系统,浅谈一下,
以下文章涉及到我对内核,内核线程,用户线程,用户态,内核态,进程等理解
如果有理解不对的地方,希望大神可以指出错误.

我对操作系统最近的理解,操作系统内核是一个支撑软件,是操作系统的核心,负责管理所有 的硬件资源,cpu,内存,文件等.

我先说一下我理解的进程和线程,进程就是一个程序(软件)的动态过程,软件本身是静态,当启动软件时操作系统就会为这个软件启动一个进程,并分配各种需要的资源,cpu,内存等,内存负责存好运行代码,cpu负责执行,所以进程就是一个资源分配的单位,也就是说进程是包含线程的,而线程是进程中的执行单位,也就是 一个程序执行的单位,线程又分为用户线程和内核线程,程序运行用到的线程是用户线程.

我先说一下我理解的内核,内核就是一个支撑软件,它是操作系统的核心,负责管理所有硬件资源,它有三个子系统进程管理,内存管理,文件管理,这里拿我的电脑举例我是4核八线程,它是四个cpu 但能通过超线程技术,分成8个核心,但只有四个cpu的资源,暂且可以认为有8个cpu,每个cpu可以创建很多内核线程,但创建一个内核线程需要分配处理器的资源,所以有限,

所以每运行一个程序 内核就会分配一个内核线程给这个程序,所以理论上我的电脑可以同时运行八个进程,也就是八个程序,也就是并行运行,超过了8个就会出现并发现象,也就是俩个内核线程共用一个cpu,其实每个cpu会维护一个队列, 这个队列放着所有这个cpu创建的内核线程,并通过抢占式这种方式分配cpu时间,但四个cpu怎么协调工作?

我了解到是一种负载均衡的思想,也就是说让我8个cpu工作的内核线程数量相等,假如我只运行了一个进程,那么我就一个cpu工作,然后让这个进程创建一个子进程,那么这个cpu就运行了俩个内核线程,这时候调度策略就会平衡一下,把这个子进程分配给其他没有工作的cpu,这也是内核线程又被称为轻量级进程的原因,这个内核线程就是我们常说的线程

还有一种是用户线程,就是在进程里面创建线程,内核并不知道,然后这个进程创建的所有线程分享分配给它的这个内核线程,也就是进程自己实现一个调度器来分配给用户线程使用内核线程的时间,内核线程创建代价昂贵,需要内核管理,而用户线程创建简单,共用进程资源,自己管理

但我感觉常用到的tomcat服务器它应该是一种多对多的关系,并行运行时是一对一,并发是多对一,而tomcat服务器应该是多对多的关系,就是它是进程负责创建线程,也就是用户线程,但服务器如果一个请求,也就是一个线程堵塞整个服务器就堵塞,一个线程挂掉了,整个进程就挂掉了,所以他应该是一个服务器程序,应该会被分配多个内核线程.

多年之后的修改,这里修正一下. 上述是自己猜想tomcat, 其实想象一下,我这是错的,因为tomcat可以看作是java 的一个应用程序, java 的线程 实现机制 是直接映射到内核线程的,tomcat 是用的是线程池.具体大家可以看一下相关文章,所以最后总结tomcat 是线程一一对应内核线程.

最后还想说一点关于自己理解的系统架构,操作系统分为俩种模式,用户态,内核态,内核态是最高等级拥有所有操作硬件资源的权限,而用户态只拥有操作给他分配资源的权限,所以一旦涉及到一个程序想要操作硬件资源时,就会通过系统函数调用,把自己的内核cpu让出来,让给系统,让系统操作,等系统操作完在把cpu还给进程(当然这里还是要抢占的,进程变成就绪状态),然而用户态,内核态切换相当与俩个进程切换很耗费资源和时间,所以应该减少系统调用的操作,最常见的IO问题,通过加入缓存区来提高效率.我暂时理解的就这么多.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值