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

Linux内核13-进程切换

1 进程切换 进程切换,又称为任务切换、上下文切换、或者任务调度。本文就研究Linux内核进程切换。我们首先理解几个概念。...硬件上下文是进程执行上下文的一个子集,进程执行上下文包含进程执行所需要的所有信息。在Linux中,进程的硬件上下文一部分存储在进程描述符中,而其它部分存储在内核态的中。...但是,优化硬件上下文的切换是不可能的,因为都是由CPU完成的,而Linux是使用软件代替硬件上下文切换的,所以有优化的空间,以便提高执行时间。 进程切换只能发生在内核态。...在进行进程切换之前,用户态进程使用的所有寄存器内容都已经包含在内核态的中了。这其中就包含指定用户态进程指针地址的ss和esp这对寄存器内容。...2 执行进程切换 进程切换的时机: 中断处理程序中直接调用schedule()函数,实现进程调度。 内核线程,是一个特殊的进程,只有内核态没有用户态。

1.8K20

linux 切换内核版本,切换 Linux 内核版本

大家好,又见面了,我是你们的朋友全君。 Linux 内核是开源类 Unix 系统宏内核。仅仅一个内核并不是一套完整的操作系统。有一套基于 Linux 内核的完整操作系统叫作 Linux 操作系统。...Linux 的 Kernel 主要提供以下五个基本的功能 硬件管理以及硬件的抽象 进程和线程的管理,以及之间的通信 内存的管理,包括虚拟内存管理以及内存空间的包含 I/O 设备,包括文件系统,网络接口,...Linux 内核版本号的意义 Linux 内核版本号由 3 组数字组成:第一个组数字。第二组数字。第三组数字 第一个组数字:目前发布的内核主版本。...Linux Mint 那么在 Update Manager 中,选择 View -> Linux Kernels 可以查看当前安装的版本和正在使用的版本,或者选择安装新的版本切换。...》第十一章 ↩ 发布者:全程序员长,转载请注明出处:https://javaforall.cn/172301.html原文链接:https://javaforall.cn

23.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

Linux 中的各种进程 线程 内核 中断

不论是哪种方法,只要想办法切换任务的上下文空间,切换即可。...各种的内存位置? 介绍完的工作原理和用途作用后,我们回归到 Linux 内核上来。...进程的初始化大小是由编译器和链接器计算出来的,但是的实时大小并不是固定的,Linux 内核会根据入情况对区进行动态增长(其实也就是添加新的页表)。...二、线程Linux 内核的角度来说,其实它并没有线程的概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分的统一到了 task_struct 中。...三、进程内核 在每一个进程的生命周期中,必然会通过到系统调用陷入内核。在执行系统调用陷入内核之后,这些内核代码所使用的并不是原先进程用户空间中的,而是一个单独内核空间的,这个称作进程内核

3.3K20

Linux 中的各种进程 线程 内核 中断

不论是哪种方法,只要想办法切换任务的上下文空间,切换即可。...各种的内存位置? 介绍完的工作原理和用途作用后,我们回归到 Linux 内核上来。...进程的初始化大小是由编译器和链接器计算出来的,但是的实时大小并不是固定的,Linux 内核会根据入情况对区进行动态增长(其实也就是添加新的页表)。...二、线程Linux 内核的角度来说,其实它并没有线程的概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分的统一到了 task_struct 中。...三、进程内核 在每一个进程的生命周期中,必然会通过到系统调用陷入内核。在执行系统调用陷入内核之后,这些内核代码所使用的并不是原先进程用户空间中的,而是一个单独内核空间的,这个称作进程内核

2.8K50

进程切换内核源码分析

罗军 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程调度的时机 (1)进程状态转换的时刻...标记调用schedule(),此时发生了用户抢占 内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度;...用户态进程无法实现主动调度,仅能通过陷入内核态后的某个时机点进行调度,即在中断处理过程中进行调度 进程切换的一般过程 (1)正在运行的用户态进程X (2)发生中断——save cs:eip/esp/...stack (8)继续运行用户态进程Y 进程上下文信息 用户地址空间:包括程序代码,数据,用户堆栈等 控制信息:进程描述符,内核堆栈等 硬件上下文(注意中断也要保存硬件上下文只是保存的方法不同) 进程切换源码结构.../* restore ESP */ \//这里实现内核堆栈的切换 "movl $1f,%[prev_ip]\n\t" /* save EIP */ \ //保存当前进程

1.2K30

一文搞懂 | Linux 中的各种进程 线程 内核 中断

不论是哪种方法,只要想办法切换任务的上下文空间,切换即可。...各种的内存位置? 介绍完的工作原理和用途作用后,我们回归到 Linux 内核上来。...进程的初始化大小是由编译器和链接器计算出来的,但是的实时大小并不是固定的,Linux 内核会根据入情况对区进行动态增长(其实也就是添加新的页表)。...二、线程Linux 内核的角度来说,其实它并没有线程的概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分的统一到了 task_struct 中。...三、进程内核 在每一个进程的生命周期中,必然会通过到系统调用陷入内核。在执行系统调用陷入内核之后,这些内核代码所使用的并不是原先进程用户空间中的,而是一个单独内核空间的,这个称作进程内核

4.5K20

一文读懂 | Linux 中的各种进程 线程 内核 中断

不论是哪种方法,只要想办法切换任务的上下文空间,切换即可。...各种的内存位置? 介绍完的工作原理和用途作用后,我们回归到 Linux 内核上来。...进程的初始化大小是由编译器和链接器计算出来的,但是的实时大小并不是固定的,Linux 内核会根据入情况对区进行动态增长(其实也就是添加新的页表)。...二、线程Linux 内核的角度来说,其实它并没有线程的概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分的统一到了 task_struct 中。...Linux 为什么需要区分这些? 为什么需要区分这些,其实都是设计上的问题。这里就我看到过的一些观点进行汇总,供大家讨论: 1. 为什么需要单独的进程内核

1.6K20

深入理解Linux内核进程上下文切换

本文主要关注进程管理的一个切入点,那就是进程的上下文切换,来理解linux内核是如何进程进程上下文切换的,从而揭开上下文切换的神秘面纱。...(注意:本文以linux-5.0内核源码讲解,采用arm64架构) 1.进程上下文的概念 进程上下文是进程执行活动全过程的静态描述。...实际上linux内核中,进程上下文包括进程的虚拟地址空间和硬件上下文。...**,地址空间切换进程访问自己用户空间做好了准备**),但是进程执行的内核还是前一个进程的,当前执行流也还是前一个进程的,需要做切换。...机制),后者保证了进程内核和执行流的切换,会将当前进程的硬件上下文保存在进程所管理的一块内存,然后将即将执行的进程的硬件上下文从内存中恢复到寄存器,有了这两步的切换过程保证了进程运行的有条不紊,当然切换的过程是在内核空间完成

9K109

Linux内核进程管理

执行线程 执行线程,简称线程(threads),是在进程中活动的对象。每个线程都拥有一个独立的程序计数器、进程和一组进程寄存器。内核调度的对象是线程,而不是进程。...copy_ precess()函数完成的工作很有意思: ●调用dup_task_struct()为新进程创建一个内核、thread__info结构和task....它们只在内核空间运行,从来不切换到用户空间。内核进程和普通进程一样,可以被调度,也可以被抢占。 Linux确实会把一些任务交给内核线程去做,像pdflush和ksofirqd这 些任务就是明显的例子。...它占用的所有资源就是保存thread_info的内核和保存tast_struct结构的那小片slab。 此时进程存在的唯一目的就是向它的父进程提供信息。...●最后,调用put_task_struct()释 放进程内核和thread_ info结 构所占的页,并释放tast_struct所占的slab高速缓存。

1.8K30

Linux内核进程调度

文章目录 前言 I/O消耗型与处理器消耗性 进程优先级 时间片 进程抢占 前言 调度程序没有太复杂的原理。最大限度地利用处理器时间的原则是,只要有可以执行的进程,那么就总会有进程正在执行。...Linux 提供了抢占式的多任务模式。在此模式下,由调度程序来决定什么时候停止一个进程的运行以便其他进程能够得到执行机会。这个强制的挂起动作就叫抢占(preemption)。...在包括Linux在内的某些系统中,优先级高的进程使用的时间片也较长。调度程序总是选择时间片未用尽面且优先级最高的进程运行。用户和系统都可以通过设置进程的优先级来影响系统的调度。...时间片太短会明显增大进程切换带来的处理器耗时,因为肯定会有相当一部分系统时间用在进程切换上,而这些进程能够用来运行的时间片却很短。...进程抢占 像前面所说的,Linux 系统是抢占式的。当-个进程进入TASK_RUNNING状态,内核会检查它的优先级是否高于当前正在执行的进程

2.8K20

Linux内核进程原理

Linux内核中,进程又称为任务(task),进程的虚拟地址空间可以分为用户虚拟地址空间和内核虚拟地址空间,所有进程共享内核虚拟地址空间,又各自拥有独立的用户虚拟地址空间。...C语言标准库进程Linux内核进程称呼有所区别,对应关系如下: C标准库...图片 Linux内核提供了一组宏值来表示进程的状态: TASK_RUNNING(可运行状态或就绪状态);Linux并没有严格区分运行态或就绪态,统一为TASK_RUNNING...:state:进程状态图片stack:指向内核的指针图片pid:全局的进程号 tgid:全局的线程组标识符图片pid_links:图片real_parent和parent:个人理解:real_parent...限期进程是指必须在一定时间内要完成的进程。其余的非限期进程的实时进程也是需要在一定时间内完成,但不是那么急需。 Linux不支持硬实时处理,至少在主流的内核中不支持。

1.9K10

用户态和内核切换开销_进程切换在用户态还是内核

系统调用机制是使用了操作系统为用户特别开放的一个中断来实现,如 Linux 的 int 80h 中断。...异常:如果当前进程运行在用户态,如果这个时候发生了异常事件,会触发由当前运行进程切换到处理此异常的内核相关进程中 外围设备中断:外围设备完成用户请求的操作之后,会向CPU发出中断信号,这时CPU会转去处理对应的中断处理程序...代价何在 当发生用户态到内核态的切换时,会发生如下过程(本质上是从“用户程序”切换到“内核程序”) 设置处理器至内核态。 保存当前寄存器(指针、程序计数器、通用寄存器)。...将指针设置指向内核地址。 将程序计数器设置为一个事先约定的地址上,该地址上存放的是系统调用处理程序的起始地址。 而之后从内核态返回用户态时,又会进行类似的工作。 3....内核缓存区 当一个用户进程要从磁盘读取数据时,内核一般不直接读磁盘,而是将内核缓冲区中的数据复制到进程缓冲区中。

2.4K10

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

:创建旧进程的副本,比如进程描述符和子进程运行需要的其它内核数据结构。...在未来的某个进程切换时间点上,调度器把子进程描述符中的thread成员中的值加载到CPU上,赋予子进程CPU的使用权。...esp寄存器加载thread.esp的值(也就是获取了子进程内核的地址),eip寄存器加载ret_from_fork()函数的返回地址(子进程执行的下一条指令)。...ret_from_fork()是一个汇编函数,它调用schedule_tail(),继而调用finish_task_switch()函数,完成进程切换,然后把上的值加载到寄存器中,强迫CPU进入用户模式...创建完进程的4要素之后,把新进程的最开始执行的指令设置到eip寄存器即可。然后就是等待内核调度。当轮到新进程使用CPU的时候,就从eip寄存器开始执行。

2K10

Linux 进程管理之调度和进程切换

//idle指向空闲内核线程, stop指向迁移内核线程 struct task_struct *curr, *idle, *stop; ...... } 三个调度队列: struct cfs_rq...抢占可分为内核态抢占和用户态抢占 用户态抢占 ret_to_user是系统调用,异常触发,中断处理完成后都会调用的函数。 ? 内核态抢占 ?...重点是其中的两个函数,一个是选择需要切换任务的 pick_next_task,另外一个是完成进程上下文切换 context_switch。...关于选择task的策略涉及到不同的调度类,等我们讲到具体调度器的时候再展开,这里重点讲下上下文切换的函数 context_switch,进程上下文切换主要涉及到两部分主要过程:进程地址空间切换和处理器状态切换...完成了这一步,也就完成了进程的地址空间切换,确切的说是进程的虚拟地址空间切换。 寄存器状态切换 ?

1.8K20

Linux内核编程--进程组和守护进程

会话和进程进程组:进程组是多个进程的集合, 接收同一个终端的各类信号信息。进程调用setpgid(pid, pgid)可以加入一个现有的进程组或者创建一个新的进程组。...进程组长(头部进程):每个进程组都有一个进程组ID, 每个进程组都有一个组长(头部进程), 在大部分系统中, 进程组ID一般就是头部进程ID。获得一个进程所在的进程组ID用getpgid(pid)。...子进程继承了父进程进程组ID,不过它有自己的进程ID,这就保证了子进程不是一个进程组的头部进程 Step.3 调用setsid( ),给守护进程创建一个新的进程组和会话,使当前进程成为新进程组的头部进程...1); fprintf(fp, "%d", i); i++; } fclose(fp); return (0); } 运行结果: 常用的Linux...查询被进程ID对应的进程打开的文件:lsof -p 1000 查看进程内存情况:pmap PID 样例: 参考阅读: 《UNIX环境高级编程第3版》 《Linux C++ 通信架构实战》 《UNIX

2.9K20

Linux内核IO技术详解

图中描述了Linux下文件操作函数的层级关系和内存缓存层的存在位置。中间的黑色实线是用户态和内核态的分界线。...Linux内核中的IO 这一小节来看Linux内核的IO的结构。...先上一张全貌图[4]: 由图可见,从系统调用的接口再往下,Linux下的IO致大致有三个层次: 文件系统层,以 write 为例,内核拷贝了write参数指定的用户态数据到文件系统Cache中,并适时向下层同步...设备层,通过DMA与内存直接交互,完成数据和具体设备之间的交互 结合这个图,想想Linux系统编程里用到的Buffered IO、mmap、Direct IO,这些机制怎么和Linux IO联系起来呢...当脏页在内存中驻留时间超过一个特定的阈值时,内核必须将超时的脏页写回磁盘。 用户进程调用sync、fsync、fdatasync系统调用时,内核会执行相应的写回操作。

2.3K10

Linux 内核的网络协议

前言 本文主要记录 Linux 内核网络协议的运行原理 数据报文的封装与分用 封装:当应用程序用 TCP 协议传送数据时,数据首先进入内核网络协议中,然后逐一通过 TCP/IP 协议族的每层直到被当作一串比特流送入网络...Linux 内核网络协议 协议的全景图 协议的分层结构 逻辑抽象层级: 物理层:主要提供各种连接的物理设备,如各种网卡,串口卡等。...毫无疑问,这是整个内核网络协议的核心。这一层主要实现了各种网络协议,最主要的当然是 IP,ICMP,ARP,RARP,TCP,UDP 等。...网络协议初始化流程 这需要从内核启动流程说起。...函数 start_kerenl() 将会调用一系列的初始化函数,如:平台初始化,内存初始化,陷阱初始化,中断初始化,进程调度初始化,缓冲区初始化,完成内核本身的各方面设置,目的是最终建立起基本完整的 Linux

2.7K50

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

此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程内核。 用户态: 每个进程都有自己的内核。当进程在执行用户自己的代码时,则称其处于用户运行态。...当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程内核态。因为中断处理程序将使用当前进程内核。这与处于内核态的进程的状态有些类似。...而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。...关于中断处理机制的细节和步骤这里也不做过多分析,涉及到由用户态切换内核态的步骤主要包括: 1.从当前进程的描述符中提取其内核的ss0及esp0信息。...2.使用ss0和esp0指向的内核将当前进程的cs,eip,eflags,ss,esp信息保存起来,这个过程也完成了由用户内核切换过程,同时保存了z暂停执行的程序的下一条指令。

94920

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

本文是《Linux内核设计与实现》第四章的阅读笔记,代码则是摘自最新的4.6版本linux源码(github),转载请注明出处。...上下文切换 上下文切换是指从一个可执行进程切换到另一个可执行进程。...,这包括保存、恢复寄存器和的相关信息 switch_to(prev, next, prev); barrier(); return finish_task_switch(prev); } 上下文切换由函数在切换进程时调用...简单来说有以下两种情况会发生用户抢占: 从系统调用返回用户空间 从中断处理程序返回用户空间 内核抢占 Linux和其他大部分的Unix变体操作系统不同的是,它支持完整的内核抢占。...为了支持内核抢占,Linux做出了如下的变动: 为每个进程的引入了计数器,用于记录持有锁的数量,当它为0的时候就意味着这个进程是可以被抢占的。

14.7K113
领券