Windows内核--任务、进程和线程(2.4)

news2024/12/27 12:21:23

                                                图片来自: Windows内核原理与实现

Windows内核有"任务"概念吗?

        从技术术语来说,Windows内核并没有"任务"。"任务"一般被认为是抽象的需要执行的事情。在不同操作系统上,"任务"所代表的官方名称有所差异。

        Linux "struct task" 符合"任务"的中文描述

        Windows Process/Thread表述"任务"的容器和实体

                        Process的集合称为Job

                        Process是静态资源, 可执行的"任务"被称为Thread.

        macOS有任务术语, 代表一个线程组集合,Mach将任务中的每个线程一一映射到BSD层的进程。

除了线程,还有什么方式可以让内核做事情?

        一般来说,操作系统以线程为调度单位。Linux的"task"很像线程, 以task为调度单位和线程类似。

        在Windows上,有如下几种方式:

  • (最基本的方式)应用程序创建自己的线程
  • 驱动程序和执行体给调用者进程创建线程
  • System进程创建系统线程。
  • Work Item机制
    • 因线程切换本身占用资源,内核提供Work Item机制将事情交给系统辅助线程帮忙。函数ExQueueWorkItem和IoQueueWorkItem就为了完成Work Item而产生。

进程和线程的关系

        Windows内核对于进程和线程的区分是很明显的,不像Linux, 进程可能和线程很像兄弟。

        进程是静态资源集合

                进程包含了私有地址空间、句柄表和线程等讯息,它相当于一个容量,把程序执行该要的资源都放在里面。但它,没能力执行,因为内核不会调度进程运行(参见本页最上图片)。

        线程是真正调度单位

                在某些书籍上,线程被称为"控制流"。按照传统代码执行的3要素,数据/代码和堆栈。数据和代码都在线程所属进程资源包含,线程不用特别关心。堆栈是和线程控制流息息相关,具体分来有用户栈和内核栈两种。

                用户态堆栈容易理解,用户应用程序创建后必然有堆栈保存当前状态,内核栈用于线程切入到内核态后需要暂存的讯息,也是必须的。

进程和线程创建和消亡

        创建进程默认创建一个线程(主线程)

                CreateProcess源代码

                        

                        参见: Windows内核--CreateProcess到内核NtCreateProcess(2.3) 

        线程退出是通过APC实现

                

                

        进程的最后一个线程结束进程才结束吗?

                不是,如果主线程提前结束了,整个进程就结束了。如此设计避免仅留的子线程无处安放。可参考main函数反汇编,编译器会在函数最后插入exit等函数终结进程。

父进程和子进程

        Windows父进程和子进程不像类Unix内核那样,如此正式隆重。Windows平台,父进程创建子进程之后,其实父进程就可以该干嘛去干嘛了。子进程结束与否和它没什么必然关系了。

        父进程存在的意义?

                类似面向对象继承,子进程继承父进程属性,可减少额外的复制动作。比如CreateProcess函数参数bInheritHandles可继承句柄信息.

        桌面双击一个应用程序A

                父进程是explorer.exe, 此进程A和explorer进程有什么关系呢? 从界面上看,没任何关系。

                explorer进程终止后,A还能继续运行吗? A和explorer进程似乎完全没关联。

        子进程终结,父进程还会收到通知吗?

                如上示例, A终结后,explorer会收到通知吗?Windows内核把进程当作同步对象,同步对象终结会发出信号,只会通知等待此对象的内核对象。一般来说,explorer创建进程A之后,不会等待A结束的信号,父进程不会收到通知。

Job(作业)

        如上所说,一批进程当成整体处理,可以加入到Job。Job和进程或线程一样也是内核对象,可以管理:

  • 进程的处理器亲和性
  • 工作集最大和最小值
  • ......

        Job在Windows的应用

                哪些情况下通过作业来处理?有什么优势?Job可以有效管理一系列进程,控制在指定的范围内。对于需要有效准确管控系统程序运行有很大作用。比如,避免某个进程占用太多CPU导致关键进程失败。

纤程Fiber

        Windows还提供一种特殊的"线程", 被称作纤程,是用户模式线程。

        它在Kernel32.dll中实现,Fiber不是内核对象,调度需要用户调用。正因为如此,它被称为轻量级线程,它没有线程切换带来的开销,当然有用户层切换带来的微小开销。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

树形表查询

树形表: 情况一:固定层级的树形表: 可以使用表的自连接查询,比如查询两级分类课程 selectone.id one_id,one.name one_name,one.parentid one_parentid,one.orderby one_orderby,one.label one_label,two.id two_id,two.name two_name,two.parentid two_parentid,two.orderby …

系统公告 | MemFire Cloud应用管理全新升级,实时数据库等你来体验~

“超能力”数据库~拿来即用,应用开发人员再也不用为撰写API而发愁。MemFire Cloud 为开发者提供了简单易用的云数据库(表编辑器、自动生成API、SQL编辑器、备份恢复、托管运维),很大地降低开发者的使用门槛。 MemFire …

计算机视觉OpenCv学习系列:第九部分、视频读写

第九部分、视频读写第一节、视频读写处理1.视频标准与格式2.视频读写与函数3.代码练习与测试学习参考第一节、视频读写处理 1.视频标准与格式 视频标准与格式: SD(Standard Definition)标清480PHD(High Definition)高清720P/1080PUHD(Ultra High Definition)超高清…

100 个手把手、掏心窝子IDEA快捷键从入门到精通教程

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。 一、构建/编译 Ctrl F9&…

c++函数返回数组类型

c函数返回数组类型 首先,C 不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。 方法一:将返回值定义…

完整的Apache+PHP8+MYSQL的配置

1.下载Apache和PHP下载Apache,地址:http://www.apachelounge.com/download/,如下图:将下载的压缩包解压到某个文件夹(比如:D:\software), 将解压后的文件夹重命名为Apache24下载PHP压缩包,地址:…

天云数据入选中国信通院《全球数据库产业图谱(2022)》

6月28日,由中国信息通信研究院(以下简称“中国信通院”)、中国通信标准化协会指导,中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)主办的2022大数据产业峰会在京召开。 大会现场,魏凯…

黑马Pink老师JavaScript新教程上线啦~

今天是你开工的第几天? 是谁在回味假期的美好 是谁一上班就困困困 是谁身在上班心还在春节假 友情提示 再坚持4天,就到周末了 世间长假难有 但周末常在 无论是对于学习人还是打工人来说 周末都太美好了 和周末一样美好的 还有黑马的免费教程 …

11-Alibaba微服务流控组件Sentinel实战上

分布式系统遇到的问题 在一个高度服务化的系统中,我们实现的一个业务逻辑通常会依赖多个服务,比如:商品详情展示服务会依赖商品服务, 价格服务, 商品评论服务. 如图所示: 调用三个依赖服务会共享商品详情服务的线程池. 如果其中的商品评论服务不可用, 就会出现线程池里所有线程…

快来看啊,2023成都Java培训机构排行榜出来啦!

来啦,来啦!我带着2023成都最新Java培训机构排行榜来啦。不知道怎么选择一个好的Java培训机构?停止寻觅,别再犹豫,看我这一篇就够啦!一、成都动力节点动力节点,09年成立,14年来只专注…

C++语法复习笔记-3. C语言陷阱与C++改进

文章目录1.C语言常见语法问题1. 字符问题2.c语言的考虑3.C的思考2.C语言指针和数组问题1.问题表现传入参数会退化为指针2.问题原因3.C解决方案处理二维数组3. c语言移位问题1.问题表现逻辑右移还是算术右移移位操作位数的限制2.问题原因3.C中的解决方案4. C语言强制类型转换问题…

idea如何设置通过鼠标去改变字体的大小,idea如何进行作者署名以及时间显示

目录 一、idea如何设置通过鼠标去改变字体的大小 步骤: 1、缩小字体 2、放大字体 二、idea如何进行作者署名以及时间显示 步骤: 一、idea如何设置通过鼠标去改变字体的大小 步骤: 1、缩小字体 设置settings——>键盘设置keymap——>缩小字…

使用 cat 查看创建的软链接文件,出现 cat: 文件: 符号连接的层数过多

今天在使用 cat 查看创建的软链接文件时,出现了这样一个问题: 出现过程: 1、首先,在当前 home 目录下我有一个 2.txt 文件和 test 文件夹 ; [wqlocalhost ~]$ ls 1.txt 2.txt Desktop Documents Downloads Musi…

如何将网站全部变成灰色的素装效果,瞧过来

最近,我们看到各个网站、app的页面全部变成了灰色或者黑白色。对于我们需要悼念的日子,使用这种素装,以表示我们对逝者或者英雄的悼念与缅怀! 我们看到这种全站的内容全部为灰色,是不是很好奇呢?图片、按钮…

【香橙派4B】1、重刷系统

目录 准备材料 准备软件 准备系统镜像文件 下载镜像 解压镜像包 烧录镜像到SD卡 格式化SD卡 烧录镜像 SD卡烧录镜像到香橙派4B 买回来的香橙派4B,刚上电是安卓的系统,无法进行开发,所以需要进行重装系统。 准备材料 闪迪官方的SD卡&…

图例legend语法及设置

(1)设置图例位置 使用loc参数 plt.legend(loc‘lower left’) 0‘best’1‘upper right’2‘upper left’3‘lower left’4‘lower right’5‘right’6‘center left’7‘center right’8‘lower center’9‘upper center’10‘center’ (2)设置图例字体 #设置字体大小 fontsi…

项目看板开发经验分享(二)——事业部能源监控看板(进度条拟柱状图图表、圆柱形柱状图、图表左右滚动进度条、导航轮播按钮)

系列第二篇,话不多说,直接进入正题 事业部能源监控看板展示视频1、进度条组件 因为整个看板有四处地方用到,结合上一期提到的内容,我们优先考虑将这个模块做成组件 UED给的样式用echarts会很麻烦,我们优先考虑用eleme…

活体识别2: 综述类资源收集

说明 我自己不算专业的算法工程师,只是兼做一些算法的事。接触活体识别这个领域有些摸不清门路,所以网上有些综述类的文章和论文对我来说很重要,让我在对这个领域的知识脉络一无所知的时候有个大概的感性认识。 我这里罗列下我感觉不错的文…

互联网正在化有形为无形,这是一场深刻而又彻底的嬗变

如果放在几年前,你是万万无法想到互联网会蜕变成今天这样一副模样。尽管如此,这样一种蜕变却在真实地发生着。不知道你有没有发现就连前两年火爆的短视频人们都懒得刷了。所有的这一切都在告诉我们,互联网正在发生一场深刻而又彻底的嬗变。如…

【ML入门】anaconda环境搭建

【ML入门】anaconda环境搭建 一、安装anaconda anaconda简介 直接安装python不是更快吗,为什么使用anaconda? 可以理解anaconda是一个大容器(类似docker),里面可以建立多个python虚拟环境,对于不同的工…