linux五大模块概述-----只描述了进程(linux内存管理,进程调度模块,进程间通信,文件系统模块,网络模块)

12 篇文章 9 订阅

首先描述进程调度策略:
policy

实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调度。
SHCED_RR和SCHED_FIFO的不同:
当采用SHCED_RR策略的进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平。
SCHED_FIFO一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃。

如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程主动放弃后才可以运行这个优先级相同的任务。而RR可以让每个任务都执行一段时间。
知道了调度策略,那我们就不得不认识一下调度策略的实际执行者,调度器(scheduler)。
linux调度器
linux中也引入了模块化的思路,方便用户进行扩展,具体描述可参照:

从2.6.23内核开始,调度器采用了模块化设计的思想,从而把进程调度的软件分成了两个层次,一个是core scheduler layer,另外一个是specific scheduler layer:

schedule层次结构
从功能层面上看,进程调度仍然分成两个部分,第一个部分是通过负载均衡模块将各个runnable task根据负载情况平均分配到各个CPU runqueue上去。第二部分的功能是在各个CPU的Main scheduler和Tick scheduler的驱动下进行单个CPU上的调度。调度器处理的task各不相同,有RT task,有normal task,有Deal line task,但是无论哪一种task,它们都有共同的逻辑,这部分被抽象成Core scheduler layer,同时各种特定类型的调度器定义自己的sched_class,并以链表的形式加入到系统中。这样的模块化设计可以方便用户根据自己的场景定义specific scheduler,而不需要改动Core scheduler layer的逻辑。
详细请参考:http://www.wowotech.net/process_management/scheduler-history.html

我们了解了进程的调度策略,也就了解了单个进程的是如何占用CPU等资源的。接下来我们接着了解,那么多进程,他们之间的联系,进程间的相互关系—进程间通信(interprocess communication)。那么进程间通信是如何做到的呢?
进程线程同步互斥

另外需要了解futex。
Futex是一种用户态和内核态混合的同步机制。首先,同步的进程间通过mmap共享一段内存,futex变量就位于这段共享的内存中且操作是原子的,当进程尝试进入互斥区或者退出互斥区的时候,先去查看共享内存中的futex变量,如果没有竞争发生,则只修改futex,而不用再执行系统调用了。当通过访问futex变量告诉进程有竞争发生,则还是得执行系统调用去完成相应的处理(wait
或者 wake
up)。简单的说,futex就是通过在用户态的检查,(motivation)如果了解到没有竞争就不用陷入内核了,大大提高了low-contention时候的效率。
为什么要有futex, 经研究发现,很多同步是无竞争的,即某个进程进入互斥区,到再从某个互斥区出来这段时间,常常是没有进程也要进这个互斥区或者请求同一同步变量的。但是在这种情况下,这个进程也要陷入内核去看看有没有人和它竞争,退出的时侯还要陷入内核去看看有没有进程等待在同一同步变量上。这些不必要的系统调用(或者说内核陷入)造成了大量的性能开销。为了解决这个问题,Futex就应运而生。

参考链接:https://blog.csdn.net/d_guco/article/details/86429885

以上问了解了进程调度的策略和进程调度器,并且在进程间通信的时候,我们也描述了进程在linux中的实际表示,进程控制块(PCB,在linux中就是struct task_struct)。
那么进程调度器是不是就是简单的按照上面的描述进程操作呢?当然不是,因为linux为了让调度器兼容更多的调度更多的实体,对调度的描述,封装了了调度实体 struct sched_entry以及进行了分类管理struct sched_class。下面就简单介绍下调度类和调度实体。并且我们将调度策略与调度类联系起来。

知道了进程调度策略,进程间的通信机制,那么进程到底是一种怎样的存在呢?进程的运行内存空间是如何分配的呢?
下面这张图我们简单了解下linux中的进程:
进程管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值