Future edit:
- Repository ini merupakan hasil pengerjaan tugas penulis sistem-operasi-mangga@informatika19 pada tahun 2021
- Repo ini adalah inspirasi utama 16-bit toy OS, OS-2022@Sister19 (asisten OS round 1)
- Dan menjadi dasar untuk 32-bit toy OS, OS-2023@Sister20 (asisten OS round 2)
- And again, 32-bit toy OS dengan context switching OS-2024@labsister21 (asisten OS round 3)
Kelompok Mangga K04
Repository ini akan digunakan sebagai duplikat dari repository yang terdapat pada GitHub Classroom informatika19 (https://github.com/informatika19/sistem-operasi-mangga)
Catatan : Branch main untuk sementara dijadikan repository untuk pengerjaan asli milestone sistem operasi, untuk pengerjaan ulang dan penulisan step-by-step pengerjaan berada pada branch rewrite dan branch-branch milestone.
Log : 3 April 2021, Upload v2.0.0
Log : 23 April 2021, Penambahan README.md milestone 3
Log : 27 April 2021, Penambahan milestone 3 dan branch baru
Log : 28 April 2021, Pengerjaan ulang milestone 1, cek pada milestone-1
| Nama | NIM |
|---|---|
| Gregorius Dimas Baskara | 13519190 |
| Christian Gunawan | 13519199 |
| Tanur Rizaldi Rahardjo | 13519214 |
chmod +x build-run.sh get-tools.sh run.sh- Jika menjalankan untuk pertama kali, pastikan semua tools ada atau jalankan
./get-tools.sh - Jika fscreate belum ada di folder other, jalankan
make filesystemcreator - Jalankan command
./build-run.shjika ingin menjalankan OS secara penuh & termasuk bonus dan akan menjalankan Bochs - Jika hanya ingin menjalankan gunakan
./run.sh
Jika tidak menginginkan menjalankan secara penuh menggunakan ./build-run.sh dapat mencompile
program secara sebagian saja dengan command make, berikut recipe yang tersedia
| Recipe | Target |
|---|---|
| all | Membuat seluruh package |
| basekernel | Membuat kernel saja tanpa shell |
| shellpackage | Insersi spesifikasi wajib shell |
| extrapackage | Insersi bonus utility program, cek isi disini |
Untuk program loadFile, gunakan make fileloader untuk membuat program, program akan terletak pada
folder other dengan nama loadFile.
Program dapat dijalankan dengan ./loadFile <target image> <file> untuk memasukan file kedalam image.
Contoh dari command tersebut adalah ./loadFile mangga.img inputfile1.
Catatan, kode program dibuat hanya dengan keyword while untuk loop dan semua deklarasi terletak pada awal fungsi.
Hal ini disebabkan karena seringnya permasalahan pada bcc ketika menggunakan keyword-keyword C dan cara penulisan yang umum.
Sehingga menyebabkan kode cenderung unreadable untuk fungsi yang panjang.
Milestone I dan II juga menggunakan beberapa fungsi pendukung yang terdapat di beberapa file selain kernel.c seperti:
- opr.c
- output.c
- screen.c
- shell.c
- std.c
dan beberapa header yang juga menjadi header atas .c tersebut.
Pada tahap ini digunakan utility dd untuk membentuk image yang bernama mangga.img.
Bootloader dibuat dengan mengikuti kit yang telah disediakan dan dicompile menggunakan nasm.
Kernel dibuat menggunakan kit yang disediakan dan mengikuti spesifikasi yang diminta.
Fungsi-fungsi yang terdapat pada spesifikasi diimplementasi tanpa penambahan fitur.
Pada tahap ini juga dibuat bash script dan makefile yang dapat digunakan untuk membentuk
kernel secara otomatis
Konfigurasi if2230.config dirubah pada penamaan disk imagenya dikarenakan perubahan nama
yang dilakukan pada tahap pembuatan disk image sebelumnya.
Untuk implementasi printString dan readString digunakan interrupt yang sesuai keperluannya.
Bagian untuk operasi string sederhana ditulis pada std dan bagian penulisan kelayar ditulis pada
screen. Implementasi handleInterrupt21 mengikuti spesifikasi yang diberikan dan menambahkan beberapa
servis tambahan yang dapat digunakan library nantinya. Pada tahap ini juga diimplentasikan operasi sederhana
mod yang dapat digunakan sistem operasi.
Pada tahap ini dibuat filesystemcreator yang mempermudah otomatisasi build kernel sebelum melanjutkan ke
pembuatan filesystem pada kernel. filesystemcreator membentuk secara otomatis map, files, dan sectors
menuruti konfigurasi yang digunakan. Konfigurasi tersebut dapat diganti jika ingin membuat konvensi filesystem
yang berbeda.
Implementasi syscall readSector dan writeSector mengikuti spesifikasi yang diberikan. Untuk system call readFile
dan writeFile, diimplementasikan mengikuti konvensi yang ditulis pada spesifikasi dengan tambahan.
readFile dan writeFile dapat membaca dan membentuk folder menggunakan macro FOLDER pada buffer.
readFile akan mengembalikan FOLDER pada buffer dan writeFile akan menuliskan folder yang memiliki nama path.
Program loadFile didasarkan pada writeFile namun diubah karena dicompile menggunakan gcc. Sebagian besar kode
hanya modifikasi secara minimum dari writeFile.
Shell dibuat dengan mensimulasikan user space dan kernel space, sehingga seluruh library std yang digunakan
shell tidak menggunakan system call kernel secara langsung. Library std akan menggunakan servis interrupt 0x21 yang
sediakan oleh kernel.
Pada pembuatan shell dibuat directoryEvaluator dan directoryStringBuilder yang sangat berguna
ketika melakukan operasi-operasi dasar pada filesystem. directoryEvaluator mempermudah evaluasi relative pathing suatu
program dengan mengembalikan hasil P-byte kepada caller. directoryStringBuilder dapat digunakan sebagai pembentuk absolute
directory string yang digunakan pada shell untuk membentuk current working directory.
Shell memiliki fungsi input custom shellInput yang akan mengembalikan string input dan command history.
Untuk memenuhi bonus autocomplete dan history, ditambahkan kode assembly getFullKey yang digunakan untuk mengambil
keycode dan scancode keyboard. shellInput menggunakan scancode dan keycode untuk menentukan tombol yang ditekan user dan
melakukan operasi yang sesuai. Autocomplete dilakukan dengan tombol tab dan menggunakan directoryEvaluator.
Command history disimpan pada queue yang dapat diakses dengan arrow keys.
directoryEvaluator mempermudah proses autocomplete dan memperbolehkan semua utility yang disupport
untuk melakukan autocomplete baik folder atau file. Autocomplete tidak membedakan file dan folder dikarenakan
dianggap dapat mempermudah user ketika melakukan operasi relative pathing.
Pada milestone II telah diimplementasikan wrapper system call yang selalu digunakan ketika implementasi shell
sehingga tahap ini hanya memisakan modul pada std. Simulasi user space dan kernel space yang dilakukan pada
milestone II memperbolehkan melewati pengerjaan 3.1 dan 3.2, sehingga tahap ini dilakukan setelah tahap eksekusi program.
Modul file I/O dan folder I/O tergabung menjadi satu pada
std_fileio dikarenakan menggunakan syscall yang sama namun berbeda argument yang diberikan. Modul teks dan
matematika dasar dinamai std_stringio dan std_opr.
Bagian ini dikerjakan setelah bagian eksekusi program telah diimplementasikan. Utilitas wajib berikut telah diimplementasikan pada OS
| Utilitas | Fungsi | Cara Kerja |
|---|---|---|
| mv | Memindahkan file/folder | mv [file/folder] [source destination] |
| cp | Mengcopy file/folder | cp [file/folder] [source destination] |
| mkdir | Mmbuat directory | mkdir [folder] |
| rm | Menghapus file/folder | rm [file/folder] |
| cat | Mencetak isi file | cat [file/folder] |
| ln | Membuat symbolic link | ln -s [file yang mau dilink] [file yang akan dilink] |
Program utilitas tersebut diletakkan pada folder /bin/ yang dapat dieksekusi shell dimana saja.
OS menggunakan prosedur launchProgram dan executeProgram yang telah disediakan pada spesifikasi.
Umumnya program akan dieksekusi pada segment memori 0x2000 atau 0x3000 dan tidak ditambahkan fitur
kembali kepada pemanggil prosedur dikarenakan keterbatasan waktu dan kernel space yang ada.
Ketika implementasi digunakan secara ekstensif debugger milik bochs untuk mencari tahu letak kesalahan
kode yang dibuat. Utilitas hexedit juga digunakan untuk mengecek penulisan pembacaan writeFile
dan readFile dapat menulis secara binary.
Kernel size telah diturunkan dari milestone II yang memiliki ukuran sebesar 32 sektor.
Dilakukan juga pengaturan yang sama pada filesystemcreator untuk mempermudah proses pembuatan.
Setiap utility akan memanggil shell lagi ketika selesai menjalankan operasinya.
Program utilitas memiliki ukuran dibawah 8192 bytes agar dapat diloadFile kedalam OS.
Bonus boot logo diimplementasikan menggunakan boot logo mode grafis.
Boot logo diproses secara sederhana menggunakan python package pillow
atau deprecated package pil yang menghasilkan logo dalam bentuk data sederhana.
Nantinya data tersebut akan dibaca oleh kernel dan digunakan sebagai acuan
cara menggambar. Script python yang digunakan terletak pada other/conv.py.
Semua bonus berhasil untuk diimplementasikan dalam milestone ini, meliputi:
- Symbolic link (ln) dalam mode soft link dengan menggunakan flag
-s - Autocomplete file yang tersedia untuk cd, ls, dan cat
- Autocomplete folder saat melakukan cd
- Shell memiliki history (4 command)
Berikut merupakan utility program yang ditambahkan pada package extrapackage
- strings
- wc
- file
- mim
- recursion_test
- snok
- whereis
- printf
Beberapa utility memiliki parameter yang dapat digunakan pengguna ketika menggunakan OS, berikut adalah parameternya
| Utility | Parameter | Deskripsi |
|---|---|---|
| ls | --help | Menunjukan legend warna |
| ln | -s | Membuat softlink |
| rm | -r | Penghapusan rekursif |
| cp | -r | Pengcopyan rekursif |
Berikut beberapa fitur ekstra yang ditambahkan pada milestone III
- Color coded printing pada ls
- Relative execute & autocomplete
- Full relative pathing & autocomplete
- Interaksi penuh softlink dengan utility (broken softlink check, cat to linked file, etc)
- clear & echo shell command
- Semua bonus milestone sebelumnya telah diport ulang
- Semua bonus milestone 3
Berikut merupakan screenshot terbaru sistem operasi
- Distro linux
- Silberschatz, Galvin, Gagne. "Operating System Concepts", Chapter 10.
- Asisten Sistem Terdistribusi. "Milestone 2 - 2021".
- stanislavs.org/helppc/int_13.html









