自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(7)
  • 收藏
  • 关注

原创 高级软件工程学习总结

参数化上下文(使用参数传递信息,不依赖上下文环境,即不使用闭包函数)。移除前置条件(sum函数中使用数组传递参数,不再限定参数个数)。简化后置条件(移除参数之间的关系,使sum返回的是数组全部元素的和)。

2023-07-10 21:28:44 74 1

原创 从需求分析到软件设计

以 VS Code Remote Development 相关功能为例,选择一个用例进行需求分析和逆向工程。VS Code Remote Development 是 VS Code 上的一款插件,允许开发者将容器、远程计算机或 Windows Subsystem for Linux () 作为完整的开发环境。它利用 VS Code 的客户端—服务器架构,通过远程连接扩展和远程开发插件实现远程开发体验。

2023-05-30 17:00:12 71 1

原创 Linux操作系统分析课程总结报告

实际上,虚拟中断是由虚拟机监控程序接收到物理中断信号后,将中断转换成虚拟中断,并在虚拟机内部引发中断事件。其次是简单学习了汇编语言的相关知识,对 Linux 系统中三个重要板块:中断与异常、文件系统管理、进程管理有了更为深入的理解,了解了 Linux 系统下函数执行过程中栈和寄存器的具体变化、系统中断和异常实现的具体过程。1)通过中断处理过程中的调度时机,用户态进程与内核级线程之间互相切换和内核级线程之间互相切换与一般的情况类似,只是内核级线程运行过程中发生中断没有进程用户态和内核态的转换。

2023-05-15 16:22:12 104

原创 深入理解进程切换

如果之前的进程是用户级进程,则需要将这个被借用的地址空间的引用计数加 1,如果该地址空间对应的用户级进程退出,则系统仍需等到其引用计数为 0(不再有内核级线程借用它)时才能将其销毁;next->mm 指向要执行进程的地址空间描述符,prev->mm 指向 当前进程的正在使用的地址空间描述符(active_mm)。最后,如果之前的进程是内核级线程,还需设置 rq->prev_mm 用于后续清除引用计数,并执行 prev->active_mm = NULL 解除对 active_mm 的借用。

2023-04-25 19:18:16 374 1

原创 深入理解Callback函数

回调函数是一个通过函数指针调用的函数。将函数的指针作为参数传递给另一个函数,当函数使用这个指针时,会调用此指针所指向的函数,即回调函数。回调函数不是由实现该函数的实现者直接调用,而是在特定的事件或条件发生时由另外的一方通过函数指针的方式调用,用于对该事件或条件进行响应。给 call-in 方式的函数 SearchLinkTableNode 增加了一个参数 args,call-back 方式的函数 Conditon 也增加了一个参数 args,用于传递用户输入的菜单命令。回调函数工作流程大致如下图所示。

2023-04-03 11:11:59 271 1

原创 以time/gettimeofday系统调用为例分析ARM64 Linux 5.4.34

el0_sync 处的内核汇编代码首先做的就是保存异常发生时程序的执行现场(保存现场,即用户栈、通用寄存器等),然后根据异常发生的原因(ESR_EL1 寄存器中的内容)跳转到 el0_svc,el0_svc 会调用 el0_svc_handler、el0_svc_common 函数,将 X8 寄存器(regs->regs[8])中存放的系统调用号传递给 invoke_syscall 函数。还需要在终端提前 export 交叉编译选项再 make,否则编译的还是 x86 的内核,命令如下。

2023-04-01 17:57:04 99

原创 基于VSCode的Linux内核调试环境搭建以及start_kernel跟踪分析

继续执行,这时候遇到了 kernel_init,即1号进程,它是所有用户进程的祖先,由 kernel_thread 函数创建,kernel_thread 函数创建一个新的内核线程(实际 linux 不支持线程,所以是一个内核进程),该线程的入口地址是 kernel_init() 函数。最后来到 start_kernel 的结尾 arch_call_reset_init(),执行了 reset_init() 函数,继续点击单点跳过进入 reset_init 函数内部,这个函数是由0号进程执行的。

2023-03-23 22:27:34 116

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除