• Linux操作系统原理笔记


    在Linux操作系统内核内部,进程是通过一个链表,而且是一个双向链表来管理的。

    进程描述符:每一个进程都有其描述符,每一个描述符彼此之间都有关联性的。

     

    双向链表:

     

    一个进程内部可能包含多个线程。

    上下文切换(Context swtch)

    假如说进程A从当前CPU上被拿走,切换成进程B,进程A有自己的描述符(task_struct),且被挂起。被Suspend(栈指针),CPU内部,包括指令计数器等保存下来。

    保存在进程描述符文件当中。而进程描述符是由内核维持。所以这些信息都保存在内核中。

    当A进程被切换出去,就意味着B进程被调度上来。这一过程被叫做恢复线程(Resume)

    总的过程就叫做上下文切换。

     

    进程A------CPU------进程B

     

    上下文切换由谁完成?----由内核。

    这意味着:

          每一次进程切换都要先从用户空间转到内核模式,然后再到用户模式。

    注意:不可能由一个进程到另一个进程,必须由内核来指挥完成。

     

    所以CPU的整体时间就分为两部分:

    一部分是用户空间所有进程加起来的计的时间

    另一部分是内核空间所占用的时间

     

    不管是那个进程,CPU总是分配到用户空间一部分,又分配到内核空间一部分。

     

    Linux支持进程抢占。

     优先级高的可以抢占优先级低的。

     但不是随时都可以抢占,-------系统时钟。

    系统时钟:

       有内部的时间频率。

       Tick:滴答----时间解析度

       操作系统是怎么记录时间的?

       每一次滴答(tick),都会产生可抢的时钟中断。

    滴答来了,就可以抢了。

     

    Linux的进程类别:

    1、 交互式进程(IO密集型):等待IO,对CPU要求量特别小。

    2、 批处理进程(CPU密集型):也可以理解成守护进程。

    3、 实时进程(Real-time):随时运行,优先级非常高的进程

     

    对于PC(桌面):交互式进程优先级应该是高优先级的,IO,,,,,

    对于服务器来说:一般以批处理为主(CPU)

     

    现在很多调度器可以这样来实现:

         让批处理进程多一些时间片。----时间片比较大,但优先级低。

         而交互式进程时间片少,但优先级高。

       调度就是按照优先级来完成的。

     

    Top命令是用来显示系统运行的进程信息。

     

    Linux优先级:

    1、 实时进程优先级:1-99   数字越小,优先级越低。通常与内核相关。

    2、 静态优先级:通常用来描述用户进程优先级。

    100-139 数字越小,优先级越高。

    所以优先级范围是1-139

    实时优先级比静态优先级高。

     

    很显然,内核进程通常都是实时优先级。

    TOP

     

    显示RT的为实时进程。

  • 相关阅读:
    SpringBoot/SpringMVC Restful接口全局异常处理
    spring/springboot/springmvc启用GZIP压缩
    centos7启动SonarQube 8.6报错
    类型初始值设定项引发异常
    OCI is not properly installed on this machine (NOE1/INIT)
    动态调用webservice 此 XML 文档中禁用 DTD。
    系统缺少插件 系统插件已过期
    几种常见的函数
    MQTT 协议基本介绍
    etcd:从应用场景到实现原理的全方位解读【修订版】
  • 原文地址:https://www.cnblogs.com/dongxu2019/p/11520469.html
Copyright © 2020-2023  润新知