摩斯电码
Linux内核工程师
展开
-
使用perf、ftrace抓取指定发生指定事件时的调用栈(内核态+用户态)
有时我们会有这样的需求,我们希望获得发生某个内核事件时的调用栈,从内核态一直到用户态。原创 2024-08-20 16:07:37 · 408 阅读 · 0 评论 -
Linux系统调用流程、参数传递以及返回值
应用程序运行在用户态,需要通过内核提供的系统调用陷入到内核态来完成一些特权操作,比如创建、打开以及读写文件等。实际开发中,为了可移植性和便捷性,应用一般不会直接调用系统调用,而是使用C库封装的接口,由C库去调用。系统调用的实现机制入参是如何传递的返回值是如何传递的系统调用返回值、errno、perror。原创 2024-04-21 17:54:52 · 339 阅读 · 0 评论 -
ftrace学习 —— user_events的用法
要使用user_event,大致要经过:注册、使能跟踪、写入跟踪信息、读取跟踪信息、关闭跟踪、反注册、删除。通过user_event可以实现对应用程序的跟踪,类似linux内核中的tracepoint那样。,不过,user_event提供的方法功能更加强大,可以配合perf等工具使用。文件节点的值时,check变量的相应bit会随之改变。写入0,那么check变量的bit31是0,向。写入0,那么check变量的bit30是0,向。写入1,那么check变量的bit31是1.原创 2023-06-11 19:13:38 · 3247 阅读 · 0 评论 -
读取内核变量的几种方法
下面我们通过几种办法从内存里得到其内容。原创 2023-08-07 14:08:00 · 1793 阅读 · 0 评论 -
Linux内存管理 —— 通过实验学习和理解CoW(2)
前一篇通过实验的方法理解了一下CoW,下面大致分析一下Linux内核源码实现。我们知道,CoW是父进程在fork时,将自己的私有可写的页面的映射属性设置为只读,然后映射信息跟子进程共享,后面fork完成后,父子进程先发起写操作的一方会触发CoW,而后发起的也会触发缺页,但是不会CoW,而是复用已有的页面。原创 2024-04-01 14:23:44 · 874 阅读 · 0 评论 -
Linux内存管理 —— 通过实验学习和理解CoW(1)
我们知道,Linux内核为了提高进程fork的效率,实现了CoW技术,即将进程的私有的可写区域的Page的映射属性改成只读,父子进程的任何一方先发起写操作的将触发CoW:分配一个新的物理页,然后将要写的区域页的内容拷贝到这个物理页,最后将这个物理页映射到要写的用户虚拟地址上。下面我们通过实验和源码分析来理解这个过程。原创 2024-03-31 19:34:20 · 1080 阅读 · 0 评论 -
使用crash、funcgraph以及kprobe使用案例 —— 跟踪文件写缺页和脏页回写
内核版本linux-6.5需求通过mmap将一个文件以SHARE的方式映射到进程的虚拟地址空间,然后写其中一段数据,此时会发生缺页异常,内核会分配页缓存并根据偏移将文件指定位置的内容读到页缓存,最后再修改进程的页表,将这个页缓存映射给用户,不过第一次映射的时候PTE里面RW位是0,当进程真正写的时候,会再次触发缺页,并将对应的文件页设置为脏页,Linux会定期将脏页回写到磁盘上,在回写操作执行之前清除脏页标记,同时也会清除RW位。下面利用crash、funcgraph以及kprobe结合的方式来学习原创 2023-11-29 11:29:19 · 1233 阅读 · 0 评论 -
Linux的信号栈的实现(1)
在前一篇文章中介绍了Linux系统中的几种栈以及它们之间的切换,进程在用户态和内核态会使用不同的栈,在用户态的主线程和其他线程都有各自的栈,此外进程在执行信号处理程序时也需要栈,那么这个栈来自哪呢?原创 2024-04-01 16:13:32 · 1242 阅读 · 0 评论 -
深入理解Linux系统中的几种栈以及栈的切换
栈在进程运行过程中的起着至关重要的作用,进程可以使用栈来保存函数参数、局部变量以及返回地址等,还可以利用栈回溯技术获取程序的函数调用关系。那么在Linux系统中,一个进程会用到哪些栈呢?进程执行过程中,或者处于用户态或者处于内核态,所以在用户态和内核态分别有各自的栈。在用户态,一个进程中的主线程跟其他线程用的是不同的栈。在内核态,根据是通过系统调用还是中断的原因进入内核,栈又有所区分。另外进程在用户态异步执行信号处理程序时又使用的是哪个栈呢?下面讨论一下,使用的是基于ARM64的Linux平台,Linux内原创 2024-04-07 13:13:32 · 402 阅读 · 0 评论