Milestone 0: Pembuatan Sistem Operasi x86 Toolchain, Kernel, GDT
Milestone 1: Pembuatan Sistem Operasi x86 Interrupt, Driver, File System
Milestone 2: Pembuatan Sistem Operasi x86 Paging, User Mode, Shell
Milestone 3: Pembuatan Sistem Operasi x86 Process, Scheduler, Multitasking
Nama Kelompok: macrosoftwinning69 | ||
No. | Nama | NIM |
1. | Aland Mulia Pratama | 13522124 |
2. | Rizqika Mulia Pratama | 13522126 |
3. | Ikhwan Al Hakim | 13522147 |
4. | Muhammad Rasheed Qais Tandjung | 13522158 |
Dalam tugas ini kami membuat sebuah program Sistem Operasi. Sistem Operasi yang dibuat akan berjalan pada arsitektur x86 32 bit dan dijalankan dengan emulator Qemu:
Milestone 0x0:
-
Menyiapkan repository & tools
- Github classroom & repository
- Pemasangan toolchain & vscode
-
Kernel dasar
- Kode untuk kernel dasar
- Linker script untuk build
-
Otomatisasi build
- Otomatisasi kompilasi kernel Otomatisasi pembuatan disk image
-
Menjalankan sistem operasi
- Menjalankan OS dengan QEMU
-
Pembuatan struktur data GDT
- Struct GDT & Segment Descriptor
-
Load GDT
- Assembly untuk load GDT
Milestone 0x1:
-
Text Framebuffer
- Membuat Fungsi Menulis pada Layar
- Membuat Membersihkan Layar (clear)
- Membuat Fungsi Menggerakan Kursor
-
Interrupt
- Membuat IDT
- Melakukan PIC Remapping
- Membuat interrupt Service Routine
- Memuat IDT pada CPU
-
Keyboard Driver
- Menyalakan IRQ Keyboard
- Membuat driver untuk menerima dan menerjemahkan input keyboard
-
Filesystem
- Menambahkan hard drive pada virtual machine
- Membuat driver untuk I/O pada hard drive
- Membuat struktur data untuk file system FAT32
- Membuat operasi write pada filesystem
- Membuat operasi read pada filesystem
- Membuat operasi delete pada filesystem
Milestone 0x2:
-
Manajemen memory
- Membuat struktur data paging
- Memuat kernel pada alamat memori tinggi
- Mengaktifkan paging
-
Separasi kernel-user space
- Membuat inserter file ke file system
- Membuat GDT entry untuk user dan Task State Segment
- Membuat alokator memori sederhana
- Membuat aplikasi user sederhana
- Memasuki user mode pada aplikasi sederhana
-
Shell
- Membuat system call
- Mengembangkan aplikasi sederhana menjadi shell
- Membuat perintah - perintah pada shell
Milestone 0x3:
-
Menyiapkan struktur untuk proses
- Membuat struct Process Control Block (PCB)
- Membuat struktur data yang dibutuhkan proses
-
Membuat task scheduler & context switch
- Membuat algoritma penjadwalan task yang ada
- Membuat mekanisme perpindahan konteks
-
Membuat perintah shell
- Membuat perintah shell tambahan untuk manajemen process
- exec
- ps
- kill
- Membuat perintah shell tambahan untuk manajemen process
-
Menjalankan Multitasking
- Menjalankan program yang dapat menggambarkan konkurensi telah berjalan
.
├── OS-S-nya-Stresss.gif
├── OS.gif
├── README.md
├── bin
│ ├── OS2024.iso
│ ├── context-switch.o
│ ├── disk.o
│ ├── fat32.o
│ ├── framebuffer.o
│ ├── gdt.o
│ ├── idt.o
│ ├── inserter
│ ├── interrupt.o
│ ├── intsetup.o
│ ├── iso
│ │ └── boot
│ │ ├── grub
│ │ │ ├── grub1
│ │ │ └── menu.lst
│ │ └── kernel
│ ├── kernel
│ ├── kernel-entrypoint.o
│ ├── kernel.o
│ ├── keyboard.o
│ ├── math.o
│ ├── paging.o
│ ├── portio.o
│ ├── process.o
│ ├── sample-image-copy-fixedcluster.bin
│ ├── sample-image-copy.bin
│ ├── sample-image.bin
│ ├── scheduler.o
│ ├── shell
│ ├── shell_elf
│ ├── storage.bin
│ └── string.o
├── boot
│ └── kernel
├── ch1
│ └── 1 - Framebuffer
├── lolichan_anime_1.jpg
├── lolichan_anime_2.jpg
├── lolichan_anime_3.jpg
├── makefile
├── other
│ └── grub1
└── src
├── cmos.c
├── context-switch.s
├── disk.c
├── fat32.c
├── framebuffer.c
├── gdt.c
├── header
│ ├── background.h
│ ├── clock
│ │ └── cmos.h
│ ├── cpu
│ │ ├── gdt.h
│ │ └── portio.h
│ ├── driver
│ │ └── keyboard.h
│ ├── filesystem
│ │ ├── disk.h
│ │ └── fat32.h
│ ├── interrupt
│ │ ├── idt.h
│ │ └── interrupt.h
│ ├── kernel-entrypoint.h
│ ├── math
│ │ └── math.h
│ ├── memory
│ │ └── paging.h
│ ├── process
│ │ └── process.h
│ ├── scheduler
│ │ └── scheduler.h
│ ├── stdlib
│ │ └── string.h
│ ├── temp-context.h
│ └── text
│ └── framebuffer.h
├── idt.c
├── interrupt.c
├── intsetup.s
├── kernel-entrypoint.s
├── kernel.c
├── keyboard.c
├── linker.ld
├── math.c
├── menu.lst
├── paging.c
├── portio.c
├── process.c
├── scheduler.c
├── string.c
└── user-program
├── SYSCALL_LIBRARY.h
├── clock
│ ├── clock-linker.ld
│ └── clock.c
├── crt0.s
├── external-inserter.c
├── shell
│ ├── shell-background.h
│ ├── user-linker.ld
│ └── user-shell.c
├── string.c
└── utils.h
- Netwide Assembler (NASM): Kompiler untuk bahasa assembly x86 yang mendukung penulisan instruksi langsung. (https://www.nasm.us/)
- GNU C Compiler (GCC): Kompiler bahasa C yang digunakan untuk mengkompilasi kode pada berbagai sistem operasi. (https://man7.org/linux/man-pages/man1/gcc.1.html)
- GNU Linker (ld): Linker yang menggabungkan kode objek hasil kompilasi menjadi satu file eksekusi. (https://linux.die.net/man/1/ld)
- QEMU - System i386: Emulator dan virtual machine yang digunakan untuk menjalankan sistem operasi. (https://www.qemu.org/docs/master/system/target-i386.html)
- GNU Make: Alat untuk otomatisasi proses build dalam pengembangan perangkat lunak. (https://www.gnu.org/software/make/)
- genisoimage: Alat untuk membuat image disk dari sistem operasi. (https://linux.die.net/man/1/genisoimage)
- GDB (GNU Debugger): Debugger untuk melakukan debugging dinamis pada kernel. (https://man7.org/linux/man-pages/man1/gdb.1.html)
- Clone repository Github ini.
- Install semua requirements yang diperlukan dengan mengeksekusi
sudo apt update
dansudo apt install -y nasm gcc qemu-system-x86 make genisoimage gdb
pada command prompt wsl. - Jalankan
make disk
untuk membuat filesystem. - Jalankan
make insert-shell
untuk melakukan compile aplikasi shell dan clock. - Jalankan program dengan mengeksekusi
make run
di terminal wsl pada root directory repository ini.