一、汇编语言基础
汇编语言有两种,AT&T汇编和Intel汇编,而linux采用的是AT&T汇编,因为不同的CPU寄存器大小不一样,相应的汇编指令也会有所区别,以mov指令为例,movb指8位,movw中的w是指16位,movl中的l是指32位,movq中的q是指64位。为了更好的理解汇编语言,在这一部分还穿插了不同种类的寻址,寄存器寻址,立即寻址,直接寻址,间接寻址等
二、计算机基础
从体系结构开始,因为要学习的是Linux操作系统分析,首先要对计算机体系结构有个整体的把握,老师从冯诺依曼体系结构开始,讲述了存储计算机工作原理,对计算机的内存,总线和硬盘做了一些基本的介绍。
三、深入理解系统调用
系统调用是一种特殊的中断,和函数的传参不同,因为系统调用是从用户态到内核态,所以采用寄存器传递参数,当然由于压栈的方式需要读写内存,函数调用速度较慢,64位结构下普通的函数调用和系统调用都是通过寄存器传递参数,系统调用一般通过int $0x80的方式进行,系统调用的初始化就是将系统调用处理入口地址告诉CPU,系统调用的执行就是压栈关键寄存器,保存现场,恢复现场,最后返回。
在LINUX系统中有一个重要的概念:一切都是文件。把一切资源都看作是文件,包括硬件设备。把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。VFS层有两个接口:一个是与用户的接口;一个是与特定文件系统的接口。VFS与用户的接口将所有对文件的操作定向到相应的特定文件系统函数上。VFS与特定文件系统的接口主要是通过vfs-operations来实现的。
通过open()打开文件流程:
原文:https://www.cnblogs.com/gtf666-/p/13275768.html