一、线程的概念
1、进程和线程的区分
进程:运行起来的程序。(进程=内核数据结构+代码和数据)--->操作系统:承担分配资源的基本实体。
线程:线程是进程内部的执行分支。
Linux"线程"在进程内部运行,本质是在进程的地址空间内运行。
我们一起学习的进程,本质:内部只有一个线程的进程~,进程内部只有一个执行分支。
进程=多个线程+地址空间+页表+代码和数据
代码段是一整块,没被切开
但每个线程,只跑其中的某一段代码
所以:每个线程执行的就是正文代码的一部分

2、TCB
TCB---->Tread Ctrl Block ---->线程控制块,在OS中,单独为线程设计TCB,

Linux复用进程相关的数据结构,task_struct。 用"进程"北河结构模拟实现"线程效果"。
3、注意
在CPU角度,没有进程,只有执行流!!!(线程)----->轻量级进程
执行流(粒度)<=进程
在linux系统中:执行流==轻量级进程,进程=一个或者多个轻量级进程+其他资源
Linux中,在这里我们不说线程,只有进程和轻量级进程。
二、创建一个轻量级进程(线程)
pthread_create

如下图:是同一个进程

完美验证了线程的核心特性:多个线程共享同一个进程 ID,属于同一个进程。
三、再谈虚拟地址空间(页表+虚拟地址+物理地址)
物理内存管理
物理内存管理其思想是将虚拟内存下的逻辑地址空间分为若干页,将物理内存空间分为若干页框,通过 页表便能把连续的虚拟内存,映射到若干个不连续的物理内存页。这样就解决了使用连续的物理内存 造成的碎片问题。

struct page mem[1048576];
- 物理内存侧 :被划分成一个个大小固定的单元,叫页框(Page Frame,也叫页帧),Linux 下默认大小就是 4KB。
- 磁盘侧 :文件系统里,数据存储的基本单元叫块(Block),常见的默认大小也是 4KB。
- 1:1 对应:内存和磁盘之间交换数据(比如加载程序、读写文件)时,都是以 4KB 为单位批量传输的,这就是图里 "1:1" 箭头的含义。
操作系统把物理内存切成 4KB 的页框,磁盘也以 4KB 为块,两者直接 1:1 交换;每个页框都有一个 struct Page 来记录状态,这就是物理内存管理的基础。