进程管理学习记录
文章平均质量分 88
liuhangtiant
这个作者很懒,什么都没留下…
展开
-
current_thread_info在ARM32和ARM64平台的不同点解析
首先对current_thread_info不熟悉的同学可以先百度一下这是个什么东西?我们这里仅仅简单的提一下,current_thread_info用于获取当前进程的信息。ARM32平台相关定义#define THREAD_SIZE_ORDER 1#define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)union thr...原创 2018-10-20 10:49:23 · 2580 阅读 · 0 评论 -
Linux调度器基础之SoC架构
前言在多CPU系统中,调度器需要统筹所有的CPU做进程调度。每一个CPU多维护一个调度队列,调度队列上是该CPU需要调度的进程。然而,有些CPU调度队列上的进程可能比较少,甚至空闲;而有些CPU调度队列上的进程可能比较多,这样就会导致有些CPU闲置,有些CPU繁忙。为了解决这种负载不均衡的状态,引入了负载均衡的概念,负载均衡的基本思路是,如果当前CPU发现本地调度队列上的进程非常少,或者空了...原创 2018-12-09 10:50:27 · 1356 阅读 · 0 评论 -
Linux进程管理之ARM64的三级调度域
基本原理schedule domain分为三个层次,从低到高依次为SMT,MC和ALL Cpu。SMT即single multi thread,level0调度域,同一个物理Core中的所有thread都在该调度域中;MC即multi Core,level 1调度域,同一个cluster中的所有物理Core中的CPU都在该调度域中;ALL Cpu,level2调度域,也是最高级别的调度域,该调...原创 2018-12-13 00:12:22 · 2774 阅读 · 1 评论 -
Linux CFS调度器之msleep
前言我们之前多次提到过睡眠的进程由于没有占用CPU资源,所以其vruntime会比较少,睡眠时间越长,vruntime越小。为了防止睡眠进程醒来后,独占CPU导致其他进程饿死,进程醒来后,会重新调整其vruntime值,使其既能够收到CPU的优待,又不至于导致其他进程饥饿。另外,由于之前只分析了CFS调度器相关的代码,所以本文涉及到具体调度器的时候,全部以CFS调度器为例。进程睡眠msle...原创 2018-11-29 00:22:36 · 700 阅读 · 0 评论 -
Linux CFS调度器之判断当前进程是否应该调度出去
前言之前有说到过,定时器会周期性的产生中断,在其中断处理函数中,会更新当前进程的时间信息,并依此判断是否抢占当前进程。不过当时只是简单的介绍说,如果当前进程用完了分给他的时间片,就需要被调度器调出出去,今天我们来分析一下细节。调度延时我们先来说几个基本概念,调度延时,最小调度粒度,以及调度延时进程数。1. 调度延时unsigned int sysctl_sched_latency =...原创 2018-11-24 23:26:51 · 349 阅读 · 0 评论 -
Linux CFS调度器之选择下一个需要调度的进程
前言CFS调度器选择下一个要执行的进程时,基本原则是选择vruntime最小的进程,vruntime小意味着应该受到CPU的优待。但是在某些情况下,会对该原则有所违背,比如某个进程睡眠了一段时间,时间到了以后理应尽可能快的被调度,这个过程可能会导致当前进程被抢占,好端端的被抢占了,CPU在补偿了刚刚醒来的进程后,理应再补偿下被抢占的进程。发生在进程唤醒过程中的抢占事件进程睡眠和进程唤醒的...原创 2018-11-26 01:08:11 · 799 阅读 · 0 评论 -
Linux进程调度时机
我们之前有分析过,update_process_times会判断当前进程的时间片是否用完,如果用完了会设置TIF_NEED_RESCHED,在合适的时机,调用schedule函数做实际的进程调度。进程调度的时机,主要分成以下四种:直接调用schedule间接调用schedule,如果msleep函数中断返回时检测TIF_NEED_RESCHED,如果设置则调用schedule系统调用返...原创 2018-11-18 08:08:53 · 1969 阅读 · 0 评论 -
Linux CFS调度器之虚拟运行时间vruntime
CFS简介Linux中大名鼎鼎的CFS调度器是专门为普通进程设计的调度器,CFS调度器的核心是虚拟运行时间vruntime。虚拟运行时间一方面跟进程运行时间有关,另一方面跟进程优先级有关,总的来说,进程占用CPU时间越长,进程优先级越低,其vruntime就越大。vruntime越小,代表CPU对进程的宠幸越少,那么后续就需要优先宠幸它;反之,vruntime越大,代表CPU对进程的宠幸越多,...原创 2018-11-24 00:27:57 · 3141 阅读 · 0 评论 -
进程调度之update_process_times
linux中众多进程可以同时执行,是因为采用了时间片轮转方案。每个进程都会分得相应的时间片,当前进程的时间片用完了,CPU就会停止执行当前进程,选择其他合适的进程执行。那么什么时候判断当前进程的时间片是否用完了呢?这依赖于系统timer,timer周期性的产生时钟中断,在中断处理函数中,会更新当前进程的时间等统计信息,并判断当前进程的时间片是否用完,是否需要切换到其他进程执行。这个工作由upda...原创 2018-11-16 23:22:56 · 2984 阅读 · 0 评论 -
Linux内核进程管理进程切换之context_switch
基本概念进程虚拟地址空间ARM64的地址空间分配如下:用户地址空间0x0000000000000000–0000ffffffffffffffff内核地址空间0xffff000000000000–0xffffffffffffffff每一个用户进程拥有自己独立的用户地址空间,但内核地址空间只有一个,所有进程共用。task_struct有两个成员mm和active_mm,用来描述进...原创 2018-10-31 00:11:08 · 1220 阅读 · 0 评论 -
Linux内核进程管理之进程ID
进程ID简介一个进程实体对应一个task_struct结构体,关于这个结构体后续的文章会有介绍,这里我们只需要知道通过该结构体我们可以获得该进程使用的所有资源信息。进程ID顾名思义就是进程的ID,一个进程有四种类型的ID,分别是:PID:用于唯一标记一个进程这句话在以前是完全无误的,但是现在还必须加上一个条件,那就是在一个命名空间内唯一标记一个进程。关于命令空间,下一个章节会有介绍...原创 2018-10-28 22:46:44 · 688 阅读 · 0 评论 -
Linux进程管理之CPU启动相关的四大状态
前言在讲调度域的初始化之前我们不得不先说一下多CPU启动的一些基本知识点,不过我们的目的是聚焦于调度域,所以只会讲与调度相关的内容。possible,present,online和active四大状态分别记录在__cpu_possible_mask,set_cpu_present,__cpu_online_mask和__cpu_active_mask这几个变量中。下面四个函数用于设置这四个状...原创 2018-12-10 00:16:13 · 3901 阅读 · 0 评论