宋宝华: 关于Linux进程优先级数字混乱的彻底澄清 原创: 宋宝华 Linux阅码场 9月20日 https://mp.weixin.qq.com/s/44Gamu17Vkl77OGV2KkRmQ   有点晕 Linux进程的调度优先级数字会在好几个地方出现:内核,用户,top命令.他们各自都有自己的表示法.我们用一个实际的例子来说明,下面在Linux写一个最简单的程序: 编译它运行,把调度策略设置为SCHED_FIFO,优先级设置为50:$ sudo chrt -f 50 ./a.out这个…
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前言 <设计模式>这本经典的书里面定义了20多种设计模式,虽然都是面向对象的,似乎需要C++.Java这样的语言才能实现,但是根据笔者前面反复强调的,Linux内核虽然是用C语言和汇编语言写成,但是其实也到处充满了面向对象的设计.面向对象更多的是一种思想,而不是一个语言.我们可以用C语言实现极大的OO,Linux内核到处都有OO. 模…
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前向声明 编程定律 先强调一点:在一切可能的场景,尽可能地使用前向声明(Forward Declaration).这符合信息隐蔽的原则. 一个例子 regmap 那么前向声明究竟是个什么鬼?在内核写代码和看代码的童鞋,经常发现Linux内核里面充斥着这样的代码,比如 include/vim linux/regulator/driver.h…
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 竞态无所不在 首先我们要理解竞态(race condition)无所不在,哪怕是对一个全局变量做++的加1动作. a=0 a++; a++这句话,会被翻译为多条指令: ldr     r3, [r3, #0]  adds    r2, r3, #1 str     r2, [r3, #0]  它会先读(ldr),再修改(add),再写(…
本文系转载,著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 最初的2小时,你会爱上Docker,对原理和使用流程有个最基本的理解,避免满世界无头苍蝇式找资料.本人反对暴风骤雨式多管齐下狂轰滥炸的学习方式,提倡迭代学习法,就是先知道怎么玩,有个感性认识,再深入学习高级用法,深层原理,一轮轮迭代.坚决反对一上来就搞几百页厚的东西把人脑子弄乱. Docker是什么? KVM, Virtualbox,…
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) Ftrace简介 Ftrace是Linux进行代码级实践分析最有效的工具之一,比如我们进行一个系统调用,出来的时间过长,我们想知道时间花哪里去了,利用Ftrace就可以追踪到一级级的时间分布. Ftrace案例 写一个proc模块,包含一个proc的读和写的入口.test_proc_show()故意调用了一个kill_time()的函数…
处理器 存储器 接口与总线 I2C时序 SPI总线时序 以太网…
Ftrace简介 Ftrace是Linux进行代码级实践分析最有效的工具之一,比如我们进行一个系统调用,出来的时间过长,我们想知道时间花哪里去了,利用Ftrace就可以追踪到一级级的时间分布. Ftrace案例 写一个proc模块,包含一个proc的读和写的入口.test_proc_show()故意调用了一个kill_time()的函数,而kill_time()的函数,又调用了mdelay(2)和kill_moretime()的函数,该函数体内调用mdelay(2). kill_time()的函…
最初的2小时,你会爱上Docker,对原理和使用流程有个最基本的理解,避免满世界无头苍蝇式找资料.本人反对暴风骤雨式多管齐下狂轰滥炸的学习方式,提倡迭代学习法,就是先知道怎么玩,有个感性认识,再深入学习高级用法,深层原理,一轮轮迭代.坚决反对一上来就搞几百页厚的东西把人脑子弄乱. Docker是什么? KVM, Virtualbox, Vmware是虚拟出机器,让每个实例看到一个单独的机器:而Docker是虚拟出操作系统,实现应用之间的隔离,让各个应用觉得自己有一个自己的操作系统,而且彼此之间隔…
http://mp.weixin.qq.com/s/BixMISiPz3sR9FDNfVSJ6w 本文解释swappiness的作用,以及swappiness=0究竟意味着什么. 内存回收 我们都知道,Linux一个进程使用的内存分为2种: file-backed pages(有文件背景的页面,比如代码段.比如read/write方法读写的文件.比如mmap读写的文件:他们有对应的硬盘文件,因此如果要交换,可以直接和硬盘对应的文件进行交换),此部分页面进page cache anonymous…
转自:https://mp.weixin.qq.com/s/OX-aXd5MYlE_YoZ3p32qWA 作者简介 宋牧春,linux内核爱好者,喜欢阅读各种开源代码(uboot.linux.ucos.rt-thread等),对于优秀的代码框架及其痴迷.现就职于一家手机研发公司,任职Android BSP开发工程师. 正文开始 1. Device Tree简介 设备树就是描述单板资源以及设备的一种文本文件.至于出现的原因,大家可以上网查询更多关于设备树的文章.本篇文章主要是更深层次的探讨设备文件…
转自:https://mp.weixin.qq.com/s/WPZSElF3OQPMGqdoldm07A 作者简介 宋牧春,linux内核爱好者,喜欢阅读各种开源代码(uboot.linux.ucos.rt-thread等),对于优秀的代码框架及其痴迷.现就职于一家手机研发公司,任职Android BSP开发工程师. 正文开始 前情提要: 宋牧春: Linux设备树文件结构与解析深度分析(1) 征稿和征稿奖励名单: Linuxer-"Linux开发者自己的媒体"第二月稿件录取和赠书名单…
1. linux优先级的表示 1.1 优先级的内核表示 linux优先级概述 在用户空间通过nice命令设置进程的静态优先级, 这在内部会调用nice系统调用, 进程的nice值在-20~+19之间. 值越低优先级越高. setpriority系统调用也可以用来设置进程的优先级. 它不仅能够修改单个线程的优先级, 还能修改进程组中所有进程的优先级, 或者通过制定UID来修改特定用户的所有进程的优先级 内核使用一些简单的数值范围0~139表示内部优先级, 数值越低, 优先级越高. 从0~99的范围…
转:http://www.linuxidc.com/Linux/2016-05/131244.htm 深入 Linux 的进程优先级 [日期:2016-05-11] 来源:liwei.life  作者:@orroz [字体:大 中 小]   为什么要有进程优先级?这似乎不用过多的解释,毕竟自从多任务操作系统诞生以来,进程执行占用cpu的能力就是一个必须要可以人为控制的事情.因为有的进程相对重要,而有的进程则没那么重要. 本文作者:邹立巍 Linux系统技术专家.目前在腾讯SNG社交网络运营部 计…
首先linux进程优先级的范围是-20到19 将当前目录下的documents目录打包,但不希望tar占用太多CPU: nice -19 tar zcf pack.tar.gz documents 这个“-19”中的“-”仅表示参数前缀:所以,如果希望赋予tar进程最高的优先级,则执行: nice --19 tar zcf pack.tar.gz documents 也可修改已经存在的进程的优先级: 将PID为1799的进程优先级设置为最低: renice 19 1799 renice命令与ni…
前言 最近研发的产品出了点小bug,最后查到根本原因是,其中一个进程A使用基于FIFO的实时进程优先级,而另一个进程B是使用普通调度的进程优先级,而A和B两个进程是互相通信的,进程B会被饿死,而进程A也不能正常工作.分析问题过程中查找了一些资料,以下记录一些特别注意的点. Linux进程调度的三种策略 (1)SCHED_OTHER,分时调度策略 (2)SCHED_FIFO,实时调度策略,先到先服务 (3)SCHED_RR,实时调度策略,时间片轮转 由于相关内容比较多,本人也末必比别人讲得更清楚,…
权限数字表示法: 1.Linux有三种访问权限: a.可读:r(Read) b.可写:w(Write) c.可执行:x(eXcute) 2.简单说说如何去看该文件的访问权限呢?一般我们执行命令,查看目录下的文件时会显示文件的访问权限,如下图: d  r-x  r-x  - - -,这就是权限,如何去看呢?rwx出现的出现的位置不会发生变化(第一个为r,第二个为w,第三个为x,没 有则为-) 第一部分指的是文件类型,这里的d指的文件类型为目录 第二部分指的是自己的权限,这里的r-x指的是可读不可写…
转自:https://www.cnblogs.com/jkred369/p/6731353.html Linux内核的三种调度策略: 1,SCHED_OTHER 分时调度策略, 2,SCHED_FIFO实时调度策略,先到先服务.一旦占用cpu则一直运行.一直运行直到有更高优先级任务到达或自己放弃 3,SCHED_RR实时调度策略,时间片轮转.当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾.放在队列尾保证了所有具有相同优先级的RR任务的调度公平   Linux线程优先级设置   首先,…
代码中免不了要进行各种数据计算.抛开科学计算不提,普通的计算占地,百分比,同比,环比等需求就很常见.linux shell中进行数字计算,主要有如下几种方式: 1.bc bc是比较常用的linux计算工具了,而且支持浮点运算: [webopa@namenode-backup expensive_user]$ a=`echo 1+1 | bc` [webopa@namenode-backup expensive_user]$ echo $a 2 1 2 3 但是浮点数运算的精度问题,暂时还没明白什…
在学习了linux的完全公平调度算法(CFS)后,记录下学习轨迹 这篇文章主要讲述,完全公平调度算法的工作方式,和一些调度知识 我们可以通过ps -l看到当前正在运行的进程的详细信息其中 F:表示进程旗标,标识进程所拥有的权限,当我切换到root的时候为4表示拥有root权限,为1仅有fork()权限 R:表示进程当前的状态UID:拥有该进程用户的用户ID R:当前正在运行(RUNNING) S:睡眠(SLEEP) D:不可中断 T:停止(STOP) Z:僵尸进程(ZOMBIE) PID:进程号…
进程cpu资源分配就是指进程的优先权(priority).优先权高的进程有优先执行权利.配置进程优先权对多任务环境的Linux很有用,可以改善系统性能.还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能. 1. 查询进程优先级 [root@dbbak root]# ps –l                                                                                      …
直接上脚本, 使用$(())以及$[]进行数字计算 数值比较:n1 -eq n2检查n1是否等于n2         n1 -le n2检查n1是否小于等于n2n1 -ge n2检查n1是否大于等于n2     n1 -lt n2检查n1是否小于n2n1 -gt n2检查n1是否大于n2         n1 -ne n2检查n1是否不等于n2 #!/bin/bash numa=; numb=; numc1=$(($numa - $numb)); numc2=$[$numa + $numb];…
使用环境 当服务器资源比较紧张的时候,可以通过调整优先级来优先处理某个进程的请求 查看进行优先级(top) 优先级由 -20~19这个范围来表示优先级大小,数值越小,优先级越高, 设置方法: 使用renince -20 1460 来将1460这个进程的优先级调整为-20   也就是优先处理1460这个进程   -20(优先级的赋值)  1460(进程的PID)…
三个组 每个都有三个权限 r w x每个权限用二进制 0 和 1 标示 1即为有此权限 0 标示无权限  ower    group  other  r w x    r w x  r w x 每个组都可以设为以下权限: 所有权限 rwx全是1 为 二进制111 即为7 读写权限110 即为6 读和执行权限101 即为5 只有读权限为 100 即为4 写和执行权限011 即为3 只有写权限 010 即为2 只有执行全新 001 即为1 无权限即为000 为0 777 即为三个组全有读写执行权限…
https://scut.online/p/240 就是要小心绝对路径中也有.和..出现. #include<bits/stdc++.h> using namespace std; #define ll long long struct path{ string fullpath; void toparent(){ int n; n=fullpath.length(); ;i>=;i--){ if(fullpath[i]=='/'){ fullpath=fullpath.substr(,…
https://scut.online/p/243 这道题唯一难点在于如何快速确定m合法.可以统计滑动窗口中已有元素的数量. #include<bits/stdc++.h> using namespace std; #define ll long long int n; ]; ]; int sum; ]; int cntsum; bool ok(int m){ memset(cnta,,sizeof(cnta)); cntsum=; ;i<m;i++){ ){ cntsum++; } c…
https://scut.online/p/216 演员 把这个当成dp算了半天,各种姿势,好吧,就当练习一下树dp. 假如是每个节点的层数之和,按照dp[i][j]为从i点出发获得j科技的最小费用dp是比较好的. 改了改居然也可以过. #include<bits/stdc++.h> using namespace std; typedef long long ll; vector<pair<int, int> > E[50]; int d[50]; int f[50]…
很早以前在网上看到的韦东山老师写的文章,复制到自己的博客,方便自己以后看. 在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会). C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能.比如写一个数组排序.输入数字求和什么的. 学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决:执行出错没关系,自己去分析.以前我是用 VC来练习C语言的,经常去尝试着写一些C语言竞赛的题目.它们是纯C.纯数学.纯逻辑的题目,不涉及界面这些…
作为一个新人.如何学习嵌入式Linux?我一直在问太多次,特写文章来回答这个问题. 在学习嵌入式Linux之前.肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会).C语言要学到什么程度呢?越熟当然越好.不熟的话也要具备基本技能.比方写一个数组排序.输入数字求和什么的.学C语言唯一的方法是多敲代码多练习.编译出错没关系,自己去解决:运行出错没关系.自己去分析.曾经我是用VC来练习C语言的,常常去尝试着写一些C语言竞赛的题目. 它们是纯C.纯数学.纯逻辑的题目.不涉及界面…