Browse Source

Add a "syncd" kernel process that periodically calls sync().

Andreas Kling 6 years ago
parent
commit
89040cdc99
3 changed files with 13 additions and 1 deletions
  1. 1 1
      Kernel/Syscall.cpp
  2. 1 0
      Kernel/Syscall.h
  3. 11 0
      Kernel/init.cpp

+ 1 - 1
Kernel/Syscall.cpp

@@ -44,7 +44,7 @@ void initialize()
     kprintf("syscall: int 0x80 handler installed\n");
 }
 
-static int sync()
+int sync()
 {
     VFS::the().sync();
     return 0;

+ 1 - 0
Kernel/Syscall.h

@@ -103,6 +103,7 @@ struct SC_mmap_params {
 };
 
 void initialize();
+int sync();
 
 inline dword invoke(Function function)
 {

+ 11 - 0
Kernel/init.cpp

@@ -167,6 +167,15 @@ static void spawn_stress()
 }
 #endif
 
+static void syncd() NORETURN;
+static void syncd()
+{
+    for (;;) {
+        Syscall::sync();
+        sleep(10 * TICKS_PER_SECOND);
+    }
+}
+
 static void init_stage2() NORETURN;
 static void init_stage2()
 {
@@ -285,6 +294,8 @@ void init()
     Process::initialize();
     Process::create_kernel_process(init_stage2, "init_stage2");
 
+    Process::create_kernel_process(syncd, "syncd");
+
     Scheduler::pick_next();
 
     sti();