
Linux 内核架构
文章平均质量分 78
内核相关
SGchi
talk is cheap,show me the code.
展开
-
Linux 内核哈希表
哈希表(Hash table)又叫散列表,是根据(Key, Value) 键值对进行访问的数据结构。主要目的是提高查询效率,比如Hash表的order为5,也就是同时使用2^5个链表,理论上查询速度可以比链表快2^ 5倍,典型的以空间换时间。主要实现在 include/linux/hashtable.h 中,基于hlist。在 Linux 内核中,Hash Table 和 RCU 是经常一起使用的。原创 2024-12-08 15:40:44 · 1070 阅读 · 0 评论 -
Linux模块机制
Linux 的模块机制大致就是这样的:按照规范编写模块,内核提供系统调用将模块的可执行文件从用户空间拷贝到内核空间,然后调用模块初始化函数进行初始化,并解析模块可执行文件(.ko 文件),用完之后再调用模块的卸载函数进行卸载。实际上 Linux 的模块机制比上面介绍的还要复杂,要完成的工作并不限于上述的几个步骤。当系统将 .ko 文件拷贝到内核空间后,内核还需要按照模块可执行文件格式(也就是 ELF)解析模块,将必要的符号(即函数、变量)地址暴露给外部,这样系统的其它组件才能使用模块的功能。原创 2024-07-17 14:54:33 · 796 阅读 · 0 评论 -
物理内存和虚拟内存区别
我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(SwapSpace)。原创 2024-02-01 17:27:27 · 1177 阅读 · 0 评论 -
Linux 内核线程
先说kernel_thread接口,使用该接口创建的线程,必须在该线程中调用daemonize()函数,这是因为只有当线程的父进程指向”Kthreadd”时,该线程才算是内核线程,而恰好daemonize()函数主要工作便是将该线程的父进程改成“kthreadd”内核线程;但是内核线程总要访问内核空间的其他内核啊,没有mm域毕竟是不行的。所以内核线程被调用时, 内核会将其task_strcut的active_mm指向前一个被调度出的进程的mm域, 在需要的时候,内核线程可以使用前一个进程的内存描述符。原创 2024-01-11 14:45:28 · 1298 阅读 · 0 评论 -
Netlink 通信机制
Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。在Linux 内核中,使用netlink 进行应用与内核通信的应用有很多,如路由 daemon(NETLINK_ROUTE)用户态 socket 协议(NETLINK_USERSOCK)防火墙(NETLINK_FIREWALL)netfilter 子系统(NETLINK_NETFILTER)内核事件向用户态通知(NETLINK_KOBJECT_UEVENT)原创 2024-01-08 20:14:24 · 1238 阅读 · 0 评论 -
Linux kernel 学习笔记
几个推荐的网站或邮件列表:原创 2024-01-04 17:38:16 · 543 阅读 · 0 评论 -
Linux 进程管理 实时调度类及SMP和NUMA
表示实时调度实体,包含整个实时调度数据信息。实践证明SMP服务器CPU利用率最高是2-4个CPU。原创 2023-11-18 13:35:23 · 861 阅读 · 0 评论 -
【Linux】系统调用
进程的内存空间分为用户空间和内核空间两部分,内核空间运行在特权级,用户空间运行在非特权级,并且用户空间是不能直接访问内核空间的。为此,内核向用户空间提供了有限制的访问,即系统调用。由于系统调用是偏底层的,不同平台提供的系统调用不同,为了屏蔽系统调用的各种细节,增加通用性和跨平台性,系统又向用户进程提供了API,用户进程可以通过API来访问系统调用。原创 2023-06-08 14:31:11 · 143 阅读 · 0 评论