一、课程描述

本课程是打下内核、驱动和系统编程基础的课程,它主要讲解Linux内核最核心的进程调度、内存管理和I/O模型,打通开发过程中对Linux系统知识的要求。我们在多年的开发实践中发现,很多Linux开发者,无论做内核还是做系统编程,缺乏对Linux系统本身的认识,这使得他们在工程中处处受阻,碰到很多问题之后,不理解本质原因。所以本课程的定位,实际是为了帮助学员打通对Linux理解的任督二脉。

二、主办单位:

中国高科技产业化研究会智能信息处理分会  

北京中际赛威文化发展有限公司

北京中际荣威科技有限公司

三、研修时间:2019年3月28-30日(27日 报到)  

四、研修地点:北京(具体地点及路线图详见报到通知)

五、培训对象:

本课程适合对象: Linux开发者(使用Linux、在Linux上从事开发)

课时安排:每天共6个小时,上课4小时、上机2小时,每天安排多个上机实践,巩固课堂知识。

随课程赠送《Linux内核设计与实现》

c9cebda6d8da07bfe4046162af4d5988.png

六、课程内容

43ff41957984708c913b6daa4d6f5127.png

热身:Linux内核学习的方法论

1. Linux内核学习的8句话

2. 分析内核源码如何入手

3. Linux内核中的源码地图

第一章 进程

第一节 进程生命周期

1.Linux进程生命周期(就绪、运行、睡眠、停止、僵死)

2.僵尸是个什么鬼?

3.停止状态与作业控制,cpulimit

4.内存泄漏的真实含义

5.task_struct以及task_struct之间的关系

6.初见fork和僵尸

练习题

1.fork的例子

2.life-period例子,观察僵尸

3.用cpulimit控制CPU利用率

第二节 进程的创建、退出和睡眠

1.fork、vfork、clone

2.写时拷贝技术

3.Linux线程的实现本质

4.进程0和进程1

5.进程的睡眠和等待队列

6.孤儿进程的托孤,SUBREAPER

练习题

1.fork、vfork、Copy-on-Write例子

2.life-period例子,实验体会托孤

3.pthread_create例子,strace它

4.彻底看懂等待队列的案例

第三节 调度算法

1.CPU/IO消耗型进程

2.吞吐率 vs. 响应

3.SCHED_FIFO、SCHED_RR

4.SCHED_NORMAL和CFS

5.nice、renice

6.chrt

练习题

1.运行2个高CPU利用率程序,调整他们的nice

2.用chrt把一个死循环程序调整为SCHED_FIFO

3.阅读ARM的big.LITTLE架构资料,并论述为什么ARM要这么做?

第四节 多核调度、cgroup、实时性

1.多核下负载均衡

2.中断负载均衡、RPS软中断负载均衡

3.cgroups和CPU资源分群分配

4.Android和NEON对cgroups的采用

5.Linux为什么不是硬实时的

6.preempt-rt对Linux实时性的改造

练习题

1.用time命令跑1个含有2个死循环线程的进程

2.用taskset调整多线程依附的CPU

3.创建和分群CPU的cgroup,调整权重和quota

4.Cyclictest

第二章 内存

第一节 硬件原理和分页管理

1.CPU寻址内存,虚拟地址、物理地址

2.MMU以及RWX权限、kernel和user模式权限

3.内存的zone: DMA、Normal和HIGHMEM

4.Linux内存管理Buddy算法

5.连续内存分配器(CMA)

练习题

1.尝试去更改一个const变量

2.meltdown实例

3.看/proc/buddyinfo

第二节 内存的动态申请和释放

1.slab、kmalloc/kfree、/proc/slabinfo和slabtop

2.用户空间malloc/free与内核之间的关系

3.mallopt

4.vmalloc

5.内存耗尽(OOM)、oom_score和oom_adj

6.Android进程生命周期与OOM

练习题

1.看/proc/slabinfo,运行slabtop

2.运行mallopt.c程序:mallopt(M_TRIM_THRESHOLD)等

3.看/proc/vmallocinfo,grep ioremap映射

4.运行一个很耗费内存的程序,观察oom memory

5.通过oom_adj调整firefox的oom_score

第三节 进程的内存消耗和泄漏

1.进程的VMA。

2.进程内存消耗的4个概念:vss、rss、pss和uss

3.page fault的几种可能性,major和minor

4.应用内存泄漏的界定方法

5.应用内存泄漏的检测方法:valgrind和addresssanitizer

练习题

1.看一下进程的/proc//maps和smaps文件;

2.pmap一个进程;

3.把同一个程序运行2次,运行1次,观察pss;再运行,得到2个进程,观察代码段的pss变化;

4.valgrind检查内存错误

第四节 内存与I/O的交换

1.page cache

2.free命令的详细解释

3.read、write和mmap

4.file-backed的页面和匿名页

5.swap以及zRAM

6.页面回收和LRU

练习题

1.把hello,python运行两次,对比时间差;

2.free,cat /dev/sda > /dev/null, free,观察变化,分析原因;

第五节 其他工程问题以及调优

1.DMA和cache一致性

2.内存的cgroup

3.性能方面的调优:page in/out, swapin/out

4.Dirty ratio的一些设置

5.Swappiness

练习题

1.vmstat;

2.smem -s swap -t -k –n

3. 限制一个cgroup的memory,用cgexec把一个进程放到这个cgroup

第三章 I/O

第一节  Linux I/O和网络模型

1.阻塞

2.非阻塞

3.多路复用

4.Signal IO

5.异步IO

6.Libevent

练习题

1.针对globalfifo采用signalio访问;

2.运行glibc-aio.c的案例;

3.运行libevent网络程序案例;

4.运行epoll案例

第二节 典型文件系统

1.VFS

2.EXT2/3/4的layout

3.文件系统的日志与掉电保护

练习题

1.dump一个ext文件系统;

2.分析各种日志方法的时序

第三节 IO调度器

1.Linux block IO流程

2.IO调度和CFQ调度算法

3.ionice

4.cgroup与IO

练习题

1.ionice调整进程io优先级,iotop观察;

2.cgroup控制io

七、主讲讲师:

  中际赛威Linux培训讲师,中国高科技产业化研究会智能信息处理分会理事,多年嵌入式系统软硬件开发经验,资深研发工程师、项目经理。熟悉嵌入式系统软硬件设计的全过程,多年来始终专注于嵌入式Linux内核研究和设备驱动的开发,精通嵌入式Linux操作系统,尤其擅长Linux系统内核及设备驱动开发。作为资深PM,曾指导完成多个大型嵌入式项目的软硬件设计。长期活跃于Linux、tboot、Ceph等开源社区,为富士通、贝尔、富士康、德赛西威、飞利浦、南瑞、冠捷、英飞拓、ABB等知名企业提供嵌入式Linux企业培训和技术服务,深受企业和学员广泛好评。

八、收费标准:4500元/人,含资料、午餐、课时费、证书。

九、咨询联系:010-64113137

0883f0ff0cbfc953351ff16ea17bd202.png

51254b022e6d6fce3ca85e8b1530e204.gif

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐