版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/BlueCloudMatrix/article/details/30799225

在Linux中进程用结构体task_struct来管理一个进程所需的全部信息(所以一般较大,在32位机上。大约有1.7KB)。为了提高效率,Linux使用了一些卓越的技术。

  • 通过slab分配task_struct结构
Linux创建进程迅速。正是由于slab分配器预先分配和反复使用task_struct。这样就避免了动态分配和释放所带来的资源消耗(毕竟一个task_struct较大。并且内核中进程的创建和消除非常频繁)。
  • 将task_struct放置在内核栈的尾端
这样做是为了让那些像x86那样寄存器较少的硬件体系结构仅仅需通过栈指针就能计算出它的位置,而避免使用额外的寄存器专门记录。由于linux使用slab动态给一个进程分配task_struct,所以linux在栈底(向下增长的栈。如图,高地址在上。且栈从高地址向低地址延伸)用一个数据结构指向slab中为之分配的task_struct,而这个数据结构是结构体thread_info,它的一个成员是指向task_struct的指针。
  • 写时拷贝
Linux创建一个进程要依次调用fork()和exec()。fork()创建子进程时,父进程和子进程共享同一份资源(以仅仅读的方式共享),而仅仅有当须要写入时,数据才会被复制,从而使各个进程拥有各自的拷贝,这样的将拷贝推迟到实际发生写入时的技术称为写时拷贝。但对于那些fork()后立即调用exec()的就不用复制了(与父进程共享一份资源就可以),由于这时不会发生写入。而大多数情况下。进程创建后会立即执行一个可执行的文件,所以这样的写时拷贝能够避免拷贝大量根本就不会被使用的数据。这也是Linux能高速执行进程的原因。
  • 强大的进程调度算法
多任务给Linux的效率提出了严峻的挑战。既要有并发的效果,又要保证公平。当代多数现代操作系统是在时间片和抢占上下功夫,从全局的角度让每一个进程获得各自理想的时间片。但Linux独树一帜。它并没有採取时间片达到公平调度。
(1)O(1) 调度:无论输入有多大,调度程序都能够在恒定时间内完毕工作,这对于大server的工作负载非常理想。但在有非常多交互程序要执行的桌面环境表现不佳。

为此,2.6内核的开发者引入了著名的”反转楼梯最后期限调度算法“,也就是后来的全然公平调度算法CFS。

(2)CFS(全然公平调度):同意每一个进程执行一段时间、循环轮转、选择执行最少的进程作为下一个执行进程,而不再採用分配给每一个进程时间片的做法。CFS在全部可执行进程总数基础上计算出一个进程应该执行多久,而不是依靠优先级(nice值)来计算时间片,nice值在CFS中被作为进程获得处理器执行比的权重——更低的nice值(优先级越高)的进程获得更高的处理器使用权重。简而言之中的一个句话,以权重来取代实际的时间片。而这个调度周期则由CFS来定。为了较好的交互性。能够设置越小的调度周期,但同一时候要承受更高的切换代价和更差的系统总吞吐能力。但当进程趋于无穷时,高昂的切换开销肯定不可接受,为此CFS引入最小粒度1ms——即每一个进程最少能获得1ms的执行时间,确保切换开销被限制在一定范围内。

但这样就产生了不公平。由于会有一些进程在这个周期内得不到时间片,所以CFS并不是是一个完美的公平调度(实际上。我个人觉得不存在绝对公平的调度),只是通常情况下系统仅仅会有几百个可执行进程,所以CFS还是相当公平的:)

Linux内核设计基础(九)之进程管理和调度的更多相关文章

  1. [Wolfgang Mauerer] 深入linux 内核架构 第二章 进程管理与调度【未完】

     作为Linux开发爱好者,从事linux 开发有三年多时间.做过bsp移植,熟悉u-boot代码执行流程:看过几遍<linux 设备驱动程序开发>,分析过kernel启动流程,写过驱动, ...

  2. Linux内核入门到放弃-进程管理和调度-《深入Linux内核架构》笔记

    进程优先级 硬实时进程 软实时进程 普通进程 O(1)调度.完全公平调度器 抢占式多任务处理(preemptive multitasking):各个进程都分配到一定的时间段可以执行.时间段到期后,内核 ...

  3. Linux内核学习笔记-2.进程管理

    原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  4. Linux高级调试与优化——进程管理和调度

    进程管理 进程和文件是Linux操作系统的两个最基本的抽象. 进程是处于执行期的程序,进程不仅仅局限于一段可执行程序代码,通常还包含其他资源,如打开的文件.挂起的信号.内核内部数据.处理器状态.进程地 ...

  5. linux内核设计与实现--进程管理

    进程就是出于执行期的程序.进程的另一个名字是任务. 执行线程,简称线程(thread),是在进程中活动的对象.每个线程都有一个独立的程序计数器.进程栈和一组进程寄存器.内核调度的对象是线程,而不是进程 ...

  6. 深入Linux内核架构——进程管理和调度(上)

    如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停 ...

  7. Linux进程管理与调度-之-目录导航【转】

    转自:http://blog.csdn.net/gatieme/article/details/51456569 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:// ...

  8. 第六周——分析Linux内核创建一个新进程的过程

    "万子恵 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 &q ...

  9. Linux内核分析-创建新进程的过程

    分析Linux内核创建一个新进程的过程 task_struct结构体分析 struct task_struct{ volatile long state; //进程的状态 unsigned long ...

  10. Linux内核分析— —创建新进程的过程

    分析Linux内核创建一个新进程的过程 实验过程 要求:使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone ,验证对Linux系统创建一个新进程的理解,推荐在实验楼Linux虚拟机环 ...

随机推荐

  1. 系统封装 EasyBoot如何将WIN7安装版提取到光盘

    1 将WIN7光盘中的文件提取到Easyboot根目录,注意不要autorun.inf和setup.exe这两个文件.我们这里的Easyboot已经有了一些其他东西(XP的安装版文件,PE的文件等等, ...

  2. XP中如何配置和共享打印机

    Win XP中如何配置和共享打印机                一.配置  打印机 在"控制面板"打开"打印机和传真",在左边的选项或单击右键选择" ...

  3. iOS 设置导航栏 返回按钮文字隐藏

    //隐藏返回按钮文字 [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) f ...

  4. shell 重定向输入

    #!/bin/bash NC_START="nc 192.168.76.227 9999" LOOP= ;i<$LOOP;i++)) do $NC_START << ...

  5. Sql Server 表分区(转)

    什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在 ...

  6. 基于Saltstatck实现页面实时显示tomcat启动日志(17)

    一.相关文件 master端: /srv/salt/tomcat/start.sls               #tomcat启动服务state.sls,须要自己创建 /srv/salt/tomca ...

  7. 杂(三)-The type java.lang.Object cannot be resolved It is indirectly referenced ...

    The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files ...

  8. 浅谈struts2标签中的2个非经常常使用的标签的使用方法(radio和select)

    1.如图所看到的我们须要在前台的页面通过radio和select将相应的数据库中的数据显示到选项其中,这也是我们做项目中常常须要做的,动态的显示,而不是静态的显示. 首先我们须要在页面中导入strut ...

  9. eclipse上的git命令使用浅析,搭建Maven项目

    eclipse上的git命令使用浅析 2016-03-31 14:44   关于eclipse上git的安装和建立代码仓库的文章比较多,但作为一个初识git的人更希望了解每个命令的作用. 当项目连接到 ...

  10. Asp.net MVC 插件式应用框架

    Asp.net MVC 插件式应用框架 2013年05月13日 10:16供稿中心: 互联网运营部 摘要:这几年来做了很多个网站系统,一直坚持使用asp.net mvc建站,每次都从头开始做Layou ...