- 博客(19)
- 收藏
- 关注
原创 【deepseek】cbo 指令简介
使用cbo指令是 RISC-V 生态中的最佳实践,它在标准化、可移植性和功能明确性之间取得了平衡。在开发底层缓存管理代码时,优先遵循 RISC-V 标准扩展,仅在必要时依赖厂商特定指令。
2025-03-19 09:13:00
442
原创 【deepseek】位置无关代码介绍
好的,我来为你详细解释这些概念,并附上 RISC-V 的代码示例。PC 相对寻址auipc%pcrel_hi%pcrel_lo0x10000x800000000x200000000x80000000。
2025-03-10 10:56:42
550
原创 Run Queue
就绪状态(Ready)**的进程或线程。它直接决定了调度器如何选择下一个要执行的任务,是影响系统性能(如吞吐量、延迟、公平性)的关键组件。(支持多核/异构架构)之间取得平衡。理解其原理是优化系统性能(如降低延迟、提高吞吐量)和调试复杂调度问题的关键基础。Run Queue 是调度器的“心脏”,其设计需要在。在操作系统中,**Run Queue(运行队列)(合理分配CPU时间)、
2025-02-17 10:53:19
731
原创 调度器原理
理解调度原理不仅需要掌握算法理论,还需结合具体硬件架构(如缓存一致性、中断频率)进行优化,这是操作系统内核开发中最具挑战性的领域之一。是资源分配的核心机制,其本质是在。
2025-02-17 10:52:35
946
原创 中断上半部和下半部
通过合理分割中断处理流程,系统既能快速响应硬件事件,又能高效完成复杂任务,是操作系统高可靠性与高性能的关键设计之一。在操作系统中,中断处理分为。,这种分割的目的是为了平衡。
2025-02-17 10:46:57
350
原创 OpenSBI架构
OpenSBI 的架构设计旨在为 RISC-V 处理器提供一个灵活且可扩展的引导加载程序和运行时环境。通过将不同功能模块化,OpenSBI 能够支持多种硬件平台和操作系统,使得开发者可以轻松地在 RISC-V 生态系统中进行开发和部署。架构中的每一层都发挥着重要的作用,确保系统的稳定性、安全性和性能。
2025-02-10 21:22:13
374
原创 OpenSBI 目的与功能
OpenSBI 通过提供一个标准化的引导加载程序和运行时环境,使得 RISC-V 架构的开发变得更加高效和一致。它不仅负责硬件的初始化和管理,还为操作系统提供了必要的接口和服务,从而推动了 RISC-V 生态系统的发展。通过理解 OpenSBI 的目的与功能,开发者可以更好地利用 RISC-V 平台进行嵌入式和高性能计算的开发。
2025-02-10 21:19:49
379
原创 OpenSBI 的一些关键点和学习资源
目的与功能OpenSBI 主要负责在 RISC-V 处理器上进行初始化,并为操作系统提供一个标准的运行时环境。它提供了一组 API,供操作系统访问硬件功能,包括中断管理、定时器、内存管理等。架构OpenSBI 通常运行在 RISC-V 的超级用户模式(Supervisor Mode),并提供一个抽象层,使操作系统能够以一致的方式访问硬件。它支持多种 RISC-V 硬件平台,包括不同的 SoC(系统级芯片)和开发板。与其他组件的关系。
2025-02-10 21:17:24
619
原创 struct page 介绍
每个物理内存页面在内核中都有一个对应的 struct page 实例,内核通过这个结构来管理和跟踪物理内存的使用情况。以下是对 struct page 的详细介绍。页面引用计数: 通过 _count 字段,内核能够跟踪页面的引用情况,确保在没有引用时可以安全地释放页面,避免内存泄漏。页面状态管理: 通过 flags 字段,内核可以管理页面的状态,例如标记页面为脏页(需要写回)或清洁页(不需要写回)。文件系统缓存: 在文件系统中,内核使用 struct page 来管理页面缓存,以提高文件读取的效率。
2025-02-06 20:51:51
297
原创 pgd(Page Global Directory)
在 Linux 内核中,pgd(Page Global Directory)是一个指向页全局目录的指针,用于管理虚拟内存到物理内存的映射。它是 struct mm_struct 中的一个重要字段,负责描述一个进程的虚拟地址空间的页表结构。每个进程都有自己的页全局目录,用于管理该进程的虚拟内存。页面错误处理: 在处理页面缺失(page fault)时,内核会使用 pgd 来查找缺失页面的映射关系,并进行相应的处理。PGD: 使用虚拟地址的高位部分索引到 PGD,找到对应的页中间目录(PUD)。
2025-02-06 20:50:49
172
原创 struct mm_struct 简介
struct mm_struct 是 Linux 内核中用于描述进程的内存管理信息的关键数据结构。它包含了与进程虚拟内存相关的所有信息,包括虚拟内存区域、页表、内存使用统计等。在内核中,struct mm_struct 的使用通常与内存管理相关的函数一起进行。页面错误处理: 在处理页面缺失(page fault)时,内核会查找 mm_struct 中的虚拟内存区域,以确定如何处理缺失的页面。虚拟内存区域管理: 通过 mmap 系统调用,动态管理进程的虚拟内存区域。
2025-02-06 20:49:51
381
原创 struct mm_struct 简介
struct mm_struct 是 Linux 内核中用于描述进程的内存管理信息的关键数据结构。它包含了与进程虚拟内存相关的所有信息,包括虚拟内存区域、页表、内存使用统计等。在内核中,struct mm_struct 的使用通常与内存管理相关的函数一起进行。页面错误处理: 在处理页面缺失(page fault)时,内核会查找 mm_struct 中的虚拟内存区域,以确定如何处理缺失的页面。虚拟内存区域管理: 通过 mmap 系统调用,动态管理进程的虚拟内存区域。
2025-02-06 20:49:10
371
原创 struct vm_area_struct 简介
每个进程都有一个或多个虚拟内存区域,这些区域用于管理进程的内存分配,包括代码段、数据段、堆、栈和映射的文件等。在内核中,struct vm_area_struct 的使用通常与内存管理相关的函数一起进行。内存映射: 当使用 mmap() 系统调用映射文件或设备内存到进程的虚拟地址空间时,内核会创建相应的 vm_area_struct 实例。遍历虚拟内存区域: 内核可以通过 vm_area_struct 的链表结构,遍历进程的所有虚拟内存区域,以执行各种内存管理操作。
2025-02-06 20:48:05
375
原创 /dev/mem 驱动层实现
dev/mem 在 Linux 内核中的实现是通过字符设备接口和内存管理机制来实现的。当用户空间程序打开 /dev/mem 时,内核会调用 mem_open() 函数。在 Linux 内核中,/dev/mem 的实现涉及多个关键组件,包括字符设备驱动、内存管理子系统以及安全机制。权限检查: 在 mem_open() 函数中,使用 capable(CAP_SYS_RAWIO) 检查调用者是否有权限进行原始 I/O 操作。打开设备: 使用 open(“/dev/mem”, O_RDWR) 打开设备。
2025-02-06 20:46:35
269
原创 【mmap 使用】
在 ARM Linux 系统中,将硬件寄存器映射到用户空间通常涉及使用 mmap() 函数。通过这种方式,用户空间程序可以直接访问特定的寄存器地址范围。以下是一个示例,说明如何将地址范围为 0x10000 到 0x11000 的寄存器映射到用户空间。以下是一个示例 C 程序,演示如何将寄存器地址范围 0x10000 到 0x11000 映射到用户空间,并进行读写操作。确保你有足够的权限(通常需要超级用户权限)来访问 /dev/mem,并且内核配置允许访问该内存区域。
2025-02-06 20:42:31
154
原创 【dump mmu 页表】
在 Linux 内核中,每个进程都有一个 task_struct 结构体,包含了该进程的所有信息。你可以通过进程的 PID(进程标识符)来获取对应的 task_struct。在方法 3 中,编写内核模块以 dump 进程的 MMU 页表时,你需要在模块中指定要操作的进程。内核版本:上述代码在不同的内核版本中可能会有所不同,确保根据你的内核版本进行调整。加载模块:使用 insmod 命令加载模块,并指定目标进程的 PID。通过这种方式,你可以指定要 dump 的进程,并获取其 MMU 页表的信息。
2025-02-06 15:55:17
296
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人