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

官网的网站开发费用市场调研报告最佳范文

官网的网站开发费用,市场调研报告最佳范文,长沙市建网站,出色的网站设计进程控制 写时拷贝 本质是一种减少深拷贝的方法 Linux中有很多拷贝的场景都用得上写时拷贝,下面以创建子进程时的写时拷贝为例: 子进程被创建的时候: 会继承父进程的mm_struct和页表 所以子进程刚刚继承时,父子进程的代码和数据…

进程控制

写时拷贝

本质是一种减少深拷贝的方法
Linux中有很多拷贝的场景都用得上写时拷贝,下面以创建子进程时的写时拷贝为例:

子进程被创建的时候:
会继承父进程的mm_struct和页表
所以子进程刚刚继承时,父子进程的代码和数据都是共享的

系统是如何知道子进程/父进程修改数据的时候要发生写时拷贝的呢?
①父进程在使用fork创建子进程之前,就会把页表中的数据区的权限改成r(只读)
这样子进程继承到的页表中的数据区就也是只读的

②当子进程/父进程尝试修改数据区中的数据时,就是修改只读数据项,页表就会报错,就会触发缺页中断

③系统发现缺页中断之后,就会检测
1,如果发现用户要修改的这个区域一定是只读的,就把进程杀掉
2,如果这个区域一定是读写的,只是页表中的权限设置成只读的了,此时系统就会进行写时拷贝
在这里插入图片描述

所以:不止创建子进程写时拷贝的时候是这种原理
只要可能发生写时拷贝的数据被页表管理着,就都可以通过这个原理实现写时拷贝



错误码

用来判断进程任务执行是否成功,如果失败了错误是什么

main函数的返回值其实是错误码,是返回给父进程/操作系统的
在这里插入图片描述
进程错误码的的取值范围是[0-255],即一个字节
因为使用wait/waitpid等待回收错误码的时候,只给它留了8个比特位



进程中止

进程中止的方法:

①在main函数中return

②在任何地方使用exit函数[exit函数的参数就是错误码,它的头文件是stdio.h]

③_exit使用方法和exit一模一样


exit与_exit的区别:

本质区别就是exit是用户层的库函数,_exit是内核层的系统调用
所以exit函数中,调用_exit中止进程之前,可以进行一些用户层的收尾工作
比如:
exit中止进程时,会刷新用户级缓冲区和内核级缓冲区
也就是如果输出缓冲区中有数据,使用exit中止它会帮我们打印出来

_exit中止进程时,不会刷新用户级缓冲区,只会刷新内核级缓冲区

②exit是库里面的函数,是操作系统之外的操作,使用操作系统的资源时,只能对操作系统调用接口进行封装
exit其实就封装了_exit

_exit是系统调用接口,是操作系统内部的操作
在这里插入图片描述

所以:
其实我们之前再使用c/c++等高级语言时,所说的缓冲区都是语言级(用户级)的缓冲区

这个缓冲区里面的内容是存储在c/c++的标准库中的,即存储在共享区的

不是存储在操作系统中的内核级缓冲区
不然_exit中止进程时,就也能把缓冲区中信息输出/输入
但是因为语言级缓冲区在操作系统的上层,所以_exit中止进程后,内核缓冲区就关闭了,语言缓冲区中的数据没办法进入操作系统了
操作系统没看见语言缓冲区中传来信息,就以为里面没有



进程等待

wait(不常用)

头文件:sys/types.hsys/wait.h
返回值:pid_t[小于0说明回收失败,大于0时回收成功,返回的是回收的子进程的pid]
参数:

作用:等待并回收任意一个子进程
在这里插入图片描述


waitpid[常用]

头文件:sys/types.hsys/wait.h
返回值:pid_t n
①n小于0,说明回收失败/函数调用失败
②n大于0,回收成功,返回的是成功回收的子进程的pid
③n等于0(只有非阻塞等待才会出现),则表示函数调用成功,但是子进程还没执行完,还没退出

参数1.pid_t pid

如果是子进程的pid,就表示指定等待这个子进程
如果是-1,就表示等待任意一个进程


参数2,int* status

如果传nullptr则表示不需要获取退出信息==

即:用户自己定义一个int类型的变量
再把它的地址传进waitpid里面,操作系统就会把进程的PCB中存储的退出信息给status

status其实并不是一个整数,而是一个类似位图的东西
因为进程结束,分两种情况:
①正常退出,也就是通过main函数的return或者exit退出,这样就可以返回退出码
所以只有正常退出才能返回退出码(错误码)

②异常退出,也就是进程运行的途中,空指针访问/野指针等直接导致进程崩溃了
这样进程根本就运行不到返回退出码的地方
但是异常退出,也会有自己的退出信号码
[通过kill -l命令,可以看到Linux中所有的退出信号以及其对应的退出信号码]

进程之所以会异常退出,是因为进程运行时出现了较严重的错误(野指针,除0等
操作系统识别到以后,在代码还没跑完的时候,就直接使用信号中止了进程


所以
status中不仅仅存储了退出码,还存储了其他的退出信息

具体的:
status的:
①最低的7个比特位存储退出信号值
②第8个比特位存储core dump标志
③第9~16个比特位存储退出码
在这里插入图片描述

宏:
WIFEXITED(status):
若为正常终止子进程返回的状态,则为真(查看进程是否是正常退出)

WEXITSTATUS(status):
若WIFEXITED非零,提取子进程退出码。(查看进程的退出码)


参数3.标识是阻塞等待,还是非阻塞等待

如果该参数是0,表示阻塞式等待
如果为WNOHANG,表示非阻塞式等待



使用子进程完成任务的好处

①非阻塞等待或者创建多个子进程时,父子进程可以同时运行,父进程不用等子进程,提高并发度

②进程具有独立性,所以如果子进程出了问题,不影响父进程

③数据快照,子进程被fork出来,继承了父进程的PCB,页表等东西之后
就获取到了fork时父进程的数据
也就是对子进程从父进程那里获取到的数据进行了快照
快照之后,其他任何进程对这一块数据进行修改,这个子进程都“看不见”
因为写时拷贝,或者说进程具有独立性。所以数据快照之后,其他进程可以对这个数据任意修改

http://www.dtcms.com/wzjs/442093.html

相关文章:

  • 网站做排名有用吗优化疫情防控措施
  • 电销管理系统哪个好用成都百度推广和seo优化
  • 网站建设注意深圳网站建设公司
  • 京东客网站怎么做的近两年成功的网络营销案例及分析
  • visual studio 做网站搜索引擎广告案例
  • 网站备案平台查询系统外贸订单一般在哪个平台接
  • 海门网站建设网络营销该如何发展
  • 宝塔默认安装wordpressseo实战密码第三版pdf
  • 浦东网站建设公司网络营销组合策略
  • 三屏合一网站建设关键词怎么写
  • 我有域名怎么做网站深圳网络推广培训机构
  • 写网站建设需求淘宝客推广一天80单
  • golang 做网站怎么查看域名是一级还是二级域名
  • 学院网站建设的目的及定位seo站
  • 公司网站数据分析百度首页排名优化平台
  • 深圳网站关键词优化seo优化网站推广
  • 专门做地图的网站谷歌seo网站推广怎么做优化
  • 网站开发英文合同长沙网站快速排名提升
  • 网站页面设计报价表免费制作个人网站
  • 带做骑传奇私服网站seo免费软件
  • 自己做动漫 哪个网站赚钱在哪买网站链接
  • 校园网站建设网络科技公司
  • 爱站网权重查询江苏搜索引擎优化
  • 设计对网站的重要性网络测试
  • 企业网站优化做法百度云登陆首页
  • 怎么做公司的宣传网站网络推广是做什么的
  • 南宁企业自助建站系统seo推广人员
  • 怎么用别的网站做代理打开谷歌怎样注册自己网站的域名
  • 东莞网站设计制作网站怎样做好销售和客户交流
  • 前端做商城网站需要多久营销比较好的知名公司有哪些