当前位置: 首页 > news >正文

LINUX系统编程:线程的概念

目录

1.线程的概念

2.线程的理解

3.怎么做到划分代码的


本文主要介绍,在LIUNX下的线程。

1.线程的概念

在很多的书上的你可能见过这样的。

线程是进程内部的一个执行分支,线程是cpu调度的基本单位。

加载到内存的程序叫做进程。修正:进程 = 内核数据结构+进程代码和数据。

话虽然是这么说,但是真正想要理解线程,其实需要理解很多很多的知识点。

例如:进程的加载, 进程虚拟地址空间,页表的映射,编址。。。。。

2.线程的理解

main函数原本只有一个执行流依次,执行abcd四个方法,现在呢有两个执行流,一个执行a,b一个执行c,d。

这时候就有一个问题了,这种事情,创建一个子进程,不也能做到吗?,何必再使用线程呢?

 看下面这张图,这是一个进程中包含3个线程,创建一个线程,就是创建一个task_struct,指向同一个进程虚拟地址空间,然后将正文代码分为几个部分,让不同线程看到不同的部分,因为调度算法是调度task_struct,线程就可执行代码的一部分,之前的进程呢就可以看成只有一个线程的进程,下图就是有多个线程的进程,如果创建一个进程就要创建task_struct,地址空间,页表,很明显进程的创建成本是远远大于线程的。

从上图也可以看出LINUX设计者,没有去特地的去设计线程,而是对进程设计的复用,因为进程和线程有很大相似之处,他们都是一个执行流

执行流介于进程和线程之间,他可能是一个进程,也可能是一个进程内部的线程

在LINUX中是不存在线程的概念的,所有调度的执行流都叫做轻量级进程

3.怎么做到划分代码的

划分代码通过页表来实现的,想要线程看到哪段代码,我就构建线程到该代码的映射,其余代码一律不管,线程自然也看不见。

在x86环境下地址空间的大小是0-2^32。

前10位是页目录的索引,通过索引能找到对应的页表,最多有[0,1023] 1024个页表。

中间10位是页表项的索引,通过索引能找到对应的页表项,其中存的是对应页框的起始物理地址。

后12位是页内偏移量,找到页框的物理地址加上对应的偏移量,就可以找到对应的代码,。

x86环境下页框的大小为4kb。

所以划分代码区域,就是让轻量级进程看到全部页表的对应子集。

操作系统的对内存管理的基本单位是4kb。

必然要去管理每一块页框,先描述每一个页框,就像权限还有其他的属性。

就像这个页框是用户的,或者内核的,是只读还是只写的。

将其组织起来。

算出有多少个页框 用4gb/4kb = 1048579个页框

struct page mem[1048579];用一个数组就将所有的页框给组织起来,对页框的管理,就变成对数组的增删查改。

相关文章:

LINUX系统编程:线程的概念

目录 1.线程的概念 2.线程的理解 3.怎么做到划分代码的 本文主要介绍,在LIUNX下的线程。 1.线程的概念 在很多的书上的你可能见过这样的。 线程是进程内部的一个执行分支,线程是cpu调度的基本单位。 加载到内存的程序叫做进程。修正:进…...

如何更换OpenHarmony SDK API 10

OpenHarmony社区已经发布OpenHarmony SDK API 10 beta版本,有些 Sample案例 也有需要API10。那么如何替换使用新的OpenHarmony SDK API 10呢?本文做个记录。 1、如何获取OpenHarmony SDK 1.1 每日构建流水线 可以从OpenHarmony每日构建站点获取最新的…...

Java | Leetcode Java题解之第155题最小栈

题目&#xff1a; 题解&#xff1a; class MinStack {Deque<Integer> xStack;Deque<Integer> minStack;public MinStack() {xStack new LinkedList<Integer>();minStack new LinkedList<Integer>();minStack.push(Integer.MAX_VALUE);}public void …...

大润发超市购物卡怎么用?

收到大润发超市的礼品卡以后&#xff0c;我才发现&#xff0c;最近的大润发也得十来公里 为了100块的大润发打车也太不划算了 叫外送也不在配送范围内 最后没办法&#xff0c;在收卡云上出掉了&#xff0c;还好最近价格不错&#xff0c;也不亏&#xff0c;收卡云的到账速度也…...

【ai】tx2-nx:搭配torch的torchvision

微雪的教程pytorch_version 1.10.0 官方教程安装torch官方教程 依赖项 nvidia@tx2-nx:~/twork/03_yolov5$ $ sudo apt-get install libjpeg-dev zlib1g-dev lib...

深入浅出MyBatis:全面解析与实战指南

MyBatis 是一个优秀的持久层框架&#xff0c;它简化了 Java 应用与关系数据库之间的映射。对于大多数 Java 开发者而言&#xff0c;掌握 MyBatis 是必不可少的一部分。本文将详细介绍 MyBatis 的各个方面&#xff0c;包括其基本原理、配置、操作、动态 SQL、插件机制和高级应用…...

好用的linux一键换源脚本

最近发现一个好用的linux一键换源脚本&#xff0c;记录一下 官方链接 大陆使用 bash <(curl -sSL https://linuxmirrors.cn/main.sh)# github地址 bash <(curl -sSL https://raw.githubusercontent.com/SuperManito/LinuxMirrors/main/ChangeMirrors.sh) # gitee地址 …...

机器人----控制方式

位置控制 点位控制 点到点--PTP 只关心起点和目标点&#xff0c;不关心走过的轨迹。 连续轨迹控制 CP(continus path) eg&#xff1a;焊接&#xff0c;切割。 力控制 使用多大的力进行控制。 eg:用多大的力写字。...

json的特点

JJSON是一种轻量级的数据交换格式&#xff0c;它基于JavaScript编程语言的一个子集&#xff0c;采用完全独立于语言的文本格式&#xff0c;结构化程度高。 JSON的主要特点包括&#xff1a; 轻量级&#xff1a;JSON的格式紧凑&#xff0c;易于传输和解析。 结构化&#xff1a;…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 连续字母长度(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…...

18 Shell编程规范与变量

目录 18.1 Shell脚本概述 18.1.1 Shell的作用 18.1.2 编写第一个Shell脚本 18.1.3 重定向与管道操作 18.2 Shell变量的作用、类型 18.2.1 自定义变量 18.2.2 特殊的Shell变量 18.1 Shell脚本概述 可以批量处理、自动化地完成一系列维护任务&#xff0c;大大减轻管理员的负担。…...

Linux基础命令大全(详解版)

Linux基础命令&#xff08;详解版&#xff09; 文章目录 Linux基础命令&#xff08;详解版&#xff09;1.Linux的目录结构**2.Linux路径的描述方式**3.Linux命令基础格式4.ls命令 隐藏文件、文件夹5.pwd命令6.cd命令 特殊路径符7.mkdir命令 文件操作命令8.touch命令9.cat命令10…...

python列表常见去重方法

列表去重在python实际运用中&#xff0c;十分常见&#xff0c;也是最基础的重点知识。 1. 使用for循环实现列表去重 此方法去重后&#xff0c;原顺序保持不变。 # for循环实现列表去重 list1 [a, 4, 6, 4, b, hello, hello, world, 9, 9, 4, a] list2 [] for l1 in list1:…...

usb摄像头应用编程

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…...

康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(一)

功能模型接口FMI&#xff08;Functional Mock-up Interface&#xff09;是一个开放且与工具解耦的标准。FMI包含了一个C-API&#xff08;接口&#xff09;&#xff0c;一个用于描述接口的XML文件以及可交换的功能模型单元FMU&#xff08;Functional Mock-up Unit&#xff09;&a…...

OPenCV中绘制多条多边形曲线函数polylines的使用

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 功能描述 绘制多条多边形曲线 原型1 void cv::polylines ( InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar & color…...

气膜球幕影院:娱乐体验的新高度—轻空间

气膜球幕影院以其独特的全景沉浸体验和丰富的娱乐内容&#xff0c;成为了现代娱乐产业的重要组成部分。轻空间带您来探索一下气膜球幕影院带来的独特娱乐体验。 全景沉浸式体验 气膜球幕影院的360度全景沉浸式体验&#xff0c;彻底改变了传统观影方式。观众被包围在一个球形屏幕…...

阿里CEO个人投资的智驾公司,走了不一样的路

佑驾创新在去年8月和11月完成两轮融资&#xff0c;在今年5月底递表港交所&#xff0c;目前拿到了29家车企88款车型的量产订单。自动驾驶赛道不缺明星&#xff0c;这些因素本不足以凸显它的差异化。但是在招股书中&#xff0c;一条特殊的发展路线&#xff0c;却让佑驾创新显得不…...

Arduino平台软硬件原理及使用——无源蜂鸣器模块的使用

文章目录 一、蜂鸣器发声原理 二、无源蜂鸣器与有源蜂鸣器的区分 三、无源蜂鸣器模块在Arduino中的使用 一、蜂鸣器发声原理 上图为常见的不同封装及规格的蜂鸣器。 同蜜蜂、知了等昆虫发声原理一样&#xff0c;蜂鸣器同样靠振动来发出声音&#xff1b; 如上图为无源蜂鸣器的内…...

【Go】用 DBeaver、db browser 和 SqlCipher 读取 SqlCipher 数据库

本文档主要描述如何用 DBeaver、db browser 和 SqlCipher 上打开加密的 SQLite3 数据库(用 SqlCipher v3 加密) 软件版本 DBeaver&#xff1a;v24.1.0 SQLite-driver: sqlite-jdbc-3.46.0.0.jar dbbrowser-for-sqlite-cipher&#xff1a;3.12.2 SqlCipher cli(ubuntun)&am…...

ROS操作过程中的报错

文章目录 错误&#xff1a;E: Unable to locate package ros-noetic-desktop-full报错问题报错原因解决方法 错误2&#xff1a;ERROR: cannot download default source list from:报错问题错误原因解决办法 错误&#xff1a;E: Unable to locate package ros-noetic-desktop-fu…...

Qt项目学习-20240617

Qt项目学习 1.0 文件构建 1.1 预处理命令 C预处理命令是编译过程中的第一步&#xff0c;发生在编译器进行实际编译之前。预处理器&#xff08;preprocessor&#xff09;执行这些命令&#xff0c;它们不是C语言的一部分&#xff0c;但对源代码的编译过程至关重要。以下是一些常…...

加密好的WPSword文档,忘记密码怎么办?

在日常办公和学习中&#xff0c;我们经常使用WPS Word等文档处理软件来创建和编辑重要文件。为了保护这些文件不被未经授权的人访问&#xff0c;我们通常会选择给文档设置密码。然而&#xff0c;有时我们可能会因为时间久远或其他原因而忘记自己设置的密码&#xff0c;这时该如…...

C# WPF 读写CAN数据

C# WPF 读写CAN数据 CAN 分析仪 分析仪资料下载 官方地址&#xff1a;https://www.zhcxgd.com/1.html CSDN&#xff1a; 项目配置 复制Dll库文件 文件在上面的资料里面 设置不安全代码 CAN C#工具类 CAN_Tool.cs using Microsoft.VisualBasic; using System; using Sys…...

力扣2517.礼盒的最大甜蜜度

力扣2517.礼盒的最大甜蜜度 二分答案求最小值 排完序判断是否有k个差距至少为mid的元素别用i遍历 可能会越界 用 : 有多少取多少 class Solution {public:int maximumTastiness(vector<int>& price, int k) {ranges::sort(price);auto check [&](int mid) -&…...

多模块存储器

随着计算机技术的发展&#xff0c;处理的信息量越来越多&#xff0c;对存储器的速度和容量要求也越来越高&#xff1b;而且随着CPU性能的不断提高、IO设备数量不断增加&#xff0c;导致主存的存取速度已经称为了整个计算机系统的性能瓶颈。这就要求我们必须提高主存的访问速度。…...

Windows反截屏开发实现

文章目录 Windows反截屏开发实现1. SetWindowDisplayAffinity2. 反截屏系统3. 总结 Windows反截屏开发实现 最近在我们云桌面中需要做到反截屏能力&#xff0c;所谓反截屏就是我们无法通过截图软件&#xff08;微信&#xff0c;QQ&#xff0c;截图等程序&#xff09;截取桌面的…...

Android.mk的用法

前言 Android.mk 文件是 Android 编译系统中用于描述项目源文件、库和模块的 Makefile。它采用 GNU Make 的语法,但也包含了一些特定于 Android 编译系统的规则和变量。以下是对其语法和使用方法的详细解释及示例。 一:模块种类 一个Android.mk file用来向编译系统描述你的源…...

android studio CreateProcess error=2, 系统找不到指定的文件

【问题记录篇】 在AndroidStudio编译开发jni相关工程代码的时候&#xff0c;编译遇到的这个报错&#xff1a; CreateProcess error2, 系统找不到指定的文件。排查处理步骤: 先查看Build Output的具体日志输出 2.了解到问题出在了NDK配置上&#xff0c;此时需要根据自己的gra…...

jQuery如何把单选框设置为选中状态

在网页开发中&#xff0c;我们经常需要使用表单元素来收集用户数据。其中&#xff0c;单选框&#xff08;radio button&#xff09;是一种常见的表单元素&#xff0c;用于从一组选项中选择一个。使用jQuery&#xff0c;我们可以轻松地控制这些单选框的状态&#xff0c;包括将它…...

普洱建设单位网站/nba最新交易汇总实时更新

导读&#xff1a; 最近想在linux下面找一款文件比较的工具。在这里找到了下面几款免费的文件比较工具&#xff1a; P4WinMerge - Perforce Visual Merge for Windows ExamDiff xdelta Java xdelta GNU Diff Utilities WinMerge xxdiff KDiff3 CSDiff 因为在windows下面习惯了Ul…...

做网站需要什么/建站公司最新报价

实现swap操作的方法有多种&#xff0c;此博客用于更新记录一些swap方法 通过临时存储值进行交换 int temp a; a b; b temp;通过位运算来进行交换&#xff0c;代码如下&#xff1a; a^b; b^a; a^b;此处主要应用的知识是与异或有关的知识&#xff0c;补充如下&#xff1a; …...

wordpress共用数据库/全国seo搜索排名优化公司

今天开始会按照章节把一些重点的知识整理出来&#xff0c;用我这个ITer的理解归纳一下&#xff0c;目的是加深理解。第一章技术类的考的内容不多&#xff0c;也都是选择题&#xff0c;所以理解记忆比机械记忆效果要好。我会尽量用最简单、贴近生活的例子来描述和解释第一章的技…...

西安装修公司排名十强/百度seo营销

以前同事问及为何数据库例程在监听器中状态为unnkown&#xff0c;这是何意&#xff0e;有何影响&#xff0e;查阅了资料&#xff0c;解决如下&#xff1a;# listener.ora Network Configuration File: E:\oracle\product\10.2.0\db_1\network\admin\listener.ora# Generated by…...

广州建站业务公司/九个关键词感悟中国理念

问题描述 一只青蛙一张嘴&#xff0c; 两只眼睛四条腿 两只青蛙两张嘴&#xff0c;四只眼睛八条腿 ⋯ ——— 来自未来的ACM社团的破冰游戏玩起了数青蛙的游戏 这个游戏对于通过大脑来计算的&#x1f43e;毛毛&#x1f43e;同学来说太困难了&#xff0c;而对于用CPU计算的小…...

wordpress+gravatar/seo关键词优化软件怎么样

所以我有一个2D矩阵,我试图打印出从大到小的值.我基本上都是通过寻找最大值来做到这一点,当我找到它时,我在adjacencyMatrix中将该位置设置为1,这样我们就不再计算它了.问题是当我通过打印出最大的代码然后跳过第二大代码来测试它正确启动的代码.然后找到了第3和第4大.跳过了一…...