Linux内核源码阅读笔记
Linux内核源码阅读笔记
yiqiaoxihui
他强由他强,清风拂山岗!
展开
-
如何参与Linux内核的开发维护
对于想参与Linux内核开发的同学来说,如何开始是一个问题,网上资料五花八门,但是,第一步首先建议的是下载任意版本的linux内核源码,然后阅读Document目录下的HOW_TO文档,这是官网说明,值得你去阅读,如果阅读英文吃力,Document目录下专门有一个zh_CN的目录,里面是一些关键的中文文档,由几个中国人专门负责维护,如下图所示。其实Document目录下包含了Linux 内核开发的...原创 2018-06-24 14:09:17 · 1678 阅读 · 0 评论 -
Linux内存初始化&开启分页(简)
摘要本文主要介绍linux内核初始化时,对物理内存的使用结构,以及如何从实模式转换成保护模式,即如何开启内存分页。1.物理内存布局 如上图所示,在内核初始化阶段,内核被加载到物理内存地址0x00100000开始的地方,即图中_text的地方为内核代码的第一个字节,至于为何不加载到物理内存的起始处,可以参考其他资料。2.进程的线程地址空间我们知道,进程分为内核态和用户态,...原创 2018-11-26 00:48:38 · 818 阅读 · 0 评论 -
Linux内核中的同步机制
摘要本文介绍Linux内核中的一些同步机制,通过本文,希望读者能够明白以下几点:什么是同步 为什么要同步 同步的几种手段1.什么是同步?与其解释什么是同步,倒不如告诉读者同步的由来。在Linux内核中,同步技术是为了解决问题而产生的。 说起这个问题,不得不提起可重入内核。可重入内核:可重入内核即多个进程可以同时在内核态下执行,多个进程的执行事实上说明了进程可以交替执行。 内...原创 2018-08-26 15:54:06 · 4439 阅读 · 1 评论 -
细说Linux内核中断机制(详)
在技术面前,多问为什么总是好的,知其然不如知其所以然。为什么要有中断?1.前言本文尽量以设计者的角度去介绍中断。本文着重介绍Linux内核中中断处理的始末流程,因此对一些基本的概念应该有所了解。2.硬件支持我们知道,CPU有一个INTR引脚,用于接收中断请求信号。而中断控制器用于提供中断向量,即第几号中断。3.内核需要做哪些工作?3.1需要一张表首先,中断可...原创 2018-07-20 23:04:21 · 4463 阅读 · 0 评论 -
Linux内核源码阅读之中断(简)
摘要本文对Linux2.4.0中中断机制从源码层面进行简要介绍,阅读需要有一定基础,详细版本请参考这里。这里主要介绍以下几个部分:1.中断向量表IDT的初始化主要是设置中断向量表中中断服务的类型,服务程序的入口地址,DPL等。1.1 trap_init()初始化系统保留的中断向量,从0x00到0x1f共36个;init_IRQ()初始化用于外设的通用中断向量,0x20~0xff...原创 2018-05-19 00:43:05 · 419 阅读 · 0 评论 -
Linux内核源码阅读之do_fork()
前言本文主要介绍Linux内核中,一个新的进程/线程是如何诞生的。主要涉及复制父进程各类资源、设置子进程系统堆栈、构造子进程调度时运行点等。函数原型Linux系统中,除第一个进程是被捏造出来的,其他进程都是通过do_fork()复制出来的。int do_fork(unsigned long clone_flags, unsigned long stack_start,stru...原创 2018-05-20 01:38:45 · 2171 阅读 · 0 评论 -
Linux内核源码阅读之系统调用execve()
asmlinkage int sys_execve(struct pt_regs regs)前言sys_execve()根据参数中指定的二进制文件路径,执行相应的二进制文件。我们可能会疑惑,参数中是一个pt_regs结构,哪里有文件路径?事实上,系统调用也属于中断,而对于系统调用,会将参数地址保存到指定寄存器中,这一事件发生的时间点是已经进入execve()代码,但是还未通过int 0x80中断真...原创 2018-05-20 23:42:43 · 3089 阅读 · 0 评论 -
Linux源码阅读进程通信之管道(详)
管道是进程通信的一种方式,这里主要介绍无名管道(以后简称管道)。特点1.这种管道只能在父子进程或兄弟进程之间建立,而命名管道就没有这种限制。2.管道只能单向流通,对于A,B两个进程,要不A写B读,要么B写A读,数据流向是单向的。概述简单的说,管道其实是在内存中分配一个页面pipe_page用作两个进程通信的联络点,A进程往页面中写,而B进程从页面中读,或者相反。既然是两个进程用一个页面作为通信的联...原创 2018-05-27 15:55:03 · 817 阅读 · 0 评论 -
Linux内核源码阅读之系统调用mmap()
mmap()将一个已经打开的文件的内容映射的它的用户空间。1.解释“文件的内容映射的它的用户空间”是什么意思?我们知道linux内核中,物理内存在内存中以页面大小为单位进行维护,而页式内存管理简单的说是给定一个虚拟地址0xA,经过页式映射,能够找到物理内存所对应的页面地址,数据真正存放的位置。Linux内存管理以页面为单位,对用户空间的管理当然也是以页面为单位,而每个虚存地址都...原创 2018-05-15 22:42:17 · 1090 阅读 · 0 评论 -
Linux内核源码阅读之系统调用sys_brk()
摘要brk()用于用户进程向内核申请空间,进一步说用于扩展用户堆栈空间,或者回收用户堆栈空间。本文仅简要介绍其函数主体结构,感兴趣的读者可以阅读相关源码书籍。asmlinkage unsigned long sys_brk(unsigned long brk)1.malloc为小空间申请,brk()为大块空间申请。2.sys_brk()包括两部分增长动态分配区uns...原创 2018-05-13 01:02:13 · 1527 阅读 · 0 评论 -
Linux内核源码阅读之系统调用sys_write()
本篇文章仅做sys_write()源码阅读后的记录,从自己的思路叙述,比较随意,仅做本人阅读存档。sys_write()是linux文件系统中核心函数之一,它完成的操作是将用户缓冲区的文件内容写入到文件在磁盘中的对应位置。1.文件页面缓存要想理解Linux文件读写过程,首先需要明白linux对文件读写的设计,具体就是文件数据在内存中的组织方式。我们先看一张图(摘自linux内核情景分析)我们可以先...原创 2018-04-17 12:08:33 · 6519 阅读 · 1 评论