【Linux】————多线程(概念及控制)
作者主页: 作者主页
本篇博客专栏:Linux
创作时间 :2024年11月19日
再谈地址空间:
OS对内存进行管理不是根据字节为单位,以字节为单位效率过低,是以内存块为单位的,一个内存块的大小一般为4kb,系统和磁盘IO的基本单位是4kb--8个扇区
文件在磁盘中存储的时候都是有自己的datablock的,每个datablock的大小都是4kb,所以内存管理时,加载就是把程序的数据块加载到指定的内存块中。
为了方便进行表述,4kb的空间+内容有一个名字,叫页框或页帖,在内核中有一个struct page来管理每一个页框,内存看成是数组,第一个page的起始地址就是数组下标,*4==0 ,第二个page的起始地址是数组下标*4==4。所以每个page都有了下标。
那我们之前所说的虚拟地址到底是如何转化成物理地址的呢?
虚拟地址的前十个比特位索引页目录,中间十个比特位索引页表,页表指向对应页框的起始地址,虚拟地址的低12位+页框的起始地址就能找到页框内的任意一个字节了。
这种页表也叫二级页表,用来搜索页框。
虚拟地址本质是一种资源。
线程概念:
- 在一个程序里的一个执行路线叫做线程,更正确的定义是:线程是一个进程内部的控制序列
- 一切进程至少有一个执行线程
- 线程在进程内部运行,本质是在进程地址空间内运行
- 在Linux系统中,在CPU眼里,看到的PCB都要比传统的进程更加轻量化
- 透过进程虚拟地址空间,可以看到进程的大部分资源,将进程合理的分配给每一个执行流,就形成了线程执行流
线程:在进程内部运行,是CPU调度的基本单位
进程:承担分配系统资源的基本实体
我们以前讲的都是进程内部只有一个执行流的进程,Windows系统里有struct tcb结构体描述线程,Linux系统选择复用struct pcb结构体。所以Linux是用进程模拟的线程。
Linux中CPU不区分task_struct 是进程还是线程,都看做执行流。
CPU看到的执行流<=进程。
Linux中的执行流叫:轻量级进程。
创建进程初识:
这个函数的功能是创建一个新的线程:
参数
- thread:返