网站建设海淀区,北京一家专门做会所的网站,网站 配色方案,湖北网站建设详细方案一、进程概念
在 Linux 系统中#xff0c;进程#xff08;Process#xff09; 是程序执行的动态实例#xff0c;是操作系统进行资源分配和调度的基本单位。
1. 程序 vs 进程
程序#xff08;Program#xff09;#xff1a;是静态的代码集合进程Process 是程序执行的动态实例是操作系统进行资源分配和调度的基本单位。
1. 程序 vs 进程
程序Program是静态的代码集合如二进制可执行文件 /bin/ls存储在磁盘上不占用系统资源如 CPU、内存。
进程Process是程序被加载到内存后动态运行的状态是操作系统管理的“活”的实体。同一程序可被多次执行生成多个独立的进程如同时打开多个 bash 终端。
二、进程的核心特性
1. 动态性进程是程序执行的动态过程有生命周期创建→运行→终止。
2. 并发性多个进程可在同一时间段内交替运行宏观并行微观串行由操作系统调度实现。
3. 独立性每个进程拥有独立的资源空间如内存、文件句柄通过内核隔离一个进程崩溃不影响其他进程除非涉及共享资源、一个进程也无法直接访问其他进程内存的资源。
4. 异步性进程的执行顺序由操作系统调度决定具有不确定性受优先级、资源竞争等因素影响。
三、进程状态与切换
Linux 进程的状态反映了其当前的活动情况常见状态包括状态转换示例
新进程通过 fork() 创建 → 进入 R就绪或直接运行若 CPU 空闲。进程因 I/O 请求进入 S可中断睡眠I/O 完成后被唤醒回 R。进程收到 SIGKILL 信号 → 强制终止释放资源避免变为僵尸。父进程未调用 wait() 回收子进程 → 子进程终止后变为 Z僵尸。
四、进程的描述进程控制块PCB
Linux 内核通过 task_struct 结构体进程控制块PCB描述进程的所有信息存储于内核内存中。关键字段包括
1. 标识信息进程 IDPID进程的唯一标识、父进程 IDPPID、用户 IDUID、组 IDGID。
2. 状态信息当前状态如 R/S/Z、退出状态码终止原因。
3. 资源信息虚拟内存映射mm_struct、打开的文件描述符表files_struct、信号处理方式signal_struct。
4. 调度信息优先级nice 值、CPU 占用时间utime/stime、调度策略如 CFS 公平调度。
5. 上下文信息寄存器值如程序计数器 PC、栈指针 SP、浮点运算状态用于进程切换时保存现场。
五、进程的创建与终止
1. 进程创建
Linux 中进程通过 fork() 系统调用创建遵循“写时复制Copy-On-Write”原则
父进程调用 fork() 后内核复制父进程的 PCB 和内存页表初始时共享物理内存生成子进程。
子进程从 fork() 的返回值开始往后执行fork()系统调用在父进程的代码是返回子进程 PID在子进程的代码中则是返回 0。
实际内存复制仅在子进程修改内存时发生提高效率。
明明是父进程调用了fork为什么fork在子进程中也返回了一直值而且值是0和父进程的不一样
解释 从内核源码如 Linux 的 fork() 实现来看fork() 的返回值是通过修改调用者的寄存器状态实现的当父进程调用 fork() 时内核会复制父进程的上下文到子进程并分别设置两个进程的“返回寄存器”父进程的返回寄存器被设置为子进程的 PID正数。子进程的返回寄存器被设置为 0表示无错误且是子进程。因此父进程和子进程在 fork() 后从同一条指令继续执行但由于寄存器中的返回值不同它们的后续逻辑会分道扬镳。