操作系统原理之Unix/Linux进程标识符pid管理探索

本文探讨了Unix/Linux操作系统中进程标识符pid的管理,包括标志位法、符号位法和位示图法,重点介绍了位示图法的高效性和内存利用率,并提供了用Java实现pid管理的源代码示例。
摘要由CSDN通过智能技术生成

操作系统作为整个计算机系统的资源管理者,担任着有序而高效管理计算机资源的艰巨任务。操作系统资源管理的基本对象是进程,为了方便系统的管理,每一个进程需要一个进程标识符pid,这和国家为每一个居民编一个居民身份证号的目的完全一样。

在Unix/Linux中,进程标识符pid是一个16位的整数,它被顺序编号,最小号为0,最大号为32767,闲置的pid可重新使用。详见Unix源代码中的struct poc{……short p_pid;……}《Unix结构分析:核心代码的结构和算法(修订版)》168页。那么,如何有序而高效地管理这32768个pid呢?

本文就此问题探索一下。

(1)标志位法

此方法为每一个pid设置一个使用标志,具体实现时将pid定义为一个二维数组short[][] pid,数组初始化为pid = new short[32768][2],数组的第一维按序存放0~32767个pid,数组的第二维为空闲标志,空闲置0,使用置1。分配时,从标志是0的pid中分配一个给进程,并将其空闲标志置1,回收时只需要将相应pid的空闲标志置0即可。此方法占用的内存空间是32768*2*2B=131072B。此法内存开销较大,标志位中的16位只使用了一位,资源浪费严重。

(2)符号位法

考虑到定义pid的short类型中pid只使用了除符号位以外的低15位,最高位,即符号位未用,因此可以加以利用。具体实现时将pid定义为一维数组short[] pid,数组初始化为pid = new short[32758],按序存放0~32767个pid,符号位是空闲标志,空闲时pid大于0,就表示pid本身,使用

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值