抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

日志型文件系统

日志型文件系统试想这么一个场景,磁盘正在写data block或data bitmaps或inodes时发生了crash,要如何保证数据的一致性呢?这时使用 日志journaling 就是一个很好的解决方案。 原理在真正更新磁盘数据前,会先往磁盘写入一些信息,这些信息用于描述接下来的任务,这种方式被称为 write-ahead loggind。 当发生crash时就可以通过记录的信息回溯cr...

使用ftrace追踪内核函数调用

1 初探ftrace遇到的问题1.1 搞清楚ftrace是否标记出中断函数根据官网的描述,funcgraph-irqs选项,用于表明是否追踪中断。因此关闭后就不会记录中断信息。 123funcgraph-irqs When disabled, functions that happen inside an interrupt will not be traced. 1.2 搞清楚为...

execv中的缓存管理分析

page cache与缓存管理直接从磁盘访问文件会很慢,可以利用空闲的内存来缓存一些磁盘文件的内容,这部分用作缓存磁盘文件的内存就叫做page cache。 1 execv中的调用page cache的流程执行read()系统调用后,首先会查看page cache里有没有目标文件的内容,如果有(cache hit),直接读取;如果没有(cache miss)再从磁盘上读取,放入page ca...

Buddy系统的原理及实现

Buddy系统的原理及实现 本质上就是一个多级链表, 然后使用伙伴系统这种特殊的”索引方式”开快速分配和查找所需内存 通过”二分查找”的方式快速找到所需大小的内存空间。对于大内存的分配是比较快的。 基本要素: 多级freelist用于索引: e.g. 有大小为32, 64, 128…的freelist heap空间用于分配, bitmap用于标识是否分配 对齐空间内存布局用于快速删该 ...

slab分配器

slab分配器slab分配器的两个功能: 1 减少内部碎片: 小结构占用一个page不划算 一般名为kmalloc-xxx, e.g. kmalloc-4096, 这些是通用型slab 2 作为高速缓存,存储内核中经常被分配并释放的对象 Jeff Bonwick 发现对内核中普通对象进行初始化所需的时间超过了对其进行分配和释放所需的时间。因此他的结论是不应该将内存释放回一个全局的内...

execv中地址地址映射流程分析

1 execv函数地址映射流程分析1.1 execv如何填充新进程的页表execv()中会调用bprm_mm_init函数准备一个linux_binprm结构体,该结构体用于描述新进程的各种信息,最后由search_binary_handler找到对应文件格式的处理程序加载执行load_binary。 其中bprm_mm_init会执行如下流程: 123456789101112bprm_mm...

进程退出和销毁过程分析

进程退出和销毁过程分析结束一个进程的生命可以分为两个步骤:进程退出和进程销毁。进程退出主要是释放进程的资源,使进程称为僵死(TASK_ZOMBIE)状态;进程销毁主要是通过父进程,释放僵死进程的各种信息 当前进程被设为TASK_ZOMBIE僵死状态后会向其父进程发生SIGCHLD信号,父进程收到SIGCHLD信号后父进程会销毁僵死状态的子进程。 父进程通过调用wait()或waitpid()...

execv的执行过程

execv执行过程可执行程序的表示elf文件格式Linux下标准的可执行文件格式是ELF(Executable and Linking Format),是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西、以及都以什么样的格式去放这些东西。 但是linux也支持其他不同的可执行程序格式, 各个可执行程序的执行方式不尽相同, 因此linux内核每种被注册...

使用systemtap实现进程的跟踪

使用systemtap实现进程的跟踪systemtap安装systemtap安装分为两个部分,一个是安装systemtap本身;另一个是安装对应的内核信息包(Kernel Information Packages),否则systemtap将无法深入内核探测。 以下以在centos中安装为例。 安装systemtap 使用对应的包管理工具安装,如centos中yum install syst...

如何向linux内核插入新的调度器[todo]

如何向linux内核插入新的调度方法这里演示以下如下向linux内核中插入一个线程的调度器:CASIO(源码) TODO rebuild 注意 现代版本的linux内核(4.18)中调度器的入口不再是./kernel/sched.c,而是在core.c,而调度类分离成rt.c,idle.c,fair.c,stop_task.c,deadline.c,对应5个调度器类 linux进程调度机制...