Core: Refactor CPU Management.

This commit moves ARM Interface and Scheduler handling into the kernel.
This commit is contained in:
Fernando Sahmkow
2020-01-25 18:55:32 -04:00
parent ab89ced244
commit 4d6a86b03f
10 changed files with 168 additions and 224 deletions
+3 -13
View File
@@ -12,8 +12,6 @@
namespace Core {
class Cpu;
class CpuBarrier;
class ExclusiveMonitor;
class System;
class CpuCoreManager {
@@ -28,7 +26,6 @@ public:
CpuCoreManager& operator=(CpuCoreManager&&) = delete;
void Initialize();
void StartThreads();
void Shutdown();
Cpu& GetCore(std::size_t index);
@@ -37,25 +34,18 @@ public:
Cpu& GetCurrentCore();
const Cpu& GetCurrentCore() const;
ExclusiveMonitor& GetExclusiveMonitor();
const ExclusiveMonitor& GetExclusiveMonitor() const;
std::size_t GetCurrentCoreIndex() const {
return active_core;
}
void RunLoop(bool tight_loop);
void InvalidateAllInstructionCaches();
private:
static constexpr std::size_t NUM_CPU_CORES = 4;
std::unique_ptr<ExclusiveMonitor> exclusive_monitor;
std::unique_ptr<CpuBarrier> barrier;
std::array<std::unique_ptr<Cpu>, NUM_CPU_CORES> cores;
std::array<std::unique_ptr<std::thread>, NUM_CPU_CORES - 1> core_threads;
std::size_t active_core{}; ///< Active core, only used in single thread mode
/// Map of guest threads to CPU cores
std::map<std::thread::id, Cpu*> thread_to_cpu;
System& system;
};