- 博客(4)
- 收藏
- 关注
原创 Linux操作系统分析-课程总结报告
在学习 Linux 操作系统的过程中,我发现它的设计思路非常独特,采用了多用户、多任务、多线程等技术,使得系统具有非常高的可用性和可靠性。当进程执行时,如果发生任何错误,进程通常会被调度回内核态以便内核可以处理错误,此时,进程将无法访问新可执行文件中的代码和数据段,因为已经被内核态加载到了内存中。孟老师和李老师带领我们熟悉了linux操作系统,也让我对计算机系统的基本工作原理有了深层次的理解,通过阅读Linux源码,对其进行编译调试启动,在实验的过程中深入地了解了系统调用过程,以及不同处理器汇编的区别。
2023-05-15 21:35:37
361
原创 linux操作系统lab5_深入理解进程切换
对于内核线程而言,其 task_struct 的 mm 成员为 NULL,然而内核线程执行的时候,总是需要一个进程地址空间,而 active_mm 就是指向它借用的那个进程地址空间。swtich_to 函数会进一步调用__switch_to_asm,而 __switch_to_asm 的实现是和体系结构强相关的。中间的两条 movq 语句就是新旧进程的分界线,随着内核栈顶的切换,内核栈空间也就切换到了新进程,之后只需要弹出栈中保存的各个寄存器的值即可恢复寄存器状态。再接着,一段代码实现进程地址空间的切换。
2023-04-26 21:54:58
146
1
原创 Linux实验四-以time/gettimeofday系统调用为例分析ARM64 Linux 5.4.34
随后,以 svc 指令对应的 el0_sync 为例,el0_sync 处的内核汇编代码首先做的就是保存异常发生时程序的执行现场(保存现场,即用户栈、通用寄存器等),然后根据异常发生的原因(ESR_EL1 寄存器中的内容)跳转到 el0_svc,el0_svc 会调用 el0_svc_handler、el0_svc_common 函数,将 X8 寄存器(regs->regs[8])中存放的系统调用号传递给 invoke_syscall 函数。#编译,在busybox目录下生成_install目录。
2023-03-31 20:34:58
122
原创 Linux实验三——基于VS Code的Linux内核调试环境搭建及start_kernel跟踪分析
首先执行start_kernel:有一个关键目录是init目录,内核启动相关的代码都在这个目录下。init目录中的main.c源文件是整个Linux内核启动的起点,但它的起点不是main函数,而是main.c源文件中的start_kernel函数,start_kernel函数是初始化Linux内核启动的起点。继续执行,到kernel_init,即1号进程,由kernel_thread函数创建,kernel_thread函数创建一个新的内核线程,该线程的入口地址是kernel_init()函数。
2023-03-23 23:49:19
116
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人