💬 hello! 各位铁子们大家好哇。 今日更新了Linux进程空间地址和进程调度队列的内容 🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝
当g_val的值修改后,父子进程各自的g_val地址都是一样的,但是为什么值却不同呢? 由此我们可知,这个地址肯定不是物理地址,而是虚拟地址。
地址空间的本质就是内核中的一个结构体对象。 每一个进程都有自己独立的地址空间,都有自己独立的页表。 页面里面存的是虚拟地址和对应的物理地址。
如上图源码。 地址空间的本质就是内核中的一个结构体对象。内部很多的属性都是表示start、end的范围。
cpu中有一个简单的工作单元叫MMU(内存管理单元),还有一些寄存器会将当前进程的页表的地址保存到cpu内。MMU会快速把指定的虚拟地址结合页表转换成物理地址。
上图是Linux2.6内核中进程队列的数据结构。
如果有多个CPU就要考虑进程个数的负载均衡问题
在系统当中查找一个最合适调度的进程的时间复杂度是一个常数,不随着进程增多而导致时间成本增 加,我们称之为进程调度O(1)算法!