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

看课件源码剖析标黄

相关推荐
默|笙10 小时前
【Linux网络】网络层协议 IP(1)理解报头、网段划分
linux·网络·tcp/ip
修己xj13 小时前
nslookup 使用指南:两种模式与常用查询技巧
linux
唠玖馆15 小时前
文件系统详解
linux·文件系统·ext2
GeW15 小时前
当Linux内核开始“确定性”,制造高端化才有了底层语法
linux
星恒随风17 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
StarsGreen19 小时前
libva在intel平台上的前端流程简介
linux
坤坤子吖1 天前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json
Felven1 天前
华为鲲鹏920s芯片serdestool工具使用说明
linux·运维·服务器·华为·鲲鹏920·serdestool
莫晓燚1 天前
mall 电商项目完整部署---实战
linux·运维·docker·容器
咋的啥名都用不了呢~1 天前
Linux项目部署5(安装Nginx的插件)
linux