![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux内核
文章平均质量分 93
Linux内核远航者
探索Linux内核的奥秘,涉及处理器架构,内存管理,进程管理,容器和虚拟化等底层干货分享,当沉浸在庞大的内核源代码中难免会迷失自己,但参透某个子系统的设计思想时又会欣喜若狂,Linux内核远航者乘风破浪,在探索的道路上唯有热爱可抵岁月漫长。
展开
-
Linux内核进程创建-fork背后隐藏的技术细节(下)
上一篇文章我们讲到fork的时候内存管理相关的内容,时间大概隔了快一周了,发布下篇文章,写文章确实费时费力,需要仔细推敲,原创不易,希望大家多多支持吧。本文讲解fork的时候进程管理相关的内容,主要讲解fork的时候进程如何组装调用相关的基础设施组件,以及如何加入运行队列的,调度执行的时候究竟会发生什么。注:这里只讲解cfs调度类,主要关注用户任务3.fork的进程管理3.1 进程相关基础设施构建我们移步到如下调用路径(当前处于sched_fork函数中):kernel_clone //ker原创 2021-08-02 23:46:54 · 1066 阅读 · 0 评论 -
Linux内核进程创建-fork背后隐藏的技术细节(上)
1.开场白环境:处理器架构:arm64内核源码:linux-5.11ubuntu版本:20.04.1代码阅读工具:vim+ctags+cscope今天正式开通微信公众号-Linux内核远航者,终于以后可以发布Linux内核相关的技术文章,既兴奋又有一份责任感,做技术是个不归路,面对现实的毒打,充满了太多的无奈,也希望能不忘初心,为了纪念公众号的诞生,想了很久决定写一篇进程创建的文章,fork对于Linux开发者已经耳熟能详,但是我们是否真正理解fork的实现机理,当然fork的实现中涉及到了太多原创 2021-08-02 23:41:42 · 526 阅读 · 0 评论 -
Linux内核页表管理-那些鲜为人知的秘密
1.开场白环境:处理器架构:arm64内核源码:linux-5.11ubuntu版本:20.04.1代码阅读工具:vim+ctags+cscope通用操作系统,通常都会开启mmu来支持虚拟内存管理,而页表管理是在虚拟内存管理中尤为重要,本文主要以回答几个页表管理中关键性问题来解析Linux内核页表管理,看一看页表管理中那些鲜为人知的秘密。2.页表的作用是什么?1)地址转换将虚拟地址转换为物理地址2)权限管理管理cpu对物理页的访问,如读写执行权限3)隔离地址空间隔离各个进程的地址空原创 2021-08-02 23:32:31 · 425 阅读 · 0 评论 -
深入理解Linux内核之内核线程(下)
虽然讲解完了内核线程的创建过程,但是似乎又少点什么,那么下面我们来看两个细节:内核线程执行处理函数和内核线程上下文切换细节:7.内核线程执行处理函数细节内核线程执行到处理函数要从fork说起:7.1 fork准备调度上下文kernel_thread //kernel/fork.c->struct kernel_clone_args args = {.stack = (unsigned long)fn, //借用线程栈指针 指向内核线程执行函数.stack_s原创 2021-08-02 23:26:08 · 346 阅读 · 0 评论 -
深入理解Linux内核之内核线程(上)
1.开场白环境:处理器架构:arm64内核源码:linux-5.11ubuntu版本:20.04.1代码阅读工具:vim+ctags+cscope在linux系统中, 我们接触最多的莫过于用户空间的任务,像用户线程或用户进程,因为他们太活跃了,也太耀眼了以至于我们感受不到内核线程的存在,但是内核线程却在背后默默地付出着,如内存回收,脏页回写,处理大量的软中断等,如果没有内核线程那么linux世界是那么的可怕!本文力求与完整介绍完内核线程的整个生命周期,如内核线程的创建、调度等等,当然本文还是主要原创 2021-08-02 23:16:31 · 439 阅读 · 0 评论 -
深入理解Linux内核之内核抢占
1.开场白环境:处理器架构:arm64内核源码:linux-5.11ubuntu版本:20.04.1代码阅读工具:vim+ctags+cscope我们或许经常听说过内核抢占,可是我们是否真正理解它呢?内核抢占和抢占式内核究竟有什么关系呢?抢占计数器究竟干什么用?… 本文我们就来好好讨论下,关于内核抢占的一些技术细节,力求让大家理解内核抢占。注:本文主要关注CFS调度类。2.内核抢占和抢占式内核我们经常使用uname -a命令能看到“PREEMPT”的字样,没错,我们使用的是抢占式内核。#原创 2021-08-02 23:00:31 · 390 阅读 · 0 评论 -
深入理解Linux内核之主调度器(下)
4.进程上下文切换前面选择了一个合适进程作为下一个进程,接下来做重要的上下文切换动作,来保存上一个进程的“上下文”恢复下一个进程的“上下文”,主要包括进程地址空间切换和处理器状态切换。注:这里的上下文实际上是指进程运行时最小寄存器的集合。如果切换的next进程不是同一个进程,才进行切换:__schedule i f (likely(prev != next)) { ... context_switch //进程上下文切换 }4.1 进程地原创 2021-08-02 22:50:19 · 222 阅读 · 0 评论 -
深入理解Linux内核之主调度器(上)
1.开场白环境:处理器架构:arm64内核源码:linux-5.11ubuntu版本:20.04.1代码阅读工具:vim+ctags+cscope本文步进到Linux内核进程管理的核心部分,打开调度器的黑匣子,来看看Linux内核如何调度进程的。实际上,进程调度器主要做两件事:选择下一个进程,然后进行上下文切换。而何时调用主调度器调度进程那是调度时机所关注的问题,而调度时机在之前的内核抢占文章已经做了详细讲解,在此不在赘述,而本文关注的调度时机是真正调用主调度器的时机。本文分析的内核源代码主原创 2021-08-02 22:46:57 · 315 阅读 · 0 评论 -
深入理解Linux内核之进程睡眠(下)
4.用户态睡眠以sleep为例来说明任务在用户态是如何睡眠的。首先我们通过strace工具来看下其调用的系统调用:$ strace sleep 1...close(3) = 0clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=1, tv_nsec=0}, NULL) = 0close(1) = 0...可以发现sleep主要调原创 2021-08-02 22:40:43 · 1143 阅读 · 1 评论 -
浅谈ext2文件系统
我们知道文件系统是组织和管理磁盘上的文件,并向用户提供操作接口(open、read、write等),Unix中的每个对象几乎都可以当做文件来看待。内核在没有结构的硬件上构造结构化的文件系统,而文件抽象在整个系统中广泛使用。Linux支持多种文件系统,如ext2,ext3,vfat等,ext2是符合Linux标准的文件系统。 我们知道,一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如某种原创 2017-12-27 15:38:12 · 356 阅读 · 0 评论 -
深入理解Linux内核之进程睡眠(上)
1开场白环境:处理器架构:arm64内核源码:linux-5.10.50ubuntu版本:20.04.1代码阅读工具:vim+ctags+cscope无论是任务处于用户态还是内核态,经常会因为等待某些事件而睡眠(可能是等待IO读写完成,也可能等待其他内核路径释放一把锁等)。本文来探讨一下,任务处于睡眠中有哪些状态?睡眠对于任务来说究竟意味着什么?内核是如何管理睡眠的任务的?我们会结合内核源代码来分析任务的睡眠,力求全方位角度来剖析。注:由于篇幅问题,文章分为上下两篇,且这里不区分进程和任务,原创 2021-08-02 22:33:33 · 528 阅读 · 0 评论 -
QEMU体验最新Linux-5.9.2内核
对于Linux爱好者,你是否也有这样的困扰,为了学习Linux而去购买昂贵的开发版,这大可不必,QEMU模拟器几乎可以满足你的需求,足够你去学习Linux,它能够模拟出x86, arm,riscv等各种处理器架构,本文将向你呈现的不是QEMU/虚拟化的原理解读,而是如何搭建一个用于学习linux的QEMU环境,当然对于Linux内核的学习这已经足够了。注意:本文基于最新的linux-5.9.2内核源代码,使用arm64的处理器架构,在ubuntu18.04系统上。本文主要的内容如下:1.交叉编译工具链原创 2020-11-02 09:27:53 · 1054 阅读 · 0 评论