【Linux】【进程】进程和线程

server/2025/1/14 0:36:04/

【Linux】【进程】进程和线程

在Linux操作系统中 内核进程线程均是通过task_struct结构体(也就是所谓的pcb)来管理的
task_struct(存储在内核空间由内核直接控制和管理 用户空间无法直接访问 通过双向链表管理)
结构体里面有 pid(当前线程的id 唯一标识)和** tgid** (Leader线程的id 进程的标识)
这里有一个线程组的概念
线程组就是一个进程里面的所有线程的集合 线程组存在组长线程也就是Leader线程
Leader线程相当于主线程
Leader线程的pid=tgid 其余线程的tgid=Leader线程的pid
Leader的task_struct就是这个进程的task_struct
内核个调度时可以通过tgid来确定线程属于哪一个进程从而操作进程级资源

这些线程他们分别有共享的部分和独有的部分

共享的

共享的(存储资源)指向同一个共享资源(没有使用智能指针使用传统的引用计数来实现)
地址空间信息mm_struct
打开的文件描述符表file_struct
信号处理signal_struct
其它

mm_struct

mm_struct主要控制内存方面
pgd指向页全局目录页表的指针 找到对应的页表(前面有提到访问虚拟地址与物理地址)
mmap指向vm_area_struct链表 管理进程虚拟地址空间(虚拟内存分段式(eg:代码段 数据段 堆区 内存映射区 栈区))通过红黑树或链表 每一个节点指向映射区域的起始和结束以及下一个节点

独有的

独有的每个线程独有的
cpu寄存器上下文程序计数器pc 栈指针sp
栈区用户态栈 内核态栈
调度信息实现独立调度 线程的并发运行

http://www.ppmy.cn/server/158132.html

相关文章

H2数据库在单元测试中的应用

H2数据库特征 用比较简洁的话来介绍h2数据库,就是一款轻量级的内存数据库,支持标准的SQL语法和JDBC API,工业领域中,一般会使用h2来进行单元测试。 这里贴一下h2数据库的主要特征 Very fast database engineOpen sourceWritten…

android分区和root

线刷包内容: 线刷包是一个完整的android镜像,不但包括android、linux和用户数据,还包括recovery等。当然此图中没有recovery,但是我们可以自己刷入一个。 主要分区 system.img 系统分区,包括linux下主要的二进制程序。 boot.img…

如何在Ubuntu上安装和配置Git

版本控制系统(VCS)是软件开发过程中不可或缺的工具之一,它帮助开发者跟踪代码变更、协作开发以及管理不同版本的项目。Git作为当前最流行的分布式版本控制系统,因其高效性和灵活性而广受青睐。本文将指导你如何在Ubuntu操作系统上…

调用Kimi的API接口使用,对话,json化,产品化

背景 Kimi出来一年多了,其输出内容的质量和效果在早期的模型里面来说还是不错的,虽然现在有一些更好的效果的模型和它不分上下,但是kimi的搜索能力,长文本的总结能力,还有其产品化的丰富程度,我觉得是别的…

海外招聘丨卡尔斯塔德大学—互联网隐私和安全副高级讲师

雇主简介 卡尔斯塔德大学以研究、教育和合作为基础。通过让社区参与知识发展,卡尔斯塔德大学为地区、国家和国际研究和教育发展做出了贡献,旨在提高可持续性、民主和健康。我们富有创造力的学术环境以好奇心、勇气和毅力为特征。通过采取批判性方法&…

Perl语言的网络编程

Perl语言的网络编程 引言 在当今互联网迅猛发展的时代,网络编程已经成为了程序开发的重要部分。无论是网站后端开发,还是网络协议的实现,或者是分布式系统的构建,网络编程都是无法绕过的主题。本篇文章将深入探讨Perl语言在网络…

Node.js - 模块化与包管理工具

1. 前言 模块化是代码组织的方式,而包管理工具是管理模块的工具。在现代项目开发中,模块化和包管理工具几乎是不可分割的一部分,它们一起构成了高效的开发工作流。 包代表了一组特定功能的源码集合,包管理工具可以对包进行下载安…

huggingface/bert/transformer的模型默认下载路径以及自定义路径

当使用 BertTokenizer.from_pretrained(bert-base-uncased) 加载预训练的 BERT 模型时,Hugging Face 的 transformers 库会从 Hugging Face Model Hub 下载所需的模型文件和分词器文件(如果它们不在本地缓存中)。 默认情况下,这些…