摘要:
本章说一下线程
目录
一、回忆一下
1、exe就是一个文件
2、我们的可执行程序本来就是按照空间方式进行编译的
3、可执行程序,其实就是按照区域也就是已经被划分成了以4kb为单位的大小
六字真言:先描述在组织,如下图就是先描述在组织,产生的stack_struct的结构体,这个存着虚拟地址,然后虚拟地址存着用户级页表,然后页表里面存着物理内存,然后物理内存存在磁盘内。
那么数据如果很多该怎么存入呢?如下图在32位环境下,是通过前面十位0就是指向一级页表,然后中间十位指向二级页表,其中的一级页表也指向二级页表,然后两个都一样就是二级页表,然后二级页表指向物理内存,这时找到了变量存在的地址,然后后面12位就是指向物理内存的偏移地址,所以就可以得出
page start addr + 页内偏移
通过一级页表+二级页表找到对应的页,再通过最后12位找到准确的地址,也就是偏移量
二、如何理解线程
通过一定的技术手段,将当前进程的资源,以一定的方式划给不用的task_struct,不去申请地址空间,需要什么资源就直接向主线程要,线程在内部执行,是OS调度的基本单位
这个是Linux特有的方案:没有独立的结构体
在内核视角中:
进程:承担分配系统资源的基本实体
用户视角:该进程对应的代码+资源
内部只有一个执行流的进程,但是内部具有各个执行的进程就是线程
在CPU视角中:CPU其实不怎么关心是进程还是线程这样的概念,只认识tack_struct,CPU调度的基本单位就是“线程”
在Linux下的进程:统一称之为轻量级进程,Linux并不能直接给我们提供线程的接口,只能提位轻量级进程的接口,在用户层实现了一套用户层多线程方案,以库的方式提供给用户进行使用,pathred线程库——原生线程库
三、命令行看线程
如下图利用man手册进行查看指令,pthread_create这个函数就是创建一个线程,他的参数就是下面四个