线程-2-线程概念与控制
main
线程常见寄存器(CR3 EIP IR MMU TLB)
CR3是当前进程页表物理内存地址(包不能虚拟地址,不然套娃了)
CPU中有寄存器指向task_struct* current
EIP:入口虚拟地址
IR:当前命令地址
系统总线:CPU与内存之间线路
MMU:memoray manager unit
硬件 ,虚拟到物理地址转化
为什么不让软件作,非要用硬件做虚拟/真实内存地址转换
硬件比软件快
MMU与TLB都在CPU上
物理内存有寄存器
地址:被操作物理地址
操作:in/out
怎么做到进程资源分给线程
代码如何被划分,需要操作系统可以做吗
创建线程时,每个线程一个入口函数,每个进程天然得到一个函数地址
TLB:translation lookside buffer (转译后备缓冲区)
MMU先向TLB查表,没有命中(cache miss)就到MMU,之后反向更新TLB。命中就不用去MMU了
TLB也是个硬件,在CPU上
页表存储信息结构(20+12)
页表中不仅存放了真实内存地址,还有改page对应的其他信息
页表信息图片:

每个页表只要20bite位就能映射4GB物理内存所有pages
剩下12位为对应page信息
linux内核页表代码图片
页表在进程加载时建立
末端页表=20+12
缺页中断(重新理解new & 写时拷贝)
MMU与TLB都在CPU内,其报错后CPU向目标进程发送信号,中断
new与malloc
申请虚拟地址空间
用该地址时会缺页中断,这是才真正去物理内存申请空间
写时拷贝
原理同上
4KB拷贝
缺页中断:进程与空间解耦
如何区分是缺页还是真的越界
线程的优缺点
线程优点:

线程重要优点
- 线程切换:不切页表,不切上下文(cpu寄存器内容),不切TLB,cache等缓存机制
- 线程间通信比进程简单的多
后四条优点是进程,线程共有的
线程缺点:

线程主要用途

局部性原理与应用
每个cpu有cache:cpu与内存之间的缓冲区,先访问cache,miss的话再去物理内存访问数据
cache,TLB等缓冲区原理,本质是预加载。访问一地址,大概率会访问其周围地址数据
Linux 进程 vs 线程
进程:资源分配最小单位
线程:调度的基本单位
进程和线程

线程的独立资源

进程的多个线程共享
POXIS接口&使用
这些借口不是系统调用,是库函数,要包含头文件pthread.h,链接时要-lpthread链接库
pthread_creat
TIPS:
一个线程有问题,整个进程都会退出(线程是进程一部分),当然该进程所有其他线程也会退出
函数地址在栈上吗
不在,在代码区
线程是一个进程内部的控制序列
一个cpu中
运算器:可以好几组
控制器:只一组
32位机器:两级页表
64位机器:三级页表
每一种设备都有寄存器,如 内存/硬盘等
code
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <unistd.h>
#include <thread>// void *routine(void *args)
// {
// std::string name = static_cast<const char *>(args);
// while (true)
// {
// std::cout << "我是新线程,我的名字是: " << name << std::endl;
// sleep(1);
// }
// return 0;
// }int main()
{std::thread t([](){while (true){std::cout << "我是新线程,我的名字是 : new thread " << std::endl;sleep(1);}});while (true){std::cout << "我是main线程..." << std::endl;sleep(1);}// pthread_t tid;// int n = pthread_create(&tid, nullptr, routine, (void *)"thread-1");// if (n != 0)// {// std::cout << "create thread error: " << strerror(n) << std::endl;// return 1;// }// while (true)// {// std::cout << "我是main线程..." << std::endl;// sleep(1);// }
}
课堂板书


相关文章:
线程-2-线程概念与控制
main 线程常见寄存器(CR3 EIP IR MMU TLB) CR3是当前进程页表物理内存地址(包不能虚拟地址,不然套娃了) CPU中有寄存器指向task_struct* current EIP:入口虚拟地址 IR:当前命令地址系统总线&a…...
TortoiseSVN提示服务器凭证检核错误:站点名称不符
电脑重装了系统,下载了新版本SVN软件,一切准备就绪,准备大干一场。 打开SVN,一遍一遍的提示【TortoiseSVN提示服务器凭证检核错误:站点名称不符】,一次次的让我接受,终于忍受不了了。 TortoiseSVN提示服务…...
Diffusion Policy——斯坦福机器人UMI所用的扩散策略:从原理到其编码实现(含Diff-Control、ControlNet详解)
前言 本文一开始是属于此文《UMI——斯坦福刷盘机器人:从手持夹持器到动作预测Diffusion Policy(含代码解读)》的第三部分,考虑后Diffusion Policy的重要性很高,加之后续还有一系列基于其的改进工作 故独立成本文,且写的过程中 …...
(动画版)排序算法 -希尔排序
文章目录 1. 希尔排序(Shellsort)1.1 简介1.2 希尔排序的步骤1.3 希尔排序的C实现1.4 时间复杂度1.5 空间复杂度1.6 希尔排序动画 1. 希尔排序(Shellsort) 1.1 简介 希尔排序(Shells Sort),又…...
delphi fmx android 自动更新(二)
自己写了一个升级的类,支持android与windows 1,下载升级包,可以设置进度条 我这里用的fmxui的进度条,你也可以用原生的 http下载我用的nethttpclient, 进度条设置是比较方便的 首先获取下载文件的大小 用nethttpclient.head函数请求文件地址,得到contentlength 接着…...
蓝队知识浅谈(中)
声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址:蓝队基础之网络七层杀伤链_哔哩哔哩_bilibili 本文主要分享一些蓝队相关的知识。 一、网络杀伤链 网络杀伤链(Cyber Kill Chain&…...
解决vue3+ts打包项目时会生成map文件
在正常未配置的情况下使用npm run build 命令打包,会生成很多的js和map文件,map文件是为了方便我们在生产环境进行更友好的代码调试,但是这样就存一个安全问题;容易被攻击; 解决方法:在package.json文件,重…...
webpack指南
🌈个人主页:前端青山 🔥系列专栏:webpack篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来webpack篇专栏内容:webpack-指南 概念 中文: webpack | webpack中文文档 | webpack中文网 英文&…...
关于QUERY_ALL_PACKAGES权限导致Google下架apk
谷歌商店被下架,原因是第三方使用了 QUERY_ALL_PACKAGES 权限; Google在高版本上限制了此权限的使用。当然,并不是 QUERY_ALL_PACKAGES 这个权限没有了,而是被列为敏感权限,必须有充分的理由说明,才允许上架 GP&#…...
优化时钟网络之时钟抖动
Note:文章内容以Xilinx 7系列FPGA进行讲解 1、什么是时钟抖动 时钟抖动就是时钟周期之间出现的偏差。比如一个时钟周期为10ns的时钟,理想情况下,其上升沿会出现在0ns,10ns,20ns时刻,假设某个上升沿出现的时…...
C++《继承》
在之前学习学习C类和对象时我们就初步了解到了C当中有三大特性,分别是封装、继承、多态,通过之前的学习我们已经了解了C的封装特性,那么接下来我们将继续学习另外的两大特性,在此将分为两个章节来分别讲解继承和多态。本篇就先来学…...
微澜:用 OceanBase 搭建基于知识图谱的实时资讯流的应用实践
本文作者: 北京深鉴智源科技有限公司架构师 郑荣凯 本文整理自北京深鉴智源科技有限公司架构师郑荣凯,在《深入浅出 OceanBase 第四期》的分享。 知识图谱是一项综合性的系统工程,需要在在各种应用场景中向用户展示经过分页的一度关系。 微…...
【LeetCode】【算法】538. 把二叉搜索树转换为累加树
LeetCode 538. 把二叉搜索树转换为累加树 题目 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下…...
YoloV8改进策略:注意力改进|EPSANet,卷积神经网络上的高效金字塔挤压注意力块|即插即用|代码+改进方法
摘要 论文介绍 本文介绍的论文是“EPSANet:卷积神经网络上的高效金字塔挤压注意力块”,该论文提出了一种新颖、轻量且有效的注意力方法,即金字塔挤压注意力(PSA)模块。论文通过替换ResNet瓶颈块中的 3 3 3 \times 3 3...
Nextflow最佳实践:如何在云上高效处理大规模数据集
1. Nextflow 软件架构介绍 Nextflow 是一个用于简化数据驱动计算流程的工具,可以在各种计算环境中轻松部署。它采用了分布式计算和容器技术,实现了高度模块化、可重复性和可扩展性。NextFlow 的软件架构主要包括以下几个部分: 用户界面&…...
数据结构:顺序表(动态顺序表)
专栏说明:本专栏用于数据结构复习,文章中出现的代码由C语言实现,在专栏中会涉及到部分OJ题目,如对你学习有所帮助,可以点赞鼓励一下博主喔💓 博客主页:Duck Bro 博客主页系列专栏:数…...
springboot040社区医院信息平台
🍅点赞收藏关注 → 添加文档最下方联系方式领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 spr…...
windows下QT5.12.11使用MSVC编译器编译mysql驱动并使用详解
1、下载mysql开发库,后面驱动编译的时候需要引用到,下载地址:mysql开发库下载 2、使用everything搜索:msvc-version.conf,用记事本打开,添加:QMAKE_MSC_VER=1909。不然msvc下的mysql源码加载不上。...
c++写一个死锁并且自己解锁
刷算法题: 第一遍:1.看5分钟,没思路看题解 2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…...
JavaScript方法修改 input type=file 样式
html中的<input type "file">的样式很难修改,又跟页面风格很不匹配。我就尝试了几种方法,但是不管是用label还是用opacity:0都很麻烦,还老是出问题,所以最后还是用JavaScript来解决。 下面附上代码:…...
ESP32 FreeRTOS任务状态全解析:从就绪态到挂起态的深度理解与应用
ESP32 FreeRTOS任务状态全解析:从就绪态到挂起态的深度理解与应用 在嵌入式系统开发中,任务调度是实时操作系统(RTOS)的核心功能之一。对于ESP32开发者而言,深入理解FreeRTOS的任务状态模型,能够帮助我们编写出更高效、更可靠的多…...
Openclaw中文版快速上手:nanobot镜像支持Qwen3-4B本地部署与系统命令执行
Openclaw中文版快速上手:nanobot镜像支持Qwen3-4B本地部署与系统命令执行 1. 快速了解nanobot:你的轻量级AI助手 nanobot是一个超轻量级的个人人工智能助手,它基于OpenClaw的设计理念,但用更简洁的代码实现了核心功能。这个工具…...
IPD实战:如何用DCP决策点避免产品开发中的‘死亡陷阱’(附真实案例)
IPD实战:如何用DCP决策点避免产品开发中的"死亡陷阱" 在硅谷某科技公司的产品复盘会上,CTO盯着投影仪上的数据图表沉默良久——这个投入1200万美元、历时18个月的智能硬件项目,最终因为电池续航不达标而被迫终止。更令人痛心的是&a…...
macOS效率革命:3个全局快捷键让Finder目录操作提速300%
macOS效率革命:3个全局快捷键让Finder目录操作提速300% 【免费下载链接】OpenInTerminal ✨ Finder Toolbar app for macOS to open the current directory in Terminal, iTerm, Hyper or Alacritty. 项目地址: https://gitcode.com/gh_mirrors/op/OpenInTerminal…...
深入剖析Dynamic-Datasource:迭代器模式在数据源扩展中的完整实现指南
深入剖析Dynamic-Datasource:迭代器模式在数据源扩展中的完整实现指南 【免费下载链接】dynamic-datasource dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务 项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-dataso…...
Comsol 薄板声辐射响应优化:激励位置与频率的协同效应
1. 薄板声辐射响应基础原理 当你用手指轻轻敲击一块金属薄板时,会听到清脆的声响。这个看似简单的现象背后,隐藏着复杂的声学原理。在Comsol仿真中,我们可以精确模拟这种声辐射响应,为声学设备设计提供科学依据。 薄板声辐射的本质…...
奇偶判断算法的极端实现与优化
1. 奇偶判断算法的极端实现:从40亿条if语句到机器码优化1.1 项目背景与设计动机在计算机科学领域,判断数字奇偶性通常采用取模运算这一经典方法。然而,一个看似荒谬的想法引发了技术人员的深入思考:是否可以通过穷举所有可能的数字…...
告别网络烦恼:Stanza 1.5.1英文语言模型离线安装保姆级教程(Anaconda环境专用)
深度解析Stanza 1.5.1英文语言模型离线部署:Anaconda环境全流程实战 在企业内网或学术研究环境中,我们常常面临无法直接访问外部资源的情况。这时,掌握关键工具的离线部署能力就显得尤为重要。今天我们将全面剖析自然语言处理工具Stanza在受限…...
虚拟机自动化新范式:CUA Computer SDK十分钟入门指南
虚拟机自动化新范式:CUA Computer SDK十分钟入门指南 【免费下载链接】cua Create and run high-performance macOS and Linux VMs on Apple Silicon, with built-in support for AI agents. 项目地址: https://gitcode.com/GitHub_Trending/cua/cua 在当今的…...
UniApp地图组件实战:5分钟搞定腾讯位置服务+自定义气泡弹窗(附避坑指南)
UniApp腾讯地图组件深度实战:从Key申请到自定义弹窗全流程解析 1. 腾讯位置服务Key申请与配置 在manifest.json中配置腾讯地图Key是第一步,但90%的开发者会忽略安全配置细节。正确的申请流程应该是: 访问腾讯位置服务官网,进入控制…...
