linux内核分析:进程与调度

news2024/11/26 10:28:11

lec12, 13, 14 : 进程数据结构

实际上进程和线程都是有一个统一的内部结构------task_struct

 这是因为,上面的进程和线程到了内核这里,统一变成了任务,这就带来两个问题:信息展示和命令下达(有的是进程,有的是线程下达)

pid 是 process id,tgid 是 thread group ID

任何一个进程,如果只有主线程,那 pid 是自己,tgid 是自己,group_leader 指向的还是自己。

但是,如果一个进程创建了其他线程,那就会有所变化了。线程有自己的 pid,tgid 就是进程的主线程的 pid,group_leader 指向的就是进程的主线程。

好了,有了 tgid,我们就知道 tast_struct 代表的是一个进程还是代表一个线程了。

任务状态

 TASK_RUNNING 并不是说进程正在运行,而是表示进程在时刻准备运行的状态。当处于这个状态的进程获得时间片的时候,就是在运行中;如果没有获得时间片,就说明它被其他进程抢占了,在等待再次分配时间片。

在 Linux 中,有两种睡眠状态。

一种是 TASK_INTERRUPTIBLE,可中断的睡眠状态。这是一种浅睡眠的状态,也就是说,虽然在睡眠,等待 I/O 完成,但是这个时候一个信号来的时候,进程还是要被唤醒。只不过唤醒后,不是继续刚才的操作,而是进行信号处理。当然程序员可以根据自己的意愿,来写信号处理函数,例如收到某些信号,就放弃等待这个 I/O 操作完成,直接退出;或者收到某些信息,继续等待。

另一种睡眠是 TASK_UNINTERRUPTIBLE,不可中断的睡眠状态。这是一种深度睡眠状态,不可被信号唤醒,只能死等 I/O 操作完成。一旦 I/O 操作因为特殊原因不能完成,这个时候,谁也叫不醒这个进程了。你可能会说,我 kill 它呢?别忘了,kill 本身也是一个信号,既然这个状态不可被信号唤醒,kill 信号也被忽略了。除非重启电脑,没有其他办法。

因此,这其实是一个比较危险的事情,除非程序员极其有把握,不然还是不要设置成 TASK_UNINTERRUPTIBLE。

于是,我们就有了一种新的进程睡眠状态,TASK_KILLABLE,可以终止的新睡眠状态。进程处于这种状态中,它的运行原理类似 TASK_UNINTERRUPTIBLE,只不过可以响应致命信号。

TASK_STOPPED 是在进程接收到 SIGSTOP、SIGTTIN、SIGTSTP 或者 SIGTTOU 信号之后进入该状态。

TASK_TRACED 表示进程被 debugger 等进程监视,进程执行被调试程序所停止。当一个进程被另外的进程所监视,每一个信号都会让进程进入该状态。

一旦一个进程要结束,先进入的是 EXIT_ZOMBIE 状态,但是这个时候它的父进程还没有使用 wait() 等系统调用来获知它的终止信息,此时进程就成了僵尸进程

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

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

相关文章

【小数点】C#使用Math.Round方法保留指定小数点位数,并且整数也同样保持统一的2位

2023年,第38周。给自己一个目标,然后坚持总会有收货,不信你试试! 在实际开发项目中,特别是涉及金额之类的字段,一般都会用到小数,有些是保留1、2、3小数点。 本篇文章主要简单讲讲,如…

csp 202212-2 训练计划

题目链接:计算机软件能力认证考试系统http://118.190.20.162/view.page?gpidT159 思路: 最早开始时间是受之前依赖的项目限制,若无依赖,第一天即可开始。若有依赖,等待前置项目完成才能开始,累加即可。 …

linux( CentOs)对mysql基本操作和密码修改

1.mysql登录 mysql -uroot -p 2.显示所有数据库 Show databases; 3.生产过程中改密码 use mysql ; 查看user表中的user、host、password信息。 select user,host,password from user; select host,user from user;使用“GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIE…

企业为何刚需CRM软件系统

CRM系统一直被誉为客户关系管理的“神器”,很多企业对它爱之入骨。那么,CRM系统是否为企业刚需?它对企业有哪些好处?下面我们就来说一下。 CRM系统对企业的好处 提高工作效率:通过CRM系统的自动化工作流,…

Python之pycurl

pycurl简介 pycurl是一个用于访问URL的Python模块。它可以使用libcurl来访问各种互联网资源。libcurl支持HTTP、HTTPS、FTP、GOPHER、DICT、TFTP、TELNET和FILE等许多协议。pycurl是将libcurl封装成Python模块的结果,因此,它既可以在Python脚本中直接使…

竞赛选题 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类

文章目录 1 前言2 情感文本分类2.1 参考论文2.2 输入层2.3 第一层卷积层:2.4 池化层:2.5 全连接softmax层:2.6 训练方案 3 实现3.1 sentence部分3.2 filters部分3.3 featuremaps部分3.4 1max部分3.5 concat1max部分3.6 关键代码 4 实现效果4.…

多线程回顾、集合Collection、Set、List等基本知识

多线程回顾 问: 多线程的两种创建方式? 继承Thread类实现Runnable接口线程池Callable 问:多线程通常会遇到线程安全问题? 什么情况下会遇到线程安全问题? 答:一个数据被多个线程访问(有读有写) 解决这个问题的方式? SE:同步锁 synchronized A : 同步代码块 B : 同步方法…

Prometheus+Grafana可视化监控【Redis状态】

文章目录 一、安装Docker二、安装Redis数据库(Docker容器方式)三、安装Prometheus四、安装Grafana五、Pronetheus和Grafana相关联六、安装redis_exporter七、Grafana添加Redis监控模板 一、安装Docker 注意:我这里使用之前写好脚本进行安装Docker,如果已…

零碳联盟:为气候创新而生的全球合作

全球气候危机正逼近,而在这个关键时刻,红杉全球携手零碳联盟,共同致力于推动绿色科技的创新和应用,助力低碳经济的崛起。这一合作的宣布在红杉全球执行合伙人、红杉中国创始及执行合伙人沈南鹏的一番深思熟虑下得以实现。他强调&a…

Leetcode 剑指 Offer II 044. 在每个树行中找最大值

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一棵二叉树的根节点 root ,请找出该二叉树中每一…

【JavaEE】多线程(二)

多线程(二) 文章目录 多线程(二)第一个多线程程序观察线程sleep创建线程继承Thread类,重写run方法实现Runnable, 重写run继承Thread,重写run实现Runnable,重写run基于lambda表达式 T…

ETL与ELT理解

ETL ETL( Extract-Transform-Load),用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程。ETL模式适用于小数据量集。如果在转换过程…

利用hutool工具类实现验证码功能

hutool工具类实现验证码 一.生成验证码二.校验验证码三.使用案例1.引入hutool工具类2.VerifyCodeResp接口响应体3.VerifyCodeController验证码工具类4.测试验证5.项目结构及源码下载 利用hutool工具类,可以很方便生成不同类型的验证码。这里简单记录下使用过程。 一…

1500*C. Tenzing and Balls (线性DP)

解析: 每次选择两个相同的数,删去他们以及他们之间的所有数,问最多可以删除多少? DP,对于某个位置 i ,其前面有多个 j 使得 a[i]a[j],所以使用 f[i] 来记录前 i 个数能够删除的最大值。 #inclu…

内网横向移动

内网横向移动 当攻击者在拿下一台内网主机后,通常会利用当前拿下的机器当作跳板,进一步攻击 内网其他主机,扩大攻击影响范围。 攻击机:Kali Linux 靶机: Windows server 2008 WEB 10.10.10.20…

C: . 与 -> 的区别

相同点&#xff1a; 功能相同&#xff1a;访问结构体或者类的成员。优先级相同。 不同点&#xff1a; 结构体变量用 . 来访问成员&#xff1b;结构体指针用 ->来访问成员&#xff1b; #include <stdio.h> #include<string.h> //首先定义结构体类型student&a…

达摩院SPACE对话大模型:预训练语言模型,预训练对话模型,知识注入

01 预训练语言模型 VS 预训练对话模型 1. 大规模语言模型 过去几年 NLP 领域的重大进展&#xff0c;主要是大型预训练模型出现与大规模使用。预训练语言模型有了很大的发展&#xff0c;出现了很多变种。但是&#xff0c;本质上都还是语言模型&#xff0c;如上图右边的流程图所…

练习-使用ApplicationContext中事件发送以及AOP来实现代码解耦

案例要求 将用户注册与用户发送消息之间进行解耦 实现 ApplicationContext接口 具体文章见&#xff1a;BeanFactory与ApplicationContext_熵240的博客-CSDN博客 创建事件类 package com.example;import org.springframework.context.ApplicationEvent;public class UserRegis…

回溯算法解决分割回文串

回溯算法解分割回文串 力扣131 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1&#xff1a; 输入&#xff1a;s "aab" 输出&#xff1…

婚恋相亲系统小程序源码金媒v10.0版 红娘系统pc端+h5端+公众好端统一后台管理模块

婚恋相亲系统小程序源码 金媒v10.0版本 红娘系统正版pc端+h5端+公众好端 统一后台管理 模块:vip模块,活动报名,红娘模块,上榜模块,婚恋文章,动态模块,红娘认领,认证模块(五种,有实名,手机,学历,收入,房子)等等。 多种模板 后台 管理员后台 红娘独立后台,…