linux 进程管理
linux 进程管理
废言Pro
时间加努力
展开
-
linux 进程内核栈
概念在每一个进程的生命周期中,经常会通过系统调用(SYSCALL)陷入内核。在执行系统调用陷入内核之后,这些内核代码所使用的栈并不是原先用户空间中的栈,而是一个内核空间的栈,这个称作进程的“内核栈”。每个task的栈分成用户栈和内核栈两部分,进程内核栈在kernel中的定义是:union thread_union { struct thread_info thread_info; unsigned long stack[THREAD_SIZE/sizeof(long)];};每个ta转载 2020-11-26 12:50:19 · 871 阅读 · 0 评论 -
CFS调度器(1)-基本原理
首先需要思考的问题是:什么是调度器(scheduler)?调度器的作用是什么?调度器是一个操作系统的核心部分。可以比作是CPU时间的管理员。调度器主要负责选择某些就绪的进程来执行。不同的调度器根据不同的方法挑选出最适合运行的进程。目前Linux支持的调度器就有RT scheduler、Deadline scheduler、CFS scheduler及Idle scheduler等。我想用一系列文章呈现Linux 调度器的设计原理。注:文章代码分析基于Linux-4.18.0。什么是调度类从L转载 2020-09-09 14:52:37 · 1038 阅读 · 0 评论 -
大碰撞!当Linux多线程遭遇Linux多进程
## 背景本文并不是介绍Linux多进程多线程编程的科普文,如果希望系统学习Linux编程,可以看[《Unix环境高级编程》第3版](https://book.douban.com/subject/1788421/)本文是描述多进程多线程编程中遇到过的一个坑,并从内核角度分析其原理。这里说的多进程多线程并不是单一的**多进程或多线程**,而是**多进程和多线程**,往往会在写一个大型应用时才会用到多进程多线程的模型。这是怎么样的一个坑呢?假设有下面的代码:童鞋们能分析出来,线程函数`..转载 2020-06-24 08:52:43 · 461 阅读 · 0 评论 -
red_hat_enterprise_linux
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/6/pdf/resource_management_guide/Red_Hat_Enterprise_Linux-6-Resource_Management_Guide-zh-CN.pdf原创 2020-04-25 20:23:55 · 234 阅读 · 0 评论 -
可以杀死的深度睡眠TASK_KILLABLE状态
深度睡眠与浅度睡眠众所周知,Linux的进程睡眠有两种常规状态: TASK_INTERRUPTIBLE(浅度睡眠):可以被等待的资源唤醒,也能被signal唤醒; TASK_UNINTERRUPTIBLE(深度睡眠):可以被等待的资源唤醒,但是不能被signal唤醒。 简单来说,深度睡眠的进程必须等待资源来了才能醒,在此之前,甚至你给它发任何的信号,它都不可能醒来。...转载 2020-04-23 10:37:24 · 639 阅读 · 0 评论 -
CFS任务的负载均衡(框架篇)
我们描述负载均衡的系列文章一共三篇,第一篇是框架部分,即本文,主要描述了负载均衡相关的原理、场景和框架。后面的两篇是对均衡代码的情景分析,通过对load balance、task placement和active upmigration几个典型的负载均衡来呈现其实现细节,稍后发布,敬请期待。本文出现的内核代码来自Linux5.4.28,如果有兴趣,读者可以配合代码阅读本文。...转载 2020-04-23 10:10:50 · 524 阅读 · 0 评论 -
Linux进程调度技术的前世今生
郭大侠是我最佩服的大侠,他为人低调,技术精湛又虚怀若谷,实为我辈Linuxer之楷模。他的http://www.wowotech.net/网站,有很多精彩的原创文章,已经使得百千万读者获益。侠之大者,为国为民。一、前言随着内核版本的演进,其源代码的膨胀速度也在递增,这让Linux的学习曲线变得越来越陡峭了。这对初识内核的同学而言当然不是什么好事情,满腔热情很容易被当头浇灭。我有一个循序渐进...转载 2020-03-25 10:23:42 · 645 阅读 · 0 评论 -
关于Linux进程优先级数字混乱的彻底澄清
Linux进程的调度优先级数字会在好几个地方出现:内核,用户,top命令。他们各自都有自己的表示法。我们用一个实际的例子来说明,下面在Linux写一个最简单的程序:编译它运行,把调度策略设置为SCHED_FIFO,优先级设置为50:$ sudo chrt -f50./a.out这个时候我们在top命令里面观察a.out:我们看到a.out的PR(优先级是)-51,C...转载 2020-03-24 10:46:29 · 2486 阅读 · 1 评论 -
是谁关闭了Linux抢占,而抢占又关闭了谁?
前言本人的目的在于解惑,把读者从糊里糊涂的状态解救出来。本文对比分析: preempt_disable() local_irq_disable()/local_irq_save(flags) spin_lock() spin_lock_irq()/spin_lock_irqsave(lock, flags) 哪些关闭了抢占?另外,再说清楚,抢占又...转载 2020-03-24 10:28:10 · 1030 阅读 · 0 评论 -
Linux调度域负载均衡-设计,实现和应用
第一部分:Linux负载均衡的设计一.负载均衡的原则1.确保每个cpu核心的负载均衡;2.在cpu和cache以及内存布局的影响下加权执行1。对于一般多核心cpu情况,以上两个原则可以简述为下面的原则:1.尽量不执行进程迁移,以确保cache的热度;2.除非各个cpu的负载已经严重失衡,执行负载均衡二.系统以及cpu的拓扑结构这个道理看似简单,然而如果对于一个大型的...转载 2018-12-09 14:14:39 · 926 阅读 · 0 评论 -
linux调度器源码分析 - 概述(一)
引言调度器作为操作系统的核心部件,具有非常重要的意义,其随着linux内核的更新也不断进行着更新。本系列文章通过linux-3.18.3源码进行调度器的学习和分析,一步一步将linux现有的调度器原原本本的展现出来。此篇文章作为开篇,主要介绍调度器的原理及重要数据结构。调度器介绍随着时代的发展,linux也从其初始版本稳步发展到今天,从2.4的非抢占内核发展到今天的可抢占内核,调度...转载 2020-01-20 17:03:41 · 638 阅读 · 0 评论 -
Linux进程调度策略的发展和演变--Linux进程的管理与调度(十六)
1 前言1.1 进程调度内存中保存了对每个进程的唯一描述, 并通过若干结构与其他进程连接起来.调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换.1.2 进程的分类linux把进程区分为实时进程和非实时进程, 其中非实时进程进一步划分为交互式进程和批处理进程在linu...转载 2020-01-20 16:22:17 · 316 阅读 · 0 评论 -
Linux进程调度器概述--Linux进程的管理与调度(十五)
内存中保存了对每个进程的唯一描述, 并通过若干结构与其他进程连接起来.调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换.1 背景知识1.1 什么是调度器通常来说,操作系统是应用程序和可用资源之间的媒介。典型的资源有内存和物理设备。但是CPU也可以认为是一个资源,调度器可以...转载 2020-01-20 15:23:36 · 301 阅读 · 0 评论 -
LinuxELF文件格式详解--Linux进程的管理与调度(十二)
对象文件格式对象文件首先,你需要知道的是所谓对象文件(Object files)有三个种类:可重定位的对象文件(Relocatable file) 可执行的对象文件(Executable file) 可被共享的对象文件(Shared object file)可重定位的对象文件(Relocatable file)适于链接的可重定位文件(relocatable file),包含...转载 2019-11-08 00:07:58 · 323 阅读 · 0 评论 -
Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)
execve系统调用execve系统调用我们前面提到了, fork, vfork等复制出来的进程是父进程的一个副本, 那么如何我们想加载新的程序, 可以通过execve来加载和启动新的程序。x86架构下, 其实还实现了一个新的exec的系统调用叫做execveat(自linux-3.19后进入内核)syscalls,x86: Add execveat() system calle...转载 2019-11-07 09:14:41 · 870 阅读 · 0 评论 -
Linux内核线程kernel thread详解--Linux进程的管理与调度(十)
内核线程为什么需要内核线程Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求)。内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的。内核线程就是内核的分身,一个分身可以处理一件特定事情。内核线程的调度由内核负责,一个内核线程处于阻塞状态时不影响其他的内核线程,因为其是调度的基本单位。这与用户线程是不一样的。因为内核线程只运行在内...转载 2019-11-06 23:35:00 · 172 阅读 · 0 评论 -
Linux进程内核栈与thread_info结构详解--Linux进程的管理与调度(九)
前言为什么需要内核栈进程在内核态运行时需要自己的堆栈信息, 因此linux内核为每个进程都提供了一个内核栈kernel stack,struct task_struct{ // ... void *stack; // 指向内核栈的指针 // ...};内核态的进程访问处于内核数据段的栈,这个栈不同于用户态的进程所用的栈。用户态进程所用的栈,是...转载 2019-11-05 11:15:12 · 1567 阅读 · 0 评论 -
Linux下的进程类别(内核线程、轻量级进程和用户进程)以及其创建方式--Linux进程的管理与调度(四)
Linux进程类别虽然我们在区分Linux进程类别, 但是我还是想说Linux下只有一种类型的进程,那就是task_struct,当然我也想说linux其实也没有线程的概念, 只是将那些与其他进程共享资源的进程称之为线程。一个进程由于其运行空间的不同, 从而有内核线程和用户进程的区分, 内核线程运行在内核空间, 之所以称之为线程是因为它没有虚拟地址空间, 只能访问内核的代码和数据, 而用户...转载 2019-10-25 20:47:18 · 187 阅读 · 0 评论 -
Linux 内核进程管理之进程ID
Linux 内核使用task_struct数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一。该数据结构在内核文件include/linux/sched.h中定义,在Linux 3.8 的内核中,该数据结构足足有 380 行之多,在这里我不可能逐项去描述其表示的含义,本篇文章只关注该数据结构如何来组...转载 2019-10-25 09:37:17 · 219 阅读 · 2 评论 -
CFS 调度器学习笔记
首先声明,本文参考了网上很多CFS的文章,包括:《 使用完全公平调度程序(CFS)进行多任务处理》 --Avinesh Kumar《Linux进程管理之CFS组调度分析》 --ericxiaoInside the Linux 2.6 Completely Fair Scheduler --M. Tim Jones完全公平调度(CFS) --wxc...转载 2018-06-08 22:59:14 · 1116 阅读 · 2 评论 -
打通Linux脉络系列:进程、线程和调度-宋宝华-专题视频课程
https://blog.csdn.net/21cnbao/article/details/83577542不知道讲的怎么样,300百多还挺贵的,纠结要不要买窝 ^~~^原创 2019-05-06 16:48:13 · 800 阅读 · 0 评论 -
为什么Linux CFS调度器没有带来惊艳的碾压效果
但凡懂Linux内核的,都知道Linux内核的CFS进程调度算法,无论是从2.6.23将其初引入时的论文,还是各类源码分析,文章,以及Linux内核专门的图书,都给人这样一种感觉,即 CFS调度器是革命性的,它将彻底改变进程调度算法。 预期中,人们期待它会带来令人惊艳的效果。然而这是错觉。人们希望CFS速胜,但是分析来分析去,却只是 在某些方面比O(1) 调度器稍微好一点点。 甚至在某些方...转载 2019-07-17 11:19:58 · 1326 阅读 · 0 评论 -
Linux CFS调度算法核心解析
回家的路上,聊了下CFS调度器…我昨天不是写了一篇批判性的文章嘛:【为什么Linux CFS调度器没有带来惊艳的碾压效果】https://blog.csdn.net/dog250/article/details/95729830确实如此啊,我又没说错啥。CFS stands for “Completely Fair Scheduler,” and is the new "desktop"...转载 2019-07-25 11:16:00 · 1267 阅读 · 1 评论 -
朴素的UNIX之-进程/线程模型
UNIX的传统倾向于将一个任务交给一个进程全权受理,但是一个任务内部也不仅仅是一个执行绪,比如一个公司的所有成员,大家都在做同一件事,每个人却只负责一部分,粒度减小之后,所有的事情便可以同时进行,不管怎样,大家还都共享着所有的资源。因此就出现了线程。线程其实就是共享资源的不同的执行绪。线程的语义和朴素的UNIX进程是不同的。0.原始进程模型-著名的fork调用朴素的UNIX进程依托于著名的...转载 2019-10-09 20:20:03 · 233 阅读 · 0 评论 -
Linux进程的管理与调度(八) -- Linux下进程的创建过程分析(_do_fork/do_fork详解)
前言Unix标准的复制进程的系统调用时fork(即分叉),但是Linux,BSD等操作系统并不止实现这一个,确切的说linux实现了三个,fork,vfork,clone(确切说vfork创造出来的是轻量级进程,也叫线程,是共享资源的进程)系统调用 描述 fork fork创造的子进程是父进程的完整副本,复制了父亲进程的资源,包括内存的内容task_struct内容 v...转载 2017-11-16 23:42:40 · 391 阅读 · 0 评论 -
Linux进程的管理与调度(七) -- Linux下2号进程的kthreadd
Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2)* idle进程由系统自动创建, 运行在内核态 idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产生的进程。完成加载系统后,演变为进程调度、交换* init进程由idle通过kernel_thr...转载 2017-11-16 23:28:21 · 314 阅读 · 0 评论 -
进程优先级札记
今天查看了linux下的实时线程,FIFO和RR策略的调度,遇到一个问题:priority越大优先级越高呢?还是越小越高呢? 回答这个问题要明白一个问题,首先,linux2.6内核将任务优先级进行了一个划分: 0——99 实时进程 100——139 非实时进程现在,这个划分是起决定作用的,而且一定是数值越小,优先级越高。但是,有时候从网上会看到 优先级数值越大,...原创 2013-10-27 11:08:58 · 1904 阅读 · 0 评论 -
Linux进程的管理与调度(六) -- Linux下1号进程的前世(kernel_init)今生(init进程)
Linux下有3个特殊的进程,idle进程(PID=0), init进程(PID=1)和kthreadd(PID=2)* idle进程由系统自动创建, 运行在内核态 idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产生的进程。完成加载系统后,演变为进程调度、交换* init进程由idle通过kernel_thread创建,...转载 2017-11-16 23:21:00 · 350 阅读 · 0 评论 -
浅析 Linux 初始化 init 系统(3) Systemd
Systemd 的简介和特点Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。systemd 和 ubuntu 的 upstart 是竞争对手,预计会取代 UpStart,实际上在作者写作本文时,已经有消息称 Ubuntu 也将采用 systemd 作为其标准的系统初始化系统。Systemd 的很多转载 2017-11-16 23:19:16 · 577 阅读 · 0 评论 -
Linux进程的管理与调度(五) -- Linux下0号进程的前世(init_task进程)今生(idle进程)
Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2)* idle进程由系统自动创建, 运行在内核态 idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产生的进程。完成加载系统后,演变为进程调度、交换* init进程由idle通过kernel_thr...转载 2017-11-16 22:51:48 · 333 阅读 · 0 评论 -
内核线程、轻量级进程、用户线程三种线程概念解惑(线程≠轻量级进程)
线程与进程概念在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;线程是程序执行的最小单元。即线程作为调度和分配的基本单位,进程作为资源分配的基本单位一个进程的组成实体可以分为两大部分:线程集和资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。线程概念的产生传统单线程转载 2017-11-09 22:43:18 · 313 阅读 · 0 评论 -
Linux进程的管理与调度(三) -- Linux进程ID号
Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一。该数据结构在内核文件include/linux/sched.h中定义,在目前最新的Linux-4.5(截至目前的日期为2016-05-11)的内核中,该数据结构足足有 380 行之多,在这里我不可能逐项去描...转载 2017-11-09 22:38:19 · 703 阅读 · 0 评论 -
Linux进程的管理与调度(二)-- Linux的命名空间详解
PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace。每个Namespace里面的资源对其他Namespace都是透明的。要创建新的Namespace,只需要在调用clone时指定相应的flag。Linux Namespaces机制为实现基于容器的虚拟化技术提供了很好的基础,LXC(Linux containers)就是利用这一特性实现了资源的隔离。不同Cont...转载 2017-11-09 22:33:56 · 270 阅读 · 0 评论 -
Linux进程的管理与调度(一)--- Linux进程描述符task_struct结构体详解
进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。它定义在include/linux/sched.h文件中。谈到task_s...转载 2017-11-07 23:18:28 · 553 阅读 · 0 评论 -
CFS 调度器学习笔记
首先声明,本文参考了网上很多CFS的文章,包括:《 使用完全公平调度程序(CFS)进行多任务处理》 --Avinesh Kumar《 Linux进程管理之CFS组调度分析》 --ericxiao Inside the Linux 2.6 Completely Fair Scheduler -- M. Tim Jones 完全公平...转载 2013-11-08 16:16:21 · 910 阅读 · 0 评论