论坛 > 测评 > 《奔跑吧Linux内核(第2版)卷1:基础架构》
《奔跑吧Linux内核(第2版)卷1:基础架构》
  • 市场参考价: ¥ 139.0  |   数量: 10  |   申请人数: 34
  • 预热中 申请中 体验中 已结束
  • 作品展示
  • 活动详情

    本书基于Linux 5.0内核的源代码讲述Linux内核中核心模块的实现,共9章,主要内容包括处理器架构、ARM64在Linux内核中的实现、内存管理之预备知识、物理内存与虚拟内存、内存管理之不错主题、内存管理之实战案例、进程管理之基本概念、进程管理之调度和负载均衡、进程管理之调试与案例分析。书籍适合Linux系统开发人员、嵌入式系统开发人员及Android开发人员阅读,也可供计算机相关专业的师生阅读。作者是一线芯片公司工程师,网称“笨叔”还有章节打卡助读活动,题目邀请到了作者出题哇~ 感兴趣的网友,欢迎来参与~


    如何申请

    (1)往下滑到“产品资料”栏,可进一步了解书籍内容,章节设置;

    (2)>>点击我要申请,认真填写申请理由、阅读分享计划等,即有机会免费获取书籍。


    活动日程

    申请时间:11月2日至11月16日
    遴选公布:11月20日前,公布全部入围名单
    阅读时间:11月27日-1月28日
    颁奖时间:活动结束后两周内

     

    阅读要求

    (1)收到书籍后,请在EEWorld 嵌入式系统编程版块 自拟标题发表阅读心得,活动期间内,至少分享3篇具有实质性内容的心得,进度为至少每15天提交一篇,要求100%原创首发,抄袭会被封杀哦。心得可包含:书籍内容的评价、理解、尝试书中实验过程等;

    (2)活动特邀请到作者笨叔出题,助力读者围读活动,参与者要求至少完成50%的章节问题打卡


    活动评奖

    评委将对阅读心得质量、章节打卡任务完成度、分享及时性三方面进行评分。综合分=60%阅读心得质量+30%章节打卡完成度+10%及时性

    综合分

    奖励

    综合分>=90分

    保留阅读书籍+20威望+20芯积分

    综合分>=75分

    保留阅读书籍+10威望+10芯积分

    综合分<75分

    寄回阅读书籍


  • 产品资料

    目    录

    第  1章 处理器架构  1
    1.1  处理器架构介绍  3
    1.1.1  精简指令集和复杂指令集  3
    1.1.2  大/小端字节序  3
    1.1.3  一条存储读写指令的
    执行全过程  4
    1.1.4  内存屏障产生的原因  8
    1.1.5  高速缓存的工作方式  10
    1.1.6  高速缓存的映射方式  11
    1.1.7  组相联的高速缓存  13
    1.1.8  PIPT和VIVT的区别  14
    1.1.9  页表的创建和查询过程  17
    1.1.10  TLB  21
    1.1.11  MESI协议  21
    1.1.12  高速缓存伪共享  26
    1.1.13  高速缓存在Linux内核中的
    应用  27
    1.1.14  ARM的大/小核架构  28
    1.1.15  高速缓存一致性和一致性
    内存模型  30
    1.1.16  高速缓存的回写策略和
    替换策略  30
    1.1.17  NUMA  31
    1.1.18  ARM处理器设计  32
    1.1.19  最新进展  33
    1.2  ARM64架构  34
    1.2.1  ARMv8-A架构  34
    1.2.2  采用ARMv8架构的常见处理器
    内核  35
    1.2.3  ARMv8架构中的基本概念  35
    1.2.4  ARMv8处理器执行状态  36
    1.2.5  ARMv8支持的数据宽度  36
    1.2.6  不对齐访问  37
    1.3  ARMv8寄存器  37
    1.3.1  通用寄存器  37
    1.3.2  处理器状态  38
    1.3.3  特殊寄存器  39
    1.3.4  系统寄存器  41
    1.4  A64指令集  42
    1.4.1  常用的算术和搬移指令  42
    1.4.2  乘法和除法指令  43
    1.4.3  移位操作指令  45
    1.4.4  位操作指令  45
    1.4.5  条件操作  47
    1.4.6  内存加载指令  48
    1.4.7  多字节内存加载和存储指令  50
    1.4.8  非特权访问级别的加载和存储
    指令  50
    1.4.9  内存屏障指令简介  51
    1.4.10  独占内存访问指令  51
    1.4.11  跳转与比较指令  52
    1.4.12  异常处理指令  53
    1.4.13  系统寄存器访问指令  54
    1.5  GCC内联汇编  55
    1.6  函数调用标准和栈布局  57
    1.7  ARM64异常处理  59
    1.7.1  异常类型  59
    1.7.2  同步异常和异步异常  60
    1.7.3  异常发生后的处理  60
    第 2章 ARM64在Linux内核中的实现  62
    2.1  ARM64内存管理  63
    2.1.1  页表  63
    2.1.2  页表映射  64
    2.1.3  页表项描述符  65
    2.1.4  Linux内核中的页表  68
    2.1.5  ARM64内核内存分布  74
    2.1.6  案例分析:ARM64的页表映射
    过程  78
    2.2  高速缓存管理  84
    2.3  TLB管理  87
    2.4  内存属性  90
    2.4.1  内存属性  91
    2.4.2  高速缓存共享属性  94
    2.5  内存屏障  95
    2.5.1  内存屏障指令  95
    2.5.2  加载-获取屏障原语与存储-
    释放屏障原语  96
    2.6  Linux内核汇编代码分析  97
    2.6.1  链接文件基础知识  97
    2.6.2  vmlinux.lds.S文件分析  99
    2.6.3  启动汇编代码  102
    2.6.4  创建恒等映射和内核映像
    映射  106
    2.6.5  __cpu_setup函数分析  114
    2.6.6  __primary_switch函数分析  117
    2.7  关于页表的常见疑问  120
    2.7.1  关于下一级页表基地址  121
    2.7.2  软件遍历页表  121
    第3章  内存管理之预备知识  124
    3.1  从硬件角度看内存管理  126
    3.1.1  内存管理的“远古时代”  126
    3.1.2  分段机制  127
    3.1.3  分页机制  128
    3.1.4  虚拟地址到物理地址的
    转换  128
    3.2  从软件角度看内存管理  129
    3.2.1  从Linux系统使用者的角度看
    内存管理  129
    3.2.2  从Linux应用程序开发人员的
    角度看内存管理  130
    3.2.3  从内存分布的角度看
    内存管理  131
    3.2.4  从进程的角度看内存管理  131
    3.2.5  从Linux内核的角度看
    内存管理  135
    3.3  物理内存管理之预备知识  136
    3.3.1  内存架构之UMA和NUMA  136
    3.3.2  内存管理之数据结构  138
    3.3.3  内存大小  140
    3.3.4  物理内存映射  141
    3.3.5  zone初始化  143
    3.3.6  空间划分  145
    3.3.7  物理内存初始化  146
    第4章  物理内存与虚拟内存  152
    4.1  页面分配之快速路径  153
    4.1.1  分配物理页面的接口函数  154
    4.1.2  分配掩码  155
    4.1.3  alloc_pages()函数  158
    4.1.4  get_page_from_freelist()函数  162
    4.1.5  zone_watermark_fast()函数  164
    4.1.6  rmqueue()函数  165
    4.1.7  释放页面  167
    4.1.8  小结  170
    4.2  slab分配器  170
    4.2.1  slab分配器产生的背景  170
    4.2.2  创建slab描述符  173
    4.2.3  slab分配器的内存布局  176
    4.2.4  配置slab描述符  178
    4.2.5  分配slab对象  180
    4.2.6  释放slab缓存对象  183
    4.2.7  slab分配器和伙伴系统的接口
    函数  185
    4.2.8  管理区  185
    4.2.9  kmalloc()  188
    4.2.10  小结  189
    4.3  vmalloc()  190
    4.4  虚拟内存管理之进程地址空间  194
    4.4.1  进程地址空间  194
    4.4.2  mm_struct数据结构  195
    4.4.3  VMA数据结构  197
    4.4.4  VMA的属性  199
    4.4.5  查找VMA  201
    4.4.6  插入VMA  203
    4.4.7  合并VMA  206
    4.4.8  红黑树例子  207
    4.4.9  小结  209
    4.5  malloc()  210
    4.5.1  brk系统调用  210
    4.5.2  用户态地址空间划分  212
    4.5.3  __do_sys_brk()函数  213
    4.5.4  do_brk_flags()函数  213
    4.5.5  _mm_populate()函数  215
    4.5.6  get_user_pages()函数  216
    4.5.7  小结  220
    4.6  mmap  223
    4.6.1  mmap概述  223
    4.6.2  小结  225
    4.7  缺页异常处理  227
    4.7.1  ARM64缺页异常的底层处理
    流程  228
    4.7.2  do_page_fault()函数  234
    4.7.3  handle_mm_fault()函数  237
    4.7.4  匿名页面缺页中断  240
    4.7.5  系统零页  241
    4.7.6  文件映射缺页中断  242
    4.7.7  写时复制  245
    4.7.8  ARM64硬件DBM机制导致的
    竞争问题  248
    4.7.9  关于pte_offset_map()安全使用的
    问题  251
    4.7.10  关于写时复制的竞争问题  253
    4.7.11  为什么要在切换页表项之前
    刷新TLB  256
    4.7.12  缺页异常引发的死锁  257
    4.7.13  小结  257
    第5章  内存管理之不错主题  259
    5.1  page  260
    5.1.1  page数据结构  260
    5.1.2  _refcount的应用  265
    5.1.3  _mapcount的应用  268
    5.1.4  PG_Locked  269
    5.1.5  mapping成员的妙用  270
    5.1.6  和page相关的几个接口函数  271
    5.1.7  小结  272
    5.2  RMAP  272
    5.2.1  RMAP的主要数据结构  273
    5.2.2  父进程产生匿名页面  274
    5.2.3  根据父进程创建子进程  277
    5.2.4  子进程发生写时复制  280
    5.2.5  RMAP的应用  281
    5.2.6  小结  283
    5.3  页面回收  285
    5.3.1  LRU链表  285
    5.3.2  第二次机会法  288
    5.3.3  触发页面回收  293
    5.3.4  kswapd内核线程  293
    5.3.5  balance_pgdat()函数  296
    5.3.6  shrink_node()函数  298
    5.3.7  shrink_active_list()函数  302
    5.3.8  shrink_inactive_list()函数  304
    5.3.9  跟踪LRU活动情况  308
    5.3.10  页面回收机制  309
    5.3.11  Refault Distance算法  312
    5.3.12  小结  317
    5.4  匿名页面生命周期  318
    5.4.1  匿名页面的产生  319
    5.4.2  匿名页面的使用  319
    5.4.3  匿名页面的换出  319
    5.4.4  匿名页面的换入  321
    5.4.5  匿名页面的销毁  321
    5.5  页面迁移  321
    5.5.1  哪些页面可以迁移  322
    5.5.2  页面迁移主函数  322
    5.5.3  move_to_new_page()函数  324
    5.5.4  迁移页表  325
    5.5.5  迁移非LRU页面  326
    5.5.6  小结  328
    5.6  内存规整  329
    5.6.1  内存规整的基本原理  329
    5.6.2  触发内存规整  330
    5.6.3  直接内存规整  330
    5.6.4  compact_zone()函数  333
    5.6.5  哪些页面适合做内存规整  338
    5.7  KSM  339
    5.7.1  使能KSM  339
    5.7.2  KSM基本实现  343
    5.7.3  KSM数据结构  345
    5.7.4  新版本KSM的新特性  345
    5.7.5  malloc()分配的页面可以被
    KSM扫描吗  353
    5.7.6  合并页面  355
    5.7.7  一个有趣的计算公式  358
    5.7.8  page->index的值  359
    5.7.9  小结  360
    5.8  页面分配之慢速路径  362
    5.8.1  alloc_pages_slowpath()函数  362
    5.8.2  水位管理和分配优先级  367
    5.9  内存碎片化管理  368
    5.9.1  伙伴系统算法如何减少
    内存碎片  368
    5.9.2  页面迁移类型和内存规整  370
    5.9.3  Linux 5.0内核新增的反碎片
    优化  371
    第6章  内存管理之实战案例分析  375
    6.1  内存管理日志信息和调试信息  375
    6.1.1  vm_stat计数值  375
    6.1.2  meminfo分析  377
    6.1.3  伙伴系统信息  383
    6.1.4  查看内存管理区的信息  383
    6.1.5  查看与进程相关的内存信息  385
    6.1.6  为什么S_swap与P_swap
    不相等  387
    6.1.7  解读OOM Killer机制输出的
    日志信息  388
    6.1.8  解读缺页异常后输出的宕机
    日志信息  394
    6.2  内存管理调优参数  400
    6.2.1  影响内存管理区水位的调优
    参数min_free_kbytes  401
    6.2.2  影响页面分配的参数
    lowmem_reserve_ratio  402
    6.2.3  影响页面回收的参数  404
    6.2.4  影响脏页回写的参数  406
    6.3  内存管理实战案例分析  407
    6.3.1  案例一:缺页异常和文件系统
    引发的宕机  407
    6.3.2  案例二:KSM和NUMA引发的
    虚拟机宕机  410
    6.3.3  案例三:为什么无法分配一个
    页面  415
    6.3.4  案例四:秘密任务——动态修改
    系统调用表引发的4次宕机  420
    第7章  进程管理之基本概念  430
    7.1  关于进程的基本概念  431
    7.1.1  进程的来由  431
    7.1.2  进程描述符  432
    7.1.3  进程的生命周期  434
    7.1.4  进程标识  436
    7.1.5  进程间的家族关系  436
    7.1.6  获取当前进程  438
    7.1.7  进程0和进程1  440
    7.2  与进程创建和终止相关的操作系统
    原语  441
    7.2.1  写时复制技术  442
    7.2.2  fork()函数  443
    7.2.3  vfork()函数  444
    7.2.4  clone()函数  445
    7.2.5  内核线程  445
    7.2.6  终止进程  446
    7.2.7  僵尸进程和进程托孤  446
    7.3  代码分析:进程的创建和终止  447
    7.3.1  _do_fork()函数分析  447
    7.3.2  copy_process()函数分析  449
    7.3.3  dup_task_struct()函数分析  453
    7.3.4  sched_fork()函数分析  453
    7.3.5  copy_mm()函数分析  454
    7.3.6  进程创建后的返回  458
    7.4  进程调度原语  461
    7.4.1  进程分类  461
    7.4.2  进程优先级和权重  461
    7.4.3  调度策略  463
    7.4.4  时间片  465
    7.4.5  经典调度算法  465
    7.4.6  Linux内核的O (n)调度算法  467
    7.4.7  Linux内核的O (1)调度算法  467
    7.4.8  Linux内核的CFS  468
    第8章  进程管理之调度与负载均衡  469
    8.1  CFS  470
    8.1.1  vruntime的计算  471
    8.1.2  调度器的数据结构  474
    8.1.3  对进程创建代码的分析  479
    8.1.4  对进程加入调度器的代码的
    分析  483
    8.1.5  进程调度  485
    8.1.6  进程切换  488
    8.1.7  调度节拍  497
    8.1.8  组调度机制  498
    8.1.9  小结  502
    8.2  负载计算  503
    8.2.1  如何衡量一个CPU的负载  503
    8.2.2  工作负载和量化负载  504
    8.2.3  历史累计衰减的计算  505
    8.2.4  量化负载的计算  506
    8.2.5  实际算力的计算  507
    8.2.6  sched_avg数据结构  508
    8.2.7  PELT代码分析  510
    8.2.8  PELT接口函数  516
    8.3  SMP负载均衡  517
    8.3.1  CPU管理位图  517
    8.3.2  CPU调度域  519
    8.3.3  建立CPU调度域拓扑关系  522
    8.3.4  负载均衡  529
    8.3.5  唤醒进程  536
    8.3.6  wake affine特性  538
    8.3.7  调试  541
    8.3.8  小结  542
    8.4  绿色节能调度器  542
    8.4.1  量化计算能力  545
    8.4.2  能效模型  548
    8.4.3  OPP子系统  551
    8.4.4  初始化CPUfreq-dt驱动程序  556
    8.4.5  注册能效模型子系统  557
    8.4.6  该选择哪个CPU来执行唤醒
    进程p呢  561
    8.4.7  overutilized条件判断  569
    8.4.8  CPU动态调频  570
    8.4.9  小结  573
    8.5  实时调度  574
    8.5.1  实时延时分析  574
    8.5.2  Linux内核实时性改进  576
    第9章  进程管理之调试与案例分析  580
    9.1  进程管理之调试  580
    9.1.1  查看与进程相关的调度信息  580
    9.1.2  查看CFS的信息  582
    9.1.3  查看调度域信息  585
    9.1.4  与调度相关的调试节点  586
    9.2  综合案例分析——系统调度  587
    9.3  进程管理  589
    9.3.1  进程的本质  589
    9.3.2  逃离不掉的进程优先级  590
    9.3.3  调度器的选择  591
    9.3.4  用四维空间来理解负载  591
    9.3.5  案例分析——为何不能
    调度  592


  • 参与人员
    • yin_wu_qing 小默叔叔 maskmoo 硬核王同学 费炜 chejia12
    • lemonboard meiyao ngszddq paope
  • 作品展示
  • 名称作者时间
    程序员用进程 lemonboard 2024-02-05
    内存的虚与实 lemonboard 2024-01-25
    从Kernel的角度谈进程 lemonboard 2024-01-25
    一起读《奔跑吧Linux内核(第2版)卷1:基础架构》- 了解kmalloc ... 硬核王同学 2024-01-22
    一起读《奔跑吧Linux内核(第2版)卷1:基础架构》之进程管理与 ... yin_wu_qing 2024-01-17
    一起读《奔跑吧Linux内核(第2版)卷1:基础架构》之写时复制技 ... yin_wu_qing 2024-01-14
    一起读《奔跑吧Linux内核(第2版)卷1:基础架构》- 内存管理基 ... 硬核王同学 2024-01-14
    《奔跑吧Linux内核(第2版)卷1:基础架构》了解Slab分配器 maskmoo 2024-01-14
    一起读《奔跑吧Linux内核(第2版)卷1:基础架构》——查看内存 ... paope 2024-01-10
    一起读《奔跑吧Linux内核(第2版)卷1:基础架构》——什么是MMA ... paope 2024-01-10
    奔跑吧Linux内核+Linux内核:Linux核心的奥秘 meiyao 2024-01-10
    奔跑吧Linux内核+深入Linux内存管理:linux世界的记忆奥秘 meiyao 2024-01-10
    奔跑吧Linux内核+《探秘处理器架构的奥秘》 meiyao 2024-01-10
    《奔跑吧Linux内核(第2版)卷1:基础架构》探索系统内存信息获 ... maskmoo 2024-01-07
    一起读《奔跑吧Linux内核(第2版)卷1:基础架构》- 大小端字节 ... 硬核王同学 2023-12-30
    一起读《奔跑吧Linux内核(第2版)卷1:基础架构》- 初识本书以 ... 硬核王同学 2023-12-17
    《奔跑吧Linux内核(第2版)卷1:基础架构》配套实验环境搭建 maskmoo 2023-12-13
    ARM64内存管理都有什么 lemonboard 2023-12-10
    一起读《奔跑吧Linux内核(第2版)卷1:基础架构》之内存管理预 ... yin_wu_qing 2023-12-09
    一起读《奔跑吧Linux内核(第2版)卷1:基础架构》——初识 paope 2023-12-03
    第三章 内存管理之预备知识 小默叔叔 2023-12-03
  • 评奖
欢迎厂商提供试用产品
X

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews

Room 1530, Zhongguancun MOOC Times Building, Block B, 18 Zhongguancun Street, Haidian District, Beijing 100190, China Tel:(010)82350740 Postcode:100190

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号