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

线程-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 线程常见寄存器&#xff08;CR3 EIP IR MMU TLB&#xff09; CR3是当前进程页表物理内存地址&#xff08;包不能虚拟地址&#xff0c;不然套娃了&#xff09; CPU中有寄存器指向task_struct* current EIP&#xff1a;入口虚拟地址 IR&#xff1a;当前命令地址系统总线&a…...

TortoiseSVN提示服务器凭证检核错误:站点名称不符

电脑重装了系统&#xff0c;下载了新版本SVN软件&#xff0c;一切准备就绪&#xff0c;准备大干一场。 打开SVN&#xff0c;一遍一遍的提示【TortoiseSVN提示服务器凭证检核错误:站点名称不符】&#xff0c;一次次的让我接受&#xff0c;终于忍受不了了。 TortoiseSVN提示服务…...

Diffusion Policy——斯坦福机器人UMI所用的扩散策略:从原理到其编码实现(含Diff-Control、ControlNet详解)

前言 本文一开始是属于此文《UMI——斯坦福刷盘机器人&#xff1a;从手持夹持器到动作预测Diffusion Policy(含代码解读)》的第三部分&#xff0c;考虑后Diffusion Policy的重要性很高&#xff0c;加之后续还有一系列基于其的改进工作 故独立成本文&#xff0c;且写的过程中 …...

(动画版)排序算法 -希尔排序

文章目录 1. 希尔排序&#xff08;Shellsort&#xff09;1.1 简介1.2 希尔排序的步骤1.3 希尔排序的C实现1.4 时间复杂度1.5 空间复杂度1.6 希尔排序动画 1. 希尔排序&#xff08;Shellsort&#xff09; 1.1 简介 希尔排序&#xff08;Shells Sort&#xff09;&#xff0c;又…...

delphi fmx android 自动更新(二)

自己写了一个升级的类,支持android与windows 1,下载升级包,可以设置进度条 我这里用的fmxui的进度条,你也可以用原生的 http下载我用的nethttpclient, 进度条设置是比较方便的 首先获取下载文件的大小 用nethttpclient.head函数请求文件地址,得到contentlength 接着…...

蓝队知识浅谈(中)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;蓝队基础之网络七层杀伤链_哔哩哔哩_bilibili 本文主要分享一些蓝队相关的知识。 一、网络杀伤链 网络杀伤链&#xff08;Cyber Kill Chain&…...

解决vue3+ts打包项目时会生成map文件

在正常未配置的情况下使用npm run build 命令打包&#xff0c;会生成很多的js和map文件,map文件是为了方便我们在生产环境进行更友好的代码调试&#xff0c;但是这样就存一个安全问题&#xff1b;容易被攻击&#xff1b; 解决方法&#xff1a;在package.json文件&#xff0c;重…...

webpack指南

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;webpack篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来webpack篇专栏内容:webpack-指南 概念 中文&#xff1a; webpack | webpack中文文档 | webpack中文网 英文&…...

关于QUERY_ALL_PACKAGES权限导致Google下架apk

谷歌商店被下架,原因是第三方使用了 QUERY_ALL_PACKAGES 权限&#xff1b; Google在高版本上限制了此权限的使用。当然&#xff0c;并不是 QUERY_ALL_PACKAGES 这个权限没有了&#xff0c;而是被列为敏感权限&#xff0c;必须有充分的理由说明&#xff0c;才允许上架 GP&#…...

优化时钟网络之时钟抖动

Note&#xff1a;文章内容以Xilinx 7系列FPGA进行讲解 1、什么是时钟抖动 时钟抖动就是时钟周期之间出现的偏差。比如一个时钟周期为10ns的时钟&#xff0c;理想情况下&#xff0c;其上升沿会出现在0ns&#xff0c;10ns&#xff0c;20ns时刻&#xff0c;假设某个上升沿出现的时…...

C++《继承》

在之前学习学习C类和对象时我们就初步了解到了C当中有三大特性&#xff0c;分别是封装、继承、多态&#xff0c;通过之前的学习我们已经了解了C的封装特性&#xff0c;那么接下来我们将继续学习另外的两大特性&#xff0c;在此将分为两个章节来分别讲解继承和多态。本篇就先来学…...

微澜:用 OceanBase 搭建基于知识图谱的实时资讯流的应用实践

本文作者&#xff1a; 北京深鉴智源科技有限公司架构师 郑荣凯 本文整理自北京深鉴智源科技有限公司架构师郑荣凯&#xff0c;在《深入浅出 OceanBase 第四期》的分享。 知识图谱是一项综合性的系统工程&#xff0c;需要在在各种应用场景中向用户展示经过分页的一度关系。 微…...

【LeetCode】【算法】538. 把二叉搜索树转换为累加树

LeetCode 538. 把二叉搜索树转换为累加树 题目 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下…...

YoloV8改进策略:注意力改进|EPSANet,卷积神经网络上的高效金字塔挤压注意力块|即插即用|代码+改进方法

摘要 论文介绍 本文介绍的论文是“EPSANet:卷积神经网络上的高效金字塔挤压注意力块”,该论文提出了一种新颖、轻量且有效的注意力方法,即金字塔挤压注意力(PSA)模块。论文通过替换ResNet瓶颈块中的 3 3 3 \times 3 3...

Nextflow最佳实践:如何在云上高效处理大规模数据集

1. Nextflow 软件架构介绍 Nextflow 是一个用于简化数据驱动计算流程的工具&#xff0c;可以在各种计算环境中轻松部署。它采用了分布式计算和容器技术&#xff0c;实现了高度模块化、可重复性和可扩展性。NextFlow 的软件架构主要包括以下几个部分&#xff1a; 用户界面&…...

数据结构:顺序表(动态顺序表)

专栏说明&#xff1a;本专栏用于数据结构复习&#xff0c;文章中出现的代码由C语言实现&#xff0c;在专栏中会涉及到部分OJ题目&#xff0c;如对你学习有所帮助&#xff0c;可以点赞鼓励一下博主喔&#x1f493; 博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;数…...

springboot040社区医院信息平台

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 spr…...

windows下QT5.12.11使用MSVC编译器编译mysql驱动并使用详解

1、下载mysql开发库,后面驱动编译的时候需要引用到,下载地址:mysql开发库下载 2、使用everything搜索:msvc-version.conf,用记事本打开,添加:QMAKE_MSC_VER=1909。不然msvc下的mysql源码加载不上。...

c++写一个死锁并且自己解锁

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…...

JavaScript方法修改 input type=file 样式

html中的<input type "file">的样式很难修改&#xff0c;又跟页面风格很不匹配。我就尝试了几种方法&#xff0c;但是不管是用label还是用opacity:0都很麻烦&#xff0c;还老是出问题&#xff0c;所以最后还是用JavaScript来解决。 下面附上代码&#xff1a;…...

《CVPR2025-DEIM创新改进项目实战:从原理到部署的深度学习优化全攻略》020、从原理到部署的深度学习优化全攻略

CVPR2025-DEIM创新改进项目实战:从原理到部署的深度学习优化全攻略 020、DEIM在嵌入式设备上的部署:ONNX导出与TensorRT优化 一、凌晨三点的调试现场 上周五晚上,我盯着Jetson Orin的终端,看着DEIM模型推理速度卡在12.3ms纹丝不动。旁边同事的YOLOv8已经跑到3.2ms了,差…...

《CVPR2025-DEIM创新改进项目实战:从原理到部署的深度学习优化全攻略》018、DeepLab-DEIM与SegFormer-DEIM语义分割优化全记录

CVPR2025-DEIM创新改进项目实战:DeepLab-DEIM与SegFormer-DEIM语义分割优化全记录 一、从一次令人崩溃的显存溢出说起 上周三凌晨两点,我盯着屏幕上那个“CUDA out of memory”的红色报错,差点把咖啡泼到键盘上。当时正在跑一个DeepLabV3+的语义分割实验,输入尺寸不过是1…...

【Spring】 AOP 核心原理,与声明式事务传播机制

一、什么是 AOPAOP&#xff08;Aspect Oriented Programming&#xff0c;面向切面编程&#xff09;核心思想在不修改原有业务代码的情况下&#xff0c;对方法进行统一增强。例如&#xff1a;日志记录&#xff1b;权限校验&#xff1b;事务管理&#xff1b;性能统计&#xff1b;…...

跨境漫游通信解析:全球漫游物联网卡的适配逻辑与行业应用

在跨境物联网行业中&#xff0c;除固定单一国家投放的设备外&#xff0c;有大量终端设备存在跨区域流动、多国家部署、不定向出海的使用需求。车载定位、跨境物流终端、移动式工控、巡回检测设备&#xff0c;这类硬件无法限定单一运营商网络&#xff0c;对多国网络切换、信号漫…...

如何将企业微信 RPA 抽象为高可用的外部群自动化 API?

在做企业微信外部群&#xff08;如跨群互动、自动化精准群发、批量建群&#xff09;的自动化能力时&#xff0c;业界通常面临两种选型&#xff1a;一种是直接攻克底层协议&#xff0c;但面临极高的安全风控与多变协议的维护成本&#xff1b;另一种是基于 RPA&#xff08;机器人…...

开源数据库 TimescaleDB 2.27.1 发布:性能改进与多项错误修复,官方建议尽快升级

开源数据库 TimescaleDB 2.27.1 版本正式发布&#xff0c;较 2.27.0 版本有性能改进和错误修复&#xff0c;官方建议用户尽快升级。 TimescaleDB 简介 TimescaleDB 是基于 PostgreSQL 构建的开源数据库&#xff0c;打包为 PostgreSQL 扩展程序&#xff0c;可让 SQL 扩展到时间序…...

IC617保姆级教程:用ADEXL和Calculator两步搞定CMOS晶体管的gmid设计曲线

IC617高效设计指南&#xff1a;ADEXL与Calculator协同生成CMOS晶体管gmid曲线的实战解析 在模拟集成电路设计中&#xff0c;gmid曲线作为评估晶体管工作状态的核心工具&#xff0c;直接影响着放大器的增益、噪声和功耗等关键指标。传统方法往往需要反复切换多个工具界面&#x…...

别再只把 AI 当聊天框了!探索 Google DeepMind 的 `agy` 命令行工具与人机协同新姿势

别再只把 AI 当聊天框了&#xff01;探索 Google DeepMind 的 agy 命令行工具与人机协同新姿势 在 AI 辅助编程&#xff08;AI Coding&#xff09;卷到飞起的今天&#xff0c;大部分开发者最习惯的可能还是在 IDE 侧边栏里装个插件&#xff0c;或者在网页端和 AI 缝缝补补地复制…...

Apache APISIX Dashboard完全指南:5分钟掌握可视化API网关管理

Apache APISIX Dashboard完全指南&#xff1a;5分钟掌握可视化API网关管理 【免费下载链接】apisix-dashboard Dashboard for Apache APISIX 项目地址: https://gitcode.com/gh_mirrors/ap/apisix-dashboard Apache APISIX Dashboard是Apache APISIX API网关的可视化控制…...

智赋能源 安筑未来|济南昊安光电亮相 2026 第六届中国贵州国际能源产业博览交易会

2026 年 5 月 18 日 —5月 20日&#xff0c;2026 第六届中国贵州国际能源产业博览交易会&#xff08;简称 “贵州能源博览会”&#xff09;在贵阳国际会议展览中心盛大启幕。本届展会聚焦能源产业数字化转型、绿色低碳发展与安全高效生产&#xff0c;汇聚能源领域全产业链优质企…...