diff --git a/kaleid/kernel/mm/gdt.c b/kaleid/kernel/mm/gdt.c
new file mode 100644
index 0000000..ae395a6
--- /dev/null
+++ b/kaleid/kernel/mm/gdt.c
@@ -0,0 +1,50 @@
+//----------------------------------------------------------------------------//
+// GNU GPL OS/K //
+// //
+// Desc: Mapping and checking memory related functions //
+// //
+// //
+// Copyright © 2018-2019 The OS/K Team //
+// //
+// This file is part of OS/K. //
+// //
+// OS/K is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// any later version. //
+// //
+// OS/K is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY//without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with OS/K. If not, see . //
+//----------------------------------------------------------------------------//
+
+#include
+
+// The Gdt
+GdtEntry_t gdtEntries[5];
+GdtPtr_t gdtPtr;
+
+void MmInitGdt(void)
+{
+ gdtPtr.limit = (sizeof(gdt_entry_t) * 5) - 1;
+ gdtPtr.base = (uint)&gdt_entries;
+}
+
+static void MmSetGdtEntry(int index, uint base, uint limit, uchar access,
+ uchar granularity)
+{
+ gdtEntries[num].lowBase = (base & 0xFFFF);
+ gdtEntries[num].middleBase = (base >> 16) & 0xFF;
+ gdtEntries[num].highBase = (base >> 24) & 0xFF;
+
+ gdtEntries[num].lowLimit = (limit & 0xFFFF);
+ gdtEntries[num].granularity = (limit >> 16) & 0x0F;
+
+ gdtEntries[num].granularity |= gran & 0xF0;
+ gdtEntries[num].access = access;
+}
+