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

看课件源码剖析标黄

相关推荐
xiaoye-duck3 分钟前
《Linux 网络编程》深入传输层 UDP 协议原理:端口、报文、缓冲区与内核源码解析
linux·网络·udp
好评12435 分钟前
【Linux】数据链路层
linux·运维·网络
CC城子2 小时前
EtherNet/IP I/O 丢包排查(linux系统)
linux·单片机·tcp/ip·ethernetip
新时代牛马2 小时前
Linux 信号处理完整篇:从sigaction、掩码到内核发送与可重入排障
linux·运维·信号处理
程序员梅雨2 小时前
Linux & Shell 实用干货
linux·运维·服务器·后端·面试·php
吴声子夜歌2 小时前
编写Shell脚本——自顶向下设计
linux·运维·shell
M78佐菲2 小时前
HTML学习笔记
linux·笔记·学习·tcp/ip·html
新时代牛马2 小时前
嵌入式 Linux 蓝牙框架完整篇:从 HCI、L2CAP 到BlueZ 用户态
linux·运维·服务器
Brilliantwxx3 小时前
【STM32】 初认识USART串口
linux·stm32·单片机·嵌入式硬件·架构
aningx3 小时前
使用自定义bash脚本预防oom卡死
linux