首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux下的进程类别(内核线程、轻量级进程用户进程)--Linux进程的管理与调度(四)

本文中出现的,内核线程,轻量级进程用户进程用户线程等概念,如果不太熟悉, 可以参见 内核线程、轻量级进程用户线程三种线程概念解惑(线程≠轻量级进程Linux进程类别 虽然我们在区分Linux...用户进程运行在用户空间上, 而一些通过共享资源实现的一组进程我们称之为线程组, Linux内核其实本质上没有线程的概念, Linux下线程其实上是与其他进程共享某些资源的进程而已。...但是我们习惯上还是称他们为线程或者轻量级进程 因此, Linux进程分3种,内核线程(或者叫核心进程)、用户进程用户线程, 当然如果更严谨的,你也可以认为用户进程用户线程都是用户进程。..., Linux内核其实本质上没有线程的概念, Linux下线程其实上是与其他进程共享某些资源的进程而已。...但是我们习惯上还是称他们为线程或者轻量级进程 因此, Linux进程分3种,内核线程(或者叫核心进程)、用户进程用户线程, 当然如果更严谨的,你也可以认为用户进程用户线程都是用户进程

6.4K30

Linux内核进程管理

文章目录 简介 执行线程 两种虚拟机制 进程描述符与任务队列 PID 进程状态转化图 进程级联 进程创建过程 写时拷贝 fork() 线程在Linux中的实现 clone参数标志 内核线程 进程终结 删除进程描述符...进程状态转化图 进程级联 Linux进程之间存在一个明显的继承关系。所有的进程都是PID为1的init进程的后代。内核在系统启动的最后阶段启动init进程。...从内核的角度来说,它并没有线程这个概念。Linux把所有的线程都当作进程来实现。内核并没有准备特别的调度算法或是定义特别的数据结构来表征线程。相反,线程仅仅被视为一个使用某些共享资源的进程。...它们只在内核空间运行,从来不切换到用户空间。内核进程和普通进程一样,可以被调度,也可以被抢占。 Linux确实会把一些任务交给内核线程去做,像pdflush和ksofirqd这 些任务就是明显的例子。...Linux用一个单用户高速级存统计和记录每个用户占用的进程数目、文件数目。如果这些数目都将为0,表明这个用户没有使用任何进程和文件,那么这块缓存就可以销毁了。

1.8K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux内核进程原理

    Linux内核中,进程又称为任务(task),进程的虚拟地址空间可以分为用户虚拟地址空间和内核虚拟地址空间,所有进程共享内核虚拟地址空间,又各自拥有独立的用户虚拟地址空间。...进程拥有两种特殊的形式:没有用户虚拟地址空间的进程内核线程(守护进程便属于内核线程),共享用户虚拟地址空间的进程用户线程,共享同一个用户虚拟地址空间的所有用户线程称为一个线程组。...图片 Linux内核提供了一组宏值来表示进程的状态: TASK_RUNNING(可运行状态或就绪状态);Linux并没有严格区分运行态或就绪态,统一为TASK_RUNNING...限期进程是指必须在一定时间内要完成的进程。其余的非限期进程的实时进程也是需要在一定时间内完成,但不是那么急需。 Linux不支持硬实时处理,至少在主流的内核中不支持。...,与普通用户进程区别在于内核线程没有独立的进程地址空间。

    2.1K10

    Linux内核进程调度

    文章目录 前言 I/O消耗型与处理器消耗性 进程优先级 时间片 进程抢占 前言 调度程序没有太复杂的原理。最大限度地利用处理器时间的原则是,只要有可以执行的进程,那么就总会有进程正在执行。...Linux 提供了抢占式的多任务模式。在此模式下,由调度程序来决定什么时候停止一个进程的运行以便其他进程能够得到执行机会。这个强制的挂起动作就叫抢占(preemption)。...这种机制有很多缺点:调度程序无法对每个进程该执行多长时间做出统一规定,所以进程独占的处理器时间可能超出用户的预料,更糟的是,一个决不做出让步的悬挂进程就能使系统崩溃。...在包括Linux在内的某些系统中,优先级高的进程使用的时间片也较长。调度程序总是选择时间片未用尽面且优先级最高的进程运行。用户和系统都可以通过设置进程的优先级来影响系统的调度。...进程抢占 像前面所说的,Linux 系统是抢占式的。当-个进程进入TASK_RUNNING状态,内核会检查它的优先级是否高于当前正在执行的进程

    2.9K20

    Linux 内核进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核进程相关概念 | Linux 查看进程命令及输出字段解析 )

    文章目录 一、进程特殊形式 ( 内核线程 | 用户线程 ) 二、C 标准库与 Linux 内核进程相关概念 三、Linux 查看进程命令及输出字段解析 一、进程特殊形式 ( 内核线程 | 用户线程 )...种 特殊形式 : 内核级线程 : 只有 内核虚拟地址空间 , 没有 用户虚拟地址空间 的进程 , 称为 内核线程 ; 用户级线程 : 共享 用户虚拟地址空间 的进程 , 称为 用户线程 ; 线程 : 用户线程...又称为 线程 ; 线程组 : 共享 相同 用户虚拟地址空间 的线程 , 组成了一个 线程组 , 二、C 标准库与 Linux 内核进程相关概念 ---- C 语言中 标准库 提供的 进程 , 与 Linux...内核 中的 进程 这两个概念是不同的 ; C 标准库 中的 包含多个线程 的进程 , 在 Linux 内核中 称为 " 线程组 " ; C 标准库 中的 只有一个线程 的进程 , 在 Linux 内核中...称为 " 任务 / 进程 " ; C 标准库 中的 线程 , 在 Linux 内核中 称为 " 共享 用户虚拟地址空间 的 进程 " 三、Linux 查看进程命令及输出字段解析 ---- 在 Ubuntu

    8.5K20

    Linux内核15-内核如何创建进程

    PID写入到父进程用户态变量中。...:创建旧进程的副本,比如进程描述符和子进程运行需要的其它内核数据结构。...esp寄存器加载thread.esp的值(也就是获取了子进程内核态栈的地址),eip寄存器加载ret_from_fork()函数的返回地址(子进程执行的下一条指令)。...总结 这个函数看似很复杂,其实就是根据用户态传递过来的控制参数,实现进程的4要素:执行代码、私有堆栈空间、进程控制块(task_struct)和独立的内存空间。当然了,线程只是拷贝父进程的即可。...创建完进程的4要素之后,把新进程的最开始执行的指令设置到eip寄存器即可。然后就是等待内核调度。当轮到新进程使用CPU的时候,就从eip寄存器开始执行。

    2.1K10

    Linux内核编程--进程通信信号

    这一篇有区别于上一篇的“信号量”机制哈 平台的手机版对排版的支持有限,建议用电脑打开此文章 一,Linux信号的概念: 信号是 Linux 进程间通信的最古老的方式。...在Linux终端上敲“Ctrl+c”,就产生一个“中断”,相当于产生一个信号,接着就会处理这个“中断任务”(默认的处理方式为结束掉当前进程) 2.信号可以直接进行用户空间进程内核空间进程的交互,内核进程可以利用它来通知用户空间进程发生了哪些系统事件...SIGCHLD, Linux中当子进程结束时,子进程并未被完全销毁,因为父进程还要用它的信息。...1) 产生 a) 当用户按某些终端键时,将产生信号。...这些情况通常由硬件检测到,并通知内核,然后内核产生适当的信号发送给相应的进程。 c) 软件异常将产生信号。 当检测到某种软件条件已发生(如:定时器alarm),并将其通知有关进程时,产生信号。

    2.9K20

    Linux内核调度分析(进程调度)

    本文是《Linux内核设计与实现》第四章的阅读笔记,代码则是摘自最新的4.6版本linux源码(github),转载请注明出处。...但是内核必须知道什么时候调用,如果只靠用户代码显式地调用,代码可能会永远地执行下去。...用户抢占 内核即将返回用户空间的时候,如果标志位被设置,会导致被调用,此时就发生了用户抢占。...简单来说有以下两种情况会发生用户抢占: 从系统调用返回用户空间 从中断处理程序返回用户空间 内核抢占 Linux和其他大部分的Unix变体操作系统不同的是,它支持完整的内核抢占。...为了支持内核抢占,Linux做出了如下的变动: 为每个进程的引入了计数器,用于记录持有锁的数量,当它为0的时候就意味着这个进程是可以被抢占的。

    14.9K113

    Linux内核13-进程切换

    1 进程切换 进程切换,又称为任务切换、上下文切换、或者任务调度。本文就研究Linux内核进程切换。我们首先理解几个概念。...硬件上下文是进程执行上下文的一个子集,进程执行上下文包含进程执行所需要的所有信息。在Linux中,进程的硬件上下文一部分存储在进程描述符中,而其它部分存储在内核态的栈中。...在进行进程切换之前,用户进程使用的所有寄存器内容都已经包含在内核态的栈中了。这其中就包含指定用户进程栈指针地址的ss和esp这对寄存器内容。...这么做,基于两个原因: 当x86架构的CPU从用户态到内核态时,会从TSS中获取内核态的栈地址 用户进程想要访问I/O端口的时候,CPU需要访问存储在TSS中的I/O权限位,判断进程是否被允许访问这个...2 执行进程切换 进程切换的时机: 中断处理程序中直接调用schedule()函数,实现进程调度。 内核线程,是一个特殊的进程,只有内核态没有用户态。

    1.9K20

    Linux 内核进程管理之基础

    没有废话,内存管理暂时告一段落,正式进入进程管理的内容。 内核通过 task_struct 描述进程 用命令 pstree 可以让内核以树形的结构把进程之间的关系列出来,如下图: ?...这是进程内核中的结构形式,那么内核是如何来以树形结构管理描述这些进程的呢?用来描述进程的数据结构,可以理解为进程的属性。...task_struct 结构体内容太多,这里只列出部分成员变量,感兴趣的读者可以去源码 include/linux/sched.h头文件查看。...Linux中的 ready 和 running 对应的都是TASK_RUNNING标志位,ready 表示进程正处在队列中,尚未被调度;running 则表示进程正在CPU上运行; ?...void *stack 指向内核栈的指针,内核通过 dup_task_struct 为每个进程都分配内核栈空间,并记录在此。

    1.3K50

    聊聊Linux内核进程调度下篇

    进程优先级 Linux内核进程优先级一般分为动态优先级和静态优先级,动态优先级是内核根据进程的nice值、IO密集行为或者计算密集行为以及等待时间等因素,设置给普通的进程;静态优先级是用户态应用设置给实时进程...任何普通进程的nice值在-20~19之间,0是默认,较高的nice值表示较低的进程优先级;实时进程的优先级范围是在0~99 从内核的优先级角度,所有的进程都处于0~139,其中的0~99是分配实时进程...实际调度器 调度器通用元素 CFS(完全公平)调度器 Linux内核中所有动态优先级的进程都是有CFS调度器处理,通常Linux内核中大部分都是非实时进程,所以CFS进程调度器也是最繁忙的调度器。...在计算进程优先级的时候,CFS不仅依赖于进程的nice值,同时还要考虑进程的负载,内核中维护了进程的负载权重数组(prio_to_weight),每个nice值对应一个负载权重;对于进程来说,nice值减一...内核中支持实时进程,它们是由实时调度器来进行调度。

    1.2K20

    Linux 内核进程管理 - 进程优先级 ① ( 限期进程 | 实时进程 | 普通进程 | 进程优先级相关字段 )

    文章目录 一、进程分类 ( 限期进程 | 实时进程 | 普通进程 ) 二、进程优先级相关字段 一、进程分类 ( 限期进程 | 实时进程 | 普通进程 ) ---- Linux 进程 分为 3 种类型..., " 限期进程 " , " 实时进程 " , " 普通进程 " ; 从 " 进程优先级 " 角度对比 , 优先级从高到低分别是 : 限期进程 > 实时进程 > 普通进程 ; 限期进程 : 优先级为...-1 ; 实时进程 : 优先级为 1 ~ 99 ; 实时进程 中 优先级的数值越大 , 优先级越高 ; 普通进程 : 优先级为 100 ~ 139 ; 普通进程 中 优先级的数值越小..., 优先级越高 ; 在 " 普通进程 " 中 , 可以通过 修改 nice 字段的值 , 进而 修改 普通进程的优先级 , 计算公式如下 : 普通进程优先级 = \rm nice + 120 二、进程优先级相关字段...---- 在 linux-5.6.18\include\linux\sched.h 头文件中 task_struct " 进程描述符 " 结构体 中定义了 进程优先级字段如下 : struct task_struct

    6.2K20

    Linux 内核进程管理 ( 内核线程概念 | 内核线程、普通进程用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

    " 与 其它进程 ( 包括 普通进程 , 内核自身 , 用户级线程 ) 并行执行 ; " 内核线程 " 也称为 " 守护进程 " ; 二、内核线程、普通进程用户线程 ---- 在 【Linux 内核...】进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核进程相关概念 | Linux 查看进程命令及输出字段解析 ) 一、进程特殊形式 ( 内核线程 | 用户线程...) 博客章节 , 有介绍内核线程 , 普通的进程 , 包含 内核虚拟地址空间 和 用户虚拟地址空间 , 其中 内核虚拟地址空间 所有进程共享 , 用户虚拟地址空间 由进程独立拥有 ; 除了 普通进程 外..., 进程 还有 2 种 特殊形式 : 内核级线程 : 只有 内核虚拟地址空间 , 没有 用户虚拟地址空间 的进程 , 称为 内核线程 ; 用户级线程 : 共享 用户虚拟地址空间 的进程 , 称为..., mm 指针指向的空间就是 " 独立的进程地址空间 " ; 在 Linux 内核 中 , " 进程控制块 " 是通过 task_struct 结构体 进行描述的 ; Linux 内核中 , 所有 进程管理

    3.8K20

    Linux内核设计与实现(进程管理、进程调度、系统调用)

    1、虚拟处理器、虚拟内存:让进程感觉自己拥有所有 image.png 2、进程上限,cat /proc/sys/kernel/pid_max 3、进程的五种状态 image.png set_task_state...(task,state); 4、每个进程都有一个父进程 image.png 5、进程的创建:fork() exec() image.png 6、写时拷贝COW image.png 7、线程和进程的区别不大...image.png 8、孤儿进程,父进程先关掉,再设置一个父进程,如果没有,设置init image.png 9、2.6内核进程调度算法CFS:完全公平调度算法 10、进程分为IO消耗型和处理器消耗型...11、ps -eo state,uid,pid,ppid,rtprio,time,comm -不是实时进程 12、CFS??...image.png image.png 13、与调度相关的系统调用 image.png 14、系统调用在用户空间进程和硬件设备之间添加了一个中间层 image.png 15、中断 image.png

    1.4K10

    进程用户态和内核态的概念理解以及切换方法_用户进程用户态切换到内核

    此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程内核栈。 用户态: 每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态。...即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程内核态。因为中断处理程序将使用当前进程内核栈。...这与处于内核态的进程的状态有些类似。 用户态和内核态的区别: 用户态下和内核态下工作的程序有很多差别,但最重要的差别就在于特权级的不同,即权力的不同。...系统调用 这是用户进程主动要求切换到内核态的一种方式,用户进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。...而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。

    1.2K20

    Linux内核12-进程资源限制

    基于这个目的,Linux内核在每个进程进程描述符中还应该包含资源限制的数据结构,Linux使用了一个数组成员,该数组成员的包含关系为current->signal->rlim,数组的定义如下所示: struct...当新打开一个文件或复制文件描述符时,内核都会检查这个值。 RLIMIT_NPROC 用户可以拥有的最大进程数量。 RLIMIT_RSS 进程可以拥有的页帧数量,也就是物理帧的数量(目前不强制)。...RLIMIT_SIGPENDING 进程挂起信号的最大数量。 RLIMIT_STACK 最大栈空间,单位是字节。在扩展进程用户态栈时,内核会检查这个值。 RLIMIT_NICE 优先级的完美值。...当用户登陆到系统时,内核创建一个超级用户拥有的进程,通过它调用setrlimit()减小rlim_max和rlim_cur的值;然后执行login shell,成为用户进程(实际就是进程init)。...用户新创建的进程继承它父进程的rlim数组内容,所以,用用也不能覆盖掉由超级用户赋值的限制值。

    2K10

    聊聊Linux内核进程调度上篇

    基本介绍 Linux进程调度器是内核中最重要的核心组件,它决定了一个进程合适获取CPU的时间以及占用CPU的时间。...Linux进程调度器采用类似于vfs的设计采用简单的两层结构模式,第一层是通用调度器,定义作为进程调度器的入口抽象层;第二层是调度器的具体实现,根据调度策略实现进程的调度的器的具体实现。...dl_sched_class)、实时调度器(struct sched_class rt_sched_class)、完全公平调度器(struct sched_class fair_sched_class) 内核中运行队列包含了所有的进程...内核进程运行队列是通过struct rq来定义 // 省略大部分字段,着重描述下运行队列中的一些字段 struct rq { // 每个CPU的运行队列的锁 raw_spinlock_t lock...; unsigned long next_balance; }; 进程调度实现 进程调度是调用进程第一层的通用调度器,内核是从__schedule()函数开始,该函数是挑选下一个最佳的可运行的进程任务

    66220

    Linux内核进程负载均衡机制

    再具体实现中,如何选择将进程迁移到的目标CPU,除了考虑各个CPU的负载平衡,还需要将Cache利用纳入权衡因素。同时,对于进程A唤醒进程B这个模型,还做了特殊的处理。...SMP组织 为了更好地利用Cache,内核将CPU(如果开启了超线程,那么以逻辑CPU为单位,否则以物理CPU核心为单位)组织成了调度域。...某个CPU上无可运行进程,__schedule()准备调度idle进程前,会尝试从其它CPU上pull一批进程过来。...this_rq->max_idle_balance_cost) this_rq->max_idle_balance_cost = curr_cost; } 其它需要用到SMP负载均衡模型的时机 内核运行中...fork出子进程,子进程第一次被调度运 唤醒进程时 当A进程唤醒B进程时,假设都是普通进程,那么将会调用try_to_wake_up()->select_task_rq()->select_task_rq_fair

    12.3K220

    linux内核进程创建fork源码解析

    这次在自己写操作系统的时候,看了一遍linux内核进程创建过程。算是有了比较深入的理解。     进程概念:进程是对正在运行程序的一个抽象。...再看其中三个比较重要的结构: struct thread_info 字面意思是线程信息,其实主要是内核栈的信息,每个进程都有自己的内核栈和用户栈,还可以设置中断栈,其中和进程上下文切换相关的主要是内核栈.../* * fork进程的主要函数,sys_fork,sys_clone等用户系统调用和kernel_thread创建内核线程函数都会调用 * 此函数。.../将父进程内核栈帧结构复制给子进程内核栈帧 childregs->eax = 0; //调用完毕后创建进程完毕后子进程返回值 childregs->esp = esp; //子进程用户栈顶指针...,把返回用户态的栈和地址都从父进程复制给了子进程,然后将子进程上下文切换用到的数据结构thread_struct的esp成员指向了子进程内核栈。

    8.7K22
    领券