summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/src
diff options
context:
space:
mode:
Diffstat (limited to 'dev/kernel/src')
-rw-r--r--dev/kernel/src/FS/NeFS+FileSystemParser.cc2
-rw-r--r--dev/kernel/src/UserProcessScheduler.cc22
-rw-r--r--dev/kernel/src/UserProcessTeam.cc9
3 files changed, 17 insertions, 16 deletions
diff --git a/dev/kernel/src/FS/NeFS+FileSystemParser.cc b/dev/kernel/src/FS/NeFS+FileSystemParser.cc
index 3622e711..84317ad4 100644
--- a/dev/kernel/src/FS/NeFS+FileSystemParser.cc
+++ b/dev/kernel/src/FS/NeFS+FileSystemParser.cc
@@ -886,7 +886,7 @@ Boolean fs_init_nefs(Void) noexcept {
ke_panic(RUNTIME_CHECK_FILESYSTEM, "Main disk cannot be mounted.");
NeFileSystemParser parser;
-
+
return parser.Format(&kMountpoint.A(), 0, kNeFSVolumeName);
}
} // namespace Kernel::NeFS
diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc
index fe1a95ae..4f6e859e 100644
--- a/dev/kernel/src/UserProcessScheduler.cc
+++ b/dev/kernel/src/UserProcessScheduler.cc
@@ -268,6 +268,8 @@ Void USER_PROCESS::Exit(const Int32& exit_code) {
kLastExitCode = exit_code;
+ --this->ParentTeam->mProcessCount;
+
auto memory_ptr_list = this->HeapTree;
#ifdef __NE_VIRTUAL_MEMORY_SUPPORT__
@@ -483,6 +485,8 @@ SizeT UserProcessScheduler::Run() noexcept {
for (; process_index < mTeam.AsArray().Capacity(); ++process_index) {
auto& process = mTeam.AsArray()[process_index];
+ if (this->CurrentProcess() == process) continue;
+
//! Check if the process needs to be run.
if (UserProcessHelper::CanBeScheduled(process)) {
if (process.StackSize > kSchedMaxStackSz) {
@@ -493,8 +497,6 @@ SizeT UserProcessScheduler::Run() noexcept {
kout << ((*process.Name) ? process.Name : "USER_PROCESS") << " will be scheduled...\r";
- this->CurrentProcess() = process;
-
process.PTime = static_cast<Int32>(process.Affinity);
if (process.PTime < process.RTime) {
@@ -509,9 +511,13 @@ SizeT UserProcessScheduler::Run() noexcept {
process.RTime = 0UL;
}
+ this->CurrentProcess() = process;
+
if (!UserProcessHelper::Switch(process.StackFrame, process.ProcessId)) {
- continue;
+ break;
}
+
+ break;
} else {
++process.RTime;
--process.PTime;
@@ -537,7 +543,7 @@ UserProcessTeam& UserProcessScheduler::CurrentTeam() {
BOOL UserProcessScheduler::SwitchTeam(UserProcessTeam& team) {
if (team.AsArray().Count() < 1) return No;
- UserProcessScheduler::The().mTeam = team;
+ this->mTeam = team;
return Yes;
}
@@ -562,13 +568,7 @@ ErrorOr<PID> UserProcessHelper::TheCurrentPID() {
/// @retval true can be schedulded.
/// @retval false cannot be schedulded.
Bool UserProcessHelper::CanBeScheduled(const USER_PROCESS& process) {
- if (process.Status == ProcessStatusKind::kKilled ||
- process.Status == ProcessStatusKind::kFinished ||
- process.Status == ProcessStatusKind::kStarting ||
- process.Status == ProcessStatusKind::kFrozen)
- return No;
-
- if (process.Status == ProcessStatusKind::kInvalid) return No;
+ if (process.Status != ProcessStatusKind::kRunning) return No;
if (!process.Name[0]) return No;
diff --git a/dev/kernel/src/UserProcessTeam.cc b/dev/kernel/src/UserProcessTeam.cc
index 987fbf0b..8ef9a013 100644
--- a/dev/kernel/src/UserProcessTeam.cc
+++ b/dev/kernel/src/UserProcessTeam.cc
@@ -14,10 +14,11 @@
namespace Kernel {
UserProcessTeam::UserProcessTeam() {
for (SizeT i = 0U; i < this->mProcessList.Count(); ++i) {
- this->mProcessList[i] = USER_PROCESS();
- this->mProcessList[i].PTime = 0;
- this->mProcessList[i].RTime = 0;
- this->mProcessList[i].Status = ProcessStatusKind::kKilled;
+ this->mProcessList[i] = USER_PROCESS();
+ this->mProcessList[i].PTime = 0;
+ this->mProcessList[i].RTime = 0;
+ this->mProcessList[i].Status = ProcessStatusKind::kKilled;
+ this->mProcessList[i].ParentTeam = this;
}
this->mProcessCount = 0UL;