- 博客(86)
- 资源 (1)
- 收藏
- 关注
原创 glibc库是如何写出来的
哈喽,我是子牙老师。今天咱们聊聊鼎鼎大名的glibc库是如何写出来的瓦特?你不知道glibc库是什么?你学C语言的第一句代码#include <stdio.h>,这个stdio.h就是glibc库中的。还有你经常用的函数printf、open、read、write…以下,enjoy。
2025-04-07 11:28:02
714
原创 sudo底层实现原理
哈喽,我是子牙老师关于sudo,想必大家不陌生了,给我们最直观的感受就是以root权限执行后面的命令,那你是否好奇它底层是如何实现的呢?最近正好备课把这个问题深入研究了一下,分享给大家以下,enjoy。
2025-03-28 10:59:50
302
原创 基于Linux内核手写Linux系统
第一次接触Linux系统的时候,我就感叹:这玩意太难用了,比Windows差远了!但是培训班老师告诉我Linux系统是程序员必学的,而且要学得很深,因为服务器几乎都是用它。后来入行久了,走得高了,才发现,哪里只是服务器用它?是基于PAM组件实现的,与所有的Linux系统是一模一样的。这件事情应该是我非常喜欢的,因为每天早上眼睛一睁开,我就想爬起来敲代码。
2025-01-02 10:28:51
204
原创 这样解决CFS不公平,Linux之父高度赞扬
Linux内核中有五种调度器,按优先级从高到低依次是:停机调度器、限期调度器、实时调度器、公平调度器、空闲调度器,与我们息息相关的是公平调度器CFSCFS中的调度实体,可以是进程,也可以是进程组。你可能疑惑,怎么没提到线程?其实Linux内核层面没有线程的概念,线程的本质是轻量级进程,所以线程在Linux内核中也是task_struct,所以机制是一样的基本上来说,你把我写得这两篇文章完全吃透,CFS源码你就可以轻轻松松读懂。CFS还剩边缘的知识,下一篇文章会全部讲到。
2024-11-30 09:47:48
751
原创 天呐!我能算出调度哪个进程
本篇文章,我们讲了CPU、CFS调度器、进程三者之间的关系又讲了vruntime的计算方法,并对其中的三要素进行了详细的讲解后又延伸讲到某个进程能够得到的CPU时间片的运算方式这就是CFS调度普通进程的全部。如果CFS只能调度普通进程,则会带来不公平,所以后来引入了CFS组调度,下篇文章分享。
2024-11-29 10:03:33
698
原创 一口气精通C语言
哈喽,我是子牙老师。今天我想通过一篇文章带你精通C语言,你信不信我能做到?好吧,问题不是我能不能做到,是你能不能学会。那咱们试试?
2024-10-21 09:53:00
1038
原创 谁能跟我比操作系统?
总有学员问:你做的课程,《手写操作系统》、《实战Linux内核》、《手写Linux内核》,跟你后面要做的《手写Linux》,有什么区别呢?每次解释也麻烦,一两句话也讲不清,写篇短文详细说下吧
2024-10-10 11:12:21
949
原创 Linux内核是如何创建目录的
哈喽,我是子牙老师。今天咱们从ext4文件系统源码层面聊聊Linux内核是如何创建目录的,创建文件也差不多原理看这篇文章之前,建议你看下我之前写的《手写文件系统》,不然怕你看不懂当我们创建目录的时候,差不多这两种方式。本文会从这两个大方向进行分析以下,enjoy。
2024-07-24 09:20:17
792
原创 手写文件系统一条龙篇
哈喽,我是子牙老师。这篇文章聊聊文件系统是怎么写出来的,看完,你就可以自己去写文件系统了。本文以Linux的EXT系列文件系统为例进行讲解,理解了,其他的文件系统你就可以自行研究了。
2024-07-22 10:19:36
1052
原创 如果你想手写Linux系统
哈喽,我是子牙老师。今天咱们聊聊这个话题吧,Linux作为当今科技世界的地基,我们越来越接近真理了,有木有?这个文章的角度,你可能全网都很难找到第二篇如此系统讲透这个问题的文章
2024-07-09 09:32:20
1212
原创 如果你想看懂任何代码
哈喽,我是子牙老师。今天咱们聊聊这个话题你是不是想不通:1. 为什么有的人学一门技术那么快,你花了很长时间没学明白的技术,人家一下子就学会了2. 为什么有的技术,有的人都没听过,但是你问他,他能给你讲得清清楚楚、明明白白3. 为什么有的代码你看不懂,别人不用看就知道脉络……
2024-06-27 08:38:28
716
原创 手写docker:你先玩转namespace再来吧
哈喽,我是子牙老师。今天咱们聊聊Linux namespace瓦特?你没听过namespace?那有必要科普一下了:namespace是Linux内核提供的一种软件性质的资源隔离机制。容器化技术,比如docker,就是基于这样的机制实现的。namespace,是docker依赖的最核心的技术。如果没有namespace,就没有容器化技术,也就没有云原生甚至可以说,如果没有namespace,云计算都将不复存在正文开始,enjoy。
2024-06-22 09:53:43
1044
原创 全网整理最全的手写64位多核操作系统开发笔记+源码开源啦!
本篇文章就为大家分享一位大神整理的手写操作系统开发笔记+源码,可以帮助到大家在手写操作系统的学习中突飞猛进,那我们就一起来欣赏下开发过程吧。完整的笔记+源码获取方式放在文章末尾,也可以直接关注宫中号:【硬核子牙】,回复:操作系统,即可免费获取。手写一个操作系统可以说是很多程序员心中的一个白月光,不仅可以帮互助你在项目面中脱颖而出,手写操作系统的过程还需要理解计算机系统的各个层面,包括处理器架构、内存管理、进程调度、I/O 等,这都能够帮助程序员深入理解计算机系统的工作原理。
2024-03-12 21:45:39
1177
原创 单步调试Linux内核论证水位线watermark
哈喽,我是子牙,一个很卷的硬核男人深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了这些课程:手写JVM、手写OS、带你用纯汇编写OS、手写64位多核OS、实战Linux内核…这篇文章给大家分享Linux内核内存模块一个很重要的知识点:水位线,就是这玩意这玩意干啥的呢?控制内存回收的。
2024-02-26 10:49:45
1267
原创 谁说常量字符串不可修改
哈喽,我是子牙,一个很卷的硬核男人深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了这些课程:手写JVM、手写OS、带你用纯汇编写OS、手写64位多核OS、实战Linux内核…问你一个问题:你觉得下面这个程序能正确运行吗?我大胆的预测,你的内心是这样子的哈哈,别别,我没疯,我来证明给你看看到没,我真的做到了!细心的小伙伴可能发现了,在修改常量字符串之前,好像执行了一段代码!
2024-02-23 09:39:06
748
原创 为什么说linux对于程序员无法取代
Linux系统的多用户支持是其强大而灵活的特性之一。每个用户在Linux系统中有自己的账户和权限,可以对自己的文件和设备有特殊的权利,这确保了各用户之间互不干扰。这种多用户的支持使得Linux在多用户环境中能够有效地分隔用户的操作,保障各用户的隐私和安全。每个用户有自己的家目录,只能访问自己的文件,而不能轻易干涉其他用户的数据。另外,在高配置硬件的情况下,Linux系统就更能够充分发挥多任务和多线程的优势。每个用户可以同时执行多个任务,多个线程可以并行工作,这显著提高了系统的效率和响应速度。
2024-01-24 17:19:45
1301
原创 2024年linux内核开发会是程序员新的风口吗?
众所周知,linux操作系统一直靠着稳定,安全,开源等优势占据着80%以上的服务器市场。小至私人企业,大至世界百强,都离不开它的身影。以至于无论你擅长的是哪门语言,面试的时候都会或多或少的涉及linux的相关知识,如果你精通了linux,那发展前景肯定不用发愁。那如何精通linux呢?最重要的就是学习内核。Linux目前依旧是是最强大的操作系统之一,它在云计算、服务器管理、网络安全等领域占据了核心地位。
2024-01-18 16:58:17
11259
原创 JVM如何执行synchronized修饰的方法
我知道小伙伴们心理在想什么:我什么时候也能像子牙老师这样,哪里不懂就直接深入源码去寻找答案、工作腻了,我也想写一些自己感兴趣的算法……实话实话,底层这玩意学起来确实难。有时候遇到问老师就是红手题都找不到答案,甚至有时候百度都不知道怎么查…自己瞎学瞎报班,浪费钱浪费时间,还没有结果。操作系统内核我也是报班学的,自己学了一段时间,真心学不会。我的老师就是红手指的首席科学家唐老师,前瑞星杀毒的技术专家,虚拟化领域的TOP级人物。给大家看看我之前写的一些项目,证明下我不是在吹牛。
2024-01-09 10:30:38
681
原创 调用Java线程相关的API为什么能够控制操作系统线程?
今天我们解决Java线程的这五个问题:Java线程创建的完整流程Java的线程是何时与JVM线程绑定的JVM线程是何时与OS线程绑定的Java线程对应的OS线程有什么特殊的地方调用JavaAPI为什么能够操作OS线程对于任何支持多线程的计算机语言来说,深入理解线程及写好多线程程序,都是一个巨大的挑战。正因为难,才使得多线程一直是面试的重点难点。面试官刚一开口扯到多线程,有些小伙伴内心就升起了慢慢的恐惧感。
2024-01-08 14:23:12
922
原创 实战讲解Linux进程内存空间
本篇文章为大家分享了64位Linux进程的内存空间布局,并详细讲了进程的用户空间关于Linux进程的用户空间内存布局,Linux内核源码中是没有提供明确的答案的,不像内核空间内存布局,是有明确答案的我们通过阅读Linux内核源码,做实验,推导出了Linux进程的用户空间内存布局,并从ELF文件、运行时,详细讲解了每一层。并通过malloc分配内存讲到了面试中经常问到的问题最后,恭喜大家,这就是Linux进程用户空间内存布局的全部,你已经掌握了它!
2024-01-08 10:05:33
1116
原创 【JVM面试题】Java中的静态方法为什么不能调用非静态方法
昨晚京东大佬勇哥在群里分享了一道他新创的JVM面试题,我听完后觉得还挺有意思的,分享给大家小佬们先别急着看我的分析,先自己想想答案。
2024-01-04 14:32:03
689
原创 hotspot源码角度看OOP之类属性的底层实现
如果你每次都是因为native而对hotspot源码束手无策,如果你每次都是因为底层而无法深入研究下去,如果你深入骨子里的想成为技术大牛,欢迎跟着我学习,关注我的公众号,找我咨询课程。跟我学底层,一定不会踩坑,一定学有所得。
2024-01-04 14:10:45
1161
原创 【Hotspot源码】揭秘Java线程创建过程中的各种细节
总是听到小伙伴说:多线程好难学、多线程学不会、多线程没概念……为什么会这样呢?我觉得可能是这样:大多数小伙伴接触线程都是从高级语言开始的,比如Java。而高级语言的线程是基于操作系统的线程机制实现的,而小伙伴们没有学过操作系统应用层的学习机制,更不了解操作系统内核级的线程机制,所以学完多线程有一种似会非会的感觉。跟别人交流或者面试的时候,滥用应用态切内核态、线程调度等名词。写多线程程序更是惨不忍睹。我的手写JVM小班新增的内容就是以我所理解的方式让大家精通多线程。
2024-01-03 16:45:53
929
原创 JMM到底如何理解?JMM与MESI到底有没有关系?
今天给大家分享一篇对于理解Java的多线程,特别重要的一个知识点:JMM。在JVM中增加线程机制,首当其冲就是要实现JMM,即Java内存模型。JMM也是大家真正理解Java多线程的基础。但是大家对于JMM,可以说大多数小伙伴对其的理解是错误的。这篇文章我会从这几个方面讲JMM,让大家获得对JMM正确的、深刻的认识:1、市面上大家看到的资料是怎么介绍JMM的2、我会结合一个Linux多线程程序给大家分析,JMM与MESI没有半毛钱关系3、那为什么要有JMM?不要行不行?
2024-01-03 15:23:08
960
原创 内存编织技术,JVM对内存的又一次压榨
我是子牙老师,喜欢钻研底层,深入研究Windows、Linux内核、JVM。喜欢分享硬核知识,如果你也喜欢研究底层,喜欢硬核知识,关注我。
2024-01-02 15:31:41
987
原创 JVM是如何基于虚拟机栈运行的
我是子牙老师,喜欢钻研底层,深入研究Windows、Linux内核、JVM。喜欢分享硬核知识,如果你也喜欢研究底层,喜欢硬核知识,关注我。
2024-01-02 14:14:55
611
原创 不了解NUMA,就看不懂Linux内核
哈喽,我是子牙,一个很卷的硬核男人深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了这些课程:手写JVM、手写OS、带你用纯汇编写OS、手写64位多核OS、实战Linux内核…最近在备课《实战Linux内核》内存专题,把NUMA好好研究了一下,写成文章,Mark一下,顺便分享给有缘人NUMA是什么呢?一种内存访问架构,与它相对应的是SMP架构,它俩之间有什么区别呢?
2023-12-29 09:20:35
990
原创 Linux内核中,CPU是如何读写数据的
哈喽,我是子牙,一个很卷的硬核男人深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了这些课程:手写JVM、手写OS、带你用纯汇编写OS、手写64位多核OS、实战Linux内核…说个笑话:以前我在图灵讲课的时候,很多学员跟我说:子牙老师,别的老师的课不硬核,都是OS之上的,听起来没劲,看你骨骼清奇天赋异禀,能不能讲点硬的,最好能撕到硬件内部,让我长长见识……OK,安排。
2023-12-20 14:13:16
1005
原创 揭秘Linux内核线程切换底层实现
比如线程函数长这样描绘一下场景:在本轮CPU时间片周期内,这个线程执行到i = 1233,这时候发生了时间片到期中断,这个线程就没有机会运行了,需要将CPU时间片让出去,当下次获得调度,能够从i = 1234位置接着运行,而不是从i = 0开始又从头运行什么是线程上下文呢?其实就是程序执行的时候,CPU内部寄存器中的值、线程栈当前使用的位置当发生中断,CPU进入中断处理例程的那一刻,就像给上一个运行的线程拍了张快照,这时候我们将寄存器中的值及线程栈当前使用的位置保存下来,就叫保存上下文。
2023-12-06 10:29:02
1213
原创 硬核子牙:我准备写一本《带你手写64位多核操作系统》的书!
开篇就讲到这里吧,相信从这篇文章里,你已经知道了,这将是一段特别有趣的旅程,我应该会写得很快乐!你是不是想问你能不能学得很快乐,哈哈,那应该不可能,学习总是痛苦的,不痛苦那就不是在学习,是在复习!因为痛苦,所以很多人不愿意学习,也就改变不了自己的命运,求而不得,最后生怨!何苦,何必…对了,如果你汇编、C语言不是很好,可以看看我讲课的视频,免费分享。
2023-10-24 09:37:13
1197
原创 源码级揭秘Linux内核启动流程
哈喽,我是子牙,一个很卷的硬核男人。深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程今天这篇文章给大家分享一下Linux内核的启动流程。为什么要分享这个话题呢?所谓万丈高楼平地起,如果我们想玩转Linux内核,我们既要了解它的前世,又要了解它的今生,还要了解它的未来。启动流程就是Linux内核的前世,对于理解Linux内核,里面包含了太多太多关键信息其实也是在为后面出书做准备…Linux内核的重要性,我不必言说了。
2023-09-21 09:55:26
646
原创 这样才能玩转Linux内核之CPU篇
哈喽,我是子牙,一个很卷的硬核男人 深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了三个课程:手写JVM、手写OS及带你用纯汇编写OS、手写64位多核OS及Linux内核…,收到了很多小伙伴的反馈,表示自己研究Linux内核很迷茫,很多代码看不懂,不知道是干啥的,需要这样的文章指明方向。今天带来的是它的兄弟篇:CPU篇。
2023-08-24 12:24:47
678
原创 Linux内核这样学才能学会(内存篇)
哈喽,我是子牙,一个很卷的硬核男人深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了三个课程:手写JVM、手写OS及带你用纯汇编写OS、手写64位多核OS及Linux内核…事情是这样的,上篇文章我分享说到如果你想玩转Linux内核,你要具备这些基础。其中第二条说到你要了解核心硬件的工作原理,比如CPU、内存条、CPU+内存条…很多小伙伴看完后觉得没概念,让我展开说说。
2023-08-15 16:25:04
2095
1
原创 如何手写网络协议栈
我写的网络协议栈,除了可以与Linux socket模拟三次握手建立连接,建立全双工通道通信,还可以侵入正常的socket client与socket server建立的连接进行通信,意思就是我写的协议栈可以冒充客户端与服务端通信!说下应用场景,比如我们通过浏览器访问网页,大家都知道走的是http协议,http协议属于应用层协议,它是在TCP协议的基础上实现的,所以我们最终的问题还是落到,如何构建TCP包并发送。如果你也像我一样,喜欢研究计算机底层,并乐此不疲,无论多难,都不曾想过放弃,欢迎跟我学习。
2023-06-04 14:59:14
4657
1
原创 手写操作系统+手写网络协议栈,太硬核了
前面讲的可能看起来有点牛叉,不免会让有些人怀疑我是不是在吹牛,所以我准备给出有力的事实手写操作系统三期大纲三期课程相关的代码我已经全部写完实模式切入保护模式实现内存检测、物理内存管理模块、虚拟内存管理模块实现了输出模块。要知道你用Linux终端,它会自动翻页,这个功能你如果写内核都是要自己实现的实现了键盘中断。就是你键盘敲什么,屏幕就显示什么,为后面加入命令行做准备实现了时钟中断,通过时钟中断调度任务。与Windows、Linux一模一样实现了进程线程、任务切换、阻塞唤醒。
2023-05-25 15:39:28
11502
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人