课程学习总结报告
一:系统调用的过程
系统调用是个特殊的中断,发出一个系统中断后,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进程

浙公网安备 33010602011771号