自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

原创 详细介绍Glib 主事件循环轻度分析与编程应用

glib是一个跨平台、用 C 语言编写的若干底层库的集合。编写案例最好能够结合 glib 源码,方便随时查看相关函数定义。glib实现了完整的事件循环分发机制。有一个主循环负责处理各种事件。事件通过事件源描述,常见的事件源文件描述符(文件、管道和 socket)超时idle 事件当然,也可以自定义事件源,通过 glib 提供的函数 g_source_attach() 就可以手动添加我们自定义的新类型事件源。可参考 [2.2](##2.2 案例2 glib 自定义事件源)

2022-09-23 15:06:41 1625 2

原创 深入理解linux内核网络收包过程—硬中断与软中断

核⼼逻辑是获取到当前CPU变量 softnet_data,对其poll_list进⾏遍历,然后执⾏到⽹卡驱动注册到的poll函数。napi_gro_receive函数代表的是⽹卡GRO特性,可以简单理解成把相关的⼩包合并成⼀个⼤包。最终调用 gro_normal_list将数据发送到网络协议栈。上一分析说到网卡硬中断注册的函数igb_msix_ring。执行run_ksoftirqd->__do_softirq。igb_write_itr仅记录硬件中断频率。判断softirq_pending标志。

2022-09-22 17:50:03 637

原创 一文了解Linux内核Namespace如何隔离测试code

他作为所有进程的父进程,有很多特权(比如:屏蔽信号等),另外,其还会为检查所有进程的状态,我们知道,如果某个子进程脱离了父进程(父进程没有wait它),那么init就会负责回收资源并结束这个子进程。所以,要做到进程空间的隔离,首先要创建出PID为1的进程,最好就像chroot那样,把子进程的PID在容器内变成1。说明并没有完全隔离。如果你熟悉IPC的原理的话,你会知道,IPC需要有一个全局的ID,即然是全局的,那么就意味着我们的Namespace需要对这个ID隔离,不能让别的Namespace的进程看到。

2022-09-22 16:31:02 493

原创 一文分析Linux内核klist链表

当一个线程要让某个klist_node无效时,不能简单地从klist中删除,因为有可能有其它线程还在使用这个节点,因此只能减少klist_node的引用计数,由于其它线程也拥有这个klist_node的引用计数,所以节点还在klist中,遍历的时候将无法避开这个节点,但引入dead这个标识后,当这个标志位被设置后,遍历的时候可以进行dead标志位判断,然后有效地避开某些被申请删除的节点,当其它线程不引用该节点后,引用计数为0,该节点将会自动从klist链表中移除。

2022-09-21 22:16:03 747

原创 当内核收到了一个网络包

当然,这个过程的前提是,网卡驱动需要在内存中申请一个缓冲区叫 sk_buffer,然后把这个 sk_buffer 的地址告诉网卡,这样 DMA 才知道等网卡的缓冲区有数据到来时,把它拷贝到内存的什么位置上。软中断原理在《认认真真聊聊软中断》讲过,其实就是修改 pending 的某个标志位,然后内核中有一个线程不断轮询这组标志位,看哪个是 1 了,就去软中断向量表里,寻找这个标志位对应的处理程序,然后执行它。上一步,数据到达了网卡这个硬件的缓冲区中,现在要把它弄到内存中的缓冲区,简单一张图就是这样。

2022-09-21 20:19:58 124

原创 一文了解Linux内核网络数据包处理流程

网卡工作在物理层和数据链路层,主要由PHY/MAC芯片、Tx/Rx FIFO、DMA等组成,其中网线通过变压器接PHY芯片、PHY芯片通过MII接MAC芯片、MAC芯片接PCI总线。2、网卡驱动为每个descriptor分配sk_buff和数据缓存区,流式DMA映射数据缓存区,将数据缓存区的总线地址保存到descriptor。,这个struct是在网卡驱动中分配创建的,不通的网卡,对应厂商不同的驱动,那么看看ixgbe的驱动初始化;函数被调用,证明已经发现了我们所支持的网卡,这样,就可以调用。

2022-09-21 16:59:06 888

原创 一文详解Linux内核数据结构之kfifo

在运行时,CPU 虽然会乱序执行指令,但是在单个 CPU 的上,硬件能够保证程序执行时所有的内存访问操作看起来像是按程序代码编写的顺序执行的,这时候 Memory barrier 没有必要使用(不考虑编译器优化的情况下)。kfifo是内核里面的一个First In First Out数据结构,它采用环形循环队列的数据结构来实现,提供一个无边界的字节流服务,并且使用并行无锁编程技术,即当它用于只有一个入队线程和一个出队线程的场情时,两个线程可以并发操作,而不需要任何加锁行为,就可以保证kfifo的线程安全。

2022-09-21 15:03:30 1053

原创 深入理解Linux内核架构——简介与概述

纯技术层面上,内核是硬件与软件的之间的一个中间层。作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。在操作系统的实现方面,有两种主要的泛型:微内核和宏内核。当前宏内核的性能仍强于微内核,Linux采取的是宏内核的设计模式。但是也进行了一定程度上的改进,系统运行中,模块可以插入到内核代码中,也可以移除。图1概述了组成完整Linux系统的各个层次,以及内核所包含的一些重要子系统。图1 Linux内核的高层次概述以及完整的Linux系统中的各个层次【文章福利】小编在群文件上传

2022-09-20 20:58:28 999

原创 了解CentOS 7 升级 Linux 内核

在使用 Docker 时,发现其对 Linux 内核版本的最低要求是 3.10(这也刚好是 CentOS 7.2 的内核版本),但是在这个版本上有部分功能无法实现。目前 Linux 内核已经发布到 4.X(可以随时在 Linux 内核官网 查看当前版本),为了使用最新版本的内核,只好在安装 CentOS 7 后对内核进行升级。-r, –kernel-release:打印内核发行版的版本。Linux 内核分两种:官方内核(通常是内核开发人员用)和各大 Linux 发行版内核(一般用户常用)。

2022-09-20 17:52:09 1812

原创 深入理解Linux内核通知链(Notifier)

raw_notifier_head的特点是对回调函数,register, unregister都没有任何限制,所有的保护机制都需要调用者维护。当某种事件需要发生的时候,就需要调用内核提供的通知函数notifier call函数,来通知注册过相应时间的子系统。上述的操作就是通过判断priority的大小,然后将大的插入带链表头,小的插入在链表末尾。同样,内核通过包装核心的注册/注销函数,实现了上述说的四种notifier chain。上述的注销函数,就是先找到此节点,然后从链表中删除的一个操作。

2022-09-20 17:46:16 1765

原创 浅析Linux内核高端内存

这样别人也可以借用这段地址空间访问其他物理内存,实现了使用有限的地址空间,访问所有所有物理内存。当内核模块代码或线程访问内存时,代码中的内存地址都为逻辑地址,而对应到真正的物理内存地址,需要地址一对一的映射,如逻辑地址0xc0000003对应的物理地址为0x3,0xc0000004对应的物理地址为0x4,…这种方式很简单,因为通过 vmalloc() ,在”内核动态映射空间”申请内存的时候,就可能从高端内存获得页面(参看 vmalloc 的实现),因此说高端内存有可能映射到”内核动态映射空间”中。

2022-09-20 15:59:50 484

原创 一文了解linux中的页缓存和文件IO

1.磁盘读写速度较慢(ms 级别);2.实现不同进程之间或者同一进程的前后不同部分之间对于数据的共享;如果没有进程之间的共享机制,那么对于系统中所启动的所有进程在打开文件的时候都要将需要的数据从磁盘加载进物理内存空间,这样不仅造成了加载速度变慢(每次都从磁盘中读取数据),而且造成了物理内存的浪费。为了解决以上问题,linux操作系统使用了缓存机制。在虚拟内存机制出现以前,操作系统使用块缓存机制,但是在虚拟内存出现以后操作系统管理IO的粒度更大,因此采用了页缓存机制。

2022-09-19 22:20:55 446

原创 linux内核伪文件系统—sysfs分析

sysfs是一个伪文件系统。不代表真实的物理设备,在linux内核中,sysfs文件系统将长期存在于内存中。sysfs用于对具体的内核对象(例如物理设备)进行建模,并提供一种将设备和设备驱动程序关联起来的方法。使用ls -l /sys命令可以查看sysfs文件系统中导出了哪些内核对象。

2022-09-19 21:09:59 289

原创 带你一文解析RCU锁机制原理

do {do {用来保持一个读者的RCU临界区.在该临界区内不允许发生上下文切换({" usage");})该宏用于在RCU读端临界区获得一个RCU保护的指针,该指针可以在以后安全地引用,内存栅只在alpha架构上才使用do {smp_wmb();写者使用该函数来为被RCU保护的指针分配一个新的值.这样是为了安全从写者到读者更改其值.这个函数会返回一个新值{}{}在RCU中是一个最核心的函数,写者用来等待之前的读者全部退出。

2022-09-19 17:36:13 1994

原创 值得一看的Linux内核分析学习总结

Read 对将文件读入缓存区。比如说C函数库中的内存分配函数malloc(),它具体是使用sbrk()系统调用来分配内存,当malloc调用sbrk()的时候就涉及一次从用户态到内核态的切换,类似的函数还有printf(),调用的是wirte()系统调用来输出字符串,等等。3)外围设备的中断:当外围设备完成用户的请求操作后,会像CPU发出中断信号,此时,CPU就会暂停执行下一条即将要执行的指令,转而去执行中断信号对应的处理程序,如果先前执行的指令是在用户态下,则自然就发生从用户态到内核态的转换。

2022-09-19 17:30:53 323

原创 Linux系统调用详解(实现机制分析)

linux内核中设置了一组用于实现系统功能的子程序,称为系统调用。系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于,而普通的函数调用由函数库或用户自己提供,运行于。一般的,进程是不能访问内核的。它不能访问内核所占内存空间也不能调用内核函数。CPU硬件决定了这些(这就是为什么它被称作为了和用户空间上运行的进程进行交互,内核提供了一组接口。透过该接口,应用程序可以访问硬件设备和其他操作系统资源。

2022-09-19 15:57:41 1785

原创 一文详解Linux IO模式及 select、poll、epoll

调用blocking IO会一直block住对应的进程直到操作完成,而non-blocking IO在kernel还准备数据的情况下会立刻返回。1. 我们已经把一个用来从管道中读取数据的文件句柄(RFD)添加到epoll描述符2. 这个时候从管道的另一端被写入了2KB的数据3. 调用epoll_wait(2),并且它会返回RFD,说明它已经准备好读取操作4. 然后我们读取了1KB的数据5. 调用epoll_wait(2)......

2022-09-17 22:17:38 174

原创 深入理解内核阻塞与唤醒进程

MMC: cpu内存管理单元物理内存: 内存条的内存空间虚拟内存: 使得程序认为自己拥有连续的可用的内存,实际上,通常是被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储上。页面文件: 操作系统反映使用虚拟内存的硬盘空间大小而创建的文件。缺页中断: 用户程序访问已经映射在虚拟地址空间中,但未被加载到物理内存的一个分页时,由MMC发出的中断。虚拟内存空间进行分页产生页(page),物理内存地址空间进行分页产生页帧(page frame),页和页帧大小一样。

2022-09-17 21:52:19 819

原创 浅谈Linux mmap内存映射

mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系,函数原型如下 void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。如下图所示。

2022-09-17 21:24:56 1191 1

原创 一文总结Linux内核调试方法之coredump

通过disassemble命令可以打印出错时的汇编代码片段,其中箭头指向的是出错的指令,即PC寄存器指向的地址,PC寄存器存放的是下一条执行指令。其实,CPU确实是执行过这一条指令,但是CPU发现这条指令发生的异常,这个时候就会进入异常处理流程,gdb通过回溯调用栈准确地回到这一条指令执行前的状态,所以PC寄存器的值是完全可信的。前面我们讲到core dump可以查看应用程序崩溃时的现场信息,这里,我们需要gdb命令辅助实现,使用gdb test core(即test可执行文件和core文件)

2022-09-17 17:41:37 721

原创 浅析Linux内核之mmc子系统-sdio

上面这段代码注册了内核在start_kernel()中会调用的函数,如map_io提供将各IP寄存器地址到内核虚拟地址的转换,init_early()函数由start_kernel()--->setup_arch()--->mdesc->init_early()调用,其余的init_irq,handle_irq()等会在start_kernel()中分别调用。到2.2.4为止,host的device和driver都已经创建,匹配后调用host对应的probe函数:omap_hsmmc_probe()。

2022-09-17 16:37:41 1818

原创 一文带你了解Linux内核之有关Linux文件系统实现的问题

今天看的代码不多,差不多都是网上找的代码,有些解释也是查阅资料写上去的,有些还是不懂,希望各路大神指教,这里我总结了有关Linux文件系统实现的问题,但是具体的细节方面并没有提及到,大家看了之后应该只能有一个大致的最Linux文件系统的了解,有读者问我看的是哪些书,这里我说明一下,看了Linux内核编程,还有深入理解Linux内核以及网上各种资料或者其他大牛写的好的博客。个长年累月运行的程序(比如网络服务器),打开的文件描述符一定要记得关闭,否则随着打开的文件越来越多,会占用大量文件描述符和系统资源。

2022-09-17 16:29:22 249

原创 带你彻底理解 IO 多路复用实现机制

IO 多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪就会阻塞应用程序,交出CPU。多路是指网络连接,复用指的是同一个线程select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。

2022-09-16 22:21:10 313

原创 深入理解Linux网络编程之IO模型

当用户进程调用了recvfrom调用时,内核进入IO的第一个阶段:准备数据(内核需要等待足够的数据再拷贝),这个过程需要等待,用户进程会被阻塞,等内核将数据准备好,然后拷贝到用户地址空间,内核返回结果,用户进程才从阻塞态进入就绪态。epoll使用一个文件描述符管理多个描述符,将用户关心的文件描述符的事件存放到内核的一个事件表中,采用监听回调的机制,这样在用户空间和内核空间的copy只需一次,避免再次遍历就绪的文件描述符列表。内核文件描述符就绪后,通过信号通知用户进程,用户进程再通过系统调用读取数据。

2022-09-16 20:59:27 73

原创 一文了解Linux性能调优之Linux文件系统

在接到进程打开/var/log/messages 文件的请求时,内核分析文件路径,然后搜索/(根目录)的条目,其中包含了它自己目录下 的文件和目录信息。虚拟文件系统(VFS)是一个处于用户进程和各类文件系统之间的抽象接口层,VFS提供访问文件系统对象的通用对象模型(例如,i-node、文件对象、页缓存、)和方法,它对用户进程隐藏了各种文件系统的差别。日志文件系统解决了这个问题,在写入实际的文件系统之前,他先把要修改的数据写入一个叫做日志区域(journal area)的地方。参照它,内核就能获得数据块了。

2022-09-16 17:45:28 988

原创 一文带你了解10个Linux系统进程

进程是操作系统上非常重要的概念,所有系统上面跑的数据都会以进程的类型存在。在 Linux 系统当中:触发任何一个事件时,系统都会将它定义成为一个进程,所以,进程是Linux程序的唯一的实现方式。- - 内核技术中文网 - 构建全国最权威的内核技术交流分享论坛一文带你了解10个Linux系统进程 - Linux内核 - 内核技术中文网 - 构建全国最权威的内核技术交流分享论坛(版权归原作者所有,侵删)

2022-09-16 16:25:41 495

原创 从优化思路说起Linux性能调优

系统性能优化是个涉及面广、繁琐、长久的工作,寻找出现性能问题的根源往往是最难的部分,一旦找到出现问题的原因,性能问题也就迎刃而解。因此,解决问题的思路变得非常重要。例如,linux系统下的一个网站系统,用户反映,网站访问速度很慢,有时无法访问。针对这个问题,第一步要做的是检测网络,可以通过ping命令检查网站的域名解析是否正常,同时,ping服务器地址的延时是否过大等等,通过这种方式,首先排除网络可能出现的问题;

2022-09-16 16:24:23 169

原创 一文教你如何提高 Linux 上 socket 性能

在开发 socket 应用程序时,首要任务通常是确保可靠性并满足一些特定的需求。利用本文中给出的 4 个提示,您就可以从头开始为实现最佳性能来设计并开发 socket 程序。本文内容包括对于 Sockets API 的使用、两个可以提高性能的 socket 选项以及 GNU/Linux 优化。

2022-09-15 22:23:30 1039

原创 面试问了解Linux内存管理吗?10张图给你安排的明明白白!

Linux内存管理是一个非常复杂的系统,本文所述只是冰山一角,从宏观角度给你展现内存管理的全貌,但一般来说,这些知识在你和面试官聊天的时候还是够用的,当然我也希望大家能够通过读书了解更深层次的原理。希望这篇文章可以作为一个索引一样的学习指南,当你想深入某一点学习的时候可以在这些章节里找到切入点,以及这个知识点在内存管理宏观上的位置。- - 内核技术中文网 - 构建全国最权威的内核技术交流分享论坛面试问了解Linux内存管理吗?10张图给你安排的明明白白!

2022-09-15 21:03:25 122

原创 深入理解linux线程实现

尽管linux支持轻量级进程,但并不能说它就支持内核线程,因为linux的"线程"和"进程"实际上处于一个调度层次,共享一个进程标识符空间,这种限制使得不可能在linux上实现完全意义上的POSIX线程机制,因此众多的linux线程库实现尝试都只能尽可能实现POSIX的绝大部分语义,并在功能上尽可能逼近。当内核既支持进程也支持线程时,就可以实现线程-进程的"多对多"模型,即一个进程的某个线程由核内调度,而同时它也可以作为用户级线程池的调度者,选择合适的用户级线程在其空间中运行。

2022-09-15 17:55:06 242

原创 小白也能秒懂的Linux零拷贝原理

3)write系统调用,则再次导致用户空间到内核空间的上下文切换,将用户空间的进程里的内存数据复制到内核空间的socket缓冲区(也是内核缓冲区,不过是给socket使用的),然后write系统调用返回,再次触发上下文切换。利用第一点特性可以把内核空间地址和用户空间的虚拟地址映射到同一个物理地址,这样DMA就可以填充(读写)对内核和用户空间进程同时可见的缓冲区了;1)发出read系统调用,会导致用户空间到内核空间的上下文切换,然后再通过DMA将文件中的数据从磁盘上读取到内核空间缓冲区。

2022-09-15 16:40:18 183

原创 一文带你从根上理解用户态与内核态

将Linux整个体系分为用户态和内核态,为了使应用程序访问到内核的资源,如CPU、内存、I/O,内核必须提供一组通用的访问接口,这些接口就叫。),张三想着这一线的房价,倍感压力山大,于是给自己定下一个目标,一定要做技术总监,在一线扎根, 奋斗B张三,奋斗5年终于当上了技术总监(就是屏蔽这些复杂的底层实现细节,减轻程序员的负担,从而更加关注上层的逻辑实现,它对系统调用进行封装,提供简单的基本接口给程序员。顾名思义,就是外壳的意思,就好像把内核包裹起来的外壳,它是一种特殊的应用程序,俗称命令行。

2022-09-15 16:38:07 127

原创 Linux 系统调用权威指南(二)

对于许多系统调用来说,glibc只需要一个简单的封装函数将参数传入合适的寄存器中,然后执行syscall或者int $0x80指令,或者调用_ _kernel_vsyscall。目前我们已经知道用户程序如何通过_ _kernel_vsyscall函数利用sysenter触发系统调用,下面来看看内核如何利用系统调用号来执行系统调用中的代码。提供的代码样例中通过搜索ELF辅助头文件找到和AT_SYSINFO匹配的头文件,头文件中含有_ _kernel_vsyscall函数的地址。

2022-09-15 15:51:08 393

原创 一文带你学会Linux下安装Docker

目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker。针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器。

2022-09-14 22:20:18 682

原创 Linux 系统调用权威指南(一)

当你运行的程序调用 open,fork,read,write(以及其它类似的函数)时,就会触发系统调用。系统调用描述的是用户程序进入内核后执行的任务。用户程序利用系统调用能执行许多操作:创建进程、网络、文件以及I/O操作等。用户程序可以通过不同的方式执行系统调用,不同CPU架构中,底层执行系统调用的指令也有所不同。作为应用程序开发者,不必刻意去考虑系统调用是如何执行的。你只需要简单的加上合适的头文件,像调用普通函数一样就可以使用系统调用了。

2022-09-14 21:17:14 387

原创 带你进入内核开发的大门 -内核中的线程

内核线程是直接由内核本身启动的进程。内核线程实际上是将内核函数委托给独立的进程,它与内核中的其他进程”并行”执行。内核线程经常被称之为内核守护进程。内核线程是被调度的实体,它被加入到某种数据结构中,调度程序根据实际情况进行线程的调度。内核线程与用户态线程的作用类似,通常用于执行某些周期性的计算任务,或者在后台执行需要大量计算的任务。本文主要介绍一下,更深入的内容在后续文章中介绍。小编在群文件上传了一些个人觉得比较好得学习书籍、视频资料,有需要的可以进群领取!!!

2022-09-14 17:30:01 163

原创 一文了解Linux磁盘缓存机制

最近遇到了一起跟磁盘相关的线上故障,借此总结一下之前不太了解的Linux磁盘缓存相关的知识。总的来说磁盘缓存出现的原因大概有两个:第一是访问磁盘的速度远慢于访问内存的速度,通过在内存中缓存磁盘内容可以提高访问速度;第二是根据程序的局部性原理,数据一旦被访问过,就很有可能在短时间内再次被访问,所以在内存中缓存磁盘内容可以提高程序运行速度。在这次遇到的线上故障中,根本原因在于在业务逻辑中使用了临时文件做缓存,一个临时文件创建后如果在短时间内删除,这时候对这个文件的操作都是在页缓存内进行,不会实际回写到磁盘。

2022-09-14 16:10:42 769

原创 从内核的角度看IO!

所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。例如:CPU资源,存储资源,IO资源等。回到文章的开头,如果我们的应用程序要通过socket读取网络中的数据,必然涉及到了通过系统调用(read函数),由用户态切换到内核态,由内核程序读取网卡中的数据,再回到用户态的过程。于是内核提供了一个select的系统调用(多路复用),它可以把发生了可读的socket的文件描述符返回,然后程序再调用recvfrom函数,这样就大大减少了系统调用的次数。

2022-09-14 15:31:11 240

原创 学习Linux内核必须懂的-文件系统初探

这次来说文件系统. 文件系统是非常重要的,提高磁盘使用率, 减小磁盘磨损等等都是文件系统要解决的问题. 市面上的文件系统也是数不胜数, 比较常用的像ext4,xfs以及ntfs等等, 国内的像鹅厂的tfs, 然后还有sun号称"last word in file system"的ZFS, 学习ZFS而来的btrfs.下面上一张Linux文件系统组件的体系结构图, 是我整合了多方文献并结合自己的经验画出来的. 可以看出, 最重要的就是vfs。

2022-09-14 15:30:03 143

原创 浅谈linux线程模型和线程切换

本文从linux中的进程、线程实现原理开始,扩展到linux线程模型,最后简单解释线程切换的成本。

2022-09-13 21:34:10 490

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除