- 博客(4)
- 收藏
- 关注
原创 Linux课程总结
作为一个常年使用windows的计算机学生,通过本门课程,我熟悉了linux相关的命令,以及了解linux的原理如进程切换,系统调用、可执行程序工作原理。本门课程一步步带着我学习了编译内核,构建根文件系统,通过qemu模拟环境启动内核,使用gdb断点调试内核程序,我对linux的内核有了更深入的理解。另外,本门课程让我对vscode也有了更深入的了解,让我懂得了如何用vscode调试linux内核。
2023-05-14 21:43:11
297
原创 lab4 以time/gettimeofday系统调用为例分析ARM64
ARM64 架构下 Linux 系统调用由同步异常 svc 指令触发,当用户态(EL0 级)程序调用库函数 gettimeofday() 从而触发系统调用的时候,先把系统调用的参数依次放入 X0-X5 这 6 个寄存器(Linux 系统调用最多有 6 个参数,ARM64 函数调用参数可以使用 X0-X7 这 8 个寄存器),然后把系统调用号放在 X8 寄存器里,最后执行 svc 指令,CPU 即进入内核态(EL1 级)。系统调用触发的异常最终会跳转到 el0_sync 的同步异常处理程序入口。
2023-04-25 11:32:53
127
1
原创 lab5 深入理解进程切换
这段代码是一个用于进程切换的函数,它接收三个参数:当前的运行队列rq,当前正在运行的进程prev以及要被调度的下一个进程next。该函数的目的是将当前正在运行的进程prev切换为被调度的下一个进程next。这段代码是一个条件语句,根据被调度的下一个进程next所在的地址空间进行选择。代码中,如果next所在的地址空间为空(即next是内核进程),则执行语句1-5;否则执行语句6-8。Linux 内核中的上下文切换函数 是content_switch。
2023-04-25 11:17:21
130
1
原创 linux操作分析lab3
这里首先运行“/sbin/init”,如果失败再运行“/etc/init”,然后是 “/bin/init”,然后是“/bin/sh”(也就是说,init可执行文件可以放在上面代码中寻找的4个目录中都可以),如果都失败,则可以通过在系统启动时再添加的启动参数来指定init,比如init=/home/rootfs/init。init进程是Linux系统的第一个用户态进程,为1号进程,没有父进程,由Linux内核直接启动,接下来还创建了一个kthreadd内核线程,来管理系统的资源。
2023-03-23 17:57:04
197
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人