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

青岛网站建设青岛新思维预约挂号php网站ftp急着后台密码忘记了

青岛网站建设青岛新思维,预约挂号php网站ftp急着后台密码忘记了,it外包合同范本,网站优化策划方案进程地址空间1. 虚拟地址2. 什么是进程地址空间3. 进程地址空间的映射。4. 地址空间存在的意义5. 写时拷贝 进程地址空间 1. 虚拟地址 来看这样一段代码。 #include stdio.h #include unistd.hint global_value 100;int main() {pid_t id fork();if(id stdio.h #include unistd.hint global_value 100;int main() {pid_t id fork();if(id 0){printf(fork error\n);return 1;}else if(id 0){int cnt 0;while(1){printf(我是子进程, pid: %d, ppid: %d | global_value: %d, global_value: %p\n, getpid(), getppid(), global_value, global_value);sleep(1);cnt;if(cnt 10){global_value 300;printf(子进程已经更改了全局的变量啦..........\n);}}}else{while(1){printf(我是父进程, pid: %d, ppid: %d | global_value: %d, global_value: %p\n, getpid(), getppid(), global_value, global_value);sleep(2);}}sleep(1); }运行结果 上面的这种现象是因为这里所打印出来的地址并非物理地址而是虚拟地址。所以这里就引出了进程地址空间。下面用个例子来描述进程地址空间。 其中所画的大饼是需要管理起来的好比老板昨天让员工好好干一个月后升经理。但是今天老板见员工却说一个月升总监。大饼画的多了自然就需要管理起来否则容易混乱。对于软件来说管理的本质就是先描述再组织。所以这里的一个个大饼其实可以理解为是一个个的结构体。 2. 什么是进程地址空间 进程地址空间的概念 上面讲过操作系统给进程画的大饼可以认为是进程地址空间具体来说就是一个结构体。那结构体里面有什么呢 首先先做好规定这里的背景是32位机器背景。 32位机器的数据可以有2^32个约42亿以字节为单位。所以表示的空间大小约为4GB的空间范围。地址确保唯一性所以有2^32个地址。 所以进程地址空间整体上应该是这样的如下图 对于上面的这个图你可以想象成一把尺子。尺子是有刻度所以就可以用刻度来划分区域。可以用一个结构体描述出上面的进程地址空间。如下结构体 struct mm_struct {unit_32t code_start;unit_32t code_end;unit_32t data_start;unit_32t data_end;unit_32t heap_start;unit_32t heap_end;//...... }所以可以认为有这么一个进程地址空间对应着这么一个结构体其中结构体的变量就是地址这些地址就如同尺子上的刻度划分好了区域。 其中堆栈空间是动态开辟的所以当你写代码定义变量或者new变量的时候其实就是在更改对应区域的start or end。 3. 进程地址空间的映射。 程序当加载到内存的时候确实是加载到了物理内存里面但是操作系统并不允许进程直接访问物理内存而是在进程PCB里面存放一个进程地址空间让进程地址空间通过页表和物理地址进行映射从而让进程可以访问到物理内存。如图所示 所以进程是无法直接访问到物理地址的是操作系统在管理进程的时候同时给进程画了个大饼让进程可以通过进程地址空间再通过页表的映射从而访问到物理地址。 4. 地址空间存在的意义 为了保护物理地址 设想一下如果一个进程可以随意访问物理地址然后这个进程将数据恶意写入到物理地址将会破坏物理地址。操作系统为了保证物理地址的安全就有了地址空间。通过地址空间的虚拟地址再通过页表映射访问到物理地址保证了物理地址的安全。 用压岁钱的例子来解释上述内容。你的压岁钱实际就是物理地址但是中间有父母(页表)的存在所以你确实是知道有那么多钱但是当你用的时候要通过父母的同意如果父母觉得你的要求合理那么就通过你的要求让你拿到钱去买东西。如果要求不合理那么父母将会拒绝你的要求拒绝给你拿钱。 为了保证进程间的独立性 具体可看下面写时拷贝的内容。 5. 写时拷贝 回到我们的第一个代码打印结果的问题可以看到两个值的地址明明一样但是值却不一样。这是为什么呢 是由于进程具有独立性虽然两个进程共享数据但是每个进程都是有独立的进程地址空间和独立的页表。 因为进程有独立性所以先有一个进程改变了global_value的值也不会影响另一个进程的值。这是因为在有一个进程改变值的时候OS会先进行数据拷贝在物理地址上开辟空间拷贝进去然后更改另一个进程页表的映射。 所以这也就是打印结果的时候为什么地址明明一样但是两个进程的数值却不相同是因为操作系统帮进程做了写时拷贝的操作写时拷贝对虚拟地址无影响。所以这也证明了打印出来的并非物理地址而是虚拟地址。
http://www.pierceye.com/news/78638/

相关文章:

  • 企业网站营销推广方案做网站需要先搞目录么
  • 网站 侧边栏公司集团网站建设
  • 网站打开不了怎样做妇女儿童心理咨询网站建设
  • 天津网站建设服务公司曲阜市政对过做网站的是那家
  • 网站代运营多少钱孝感网站建设 付款方式 银行
  • 个人做网站有什么用番禺区怎么做网站建设
  • 公司网站建设有什么好处wordpress在线安装地址
  • 免费制作封面的网站建湖做网站找哪家好
  • 长沙装修网站排名链接
  • 学校网站要求discuz网站搬家教程
  • 怎样做个网站网站pv怎么统计
  • 中文版网站建设费用百度学术论文查重官网
  • 杭州酒店网站建设无锡网站开发培训
  • 中国十大网站建设公司苏州网站建设公司哪家好
  • 公众号免费模板网站南昌自动seo
  • 涉县网站开发建设三轮摩托车官方网站
  • 东莞销售网站设计网络营销课程自学
  • 河南建设网站公司哪家好找南昌网站开发公司电话
  • 教育门户网站建设新媒体运营基础知识
  • 如何宣传商务网站网站建设方案书doc模板
  • 电子商务的网站开发的工作内容泉州企业网站维护定制
  • 大连哪个公司做网站开发的网站用途及栏目说明
  • 广州建网站加备案云客网平台
  • 长沙专业网站建设怎么做博客 wordpress主题
  • i网站建设wordpress写api接口
  • 翡翠网站建设ppt网页设计与制作项目教程
  • 查派网站建设wordpress tag函数
  • 企业网站主页设计有做模仿易企秀网站吗
  • 网站建设与管理简答题简述seo的应用范围
  • 零基础制作公司网站教程网站怎么做qq微信登陆