- 博客(7)
- 收藏
- 关注
原创 20242808《Linux内核原理与分析》第8周作业
本次实验,对fork和execve函数的调用流程和在 Linux 内核中的实现使我有了更深入的理解。这两个函数在进程管理中有着截然不同的用途和工作机制。fork函数用于创建一个新进程(子进程),并将当前进程的执行内容复制到新进程中,之后返回两次:一次在父进程中返回子进程的 PID,父进程继续执行后续的代码;另一次在子进程中返回 0,然后进入函数并回到用户态开始执行子进程的逻辑。可以说,fork是一种分叉点,使得一个进程分裂为两个独立的进程,共享相同的内存数据结构,但具有不同的执行路径。而execve。
2024-11-12 21:37:58 667
原创 20242808《Linux内核原理与分析》第7周作业
sched.h 文件。是 Linux 系统中用于定义每个进程的核心数据结构,即进程控制块 (PCB)。进程状态:记录当前进程的状态信息。进程标识符:存储进程的 PID 等唯一标识。进程内核栈:与进程内核操作相关的栈空间。标记信息:进程相关的特定标志。进程亲属关系:表示进程的父子关系。ptrace调试调用:支持进程调试的系统调用。性能事件:与性能监控相关的内容。调度信息:记录与进程调度相关的数据。地址空间:包含进程的虚拟内存地址信息。标志位:用于判断进程状态的各种标志。时间信息:记录与进程时间相关的数据。
2024-11-09 14:06:33 586
原创 20242808《Linux内核原理与分析》第6周作业
通过本次实验对函数的汇编代码和工作流程的分析,深入理解了 Linux 内核处理系统调用的机制。用户态请求系统调用:通过int 0x80中断指令,用户态进程发起系统调用请求,切换到内核态并进入系统调用处理程序。保护现场和获取线程信息函数中使用SAVE_ALL宏将当前寄存器状态压入堆栈,保护用户态上下文。接着,通过宏获取当前进程的线程信息。检查系统调用号合法性:从eax寄存器中获取系统调用号,通过查找系统调用处理函数。如果系统调用号无效,进入错误处理流程。执行系统调用函数:在系统调用号合法的情况下,跳转到。
2024-11-02 13:42:19 640
原创 20242808《Linux内核原理与分析》第5周作业
本次实验通过使用库函数 API 和内联汇编两种方式分别调用相同的系统调用(如fork()和sysinfo()),深入理解了 Linux 系统调用的工作机制。库函数 API 调用系统调用: 库函数(例如fork()或sysinfo())是基于高级语言对操作系统内核的抽象,它提供了简洁、易用的接口,用户通过直接调用这些函数即可完成系统调用操作。以fork()为例,父进程和子进程之间通过PID来区分,父进程返回子进程的 PID,而子进程返回 0。调用sysinfo()
2024-10-23 19:57:30 934
原创 20242808《Linux内核原理与分析》第4周作业
在本次实验中,我通过跟踪调试 Linux 内核启动过程,深入分析了从到init进程启动的整个流程。通过使用 gdb 设置断点并逐步执行代码,我详细了解了内核在初始化阶段的关键步骤。首先,内核启动的第一个进程是 0 号进程init_task,它是系统启动时手动创建的 PCB,PID 为 0。该进程并不是通过fork()创建的,而是内核静态分配的,用作系统启动的基础。随着的执行,0 号进程逐渐演变为idle进程,负责在系统空闲时运行。在函数中,内核完成了各种初始化任务,其中包括锁依赖追踪 (
2024-10-19 20:26:28 931
原创 20242808《Linux内核原理与分析》第3周作业
本次实验的主要目标是通过一个精简的操作系统内核,理解操作系统是如何工作的,具体包括:实现一个简单的时间片轮转多道程序内核代码。分析进程的启动与进程的切换机制。加深对操作系统核心原理的理解,特别是进程管理和调度。
2024-10-13 14:06:36 952
原创 20242808《Linux内核原理与分析》第2周作业
计算机是如何工作的几个关键步骤。编写源代码开发者使用 C 语言编写程序,并将其保存为.c文件。编译使用编译器(如 GCC)将 C 语言源代码编译成汇编代码。编译器进行词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等步骤。会生成汇编代码文件main.s。汇编将汇编代码转换成机器代码。汇编器(通常是编译器的一部分)读取.s文件,并生成目标文件(通常是.o文件)。会生成目标文件main.o。链接链接器将一个或多个目标文件与库文件、其他资源链接在一起,生成可执行文件。
2024-09-28 16:54:41 891
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人