- Milestone 1 : 1 Maret 2022 - Pembuatan Sistem Operasi Sederhana: Booting, Kernel, dan System Call
- Milestone 2 : 5 April 2022 - Pembuatan Filesystem dan Shell Sederhana
- Milestone 3 : 30 April 2022 - Pembuatan dan Eksekusi Program Menggunakan System Call
Pada milestone 1, implementasi yang dilakukan adalah implementasi fungsi printString, readString dan clearScreen
sebagai berikut:
printString
- Menerima argumen berupa character buffer, kemudian memanggil fungsi interrupt dengan function code
0xE * 256 + buffer[i]
untuk menampilkan karakter pada buffer - Karakter akan terus ditampilkan hingga mencapai null-terminating string (
\0
) - Diimplementasikan pada file
screen.c
- Menerima argumen berupa character buffer, kemudian memanggil fungsi interrupt dengan function code
readString
- Menerima argumen berupa character buffer, lalu memanggil fungsi interrupt dengan interrupt call 0x16 untuk membaca input keyboard
- Apabila input sama dengan enter code (0xD), maka pembacaan akan dihentikan
- Apabila input sama dengan backspace code (0x8), maka isi buffer - 1 akan dihapus
- Apabila input di luar enter / backspace code, maka buffer akan diisikan dengan karakter
- Diimplementasikan pada file
keyboard.c
- Menerima argumen berupa character buffer, lalu memanggil fungsi interrupt dengan interrupt call 0x16 untuk membaca input keyboard
clearScreen
- Membersihkan layar dengan memanggil interrupt 0x10, function code
0x06
- Relokasi kursor ke posisi kiri atas
- Reset warna buffer ke warna putih
- [IMPORTANT] Fungsi ini dipanggil dengan meng-input karakter
cls
ke dalamreadString
- Diimplementasikan pada file
screen.c
- Membersihkan layar dengan memanggil interrupt 0x10, function code
Pada milestone 2, implementasi yang dilakukan adalah implementasi fungsi readSector
, writeSector
, read
, write
, dan shell
sebagai berikut:
readSector
danwriteSector
- Menerima argumen berupa buffer dan sector number, selanjutnya memanggil fungsi interrupt 0x13 (read/write services) dengan AX bernilai 0x0201 untuk read dan 0x0301 untuk write, BX bernilai buffer, CX bernilai (cylinder << 8) + sector, DX bernilai (head << 8) + drive
readSector
melakukan pembacaan sector sesuai dengan sector number ke buffer, sebaliknyawriteSector
melakukan penulisan sector sesuai dengan sector number ke buffer- Diimplementasikan pada file
filesystem.c
read
danwrite
- Menerima argumen berupa file metadata dan return code, kemudian melakukan pemrosesan dimulai dengan validasi terhadap masukan file metadata, pemrosesan read/write, dan diakhiri dengan pass-by-reference pada return code
read
melakukan pembacaan file sesuai dengan file metadata ke buffer, sebaliknyawrite
melakukan penulisan file sesuai dengan file metadata ke buffer. Kedua jenis pemrosesan file memanfaatkan fungsireadSector
danwriteSector
yang telah didefinisikan sebelumnya- Diimplementasikan pada file
filesystem.c
shell
- Menerima argumen berupa string, kemudian dilakukan parsing terhadap string yang diterima. Posisi argumen string pertama merupakan utility dan posisi argumen string berikutnya akan menjadi masukan pada pemanggilan utility. utility yang diimplementasikan terdiri atas:
cd
,ls
,mv
,mkdir
,cat
,cp
- Utility
cd
merupakan alat dasar untuk melakukan navigasi pada filesystem. Diimplementasikan pada filecd.c
- Utility
ls
memperlihatkan konten yang ada pada current working directory. Diimplementasikan pada filels.c
- Utility
mv
digunakan untuk melakukan operasi rename atau memindahkan file maupun folder. Diimplementasikan pada filemv.c
- Utility
mkdir
digunakan untuk membuat folder baru. Diimplementasikan pada filemkdir.c
- Utility
cat
digunakan untuk menampilkan isi dari suatu file sebagai text file. Diimplementasikan pada filecat.c
- Utility
cp
digunakan untuk menyalin file. Diimplementasikan pada filecp.c
- Menerima argumen berupa string, kemudian dilakukan parsing terhadap string yang diterima. Posisi argumen string pertama merupakan utility dan posisi argumen string berikutnya akan menjadi masukan pada pemanggilan utility. utility yang diimplementasikan terdiri atas:
Selain implementasi yang diwajibkan pada spesifikasi milestone, dilakukan pula implementasi tambahan sebagai tujuan kreativitas sebagai berikut:
- Implementasi cancel input shortcut dan pengaksesan history menggunakan arrow key. Tujuan pengimplementasian ini untuk memudahkan dalam menghapus input atau melakukan inputan yang sudah pernah dilakukan sebelumnya
- Fungsi ini dapat diimplementasikan pada file
keyboard.c
.
- Fungsi ini dapat diimplementasikan pada file
- Implementasi color printing. Tujuan pengimplementasian ini untuk memudahkan dalam menampilkan karakter dengan warna tertentu. Salah satu penggunaannya adalah pada utility
ls
. Warna dapat membedakan dan mengindikasikan suatu direktori merupakan sebuah folder atau sebuah file.- Fungsi ini dapat diimplementasikan pada file
screen.c
.
- Fungsi ini dapat diimplementasikan pada file
Pada milestone 3, ada beberapa implementasi tambahan:
- Pembuatan library dan syscall
executeProgram
- Fungsionalitas-fungsionalitas yang ada sebelumnya dipindahkan ke beberapa library (dalam folder
src/library
seperti berikut:args.c
: fungsionalitas untuk melakukan parsing argumen dan validasi direktorifileio.c
: fungsionalitas untuk melakukan penulisan dan pembacaan file (implementasi lebih lanjut dari read/write)program.c
: inisialisasi programshell_common.c
: fungsionalitas untuk mengatur shellstd_lib.c
: seperti milestone sebelumnya, std_lib mengandung fungsi-fungsi dasar seperti mod, div, memcpy, dan lain-lainstring.c
: fungsi-fungsi untuk melakukan operasi pada string (strcpy, strcat, strlen)syscall.c
: fungsionalitas lain yang diterjemahkan dalam bentuk system calltextio.c
: fungsi-fungsi untuk meng-handle input/output program(gets/puts)
- Pemanggilan fungsi-fungsi pada library dilakukan via
handleInterrupt21
, yang mengatur fungsi-fungsi yang harus dijalankan melalui interrupt tertentu. ImplementasiexecuteProgram
juga telah dilakukan di kernel.
- Fungsionalitas-fungsionalitas yang ada sebelumnya dipindahkan ke beberapa library (dalam folder
- Pembuatan aplikasi shell
- Shell yang sebelumnya terpasang di kernel via model shared memory diubah menjadi model message passing. Shell dan fungsionalitas dalam shell diletakkan dalam folder
apps
- Aplikasi di folder
apps
dapat diakses secara global maupun local- Eksekusi local dapat dilakukan dengan:
- Absolute path:
/bin/<nama util>
, misalkan/bin/cat <nama file>
- Relative path:
cd
ke folderbin
, lalu gunakan utilitas dengan sintaks./<nama util>
, misal./cat <nama file>
- Absolute path:
- Eksekusi local dapat dilakukan dengan:
- Shell yang sebelumnya terpasang di kernel via model shared memory diubah menjadi model message passing. Shell dan fungsionalitas dalam shell diletakkan dalam folder
- Multiple program
- Pengguna dapat melakukan eksekusi utility secara berantai. Eksekusi utility memanfaatkan mesage passing dan
exit
per eksekusinya.
- Pengguna dapat melakukan eksekusi utility secara berantai. Eksekusi utility memanfaatkan mesage passing dan
Selain implementasi yang diwajibkan pada spesifikasi milestone, dilakukan pula implementasi tambahan sebagai tujuan kreativitas sebagai berikut:
- Pembuatan permainan Snake pada
apps
- Pembuatan text editor Nano pada
apps
- Kompilasi OS dapat dilakukan dengan opsi aplikasi apa saja yang ingin di-include (lebih lanjut di bagian Cara Menjalankan OS)
- Pengguna dapat menambahkan program baru dengan cara berikut:
- Buat file di dalam folder
apps
dengan nama yang diinginkan - Pastikan struktur kode seperti berikut:
#include "../library/program.h" int main() { struct shell_data data; getShellData(&data); // Kode diletakkan disini exit(&data); }
- Gunakan library yang tersedia seperti textio.h, string.h, fileio.h dengan
#include "../library/<nama_library>"
. - Tidak perlu melakukan perubahan pada makefile, program otomatis akan diinjeksi ke dalam sistem operasi.
- Silahkan melakukan eksplorasi sebebas-bebasnya ^_^
- Buat file di dalam folder
- [RECOMMENDED] Ubuntu 20.04 (pengembangan dilakukan pada WSL2)
- VcXsrv Windows X Server
- Windows 10 sebagai OS basis eksekusi
-
Lakukan instalasi VcXsrv Windows X Server pada OS Windows, jalankan
XLaunch
lalu pada menu pilihan gunakan pilihan berikut:Select display settings -> dibebaskan Select how to start clients -> 'Start no client' Extra settings -> tandai semuanya Klik Finish
-
Buka WSL2, lalu navigasi ke folder
root
dan jalankan perintah berikut untuk melakukan instalasi library:sudo apt update sudo apt install nasm bcc bin86 bochs bochs-x make
Selanjutnya, jalankan kompilasi makefile menggunakan salah satu dari perintah berikut:
make build-run //untuk menjalankan kompilasi seperti biasa make tc-run TC=<KARAKTER> // untuk menjalankan kompilasi dengan test case tertentu make tc-run APPS="shell <urutan rantai aplikasi, dipisahkan dengan spasi>" // untuk menjalankan kompilasi dengan aplikasi tertentu. Contoh: make tc-run APPS="shell cp snake mv".
[IMPORTANT] Keterbatasan node akan menyebabkan beberapa testcase tidak ter-load secara penuh, misalnya testcase B yang menggunakan seluruh node
-
OS akan tampil di layar emulator Bochs. Pengguna dapat menggunakan utilitas-utilitas yang disediakan!