1.c语言和cpp语言中,
这个不是内存,
%p
-
进程认为自己是独占空间的,实际上不是这样子的。
-
pcb中存了一个内存空间,进程地址空间
-
页表是进程内存管理的核心部分,它管理了进程虚拟内存到物理内存的映射关系。通过页表,操作系统可以为每个进程提供独立的虚拟地址空间,并实现内存分页和虚拟内存等功能。在进程切换时,操作系统需要根据PCB中的页表指针加载正确的页表,确保当前进程能够正确访问自己的内存。
-
虚拟地址也叫线性地址,并且具有拦截的功能,不然恶意软件入侵的内存。
-
内存隔离:不同进程有各自独立的页表,进程之间的地址空间相互独立,保证了内存的安全和隔离性。
-
写时拷贝,就是父进程拷贝一份到子进程,只有遇到需要修改的时候才会真的在物理内存中开辟一个空间
-
进程=内核数据结构+进程对应的代码和数据
-
地址空间的存在,可以更加方便的进行进程和进程的数据代码的解耦,保证代码的独立性的特征
-
linux中代码在磁盘就有逻辑地址,加载进物理内存中,就会有物理地址。
-
PCB 和 mm_struct
在操作系统中,进程是系统执行任务的基本单位,而每个进程都需要一些结构来记录和管理它的状态。在 Linux 内核中,PCB(Process Control Block,进程控制块)和mm_struct是两个关键的结构体,它们共同协作来完成对进程的管理。 -
PCB(进程控制块)
PCB 是操作系统中保存进程全部关键信息的数据结构。在 Linux 中,PCB 通过 task_struct 结构体实现,它包含了进程的状态、控制信息以及与系统资源交互的细节。具体包括:
进程ID:唯一标识一个进程的进程号 (PID)。
进程状态:如运行、睡眠、停止等。
调度信息:进程的优先级、调度策略等。
CPU上下文:保存进程的寄存器、程序计数器等信息,确保进程在上下文切换后能够继续运行。
内存管理信息:通过指向 mm_struct 的指针,关联该进程的内存布局。
文件描述符表:记录进程打开的文件和设备。 -
mm_struct
mm_struct 是 Linux 内核中专门用于描述进程内存布局的结构体。它包含了进程虚拟地址空间的详细信息,包括:
代码段、数据段、堆和栈的起始地址和大小。
虚拟内存区域的划分和管理。
页表信息,用于内存地址的转换。
内存映射文件、共享内存等资源。
每个进程都有自己的 mm_struct,其中保存了该进程的内存使用情况。PCB 中的 task_struct 会通过指针链接到该结构。