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

news2024/11/18 23:48:09

《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).

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

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

相关文章

【Coppeliasim】 通过TCP与coppeliasim通信

仿真客户端, 代码中启动了tcp服务器。 simrequiresim socketrequiresocket-- 以下函数将数据写入套接字(仅为简单起见只处理单个数据包): writeSocketDatafunction(client,data)local headerstring.char(59,57,math.mod(#data,25…

element ui修改select选择框背景色和边框色

一、修改选择框的背景色和边框色 style部分 .custom-select /deep/ .el-input__inner {color: #fff!important;border: 1px solid #326AFF;background: #04308D !important; } html部分 <el-select class"custom-select" v-model"dhvalue" placeholde…

高济健康:数字化科技创新与新零售碰撞 助推医疗产业优化升级

近日&#xff0c;第六届中国国际进口博览会在上海圆满落幕&#xff0c;首次亮相的高济健康作为一家专注大健康领域的疾病和健康管理公司&#xff0c;在本届进博会上向业内外展示了围绕“15分钟步行健康生活圈”构建进行的全域数字化升级成果。高济健康通过数字化科技创新与新零…

Linux安装OpenCV并配置VSCode环境

Linux安装OpenCV并配置VSCode环境 安装OpenCV环境安装必需工具下载并解压OpenCV库&#xff08;Opencv Core Modules和opencv_contrib&#xff09;创建构建目录&#xff0c;进行构建验证构建结果安装验证安装结果 配置VSCode环境创建项目文件修改配置信息执行程序 安装环境 Ubun…

【计算思维】少儿编程蓝桥杯青少组计算思维题考试真题及解析D

STEMA考试-计算思维-U8级(样题) 21.下面哪个图形与其它图形不同&#xff1f;&#xff08; &#xff09; A. B. C. D. 22.下列哪个选项是由下图旋转得到的&#xff1f;&#xff08; &#xff09; A. B. C. D. 23.下面哪个图形是用4个 拼成的&#xff1f;&#xff08; &#xf…

JDK 9 Map.of()

//Java 9 Map.of //private static final int SIZE 10;

某60区块链安全之整数溢出漏洞实战学习记录

区块链安全 文章目录 区块链安全整数溢出漏洞实战实验目的实验环境实验工具实验原理攻击过程分析合约源代码漏洞EXP利用 整数溢出漏洞实战 实验目的 学会使用python3的web3模块 学会以太坊整数溢出漏洞分析及利用 实验环境 Ubuntu18.04操作机 实验工具 python3 实验原理…

Windows安装nvm【node.js版本管理工具】

目录 下载安装包 安装 配置 配置node的国内镜像源 配置npm的国内镜像源 常用命令 查看可安装的node版本 安装指定的版本 查看已有的node版本列表 切换版本 下载安装包 https://github.com/coreybutler/nvm-windows/releases/tag/1.1.11 安装 安装过程就不贴了&#xff0…

Android 当中的 Fragment 协作解耦方式

Android 当中的 Fragment 协作解耦方式 文章目录 Android 当中的 Fragment 协作解耦方式第一章 前言介绍第01节 遇到的问题第02节 绘图说明 第二章 核心代码第01节 代理人接口第02节 中间人 Activity第03节 开发者A第04节 开发者B第05节 测试类 第一章 前言介绍 第01节 遇到的…

DolphinScheduler V3.1.8 海豚调度器【概述、安装、功能介绍、项目运用、邮箱预警设置】轻松拿捏!

概述 Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度开源系统。适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系&#xff0c;并为应…

计算机毕业设计选题推荐-高校后勤报修微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

【ES6标准入门】JavaScript中的模块Module的加载实现:循环加载和Node加载,非常详细,建议收藏!!!

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript进阶指南 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继…

LLM大模型 (chatgpt) 在搜索和推荐上的应用

目录 1 大模型在搜索的应用1.1 召回1.1.1 倒排索引1.1.2 倒排索引存在的问题1.1.3 大模型在搜索召回的应用 (实体倒排索引&#xff09; 1.2 排序1.2.1 大模型在搜索排序应用&#xff08;融入LLM实体排序&#xff09; 2 大模型在推荐的应用2.1 学术界关于大模型在推荐的研究2.2 …

PDF控件Spire.PDF for .NET【转换】演示:将PDF 转换为 HTML

由于各种原因&#xff0c;您可能想要将 PDF 转换为 HTML。例如&#xff0c;您需要在社交媒体上共享 PDF 文档或在网络上发布 PDF 内容。在本文中&#xff0c;您将了解如何使用Spire.PDF for .NET在 C# 和 VB.NET 中将 PDF 转换为 HTML。 Spire.Doc 是一款专门对 Word 文档进行…

Day33力扣打卡

打卡记录 最大和查询&#xff08;排序单调栈上二分&#xff09; 链接 大佬的题解 class Solution:def maximumSumQueries(self, nums1: List[int], nums2: List[int], queries: List[List[int]]) -> List[int]:ans [-1] * len(queries)a sorted(((a, b) for a, b in zi…

专业数据标注公司:景联文科技领航数据标注行业,满足大模型时代新需求

随着大模型的蓬勃发展和相关政策的逐步推进&#xff0c;为数据要素市场化配置的加速推进提供了有力的技术保障和政策支持。数据要素生产力度的不断提升&#xff0c;为数据标注产业带来了迅速发展的契机。 根据国家工信安全发展研究中心测算&#xff0c;2022年中国数据加工环节的…

​软考-高级-系统架构设计师教程(清华第2版)【第11章 未来信息综合技术(P384~P419)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第11章 未来信息综合技术&#xff08;P384~P419&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

python趣味编程-5分钟实现一个Tic Tac Toe游戏(含源码、步骤讲解)

The Tic Tac Toe In Python是用 Python 编程语言编写的,这个Tic Tac Toe Game In Python是一个简单的基于 GUI 的策略游戏板,非常容易理解和使用。 所有的游戏规则都是一样的,就像我们玩实时井字棋一样,这是一个简单的多人游戏。 Python 中的 Tic Tac Toe 游戏:项目信息 …

数字化时代,VR全景如何助力商企抢占市场份额?

随着5G技术的逐步落地&#xff0c;VR全景已经开始逐渐被应用到各行各业中了&#xff0c;VR餐饮、VR房产、VR景区、VR工厂、VR学校、VR博物馆等等&#xff0c;甚至大家所熟悉的汽车之家中的全景看车、贝壳和链接的全景看房等&#xff0c;所应用的都是VR全景的形式。 前几年电商对…

电子学会C/C++编程等级考试2021年09月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字判断 输入一个字符,如何输入的字符是数字,输出yes,否则输出no 输入 一个字符 输出 如何输入的字符是数字,输出yes,否则输出no 样例1输入 样例1输入 5样例1输出 yes样例2输入 A 样例2输出 …