linux内核在启动时,会先把vmlinux文件加载到内存中,然后根据cpu的个数,为每个cpu都分配一块用于存放percpu变量的内存区域,之后把vmlinux中的.data..percpu section里的内容,拷贝到各个cpu的percpu内存块的static区域里,最后将各percpu内存块的起始地址放到对应cpu的gs寄存器里。 __per_cpu_load表示当vmlinux被加载...
多线程等待和用户自旋锁 这里主要聚焦于多线程中,主进程等待子进程时候的场景和用户程序中自旋锁的设计场景上。 首先,一般主进程等待子进程可以使用 fork 然后 wait 的方法,其核心就是 SIGCHLD 信号。fork 在调用 clone 的时候选择该信号,之后 clone 的进程成为调用者进程的子进程。当它退出的时候会传递 SIGCHLD 信...
看完之后发现有几处明显的翻译错误(好在有英文CHM作为对照).技术类书籍一直都是读的英文CHM或PDF,这一本是例外. 《Understanding the Linux Kernel》这本巨作正在拜读之中,这次不再去买中文版了,还是直接读英文原版比较好. 下面是在阅读《Linux Kernel Development》的过程中自认为值得记录的部分,五笔输入的过程中选...
1. 在内核模块中列出所有的进程: 从init_task开始遍历内核链表,输出所有进程 #include <linux/module.h>#include<linux/list.h>#include<linux/init.h>#include<linux/sched.h>MODULE_LICENSE("Dual BSD/GPL");staticinttest_init(void) {structtask_struct *task, *p;structlist_head *pos;intcount=0; pr...
Linux Kernel Development——虚拟文件系统 虚拟文件系统(VFS)为用户空间提供了文件系统相关的接口,用户程序可以通过标准的Unix文件系统调用对不同介质上的不同文件系统进行读写操作。 通用文件系统接口 VFS使得用户可以直接使用open()、read()和write()而无需考虑具体的文件系统和实际物理介质。标准系统调用也可以在不...
The Linux kernel is one of the most important and far-reaching open-source projects. That is why Novell Press is excited to bring you the second edition of Linux Kernel Development, Robert Love's widely acclaimed insider's look at the Linux kernel. This authoritative, practical guide helps de...
Linux Kernel Development——内核同步方法 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问。尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。在主流的Linux内核中包含了几乎...
The third edition of the authoritative, practical introduction to the Linux kernel for programmers who want to better understand the Linux kernel and write and develop kernel code. Authored by a well-known member of the Linux kernel development team, with a reputation for a highly readable and ...
系统化学习C++多线程编程 从基础概念到高级应用 打造高效可靠的多线程系统 54 -- 15:25 App How to Create Your Own LLM Agent with Your OWN DATA - Chaindesk 72 -- 46:11 App Sundar Pichai, CEO of Google and Alphabet 浏览方式(推荐使用) 哔哩哔哩 你感兴趣的视频都在B站 打开信息...
Linux Kernel Development——虚拟文件系统 虚拟文件系统(VFS)为用户空间提供了文件系统相关的接口,用户程序可以通过标准的Unix文件系统调用对不同介质上的不同文件系统进行读写操作。 通用文件系统接口 VFS使得用户可以直接使用open()、read()和write()而无需考虑具体的文件系统和实际物理介质。标准系统调用也可以在不...