【Linux】进程地址空间和进程调度队列

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343
🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12625432.html

9efbcbc3d25747719da38c01b3fa9b4f.gif

目录

问题现象 

 进程地址空间

进一步理解 

地址空间

Linux2.6内核进程调度队列 

一个CPU拥有一个runqueue

优先级 

 活动队列

过期队列 

active指针和expired指针 

总结


前言

    💬 hello! 各位铁子们大家好哇。

             今日更新了Linux进程空间地址和进程调度队列的内容
    🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝

问题现象 

当g_val的值修改后,父子进程各自的g_val地址都是一样的,但是为什么值却不同呢? 由此我们可知,这个地址肯定不是物理地址,而是虚拟地址。

 进程地址空间

地址空间的本质就是内核中的一个结构体对象。

每一个进程都有自己独立的地址空间,都有自己独立的页表。 

页面里面存的是虚拟地址和对应的物理地址。

  • 上图中,左边是父进程,右边是子进程。
  • 我们在用C/C++语言所看到的地址,全部都是虚拟地址!物理地址,用户一概看不到,由OS统一管理
  • 页面一边存的是虚拟地址,另一边存的就是对应的物理地址。
  • 子进程会继承父进程的数据,所以最开始指向的虚拟、物理地址也跟父进程一样。
  • 由于g_val的值改了,由因为进程具有独立性,所以OS就会在物理空间重新开一个空间,拷贝旧的数据到该地址,再让子进程的g_val指向该物理地址,但是虚拟地址不变。因此就出现文章开头的情况。
  • 如果父子进程都不写,他们的变量默认是被父子共享的,代码是共享的,物理空间不会分离。 这种拷贝也叫写时拷贝,即按需申请,可有效节省空间。
  • OS必须负责将 虚拟地址 转化成 物理地址

进一步理解 

地址空间

如上图源码。 地址空间的本质就是内核中的一个结构体对象。内部很多的属性都是表示start、end的范围。

 

cpu中有一个简单的工作单元叫MMU(内存管理单元),还有一些寄存器会将当前进程的页表的地址保存到cpu内。MMU会快速把指定的虚拟地址结合页表转换成物理地址。 

Linux2.6内核进程调度队列 

上图是Linux2.6内核中进程队列的数据结构。

一个CPU拥有一个runqueue

如果有多个CPU就要考虑进程个数的负载均衡问题 

优先级 

  • 普通优先级:100~139(nice值的取值范围,可与之对应)
  • 实时优先级:0~99(不关心) 

 活动队列

  • 时间片还没有结束的所有进程都按照优先级放在该队列
  • nr_active: 总共有多少个运行状态的进程
  • queue[140]: 一个元素就是一个进程队列,相同优先级的进程按照FIFO规则进行排队调度,所以,数组下标就是优先级! 
  • bitmap[5]:一共140个优先级,一共140个进程队列,为了提高查找非空队列的效率,就可以用5*32个 比特位表示队列是否为空,这样,便可以大大提高查找效率!

过期队列 

  • 过期队列和活动队列结构一模一样
  • 过期队列上放置的进程,都是时间片耗尽的进程
  • 当活动队列上的进程都被处理完毕之后,对过期队列的进程进行时间片重新计算 

active指针和expired指针 

  • active指针永远指向活动队列
  • expired指针永远指向过期队列
  • 可是活动队列上的进程会越来越少,过期队列上的进程会越来越多,因为进程时间片到期时一直都存在的。
  • 在合适的时候,会交换active指针和expired指针的内容,就有了一批新的活动进程。

总结

在系统当中查找一个最合适调度的进程的时间复杂度是一个常数,不随着进程增多而导致时间成本增 加,我们称之为进程调度O(1)算法! 

评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦jh_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值