课程学习总结报告

一:系统调用的过程

系统调用是个特殊的中断,发出一个系统中断后,CPU把用户栈指针保存到内核栈上,接着进入entry_SYSCALL_64函数,先用swapgs保存现场,调用call do_syscall_64函数,在这个函数中根据系统调用号执行对应的系统调用服务例程,执行完后返回do_syscall_64,接着执行syscall_return_slowpath为返回用户态作准备,再返回到enter_SYSCALL_64中利用swapgs恢复现场,返回用户态。

 

二:中断处理流程

在内核堆栈保存IRQ的值和寄存器的内容,接着给IRQ线服务的PIC一个应答,允许PIC进一步发出中断,调用do_IRQ执行共享IRQ的所有设备的中断服务例程,最后从ret_from_intr跳出。

 

三:字符设备文件打开

系统调用open打开一个字符设备时,通过一系列调用,最终执行到chrdev_open,根据设备号和kobj_lookup()查找对应的驱动程序,返回对应驱动程序cdev的kobject,设置inode->i_cdev,把inode添加到cdev_list的链表中,使用cdev的ops设置file文件对象的f_op,调用该ops中的open方法。

 

四:根文件系统挂载

boot loader把initrd文件加载到内存中,内核将initrd的内容保存到rootfs下,接着把/initrd.image的内容读到/dev/ram0设备中,并挂载为原始的根文件系统,最后执行/linuxrc文件,完成加载驱动模块的任务,执行真正的根文件系统中的/sbin/init进程

 

你可能感兴趣的:(课程学习总结报告)