/os-2024-macrosoftwinning69

os-2024-macrosoftwinning69 created by GitHub Classroom

Primary LanguageC

Tugas Besar Sistem Operasi - IF0x8B6 - 2024

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

Operating System Anjay

Operating System Ahanjay

Anggota Kelompok

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

Table of Contents

Deskripsi Singkat

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:

  1. Menyiapkan repository & tools

    • Github classroom & repository
    • Pemasangan toolchain & vscode
  2. Kernel dasar

    • Kode untuk kernel dasar
    • Linker script untuk build
  3. Otomatisasi build

    • Otomatisasi kompilasi kernel Otomatisasi pembuatan disk image
  4. Menjalankan sistem operasi

    • Menjalankan OS dengan QEMU
  5. Pembuatan struktur data GDT

    • Struct GDT & Segment Descriptor
  6. Load GDT

    • Assembly untuk load GDT

Milestone 0x1:

  1. Text Framebuffer

    • Membuat Fungsi Menulis pada Layar
    • Membuat Membersihkan Layar (clear)
    • Membuat Fungsi Menggerakan Kursor
  2. Interrupt

    • Membuat IDT
    • Melakukan PIC Remapping
    • Membuat interrupt Service Routine
    • Memuat IDT pada CPU
  3. Keyboard Driver

    • Menyalakan IRQ Keyboard
    • Membuat driver untuk menerima dan menerjemahkan input keyboard
  4. 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:

  1. Manajemen memory

    • Membuat struktur data paging
    • Memuat kernel pada alamat memori tinggi
    • Mengaktifkan paging
  2. 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
  3. Shell

    • Membuat system call
    • Mengembangkan aplikasi sederhana menjadi shell
    • Membuat perintah - perintah pada shell

Milestone 0x3:

  1. Menyiapkan struktur untuk proses

    • Membuat struct Process Control Block (PCB)
    • Membuat struktur data yang dibutuhkan proses
  2. Membuat task scheduler & context switch

    • Membuat algoritma penjadwalan task yang ada
    • Membuat mekanisme perpindahan konteks
  3. Membuat perintah shell

    • Membuat perintah shell tambahan untuk manajemen process
      • exec
      • ps
      • kill
  4. Menjalankan Multitasking

    • Menjalankan program yang dapat menggambarkan konkurensi telah berjalan

Struktur File

.
├── 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

Requirements

Cara Menjalankan Program

  1. Clone repository Github ini.
  2. Install semua requirements yang diperlukan dengan mengeksekusi sudo apt update dan sudo apt install -y nasm gcc qemu-system-x86 make genisoimage gdb pada command prompt wsl.
  3. Jalankan make disk untuk membuat filesystem.
  4. Jalankan make insert-shell untuk melakukan compile aplikasi shell dan clock.
  5. Jalankan program dengan mengeksekusi make run di terminal wsl pada root directory repository ini.

Acknowledgements

OS (S nya Stress)

Cheers dulu kali udah namatin Tugas Operating Stress.

OS (S nya Stress) OS (S nya Stress) OS (S nya Stress)

Biar seneng ditemenin dulu sama lolichan🌼.