Ver código fonte

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

Andreas Kling 6 anos atrás
pai
commit
89040cdc99
3 arquivos alterados com 13 adições e 1 exclusões
  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");
     kprintf("syscall: int 0x80 handler installed\n");
 }
 }
 
 
-static int sync()
+int sync()
 {
 {
     VFS::the().sync();
     VFS::the().sync();
     return 0;
     return 0;

+ 1 - 0
Kernel/Syscall.h

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

+ 11 - 0
Kernel/init.cpp

@@ -167,6 +167,15 @@ static void spawn_stress()
 }
 }
 #endif
 #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() NORETURN;
 static void init_stage2()
 static void init_stage2()
 {
 {
@@ -285,6 +294,8 @@ void init()
     Process::initialize();
     Process::initialize();
     Process::create_kernel_process(init_stage2, "init_stage2");
     Process::create_kernel_process(init_stage2, "init_stage2");
 
 
+    Process::create_kernel_process(syncd, "syncd");
+
     Scheduler::pick_next();
     Scheduler::pick_next();
 
 
     sti();
     sti();