Linux系统编程
文章平均质量分 81
聚焦在Linux下进行高效且有质量的系统编程技术,关注系统编程领域中的代码质量,稳定性问题,程序bug问题等。
ichdream
这个作者很懒,什么都没留下…
展开
-
【Linux内核思辩】kmallo VS vmalloc,谁与争锋?
kmalloc()函数的操作与用户空间的malloc()函数非常相似,不同之处在于多了一个flags参数。kmalloc()函数是获取内核内存的简单接口,以字节为单位分配内存。如果需要整页内存,之前讨论的接口可能是更好的选择。然而,对于大多数内核分配,kmalloc()是首选的接口。该函数返回一个指向至少size字节长度的内存区域的指针。分配的内存区域是物理连续的。出错时,它返回NULL。内核分配总是成功的,除非可用内存不足。因此,在所有调用kmalloc()后,必须检查NULL并适当处理错误。原创 2023-04-11 18:15:21 · 283 阅读 · 0 评论 -
【Linux内核解剖】内核问题之softlockup以及应对之法
操作系统(Operating System, OS)是管理计算机硬件和软件资源、协调计算机系统中各个任务执行的基本软件。操作系统的核心组件是内核(Kernel),它负责处理系统调用、内存管理、进程调度等基本功能。内核是操作系统的基石,其稳定性和性能对整个系统至关重要。Linux内核中有两种类型的lockup:softlockup和硬lockup。它们都会导致系统无响应,但原因和表现有所不同。softlockup通常是由于内核中的一个或多个任务长时间占用CPU,导致其他任务无法得到执行;原创 2023-04-09 15:59:10 · 2077 阅读 · 0 评论 -
【shell高级特性】shell参数扩展
我们在编程生涯中,打交道最多的便是shell脚本了,帮助我们批量完成任务。但是,很多人对bash的使用其实是比较浅的,很多shell的高级特性没有涉入到。这节介绍下shell中的参数扩展。原创 2023-04-01 11:16:00 · 172 阅读 · 0 评论 -
【Linux内核动态追踪】kprobes深度剖析和实战
当你尝试加载一个未经验证的内核模块时,内核会输出 “module verification failed: signature and/or required key missing” 的错误信息,并且内核会被 “taint”,表示内核已经不再是干净的状态。这需要一些额外的步骤,包括生成公钥和私钥、使用私钥为内核模块创建数字签名、将公钥添加到系统的信任列表等。在 Linux 系统中,数字签名可以用于验证内核模块的完整性和真实性,从而防止未经验证的内核模块对系统的安全性和稳定性产生威胁。原创 2023-03-30 17:29:01 · 248 阅读 · 0 评论 -
精品品读:I’ll Do It Later: Softirqs, Tasklets, Bottom Halves, Task Queues, Work Queues and Timers
中断是对设备驱动程序的信号,表示有工作需要完成。然而,如果驱动程序在中断处理程序中做太多的工作,系统响应性能将会降低。直到Linux 2.3.42之前,避免这个问题的标准方法是使用bottom half或者task queue将一些工作调度到以后再做。这些处理程序在中断启用的情况下运行,处理时间较长对系统响应性的影响较小。为了实现更好的SMP可扩展性,用于softnet的工作引入了两个新的延迟工作的方法:softirq和tasklet。原创 2023-03-20 14:18:18 · 77 阅读 · 0 评论 -
中断延迟处理机制之Tasklet,从理论到实践
作为Linux内核中的下半部工作机制之一,tasklet有它存在的价值和意义,和其它的中断延迟工作机制互补。Tasklet是在I/O驱动中实现延迟执行函数的首选方法。如前所述,Tasklet是建立在两个名为HI_SOFTIRQ和的软中断之上。多个Tasklet可以与同一个软中断相关联,每个Tasklet都包含自己的函数。实际上,这两个软中断并没有什么区别,只是在函数中,它先执行HI_SOFTIRQ的Tasklet,再执行的Tasklet。Tasklet和高优先级Tasklet存储在和数组中。原创 2023-03-20 10:17:19 · 598 阅读 · 0 评论 -
Linux系统调用之setfsuid
Linux系统调用深入解读,刨根挖底原创 2022-05-23 18:32:10 · 415 阅读 · 1 评论