
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
linux 模块编译的选项

操作系统的进程管理就是在合适的时机选择合适的进程来执行,在单个cpu运行队列上各个进程宏观并行微观串行执行,多个cpu运行队列上的各个进程之间完全的并行执行(这句话非常精辟)。进程管理是个复杂的过程,例如进程的描述、创建和销毁、生命周期管理、进程切换、进程抢占、调度策略、负载均衡等等。本文主要关注进程管理的一个切入点,那就是进程的上下文切换,来理解linux内核是如何进程进程上下文切换的,从而揭开
做内核驱动开发经常会使用linux内核最经典的双向链表 list_head, 以及它的拓展接口(或者宏定义): list_add , list_add_tail, list_del , list_entry ,list_for_each , list_for_each_entry ......每次看到这些接口,感觉都很像,今天专门研究了一下内核,对它们做一些总结,希望为后续开发提供方便。首先找到l
转载自今日头条号"闪念基因"在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘。这里提到的脏页(dirty page)即为页缓存(page cache)。块缓存(buffer cache),则是内核为了加速对底层存储介质的访问速度,而构建的一层缓存。他缓存部分磁盘数据,当有磁盘读
上一篇讲了文件系统计算机底层知识拾遗(四)理解文件系统,说了文件按照inode-block的结构存储在磁盘上。这篇说说操作系统是如何来读取磁盘上的块的Linux把设备分为三种1. 块设备,用来永久存储文件信息的,支持顺序访问和随机访问(按块号访问),比如磁盘,光盘等2. 字符设备,只能顺序访问,比如键盘3. 网络设备,只能顺序访问,比如网卡,蓝牙设备我们常说的一句话是Linux把所有IO设备都当做
在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作(file sync,即文件同步),该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘。这里提到的脏页(dirty page)即为页缓存(page cache,也叫页高速缓存)。块缓存(buffer cache),则是内核为了加速对底层存储介质的访问速度,而构建的一层缓存。它缓存部
Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。段页式机制如下图。Linux内核地址空间的划分通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。Linux内核高端内存的由来当内核模块代码或线程访问内存时,代码中的内存地址
CPU所有的操作都是建立在虚拟地址上处理(这里的虚拟地址分为内核态虚拟地址和用户态虚拟地址),CPU看到的内存管理都是对page的管理,接下来我们看一下用来管理page的经典算法--Buddy。Buddy分配算法假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框。这个时候,在这段内存上不能找到连续的5个空闲的页框,就会去另一段内存上去寻找5个连续的页框,这样子,久
在为linux内核编写的模块中,用户空间的open,read,write,llseek等函数都是不可以使用的。而必须使用其在内核中对应的函数。可以使用filp->open配合struct file里的read/write来进行对文件的读写操作。直接上干货(内容自己悟!):例1 :filp->f_op->readfilp_openfilp->f_op->write#in
在Linux中,“万物兼文件”,我们知道在linux下面有很多文件系统,如EXT/2/3/4,XFS等,为了很好的支持各种类型的文件系统,Linux抽象了一层虚拟文件系统层,用于更加灵活的适配各种具体的文件系统实现。其基本架构如下:虚拟文件系统架构可以看到所有的虚拟文件系统操作都必须在内核态执行,这是由于对于系统存储及外部设备的访问极其复杂,这部分的操作不能交给用户去操作,...







