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当中所有线程都在库里,但是互相访问不了,只能拿到自己线程的控制块虚拟地址,

看课件源码剖析标黄

相关推荐
青梅橘子皮4 小时前
Linux---基本指令
linux·运维·服务器
REDcker5 小时前
Linux信号机制详解 POSIX语义与内核要点 sigaction与备用栈实践
linux·运维·php
cui_ruicheng5 小时前
Linux进程间通信(三):System V IPC与共享内存
linux·运维·服务器
蚰蜒螟6 小时前
深入 Linux 内核同步机制:从 futex 到 spinlock 的完整旅程
linux·windows·microsoft
运维全栈笔记6 小时前
Linux安装配置Tomcat保姆级教程:从部署到性能调优
linux·服务器·中间件·tomcat·apache·web
dllmayday7 小时前
Linux 上用终端连接 WiFi
linux·服务器·windows
峥无8 小时前
Linux系统编程基石:静态库·动态库·ELF文件·进程地址空间全景图
linux·运维·服务器
用户2367829801688 小时前
从 chmod 755 说起:Unix 文件权限到底是怎么算的?
linux
Strugglingler8 小时前
【systemctl 学习总结】
linux·systemd·systemctl·journalctl·unit file
嵌入式×边缘AI:打怪升级日志10 小时前
100ASK-T113 Pro 开发板 Bootloader 完全开发指南
linux·ubuntu·bootloader