当前位置: 首页 > news >正文

fork 和 写时拷贝

fork

1.fork是一个系统调用,父进程调用fork,触发软中断,然后陷入内核,将cpu寄存器保存在内核栈中,去中断向量表中找软中断处理函数,然后软中断处理函数根据寄存器里的系统调用号,去系统调用表里执行对应系统调用。创建子进程pcb,拷贝父进程内核栈,将父进程内核栈里的eax,也就是返回值寄存器里的值改成子进程pid,将子进程内核栈里eax的值改成0,然后将pcb加入运行队列

2.父进程fork系统调用执行完后从内核栈中恢复寄存器,然后返回用户态

3.创建子进程pcb时,会浅拷贝父进程的mm_struct和files_struct,共享父进程的数据和代码。将pcb里pc指针改成fork后的指令

4.子进程调度后开始从内核栈恢复寄存器,然后返回用户态

写时拷贝

fork创建子进程时pcb的mm_struct采用浅拷贝的模式,也就是说虚拟地址空间结构(vm_area_struct)和页表映射物理页(页表)父子进程是一样的,而且拷贝后会将父子进程的页表权限全部设为只读,当其中一个进程往某个地址写入时,mmu硬件找虚拟地址对应页表项,查看权限时是只读,mmu硬件会缺页异常,硬件电路已经编好了出现缺页异常怎么做了,就是cpu会陷入内核,执行14号中断函数


 

http://www.xdnf.cn/news/571879.html

相关文章:

  • NV009NV010美光闪存颗粒NV011NV012
  • 【Elasticsearch】字段别名
  • el-radio-group 与 el-dropdown 一起使用时的注意事项
  • Pytorch基础操作
  • cookie跨域共享踩的坑
  • sqli-labs第十八关——POST-UA注入
  • 使用MATLAB输出1000以内所有完美数
  • MoManipVLA-北京邮电-2025.3.17-移动操控-未完全开源
  • UML 时序图 使用案例
  • PostGIS实现栅格数据导出PNG应用实践【ST_AsPNG 】
  • 乘“4”而上,进取不止|Aloudata 的变与不变
  • 【专四 | 2022年真题】LANGUAGE USAGE逐题总结
  • dedecms织梦全局变量调用方法总结
  • 【OCCT+ImGUI系列】009-Geom2d-Geom2d_AxisPlacement
  • 使用Jenkins部署nodejs前端项目
  • 开源Vue表单设计器FcDesigner中组件联动的配置教程
  • 中国地图上标注颜色的方法
  • 食品饮料行业AI转型趋势分析与智能化解决方案探索​
  • 实战5:个性化数字艺术生成与销售
  • 目标检测 Lite-DETR(2023)详细解读
  • 信息系统项目管理师考前练习3
  • 怎样用 esProc 生成定长时间窗口列表并统计
  • 【Java高阶面经:微服务篇】7. 1秒响应保障:超时控制如何成为高并发系统的“救火队长”?
  • esp32cmini SK6812 2个方式
  • redis--redisJava客户端:Jedis详解
  • WebFuture:在银河麒麟系统中如何无中间件为WebFuture绑定域名、SSL证书
  • 【Linux】借助gcc源码修改,搜索头文件当前进展
  • springboot链接nacos测试
  • 分类预测 | Matlab实现PNN概率神经网络多特征分类预测
  • 数学实验(Matlab绘图基础)