mirror of
https://github.com/JannisHeydemann/BoredOS.git
synced 2026-05-30 10:26:59 +00:00
CHECKP: multi-thread applications
This commit is contained in:
@@ -49,29 +49,28 @@ static void update_proc_list(void) {
|
||||
proc_count = sys_system(SYSTEM_CMD_PROCESS_LIST, (uint64_t)proc_list, 32, 0, 0);
|
||||
|
||||
uint64_t uptime_now = sys_system(SYSTEM_CMD_UPTIME, 0, 0, 0, 0);
|
||||
uint64_t kernel_ticks_now = 0;
|
||||
uint64_t user_ticks_now = 0;
|
||||
|
||||
for (int i = 0; i < proc_count; i++) {
|
||||
if (proc_list[i].pid == 0) {
|
||||
kernel_ticks_now = proc_list[i].ticks;
|
||||
break;
|
||||
if (proc_list[i].pid != 0) {
|
||||
user_ticks_now += proc_list[i].ticks;
|
||||
}
|
||||
}
|
||||
|
||||
if (uptime_prev > 0) {
|
||||
uint64_t total_delta = uptime_now - uptime_prev;
|
||||
if (total_delta > 0) {
|
||||
uint64_t kernel_delta = kernel_ticks_now - kernel_ticks_prev;
|
||||
if (kernel_delta > total_delta) kernel_delta = total_delta;
|
||||
uint64_t used_delta = user_ticks_now - kernel_ticks_prev; // Reusing the global state variable for prev user_ticks
|
||||
|
||||
uint64_t used_delta = total_delta - kernel_delta;
|
||||
int usage = (int)((used_delta * 100) / total_delta);
|
||||
// On a 4 CPU system, theoretically used_delta can be 4x total_delta
|
||||
int usage = (int)((used_delta * 100) / (total_delta * 4));
|
||||
if (usage > 100) usage = 100;
|
||||
cpu_history[history_idx] = usage;
|
||||
}
|
||||
}
|
||||
|
||||
uptime_prev = uptime_now;
|
||||
kernel_ticks_prev = kernel_ticks_now;
|
||||
kernel_ticks_prev = user_ticks_now;
|
||||
|
||||
MemStats stats;
|
||||
sys_system(SYSTEM_CMD_MEMINFO, (uint64_t)&stats, 0, 0, 0);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
uint64_t syscall0(uint64_t sys_num) {
|
||||
uint64_t ret;
|
||||
asm volatile("syscall"
|
||||
asm volatile("int $0x80"
|
||||
: "=a"(ret)
|
||||
: "a"(sys_num)
|
||||
: "rcx", "r11", "memory");
|
||||
@@ -13,7 +13,7 @@ uint64_t syscall0(uint64_t sys_num) {
|
||||
|
||||
uint64_t syscall1(uint64_t sys_num, uint64_t arg1) {
|
||||
uint64_t ret;
|
||||
asm volatile("syscall"
|
||||
asm volatile("int $0x80"
|
||||
: "=a"(ret)
|
||||
: "a"(sys_num), "D"(arg1)
|
||||
: "rcx", "r11", "memory");
|
||||
@@ -22,7 +22,7 @@ uint64_t syscall1(uint64_t sys_num, uint64_t arg1) {
|
||||
|
||||
uint64_t syscall2(uint64_t sys_num, uint64_t arg1, uint64_t arg2) {
|
||||
uint64_t ret;
|
||||
asm volatile("syscall"
|
||||
asm volatile("int $0x80"
|
||||
: "=a"(ret)
|
||||
: "a"(sys_num), "D"(arg1), "S"(arg2)
|
||||
: "rcx", "r11", "memory");
|
||||
@@ -31,7 +31,7 @@ uint64_t syscall2(uint64_t sys_num, uint64_t arg1, uint64_t arg2) {
|
||||
|
||||
uint64_t syscall3(uint64_t sys_num, uint64_t arg1, uint64_t arg2, uint64_t arg3) {
|
||||
uint64_t ret;
|
||||
asm volatile("syscall"
|
||||
asm volatile("int $0x80"
|
||||
: "=a"(ret)
|
||||
: "a"(sys_num), "D"(arg1), "S"(arg2), "d"(arg3)
|
||||
: "rcx", "r11", "memory", "r10", "r8", "r9");
|
||||
@@ -41,7 +41,7 @@ uint64_t syscall3(uint64_t sys_num, uint64_t arg1, uint64_t arg2, uint64_t arg3)
|
||||
uint64_t syscall4(uint64_t sys_num, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t arg4) {
|
||||
uint64_t ret;
|
||||
register uint64_t r10 asm("r10") = arg4;
|
||||
asm volatile("syscall"
|
||||
asm volatile("int $0x80"
|
||||
: "=a"(ret)
|
||||
: "a"(sys_num), "D"(arg1), "S"(arg2), "d"(arg3), "r"(r10)
|
||||
: "rcx", "r11", "memory", "r8", "r9");
|
||||
@@ -52,7 +52,7 @@ uint64_t syscall5(uint64_t sys_num, uint64_t arg1, uint64_t arg2, uint64_t arg3,
|
||||
uint64_t ret;
|
||||
register uint64_t r10 asm("r10") = arg4;
|
||||
register uint64_t r8 asm("r8") = arg5;
|
||||
asm volatile("syscall"
|
||||
asm volatile("int $0x80"
|
||||
: "=a"(ret)
|
||||
: "a"(sys_num), "D"(arg1), "S"(arg2), "d"(arg3), "r"(r10), "r"(r8)
|
||||
: "rcx", "r11", "memory", "r9");
|
||||
@@ -64,7 +64,7 @@ uint64_t syscall6(uint64_t sys_num, uint64_t arg1, uint64_t arg2, uint64_t arg3,
|
||||
register uint64_t r10 asm("r10") = arg4;
|
||||
register uint64_t r8 asm("r8") = arg5;
|
||||
register uint64_t r9 asm("r9") = arg6;
|
||||
asm volatile("syscall"
|
||||
asm volatile("int $0x80"
|
||||
: "=a"(ret)
|
||||
: "a"(sys_num), "D"(arg1), "S"(arg2), "d"(arg3), "r"(r10), "r"(r8), "r"(r9)
|
||||
: "rcx", "r11", "memory");
|
||||
|
||||
Reference in New Issue
Block a user