- 博客(7)
- 收藏
- 关注
原创 课程总结报告
没想到上了几节课后,在孟宁老师幽默风趣的讲课风格下我慢慢对linux有了兴趣,课上老师讲的linux的部分源码以及课下的实验作业让我从了解到明白了整体上的linux的内核启动、系统调用到细节上的进程的执行。将当前进程X的内核堆栈切换到进程调度算法选出来的next进程(本例假定为进程Y)的内核堆栈,并完成了进程上下文所需的EIP等寄存器状态切换。Linux虚拟系统的原理是基于虚拟化技术实现的。注意这里是进程Y的中断处理过程中,而(3)中保存现场是在进程X的中断处理过程中,因为内核堆栈从进程X切换到进程Y了。
2023-05-14 23:56:59
28
原创 深入理解进程切换
进程切换是由内核实现的,所以进程上下文切换过程中最关键的栈顶寄存器sp切换是通过进程描述符的thread.sp实现的,指令指针寄存器ip的切换是在内核堆栈切换的基础上巧妙利用call/ret指令实现的。ARM64体系结构下__switch_to的实现见arch/arm64/kernel/process.c,其中cpu_switch_to是我们特别关心的进程的CPU上下文切换的关键代码。这些寄存器从一个进程的状态切换到另一个进程的状态,进程切换的关键上下文就算完成了。最核心的是几个关键寄存器的保存与变换。
2023-04-25 19:29:14
23
原创 深入理解Callback函数
我们还通过将linktable.h中不是在接口调用时必须内容转移到linktable.c中,这样可以有效地隐藏软件模块内部的实现细节,为外部调用接口的开发者提供更加简洁的接口信息,同时也减少外部调用接口的开发者有意或无意的破坏软件模块的内部数据。•当软件模块之间共享数据区或变量名的软件模块之间即是公共耦合,显然两个软件模块之间的接口定义不是通过显式的调用方式,而是隐式的共享了共享了数据区或变量名。这样实现多态这样可以有效地隐藏软件模块内部的实现细节,为外部调用接口的开发者提供更加简洁的接口信息。
2023-04-01 23:20:42
98
1
原创 Unity第一次使用记录+学习笔记
修改预设体的数值,左边的场景中已存在的物体的数值也跟着变化,修改左边已存在的数值,右边预设体的数值不会变化。选择原始预制体,会产生新的预设体,选择第二个预制体变体,就会在原本预设体之上增加了内容,更改原本预设体时,变体都跟着一起改。即功能都是组件实现的,组件有系统提供的即默认支持的,也有自己想要的功能系统没有的,这时候就需要自己创建一个C#脚本。但是这样有些麻烦,更改其他物体时,可以直接更改预设体,这样就一起变化了,但是那个变体作为新的预设体,没有变化。选择打开,就可以直接打开预设体,其他屏蔽了。
2023-03-23 18:38:31
54
1
原创 以time/gettimeofday系统调用为例分析ARM64 Linux 5.4.34
通过此次实验理解了arm64用户态执行系统调用切换到内核态的总体过程,更好地复习了下上课的知识,受益匪浅。
2023-03-21 21:55:08
454
4
原创 基于VSCode的Linux内核调试环境搭建以及start_kernel跟踪分析
参考的步骤:准备工作:1-5 ,配置vscode环境:6 ,跟踪分析:7。
2023-03-19 17:46:45
632
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人