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

Linux各种进程 线程 内核 中断

各种内存位置? 介绍完工作原理和用途作用后,我们回归到 Linux 内核上来。...Linux 进程地址空间有个标准布局,地址空间中由各个不同内存段组成 (Memory Segment),主要内存段如下: 程序段 (Text Segment):可执行文件代码内存映射 数据段 (...进程初始化大小是由编译器和链接器计算出来,但是实时大小并不是固定Linux 内核会根据入情况区进行动态增长(其实也就是添加新页表)。...二、线程Linux 内核角度来说,其实它并没有线程概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分统一到了 task_struct 中。...三、进程内核 在每一个进程生命周期中,必然会通过到系统调用陷入内核。在执行系统调用陷入内核之后,这些内核代码所使用并不是原先进程用户空间中,而是一个单独内核空间,这个称作进程内核

3.4K20

Linux各种进程 线程 内核 中断

各种内存位置? 介绍完工作原理和用途作用后,我们回归到 Linux 内核上来。...Linux 进程地址空间有个标准布局,地址空间中由各个不同内存段组成 (Memory Segment),主要内存段如下: 程序段 (Text Segment):可执行文件代码内存映射 数据段 (...进程初始化大小是由编译器和链接器计算出来,但是实时大小并不是固定Linux 内核会根据入情况区进行动态增长(其实也就是添加新页表)。...二、线程Linux 内核角度来说,其实它并没有线程概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分统一到了 task_struct 中。...三、进程内核 在每一个进程生命周期中,必然会通过到系统调用陷入内核。在执行系统调用陷入内核之后,这些内核代码所使用并不是原先进程用户空间中,而是一个单独内核空间,这个称作进程内核

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

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

各种内存位置? 介绍完工作原理和用途作用后,我们回归到 Linux 内核上来。...Linux 进程地址空间有个标准布局,地址空间中由各个不同内存段组成 (Memory Segment),主要内存段如下: 程序段 (Text Segment):可执行文件代码内存映射 数据段 (...进程初始化大小是由编译器和链接器计算出来,但是实时大小并不是固定Linux 内核会根据入情况区进行动态增长(其实也就是添加新页表)。...二、线程Linux 内核角度来说,其实它并没有线程概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分统一到了 task_struct 中。...三、进程内核 在每一个进程生命周期中,必然会通过到系统调用陷入内核。在执行系统调用陷入内核之后,这些内核代码所使用并不是原先进程用户空间中,而是一个单独内核空间,这个称作进程内核

5.9K33

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

各种内存位置? 介绍完工作原理和用途作用后,我们回归到 Linux 内核上来。...Linux 进程地址空间有个标准布局,地址空间中由各个不同内存段组成 (Memory Segment),主要内存段如下: 程序段 (Text Segment):可执行文件代码内存映射 数据段 (...进程初始化大小是由编译器和链接器计算出来,但是实时大小并不是固定Linux 内核会根据入情况区进行动态增长(其实也就是添加新页表)。...二、线程Linux 内核角度来说,其实它并没有线程概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分统一到了 task_struct 中。...Linux 为什么需要区分这些? 为什么需要区分这些,其实都是设计上问题。这里就我看到过一些观点进行汇总,供大家讨论: 1. 为什么需要单独进程内核

1.7K20

Linux 内核网络协议

前言 本文主要记录 Linux 内核网络协议运行原理 数据报文封装与分用 封装:当应用程序用 TCP 协议传送数据时,数据首先进入内核网络协议中,然后逐一通过 TCP/IP 协议族每层直到被当作一串比特流送入网络...Linux 内核网络协议 协议全景图 协议分层结构 逻辑抽象层级: 物理层:主要提供各种连接物理设备,如各种网卡,串口卡等。...NAPI 技术适用于高速率短长度数据包处理。 网络协议初始化流程 这需要从内核启动流程说起。...函数 start_kerenl() 将会调用一系列初始化函数,如:平台初始化,内存初始化,陷阱初始化,中断初始化,进程调度初始化,缓冲区初始化,完成内核本身各方面设置,目的是最终建立起基本完整 Linux...在中断服务子程序中,数据会从硬件缓冲区复制到内核空间缓冲区,并包装成一个数据结构(sk_buff),然后调用驱动层接口函数 netif_rx() 将数据包发送给设备无关层。

2.9K50

Linux 进程描述

进程是操作系统种调度实体,进程拥有资源描述称为进程控制块(PCB, Process Contrl Block)。...通过 task_struct 描述进程 内核里,通过 task_struct 结构体来描述一个进程,称为进程描述符 (process descriptor),它保存着支撑一个进程正常运行所有信息。...下面是几个比较重要进程状态以及它们之间转换流程。 ? void *stack:指向内核指针,内核通过 dup_task_struct 为每个进程都分配内核空间,并记录在此。...内核在启动时候会在 head.S 里通过 __primary_switched 来做内核初始化: SYM_FUNC_START_LOCAL(__primary_switched)...如何获取当前进程 内核中经常通过 current 宏来获得当前进程对应 struct task_sturct 结构,我们借助 current,结合上面介绍内容,看下具体实现。

1.6K30

Linux内核进程负载均衡机制

再具体实现中,如何选择将进程迁移到目标CPU,除了考虑各个CPU负载平衡,还需要将Cache利用纳入权衡因素。同时,对于进程A唤醒进程B这个模型,还做了特殊处理。...SMP组织 为了更好地利用Cache,内核将CPU(如果开启了超线程,那么以逻辑CPU为单位,否则以物理CPU核心为单位)组织成了调度域。...值得注意是 每个CPU对应调度域数据结构都包含了有效内容,比如说SMT层中,CPU0和CPU1不同调度域数据结构,内容是一模一样。...[9n6cjr8brh.png] 以下是CPU每个层级调度域调用load_balance()函数核心流程,目的是把一些进程迁移到指定CPU(该场景就是当前CPU)。...内核运行中,还有部分情况中需要用掉SMP负载均衡模型来确定最佳运行CPU: 进程A唤醒进程B时,try_to_wake_up()中会考虑进程B将在哪个CPU上运行。

12.2K220

Linux内核进程负载均衡

简介 Linux内核进程调度核心是选择哪个任务在哪个CPU上运行,解决各个进程之间能够公平共享CPU资源,同时需要确认进程需要占用CPU时间,确定下一个需要运行进程。...负载均衡成本开销 首先需要了解下CPU核心之间数据流通信原理,这样就能大概知道CPU中Core之间进程迁移之间开销 由于NUMA是以层次关系呈现,因此在执行进程负载均衡也会呈现不同成本开销...,进程迁移到新Core上缺失L1 Cache数据,这就需要进程状态数据需要在CPU Core之间进行通信获取这些数据,根据上图CPU通信模式可以了解,成本代价是蛮大。...内核采用调度域解决现代多CPU多核问题,调度域是具有相同属性和调度策略处理器集合,任务进程可以在它们内部按照某种策略进行调度迁移。...目前内核进程调度按照如下原则进行,这些原则都是按照cpu架构以及通信路径来进行

99620

Linux进程PCB理解&&查看进程信息方法

进一步说,正是系统调用函数进行了封装,才使诸如C语言,C++等各种编程语言具有了跨平台性,我上层同样都是调用printf函数,在linux操作系统下我就去调用linux系统调用函数(封装在C标准库...下面是计算机层状结构图: 二、进程理解 可执行程序被加载到内存,加载是程序代码和数据,可是操作系统并不认识哪些代码和数据对应哪些进程。...所以,操作系统在加载可执行程序形成进程同时,会创建一个描述该进程结构体,称为PCB(process control block,进程控制块),linux操作系统下称之为task_struct。...此后,操作系统对于进程管理,就转换成了对于PCB链表增删查改。进一步,我们可以了解到,进程就等于内核数据结构加可执行程序。...三、查看进程 ps axj:在Linux系统中用于查看关于进程更多信息 其中pid就是进程对应标识符,ppid就是进程进程对应标识符 ps ajx | head -1 && ps ajx |

16210

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

内核线程使用是廉价,唯一使用资源就是内核和上下文切换时保存寄存器空间。支持多线程内核叫做多线程内核(Multi-Threads kernel )。...它是基于内核线程高级抽象,因此只有先支持内核线程,才能有LWP。每一个进程有一个或多个LWPs,每个LWP由一个内核线程支持。这种模型实际上就是恐龙书上所提到一线程模型。...其次,每个LWP都需要有一个内核线程支持,因此LWP要消耗内核资源(内核线程空间)。因此一个系统不能支持大量LWP。 ?...上图是最初一个用户线程模型,从中可以看出,进程中包含线程,用户线程在用户空间中实现,内核并没有直接用户线程进程调度,内核调度对象和传统进程一样,还是进程本身,内核并不知道用户线程存在。..., Linux内核其实本质上没有线程概念, Linux下线程其实上是与其他进程共享某些资源进程而已。

6.3K30

Linux进程地址空间理解

一、关于进程地址空间简单理解 进程地址空间其实是分了很多个区域,区域划分本质就是区域内各个地址都是可以使用。...如同下面这个图所示: 无论是环境变量地址还是环境变量表地址,所存放地址都在上部。这里已初始化数据和未初始化数据是指全局变量,包括静态变量(静态变量默认被初始化为0)。...进程地址空间不是真实物理内存,叫做虚拟内存。每一个进程都有自己独立PCB,也有自己独立地址空间。在32位机器下,进程地址空间大小为[0,4GB]。...上面图地址空间和页表都是操作系统帮我们维护。当父进程创建子进程时候,操作系统会把上面的这些结构以及结构中内容给子进程爷拷贝一份。所以在子进程刚创建出来时跟父进程是访问同一块物理内存。...物理内存可以在任意一个空闲合法位置进行申请,一个进程申请物理内存可以是无序,但一旦映射到页表中就跟有序虚拟地址产生了一一关系,将物理内存从无序变成有序。

11510

Linux信号产生内核级理解

然后操作系统会判定键盘文件中用户输入数据是命令还是普通数据,如果是普通数据操作系统就直接将将数据写到键盘文件缓冲区中,让对应进程读到,如果是命令,操作系统就会解释成信号发送给对应进程。...信号发送给进程进程PCB中其实是用一个32位整数来保存收到信号,也就是说,信号是以位图形式被保存起来。...向进程发送信号本质是写入信号,将保存信号位图对应比特位由零置一,一个信号就算被发送给进程了。...因为发送信号要修改PCB内核数据结构内容,所以无论产生信号方式有多少种,最终都是由操作系统将信号写入进程PCB中。...ESP, EBP: 32位堆指针和基指针寄存器,用于管理堆栈和访问堆栈上数据。 指令指针寄存器 EIP: 32位指令指针寄存器,指向CPU下一条要执行指令地址。

10510

Linux内核内幕:深入解析进程结束过程

那么内核是如何处理进程自身消亡,又是如何处理它进程、父进程呢?让我们来结合《Linux内核设计与实现》以及Linux v6.3版本进行学习与了解。...进程终结全过程 进程在调用exit后,最后会通过内核do_exit函数来进行终结。...和内核plug/unplug机制有关,可以暂时不用去深究。...(tsk); // 更新当前进程资源统计信息 exit_task_stack_account(tsk); // 检查调用是否合法 check_stack_usage(); // 禁止抢占...lockdep_free_task(tsk); // 通知内核当前进程已结束 do_task_dead(); } 至此,一个进程就已经终结了,但是注意这个进程只是作为一个僵尸进程存在,并没有真正消亡

44010

Linux内核11-进程之间关系

在阅读本文之前,应该熟读《Linux内核10-list_head和hlist_head理解》这一篇文章,因为这对理解本文有很大帮助。...进程0和1是由内核创建,后面我们会看到,进程1(init)是所有其它进程祖先。...正如计算机科学课程中所讲,哈希函数是无法保证PID和哈希表索引之间一关系。两个PID对应哈希表中同一个索引,就成为 冲突。...为了解决这个冲突问题,Linux决定使用一个双向链表存储这些冲突PID,把这个双向链表表头存入哈希表中,通过这种方法,完美地解决了这个冲突。...比如,假设内核需要检索属于某个线程组所有进程,也就是所有的进程其tgid成员都等于某个相同进程ID。

75320

WPF认识

随着.NET学习深入,慢慢认识到了WPF。这应该属于新事物,属于.NET 3.0里面的一个组件~它出现相对于传统GUI程序来说是大变革。...通过它,我们可以轻松感受软件炫丽,震撼视觉效果和用户体验,因此我们可以对WinForm里自定义控件与GID+组合开发带来痛苦说拜拜。 开发WPF要用到全新语言——XAML语言。...虽然使用xml作为界面载体并不是什么新技术,但微软把它作为一个战略来推广自然将大大增加它使用范围,通过微软一系列开发工具,可以让初级程序员也可以基于这一架构开发出优秀软件产品来,这就是微软开发工具魅力...可以想像现在有些桌面程序开发人员除了写后台处理代码之外还要兼顾前端UI界面设计,和现在ASP网页模式一样,造成软件维护不易,这也是传统WinForm程序弊端之一。...和ASP.NET一样达到代码和设计相分离… 目前WPF认识还只是在入门阶段,就目前来说要学习它时机还不是很成熟,当然,这只是我个人来说,毕竟我机器还够不上运行VS2008(注:VS2005也可以开发

45930

Linux内核13_1-进程切换是FPU单元处理_X86

这样设计缺点是,内核开发者无法混合使用转义浮点指令和MMX指令;优点是内核开发者可以使用相同进程切换代码来保存浮点单元和MMX状态。...假设进程A正在使用协处理器,当进程A切换到进程B时候,内核设置TS标志,且把浮点寄存器保存到进程A任务状态段(TSS)中。如果进程B没有使用协处理器,内核不需要恢复浮点寄存器内容。...2 FPU相关数据结构 Linux内核是使用什么数据结构表示FPU、MMX和XMM这些需要保存寄存器值呢?...基于x86架构Linux内核使用i387_union类型变量thread.i387存储这些值,该变量位于进程描述符中。...没有协处理器CPU模型使用i387_soft_struct类型数据结构,这是Linux为了兼容那些使用软件模拟协处理器旧芯片。故我们在此,不做过多描述。

70120

浅墨: 聊聊Linux IO(中)——Linux内核IO

由图可见,从系统调用接口再往下,LinuxIO致大致有三个层次: 文件系统层,以 write(2) 为例,内核拷贝了write(2)参数指定用户态数据到文件系统Cache中,并适时向下层同步...块层,管理块设备IO队列,IO请求进行合并、排序(还记得操作系统课程学习过IO调度算法吗?)...设备层,通过DMA与内存直接交互,完成数据和具体设备之间交互 结合这个图,想想Linux系统编程里用到Buffered IO、mmap(2)、Direct IO,这些机制怎么和Linux IO联系起来呢...假设要去读一个冷文件(Cache中不存在),open(2)打开文件内核后建立了一系列数据结构,接下来调用read(2),到达文件系统这一层,发现Page Cache中不存在该位置磁盘映射,然后创建相应...写操作直接映射进程buffer到磁盘扇区,以DMA方式传输数据,减少了原本需要到Page Cache层一次拷贝,提升了写效率。

2.3K20

DragonOS内核traceback

简介   内核traceback功能位于kernel/debug/traceback/文件夹中。为内核态提供traceback功能,打印调用到屏幕上。   ...具体使用场景如:内核出错时候,打印调用,以便定位原因。...演示如下图所示: 图片 API void traceback(struct pt_regs * regs) 作用   该接口定义于kernel/debug/traceback/traceback.h中,将会对给定内核进行...参数 regs   要开始追踪第一层内核帧(也就是底端) 实现原理   当内核第一次链接之后,将会通过Makefile中命令,运行kernel/debug/kallsyms程序,提取内核文件符号表...该文件rodata段中存储了text段函数符号表。接着,该文件将被编译为kallsyms.o。最后,Makefile中再次调用ld命令进行链接,将kallsyms.o链接至内核文件。

45020

Linux 内核进程管理 ( Linux 内核进程状态 | TASK_RUNNING | TASK_INTERRUPTIBLE | __TASK_STOPPED | EXIT_ZOMBIE )

文章目录 一、Linux 内核进程状态 二、TASK_RUNNING 状态 三、TASK_RUNNING 状态 四、TASK_UNINTERRUPTIBLE 状态 五、__TASK_STOPPED...状态 六、EXIT_ZOMBIE 状态 一、Linux 内核进程状态 ---- Linux 内核进程管理 提供了一系列 API , 如 TASK_RUNNING TASK_INTERRUPTIBLE...可以执行 , 或者已经准备就绪 , 随时开始执行 ; Linux 内核中 , 没有 执行状态 / 就绪状态 进行 明确区分 ; 三、TASK_RUNNING 状态 ---- TASK_INTERRUPTIBLE...: 表示 可中断睡眠状态 ; 进程进入到该状态进行阻塞 , 一旦 执行条件达成 , 立刻 中断阻塞 , 开始执行进程 , 进入 TASK_RUNNING 状态 ; 该状态又称为 " 浅睡眠状态 " ;..., 标记为 D 状态 是该 TASK_UNINTERRUPTIBLE 状态 , 该状态下进程不能被杀死 ; 该状态又称为 " 深度睡眠状态 " 五、__TASK_STOPPED 状态 ---- _

58620
领券