Linux源代码阅读——内核引导 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html 目录 Linux 引导过程综述 BIOS POST 自举过程 Boot loader 主引导扇区结构 GRUB stage1 GRUB stage2 内核初始化:体系结构相关部分 内核映像结构 header.S 初始化与保护模式 自解压内核 startup_32 内核初始化:体系结构无关部分 核心数据结构初始化 设备初始化 1 Lin…
Linux源代码阅读——中断 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/2_int.html 目录 为什么要有中断 中断的作用 中断的处理原则 Linux 中断机制 中断控制器 中断描述符 中断数据结构 中断的初始化 内核接口 中断处理过程 CPU 的中断处理流程 保存中断信息 处理中断 从中断中返回 编写中断处理程序 软中断.tasklet与工作队列 上半部与下半部 软中断 tasklet 工作队列 1 为什么要有中断 1.1 中…
Linux源代码阅读——环境准备 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/0_prepare.html 目录 Linux 系统环境准备 定制安装 Ubuntu 安装工具链 编译 Linux 内核 默认编译 自定义编译 模拟执行 Linux 用 qemu 模拟 Hello World 系统 准备源码阅读环境 vim 基本设置 在 vim 中使用 cscope 在 vim 中使用 ctags 使用 taglist 显示 symbol…
为了更加深入的学习虚拟化,因此我必须把KVM源代码搞清楚,这是一个必须要挖的坑.我会把自己的一些阅读的代码贴上来,可能会有理解不对的地方,希望和大家一起交流,请多提意见,以便于纠正错误.所用的内核版本为3.17.4.…
CentOS 7.0 系统更改内核启动顺序 可以 uname -a查下当前的 由于 CentOS 7 使用 grub2 作为引导程序,所以和 CentOS 6 有所不同,并不是修改 /etc/grub.conf 来修改启动项,需要如下操作: 1. 查看系统内部有多少个内核: cat /boot/grub2/grub.cfg |grep menuentry  2..配置从默认内核启动,下面命令的内核名称根据系统内部查到的实际名称来替换: grub2-set-default “CentOS Linu…
高速缓冲区是文件系统访问块设备中数据的必经要道,为了访问文件系统等块设备上的数据,内核可以每次都访问块设备,进行读写操作. 为了提高系统性能,内核在内存中开辟一个高速数据缓冲区.在Linux内核中,高速缓冲区位于内核代码和主内存之间. 当需要从块设备中读取数据时,先到高速缓冲区中寻找,若找不到,就发出读块设备命令,块设备将数据写入高速缓冲区中. 高速缓冲区划分为块,每块的大小恰好和硬盘中的存储单元相同. Linux中,高速缓冲区的实际组织形式较为复杂. 首先看它的结构体: 56 struct b…
由于 CentOS 7 使用 grub2 作为引导程序,所以和 CentOS 6 有所不同,并不是修改 /etc/grub.conf 来修改启动项,需要如下操作: 1. 查看系统内部有多少个内核: cat /boot/grub2/grub.cfg |grep menuentry 2..配置从默认内核启动,下面命令的内核名称根据系统内部查到的实际名称来替换:   grub2-set-default “CentOS Linux (3.10.0-123.9.3.el7.x86_64) 7 (Core)…
/* 77 * This function frees a continuos block of page tables, as needed 78 * by 'exit()'. As does copy_page_tables(), this handles only 4Mb blocks. 79 */ int free_page_tables(unsigned long from,unsigned long size)//size以B为单位而不是以页表为单位 { unsigned long…
1. man exec就可以知到: The exec() family of functions replaces the current process image with a new process image exec是没有创建新进程的,而是把当前进程对应的应用换成新的应用.因此,它里头当前不会去fork了. 2. 这个进程就是执行exec的进程,举个例,如果PID=1000的进程A, 执行ecec B, 那就PID=1000的进程就会变为B,A的资源会被系统回收.对Exec函数来说,没…
78 static struct buffer_head * find_entry(struct m_inode * dir, 79 const char * name, int namelen, struct dir_entry ** res_dir) find_entry是linux文件系统中一个较为费解的函数.下面我们来分析一番. 它的第一个参数是 m_inode型,它指示了函数操作的所在根目录的inode节点.即相对路径的起始节点. name自然是想要查找的目录路径,namelen是该目…