2026/2/19 5:28:16
网站建设
项目流程
怎么给自己制作一个网站,开平网页设计,dedecms 食品网站模板,网站建设培训个人今天给大家分享的是一个计算机网络实验报告#xff1a;进程的创建#xff01;
相信学计算机的小伙伴肯定不陌生#xff0c;这个实验包括了实验目的、实验内容、实验指导、实验代码及截图四个部分。
详细包括了该实验课程所需要的各个知识点。详情请看图片目录。只分享文档…今天给大家分享的是一个计算机网络实验报告进程的创建相信学计算机的小伙伴肯定不陌生这个实验包括了实验目的、实验内容、实验指导、实验代码及截图四个部分。详细包括了该实验课程所需要的各个知识点。详情请看图片目录。只分享文档需要的点头像进主页看个人简介需要的点头像进主页看个人简介以下请忽略以下请忽略以下请忽略以下请忽略下面介绍操作系统中“进程的创建”的具体过程分步骤说明并解释关键数据结构和相关系统调用。为便于理解示例以类 UnixLinux的实现为主。一、概念与相关数据结构简要进程Process正在运行的程序的一个实例。操作系统用 PCB进程控制块或 task_structLinux来表示包含 PID、状态、寄存器、指针、文件描述符等。线程与进程线程是调度的基本单位进程通常至少包含一个线程主线程。地址空间进程的虚拟内存布局代码、数据、堆、栈、映射区。用户态/内核态上下文切换时需保存/恢复的寄存器、栈指针等。资源表打开文件、信号处理、工作目录、权限等。二、创建进程的触发方式用户请求fork()/vfork()/clone()、execve()替换当前进程映像。系统启动时init/systemd 等由内核启动第一个用户进程。其他机制posix_spawn(), 使用容器或内核线程创建等。三、主要系统调用与语义以 Unix/Linux 为例fork(): 复制当前进程父进程返回两次父返回子 PID子返回 0。父子共享代码段数据段按写时复制COW。vfork(): 为提高效率子与父共享地址空间直到 exec 或 exit父进程暂停。clone(flags, ...): 更细粒度控制指定共享或独立资源如 CLONE_FS、CLONE_FILES、CLONE_VM 等用于创建线程或容器。execve(path, argv, envp): 用新程序替换当前进程映像但保持 PID、某些文件描述符若未设 FD_CLOEXEC、信号处理等。posix_spawn(): 高层封装通常底层实现仍用 forkexec但更高效的实现可避免完整复制。四、进程创建的步骤典型 fork() 路径用户进程调用 fork()触发系统调用进入内核态。内核检查资源限制与权限如 RLIMIT_NPROC、UID 等。分配新的 PID从 PID 池获得唯一 PID。分配 PCBtask_struct并初始化复制父进程的 PCB 内容大部分字段复制某些需要重置如统计字段、信号处理计数等。复制或共享资源虚拟内存建立新的 mm_struct。采用写时复制COW机制页面表复制但物理页不复制写时触发页复制。文件描述符表引用计数增加共享同一文件表除非设置 FD_CLOEXEC。信号处理复制信号处理器设置。环境与命令行参数内存中指针和数据按需复制或共享。创建内核栈并设置用户上下文为子进程准备内核态栈、设置返回值子在内核返回 0。将子进程放入就绪队列设置进程状态为可运行TASK_RUNNING由调度器选中运行。返回用户态父、子分别在用户态继续执行各自返回点。两者的返回值不同父子 PID子0。后续可选exec子进程通常调用 execve() 来加载新程序。exec 的主要步骤验证并加载可执行文件格式ELF。释放原有地址空间mm_struct建立新的地址空间和用户栈。设置 argv/envp、堆栈对齐、动态链接器加载若是动态可执行文件。更新进程名、信号处理、CPU 寄存器使控制转到新程序入口点用户态。五、写时复制COW细节fork 时复制页表标记所有写able 页面为只读并共享写时产生页面错误page fault。页面错误处理内核分配新的物理页面复制内容修改页表恢复写权限。减少内存开销和复制时间适合 forkexec 模式。六、进程清理退出与回收进程调用 exit()释放用户资源关闭文件释放内存改变状态为 ZOMBIE通知父进程SIGCHLD。父进程调用 wait()/waitpid() 获取子退出状态内核回收子 PCB 与 PID。若父先退出子被 init/systemd 收养reparenting由其 wait 收集。七、内核线程与用户进程的差异内核线程没有用户态地址空间mm_struct 为 NULL 或共享通常通过 kernel_thread 或 clone 创建CLONE_VM vs CLONE_THREAD。调用路径略有不同不需 exec。八、实现细节与优化PID 命名空间、用户命名空间、cgroups、capabilities 影响创建与隔离。posix_spawn、vfork 优化避免完整复制。线程库pthread通常通过 clone 创建线程线程共享大部分资源但有独立栈。九、示例伪代码流程fork():syscall_entry(fork)check_limits()child alloc_task_struct()copy_mm_with_cow(parent, child)dup_file_table(parent, child)setup_kernel_stack(child)enqueue_task(child)return_to_user(parent, child)十、常见问题与注意fork 在大内存进程上开销大使用 vfork/posix_spawn 优化。COW 并非在所有情形都有效mmap MAP_SHARED 区域、匿名非 COW 页面等。race condition父子对共享资源并行访问需同步。