进程地址空间

目录

一、进程地址空间

我们来看一下这段代码的运行结果:

运行结果:

我们发现,父子进程,输出地址是一致的,但是变量内容不一样!能得出如下结论:

1、变量内容不一样,所以父子进程输出的变量绝对不是同一个变量。

2、但地址值是一样的,说明,该地址绝对不是物理地址!

3、在Linux地址下,这种地址叫做 虚拟地址。

4、我们在用C/C++语言所看到的地址,全部都是虚拟地址!物理地址,用户一概看不到,由OS统一管理,OS必须负责将 虚拟地址 转化成 物理地址 。

所以我们以前所说的程序地址空间是不准确的,应该叫做进程地址空间,关于进程地址空间的详细内容,请看下图:

二、Linux2.6内核进程调度队列

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

三、一个CPU拥有一个runqueue

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

3.1 优先级

普通优先级:100~139

实时优先级:0~99(不关心)

3.2 活动队列

(1)、时间片还没有结束的所有进程都按照优先级放在该队列。

(2)、nr_active: 总共有多少个运行状态的进程。

(3)、queue140: 一个元素就是一个进程队列,相同优先级的进程按照FIFO规则进行排队调度,所以,数组下标就是优先级!

从该结构中,选择一个最合适的进程,过程是怎么的呢?

  1. 从0下表开始遍历queue140
  2. 找到第一个非空队列,该队列必定为优先级最高的队列
  3. 拿到选中队列的第一个进程,开始运行,调度完成!
  4. 遍历queue140时间复杂度是常数!但还是太低效了!

(4)、bitmap5:一共140个优先级,一共140个进程队列,为了提高查找非空队列的效率,就可以用5*32个比特位表示队列是否为空,这样,便可以大大提高查找效率!

3.3 过期队列

1、过期队列和活动队列结构一模一样。

2、过期队列上放置的进程,都是时间片耗尽的进程。

3、当活动队列上的进程都被处理完毕之后,对过期队列的进程进行时间片重新计算。

3.4 active指针和expired指针

1、active指针永远指向活动队列。

2、expired指针永远指向过期队列。

3、可是活动队列上的进程会越来越少,过期队列上的进程会越来越多,因为进程时间片到期时一直都存在的。

4、没关系的,因为在合适的时候,只要能够交换active指针和expired指针的内容,就相当于有具有了一批新的活动进程!

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

以上就是今天想要跟大家分享的关于进程地址空间的内容啦,你学会了吗?如果感觉到有所帮助,那么就点点赞点点关注呗!后期还会持续更新Linux相关的知识哦,我们下期见!!

相关推荐
一拳一个呆瓜30 分钟前
【STL】iostream 编程:缓冲区的作用
c++·stl
阿成学长_Cain32 分钟前
Linux talk 命令详解:经典终端实时聊天工具,无需图形界面即可对话
linux·运维·前端
一拳一个娘娘腔1 小时前
【后渗透-Linux篇】Linux 提权与逃逸:从 www-data到 root的蜕变
linux·运维·服务器
jieyucx1 小时前
零基础通关:Shell 编程核心语法全景详解
linux·运维·编程·shell
杨运交1 小时前
[045][Crypto模块]设计一个可扩展的加解密框架:策略模式与工厂模式实战
linux·运维·策略模式
凯瑟琳.奥古斯特1 小时前
力扣1012数位DP解法详解
开发语言·c++·算法·leetcode·职场和发展
shx_wei1 小时前
从函数调用到进程替换:使用 execl、CMake 与 PowerShell 构建一个多可执行程序
linux·c语言·windows·c
Dlrb12111 小时前
信息查询Web服务器-->电子商城信息查询项目
linux·服务器·数据库·html·嵌入式·epoll·数据查询
纳兰青华2 小时前
在 PVE 上通过 LXC 部署 Ubuntu 24.04:为 OpenClaw 打造轻量高效的 AI 环境
linux·ai编程
chh5632 小时前
C++--string
java·开发语言·网络·c++·学习