当打开一个文件时,内核就创建一个与该文件相关联的struct file结构,其中的*f_op就指向的是具 体对该文件进行操作的函数。例如用户调用系统调用read来读取该文件的内容时,那么系统调用read最终会陷入内核调用sys_read函数,而 sys_read最终会调用与该文件关联的struct file结构中的f_op->read函数对文件内容进行读取。
unsignedlong_head_2;/*public:*/void*_hugetlb_subpool;void*_hugetlb_cgroup;void*_hugetlb_cgroup_rsvd;void*_hugetlb_hwpoison;/*private: the union with struct page is transitional*/};struct{ unsignedlong_flags_2a; unsignedlong_head_2a;/*public:*/structlist_head _deferred_list;/*private: t...
structplatform_device(/include/linux/Platform_device.h){constchar*name;int id;struct device dev;u32 num_resources;struct resource*resource;}; Platform_device 结构体描述了一个 platform 结构的设备,在其中包含了一般设备的结构体 struct device dev; 设备的资源结构体 struct resource * resource;还有设备的...
structplatform_device(/include/linux/Platform_device.h){constchar*name;int id;struct device dev;u32 num_resources;struct resource*resource;}; Platform_device结构体描述了一个platform结构的设备,在其中包含了一般设备的结构体struct device dev;设备的资源结构体struct resource *resource;还有设备的名字const ...
我们可以找到它用来描述设备信息的结构体,可以看出,驱动中用于匹配的结构使用的compatible和设备树中一模一样,否则就可能无法匹配,这里另外的一点是struct of_device_id数组的最后一个成员一定是空,因为相关的操作API会读取这个数组直到遇到一个空。 2. address...
进程级别的文件描述符表files_struct:内核为每个进程维护一个文件描述符表,该表记录了文件描述符的相关信息,包括文件描述符、指向打开文件表中记录的指针。 系统级别的打开文件表file:内核对所有打开文件维护的一个进程共享的打开文件描述表,表中存储了处于打开状态文件的相关信息,包括文件类型、访问权限、文件操作函数(...
struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm, unsigned long address);每个VMA里面实际增加了一个vma_lock(里面含有一个读写锁):在page fault里面我们持有读锁,在其他要写某个VMA的场景,我们要持有写锁(前提条件是我们也必须持有了进程级的mmap_lock):它的这个实现看起来很奇怪...
struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; atomic_t usage; unsigned int flags; /* per process flags, defined below */ unsigned int ptrace; int lock_depth; /* BKL lock depth */ ...
在内核中有一个 task_struct 数据结构,即进程控制块。有了这个数据结构,进程才能被内核调度器识别并参与内核调度,除此之外它还记录着进程所占有的各项资源。 除上述的专有的系统堆栈空间外,进程还需要有独立的用户堆栈空间,这就是 mm_struct 数据结构,该数据结构位于 task_struct 结构中,字段名称为 mm。 (3)进...
为了获得最新版内核源代码,可以访问https://kernel.org感受内核之美。 同样,通过阅读内核源代码,可以增进对理论知识的理解,以及学会阅读和编写高品质的内核代码。 获取内核代码: git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git 1.3 内核源码编译:秘诀揭开 反复琢磨内核源码,将揭开内...