40.线程控制

lesson 30 为什么标记位是12项,因为在pageendtry中unsigned long是32个比特位,表示某个页起始地址只需要20位就行,剩下表示标志位。

地址空间也有指针指向页目录起始地址,每个进程都有自己的页目录,所以进程自己要记录,而寄存器的页目录地址是当前进程的。

看代码

云服务器指针8字节,以前4字节,所以这里long long 强转

主线程一般都是死循环,新线程执行完自己退掉

看课件3线程控制

看创建多线程代码

id指针指向没变。指针指向内容一直在变,所以最后一次都打印线程9.所以每个线程new一段堆空间,id往routine传参时候是拷贝所以id释放也没关系

进程自己的代码区可以通过库起始虚拟地址和偏移量访问到库

先描述在组织,怎么能在库创建tcb,就像是调用open,fopen返回file一样,这里open是C库分配的虚拟地址空间给用户层FILE结构体,真正用到时候再陷入内核进行缺页中断,这里调用pthread_creat,可以在库内创建tcb结构体,调度的在pcb中,也就是说线程实现一部分在用户层一部分在内核,代码区调用相关指令,库内创建相关结构体,这是描述

怎么组织,可以想成数组,但这几个结构体并不连续,这里只是这么想,也不是一次性开辟的整个每个数组快的内容 ,线程结束会把返回值写到struct pthread结构体 内,线程结束这个数组内对应的数据块并没有被释放,所以线程需要join,带出返回值,然后释放数据块,

当我们代码区调用create 库就会创建一个局部存储,线程的管理块,之后把这个线程块的起始地址写到代码区的id里面,

轻量级进程一旦启动,系统调用在内核创建tcb,让tcb执行routine,看clone,要把执行的方法和自己的栈结构交给我,所以cpu调度这个线程,会转而去执行这个用户层的routine,形成的临时数据也会入用户传进来的栈结构里,所以内核数据和用户数据在一定程度就联动起来了。

库创建了描述结构体,剩下的交给底层,然后底层执行完了,我接受返回结果,这就是内核线程和用户线程联动过程。

线程id:pthread_creat时候在库创建的描述线程的线程控制块的起始虚拟地址,所以大

2.返回值是现成退出结果写入线程控制块的void*变量里然后通过pthreadjoin回收它,

3.线程分离:tcb结构体内线程状态有个 int joinable 如果这个等于1,表明不是分离,需要接收,0,线程库自动释放掉控制块,joinable是线程控制块里的一个标记位,

但是Linux当中所有线程都在库里,但是互相访问不了,只能拿到自己线程的控制块虚拟地址,

看课件源码剖析标黄

相关推荐
Yana.nice1 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
DFT计算杂谈5 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
Zhang~Ling6 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind6 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的森6 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
XMAIPC_Robot7 小时前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
重生的黑客8 小时前
Linux 进程优先级、切换与调度:从孤儿进程到 O(1) 调度模型
linux·运维·服务器·进程优先级·nice
骑上单车去旅行9 小时前
MD5校验对比脚本
linux·服务器·windows
平生幻9 小时前
Linux 常用命令
linux
ShirleyWang01210 小时前
让headlamp控制台能访问
linux·服务器·python·k8s·k3s