1.进程相关概念
1)程序和进程
程序指编译好的二进制文件,存储在磁盘上,不占用系统资源(cpu,内存,设备,锁。。。)
进程是活跃的程序,占用系统资源
同一个程序可以加载不同的进程(彼此之间互不影响)
2)并发
3)单道程序设计模式
4)多道程序设计模式
5)CPU和MMU
MMU内存管理单元:位于CPU内部
虚拟地址:最多可用4G地址空间
1.虚拟内存与物理内存的映射
2.设置修改内存访问级别
6)PCB进程控制块
实质上是一个task_struct结构体
a)进程ID
b)进程状态:初始态、就绪态、运行态、挂起态、终止态
c)进程切换时需要保存的和恢复的一些CPU寄存器值
d)描述虚拟地址空间信息
e)描述控制终端信息
f)当前工作目录
g)umask掩码
h)文件描述符表,包含很多指向file结构体的指针
i)和信号相关信息
j)用户ID和组ID
k)会话和进程组
l)进程可以使用的资源上限
7)环境变量
getenv, setenv, unsetenv;
8)进程控制
fork:返回值2个(一个进程变成两个进程各自fork做返回):1.返回子进程pid(非负整数>0)(父进程的返回)2.返回0(子进程的返回)
循环创建子进程架构
9)进程共享
刚fork之后:父子相同之处:全局变量、.data、.text、栈、堆、环境变量、用户ID、宿主目录、进程工作目录、信号处理方式等。。。
父子不同之处:1.进程PID 2.fork返回值 3.父进程ID 4.进程运行时间 5.闹钟(定时器) 6.未决信号集
父子进程遵循读时共享写时复制原则
父子进程共享:1.文件描述符 (打开文件的结构体)2.mmap建立的映射区(进程间通信)
fork 之后谁先执行谁后执行,取决于内核调度算法
10)GDB调试
set follow-fork-mode child(多个子进程可以设置条件断点)
set follow-fork-mode parent(默认)
要在fork()函数之前设置才可以用