《linux内核设计与实现》--1、进程管理、进程调度、系统调用

  • 进程管理
    • 进程:处于执行期的程序以及相关资源的总称。(资源含:文件、地址空间、数据、状态、信号等)
    • 线程:在进程中活动的对象。每个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器。
    • 内核调度的对象是线程,而不是进程。linux对线程和进程并不特别区分,线程只是一种特殊的进程。
    • 进程描述符:包含的数据能完整地描述一个正在执行的程序,它打开的文件、进程的地址空间、挂起的信号,进程的状态,还有其他信息。
    •  
    •  
    • 进程分类:实时进程、normal进程、idel(0号进程)。
    • 进程状态:
      • TASK_RUNNING(运行):进程可执行,处于正在执行或在运行队列中等待执行。
      • TASK_INTERRUPTIBLE(可中断):进程正在睡眠(被阻塞),等待某些条件达成。条件达成则会变成可运行,或接收到信号提前被唤醒随时准备投入运行。
      • TASK_UNINTERRUPTIBLE(不可中断):接收信号不会被唤醒,其他同TASK_INTERRUPTIBLE一致。
      • TASK_TRACED:被其他进程跟踪的进程。
      • TASK_STOPPED(停止):进程停止执行;通常发送在接收到SIGSTOP、SIGTSTP、SIGTTOU等信号的时候。调试期间接收到任何信号,都会使进程进入这种状态。
      •  
    • 写实拷贝(写实复制):推迟甚至免除拷贝;fork子进程的时候,内核不负责整个进程地址空间,而是让父子进程共享同一个拷贝;只有在需要写入时,数据才会被复制,从而使各个进程有各自的拷贝。
    • 进程上下文:包含每个进程执行过的、执行时的以及待执行的指令和数据;在指令寄存器、堆栈、状态字寄存器等中的内容。此外, 还包括进程打开的文件描述符等.
  • 进程调度
    • 抢占式多任务:由调度程序决定什么时候停止一个进程的运行,以便其他进程能得到执行机会。
    • 时间片:分配给每个可运行进程的处理器时间段。(多进程用CPU占比,可用nice值的差来分配比例。最小粒度1ms)
    • 调度算法:
      • 1、基于优先级的调度;
      • 2、调度代码在:kernel/sched.c
    • 优先级范围有两种:
      • 1、nice值,范围:-20 ~ +19,默认0,nice值越大优先级越低。
      • 2、实时优先级,值可配置,默认范围0 ~ 99 ,值越大优先级越高。
    • 调度器类:
      • 1、rt调度器:针对实时进程;
      • 2、CFS调度器:普通进程;
      • 每个调度器都必须对进程运行时间做记账。
    • CFS调度器:
      • 时间记账:无时间片概念,必须对进程运行时间做记账。
      • 虚拟运行时间:vruntime变量存放进程的虚拟运行时间,该时间是所有可运行进程总数的标准化(加权);ns为单位。
      • 算法核心:选择具有最小vruntime的任务。(如何选择?红黑树组织可运行队列)
      • 红黑树:存放可执行的进程,key:可运行进程的vruntime,value:对应的进程(1~n),最左子节点值最小最优先,缓存最左子节点,访问更快。
      • 进程加入rbtree:进程转变为可运行状态(被唤醒)或者通过fork调用第一次创建进程时。
      • 进程从rbtree删除:进程变成不可运行(堵塞)或结束运行(终止)时。
      • 调度器入口:schedule().
      • 睡眠:进程把自己标记成休眠状态,从可执行红黑树中移出,放入等待队列,然后调用schedule()选择和执行一个其他进程。
      • 唤醒:进程被设置为可执行状态,然后再从等待队列中移到可执行红黑树中。
      • 等待队列:休眠通过等待队列处理,等待某些事件发生的进程组成的简单链表,休眠的进程状态有两种,分别是:TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE。
      • 内核抢占:只要重新调度是安全的,内核就可以在任何时间抢占正在执行的任务。(安全:进程不持有锁,持锁是非抢占的,避免死锁)
    • 非实时调度策略:
      • SCHED_NORMAL,优先级低于实时进程。
      • 范围:MAX_RT_PRIO ~ MAX_RT_PRIO+40(nice值区间是40)
    • 实时调度策略
      • SCHED_FIFO:先进先出调度算法,不使用时间片;有优先级;可以一直执行,直到进程阻塞或自主释放处理器;优先级更高的进程才能抢占,同等优先级只能等待。
      • SCHED_RR:实时轮流调度算法,使用时间片,时间片耗尽则不能继续执行。
      • SCHED_FIFO低优先级进程不能抢占SCHED_RR任务,即使它时间片用完也是。
      • 以上两种策略,都是静态优先级,内核不为实时进程计算动态优先级。
      • 范围:0 ~ MAX_RT_PRIO-1
  • 系统调用
    • 系统调用:内核的一部分,处于用户空间进程和硬件设备之间 的一层;主要作用有:
      • 为用户空间提供硬件的抽象接口;统一与硬件通信的入口。
      • 系统调用保证了系统的稳定和安全;避免应用程序不正确的使用硬件设备。
      • 保证内核统一分配硬件资源。
    • 应用程序-->应用编程接口(如:C库)-->系统调用-->硬件
    • 系统调用过程:

 

 

 

PS:如需要电子版书籍,可私信或评论(直接上传好像传不了)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值