<Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux 进程管理 1》(5)

《Linux操作系统原理分析之Linux 进程管理 1》(5)

  • 4 Linux 进程管理
    • 4.1 Linux 进程概述
      • 4.1.1 Linux 进程的组成
      • 4.1.2 Linux 进程在处理机上的执行状态
      • 4.1.3 进程空间和系统空间
      • 4.1.4 进程上下文和系统上下文

4 Linux 进程管理

4.1 Linux 进程概述

4.1.1 Linux 进程的组成

1.Linux 进程组成:由 正文段(text)、用户数据段(user segment)和系统数据段。

正文段:存放进程要执行的指令代码。Linux 中正文段具有只读属性。
用户数据段:进程运行过程中处理数据的集合,它们是进程直接进行操作的所有数据,包括进程运行处理的数据段和进程使用的堆栈。
系统数据段:存放反映一个进程的状态和运行环境的所有数据。这些数据只能由内核访问和使用。 在系统数据段中包括进程控制块 PCB.。

在 Linux 中,PCB 是一个名为 task_struct 的结构体,称为任务结构体 称为任务结构体

2.任务结构体的主要内容
任务结构体 task_struct 的大小约 1000B。它定义在源代码的 include/linux/sched.h 下。下面把它的成员
的功能和作用归纳为 9 个方面予以说明:

序号功能说明
1)进程的状态和标志state 和 flags。
2)进程的标识。表示进程标识的成员项:pid,uid,gid 等。
3)进程的族亲关系p_opptr、p_pptr、p_cptr、p_vsptr、p_osptr
4)进程间的链接信息。Next_task、prev_task、next_run、prev_run。
5)进程的调度信息。Counter、priority、rt_priotity、policy。
6)进程的时间信息。表示系统中各种时间成员项:start_time、utime、stime、cutime、cstime、timeout。
表示定时器的成员项:it_real_value、it_real_incr、it_virt_value、it_virt_ incr、it_prof_value、it_prof_ incr、real_timer。
7)进程的虚拟信息。Mm、ldt、saved_kernel_stack、kernel_stack_page。
8)进程的文件信息Fs、file。
9)与进程通信有关的信息singnal、blocked、sig、exit_signal、semundo、semsleeping。

3.任务结构体的管理

  1. task[]数组
    为了管理系统中所有进程,系统在内核空间设置了一个指针数组 task[],该数组的每一个元素指向一个任务结构体,所以 task 数组又称 task 向量。
    在这里插入图片描述
    Task 数组的大小决定了系统中容纳进程最大数量。在 linux 内核源代码 kernel/sched.c 中 task 数组的定义如下:
Struct task_struct *task[NR_TASKS]={&init_task}

可以看到:

👉task[]数组是一个指向 task_struct 结构的指针数组。

👉其中符号常量 NR_TASKS 决定了数组的,/include/linux/task.h 中,它的默认值被定义为512:#define NR_TASKS 512

👉 task[]数组的第一个指针指向一个名字为 init_task 的结构体,它是系统初始化进程 init 的任务结构体。

2)nr_tasks
为了记录系统中实际存在的进程数,系统定义了一个全局变量 nr_tasks,其值随系统中存在的进程数目而变化。在 kernel/fork.c 中,它的定义及初始化如下:

Int nr_tasks =1;

3)双向循环链表
Linux 中把所有进程的任务结构相互连成一个双向循环链表,其首结点就是 init 的任务结构体init_task。这个双向链表是通过任务结构体中的两个成员项指针相互链接而成:

Struct task_struct *next_task;/*指向后一个任务结构体的指针*/
Struct task_struct *prev_task;/*指向前一个任务结构体的指针*/

宏定义:
SET_LINKS:插入一个任务结构体
REMOVE_LINKS:删除一个任务结构体
For_each_task:遍历所有任务结构体

4.1.2 Linux 进程在处理机上的执行状态

在 Linux 系统中,用户不能直接访问系统资源,如处理机、寄存器、存储器和各种外围设备。因此提供了两种不同指令

一般指令:供用户和系统编程使用,不能直接访问系统资源;
特权指令:供操作系统使用,可以直接访问和控制系统资源;

为了区分处理机在执行那种指令,通常将处理机的执行状态又分为两种:

管态(内核态、系统)
目态(用户态)

由目态转变为管态的情况可能有:

1、进程通过系统调用向系统提出服务请求

2、进程执行某些不正常的操作时,如除数为 0、超出权限的非法访问、用户堆栈溢出等。

3、进程使用设备进行 I/O 操作时,当操作完成或设备出现异常情况时。

4.1.3 进程空间和系统空间

进程的虚拟地址空间:Linux 操作系统运行在多道环境下,多个进程能够同时在系统中并发活动。为了防止进程间的干扰,系统为每个进程都分配了一个相对独立的虚拟地址空间,又称为进程的虚拟内存空间

进程的虚拟地址空间包含进程本身的代码和数据等,同时还包括操作系统的代码和数据。故进程的虚拟地址空间分两部分:进程空间和系统空间。

进程空间
在这里插入图片描述

👉内核堆栈:进程在需要使用内核功能而通过系统调用运行内核代码时,需要使用堆栈保存数据。这个堆栈是由系统内和使用的,故称内核堆栈。
👉其中系统数据段,只能在内核态执行

系统空间:操作系统的内核映射到进程的虚拟地址空间。(可供多个进程共享,只能内核态执行)

4.1.4 进程上下文和系统上下文

进程上下文:进程的运行环境动态变化,在 linux 中把进程的动态变化的环境总和称为进程上下文。

👉当前进程
👉 进程切换
👉 上下文切换
👉进程通过系统调用执行内核代码时,内核运行是为进程服务,所以此时内核运行在进程上下文中。

系统上下文:内核除了为进程服务,也需要完成操作系统本身任务,如响应外部设备的中断、更新有关定时器、重新计算进程优先级等。 故把系统在完成自身任务时的运行环境称为系统上下文(system context).

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

恭喜顺利结项 | 开源之夏 2023openGauss项目结项结果公示

祝贺! 激动人心的时刻终于到来!开源之夏 2023 活动结项审核结果正式出炉。此次,openGauss深度参与活动,发布12个openGauss相关项目,10个项目进入开发周期,最终有8个项目成功结项。恭喜所有成功结项的同学&…

三菱FX3U小项目—机床定时器延时启动

目录 一、项目描述 二、IO口分配 三、项目程序 四、总结 一、项目描述 为了防止工人操作失误,启动按钮需要按住1s后,设备才启动,启动后第一台电机启动10s后第二台电机自动启动,当按下停止按钮时,两台电机同时停止。…

在Broker端进行消息过滤

在Broker端进行消息过滤,可以减少无效消息发送到Consumer,少占用网络带宽从而提高吞吐量。Broker端有三种方式进行消息过滤。 1.消息的Tag和Key 对一个应用来说,尽可能只用一个Topic,不同的消息子类型用Tag来标识(每条…

扩散模型实战(十):Stable Diffusion文本条件生成图像大模型

推荐阅读列表: 扩散模型实战(一):基本原理介绍 扩散模型实战(二):扩散模型的发展 扩散模型实战(三):扩散模型的应用 扩散模型实战(四&#xff…

MySQL集群高可用架构之MMM

目录 一、MMM概述 1.1 MMM 简介 1.2 MMM高可用架构 1.3 MMM工作原理 1.4 工作流程图 二、MMM高可用双主双从架构部署 1、架构: 2、搭建 MySQL 多主多从模式 3、安装配置 MySQL-MMM 4、故障测试 一、MMM概述 1.1 MMM 简介 MMM(Master-Master re…

设计模式(5)-使用设计模式实现简易版springIoc

自定义简易版springIoc 1 spring使用回顾 自定义spring框架前,先回顾一下spring框架的使用,从而分析spring的核心,并对核心功能进行模拟。 数据访问层。定义UserDao接口及其子实现类 public interface UserDao {public void add(); }public…

Redis7.2.3集群安装,新增节点,删除节点,分配哈希槽,常见问题

概念: 【Redis】高可用之三:集群(cluster) - 知乎 实操: Redis集群三种模式 主从模式 优势: 主节点可读可写 从节点只能读(从节点从主节点同步数据) 缺点: 当主节点…

U盘不能访问不一定是坏了,可能还有其他原因!U盘无法访问修复详解

当你将USB驱动器连接到计算机时,系统会将其识别为可移动驱动器,并启动其文件管理过程。 然而,用户现在注意到,即使可以检测到他们的USB驱动器,也无法访问它们。 如果幸运的话,拔下插头就能解决问题,但如果不是,请继续阅读以了解更多故障排除选项。 USB闪存驱动器是便…

开源电子画册源码系统 可重复利用 适合任何行业 带完整的搭建教程

电子画册,又称电子样本、电子商刊、电子杂志,是一种集合图片处理、文案策划、音乐加工、视频、统计调查、虚拟现实、三维动画等多种技术和表现形式为一体的多媒体画册,电子杂志是纸质印刷画册(样本)的升级版本&#xf…

千兆光模块和万兆光模块需要注意哪些事项

随着网络通信技术的发展,千兆光模块和万兆光模块已经成为了网络设备中不可或缺的关键组件。光模块的制造涉及到许多技术和工艺问题,需要严格的控制和管理。本文将从工艺流程、材料选用、测试认证等方面,详细介绍制造千兆光模块和万兆光模块需…

2023年中国恒温蜡疗仪发展趋势分析:应用前景存有很大发展与探索空间[图]

恒温电蜡疗仪可将蜡熔化,利用蜡自身特点,能阻止热的传导、散热慢、气体和水分不易消失,保温性能优越。利用蜡能紧密贴于体表的可塑性,可加入其他药物协同进行治疗,也可将中药与蜡疗有机地结合在一起,产生柔…

为什么嵌入式没有35岁危机?

为什么嵌入式没有35岁危机? 在当今数字化时代,IT行业变化迅速,技术的更新迭代速度惊人。然而,有一个技术领域却能够在这个竞争激烈的行业中稳步前行,而且不受35岁危机所困扰,那就是嵌入式技术。 嵌入式技术是指将计算…

三羊马-001317 三季报分析(20231116)

三羊马-001317 基本情况 公司名称:三羊马(重庆)物流股份有限公司 A股简称:三羊马 成立日期:2005-09-06 上市日期:2021-11-30 所属行业:装卸搬运和运输代理业 周期性:0 主营业务:通过公铁联运方式…

11.16堆的一些性质与操作

1016 7,5,4,3,2,6,1 7,4,6,1,3,2,5 没有度为1的结点说明为满树 A.哈夫曼树一定没有度为1的结点。最大堆可能有度为1的结点 D.哈夫曼…

GAT里面的sofamax函数的实现:

1.sofamx 公式: 2. GAT里的sofamax函数的实现: 1. 因为指数在x轴正轴爆炸式地快速增长,如果zi比较大,exp⁡(zi)也会非常大,得到的数值可能会溢出。溢出又分为下溢出(Underflow)和上溢出&#x…

计算机毕设 深度学习 机器学习 酒店评价情感分析算法实现

文章目录 0 前言概述项目所需模块数据数据说明字段说明 数据处理分词处理停用词处理样本均衡建立多层感知机分类模型训练模型网络检测率以及检测结果 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点&a…

2023最新版JavaSE教程——第8天:面向对象编程(高级)

目录 一、关键字:static1.1 类属性、类方法的设计思想1.2 static关键字1.3 静态变量1.3.1 语法格式1.3.2 静态变量的特点1.3.3 举例1.3.4 内存解析 1.4 静态方法1.4.1 语法格式1.4.2 静态方法的特点1.4.3 举例 1.5 练习 二、单例(Singleton)设计模式2.1 设计模式概述…

Kubernetes学习-概念2

参考:关于 cgroup v2 | Kubernetes 关于 cgroup v2 在 Linux 上,控制组约束分配给进程的资源。 kubelet 和底层容器运行时都需要对接 cgroup 来强制执行为 Pod 和容器管理资源, 这包括为容器化工作负载配置 CPU/内存请求和限制。 Linux 中…

⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 内连接、外连接、自连接、子查询、多表查询 ⑧…

蓝凌OA sysUiComponent 任意文件上传漏洞复现

0x01 产品简介 蓝凌核心产品EKP平台定位为新一代数字化生态OA平台,数字化向纵深发展,正加速构建产业互联网,对企业协作能力提出更高要求,蓝凌新一代生态型OA平台能够支撑办公数字化、管理智能化、应用平台化、组织生态化&#xff…