如何制作一个简单的多核多线程裸机程序?
How to make a simple Multi Core multithreaded baremetal program?
我正在开发基于 Rocket-Chip 的多核平台,它使用基于 RISC-V ISA 的内核。
我的 objective 是创建一个轻量级的 OS,它有一个基本的调度程序,可以让我 运行 多线程。
我试过 FreeRTOS、ZephyrOS,但它们不支持多核。所以我决定制作一个裸机应用程序,在机器模式下 运行ning,只有非常基本的 API (pthread_create, join ..).
问题是我不熟悉 POSIX 实现细节,也不熟悉 OS 体系结构。我已经花了一个月的时间试图了解 Rocket-Chip 中发生了什么,以及裸机是如何工作的,但我离我的 objective 还很远。
你能告诉我从哪里开始吗?
欢迎任何建议。
此致。
SiFive 的 Freedom E SDK 中有一个非常简单的 SMP hello world 示例 https://github.com/sifive/freedom-e-sdk/blob/master/software/smp/smp.c that might serve as a good example. Concurrent programming is difficult in general, but luckily there's an entire discipline based around operating system design. One of the only books I've read is https://en.wikipedia.org/wiki/Modern_Operating_Systems,我认为这是一个很好的起点。
我正在开发基于 Rocket-Chip 的多核平台,它使用基于 RISC-V ISA 的内核。
我的 objective 是创建一个轻量级的 OS,它有一个基本的调度程序,可以让我 运行 多线程。
我试过 FreeRTOS、ZephyrOS,但它们不支持多核。所以我决定制作一个裸机应用程序,在机器模式下 运行ning,只有非常基本的 API (pthread_create, join ..).
问题是我不熟悉 POSIX 实现细节,也不熟悉 OS 体系结构。我已经花了一个月的时间试图了解 Rocket-Chip 中发生了什么,以及裸机是如何工作的,但我离我的 objective 还很远。 你能告诉我从哪里开始吗? 欢迎任何建议。
此致。
SiFive 的 Freedom E SDK 中有一个非常简单的 SMP hello world 示例 https://github.com/sifive/freedom-e-sdk/blob/master/software/smp/smp.c that might serve as a good example. Concurrent programming is difficult in general, but luckily there's an entire discipline based around operating system design. One of the only books I've read is https://en.wikipedia.org/wiki/Modern_Operating_Systems,我认为这是一个很好的起点。