This Repository is meant for the Operating System Course that serve as an introduction to kernel development and concretely demonstrate the subsystems within an operating system. The target platform for the operating system is the x86 32-bit Protected Mode, which will later be run using QEMU.
Milestone 0 focused on preparing the tools necessary for working on this operating system.
Milestone 1 focused on the initial development of the operating system, including enabling and handling interrupts, creating simple drivers for the display and keyboard, and developing the file system.
Milestone 2 focused on preparing the environment for user process. This included creating a memory management system, entering user mode, and developing shell. dditionally, we implemented several bonus features such as recursive cp and rm, relative pathing, and a scrollable shell.
Milestone 3 focused on enabling the operating system to run multiple processes concurrently. This included implementing process switching with context switches, creating a process manager to handle scheduling algorithms, and managing the creation, termination, and cleanup of processes.
for creating a disk image, use make disk
command, this will create a new disk image and delete the last one.
for inserting the shell, use make insert-shell
command, this will insert a shell into the root directory
fot inserting the clock, use make insert-clock
command, this will insert clock into the root directory
Run the makefile using make run
command, the program will automatically be compiled, and a kernel window will podp up using the QEMU Emulator.
In the user shell, you can run the following commands:
1. cat [filename] |
: show content of file. |
2. cd [target] |
: move current directory to target. |
3. clear |
: clear current screen. |
4. cls |
: clear current screen. |
5. cp [-r] source dest |
: copy file/folder to destination. |
6. ls [foldername] |
: show current or target directory contents |
7. mkdir dirname |
: create new directory\n |
8. mv source dest |
: move file/folder to destination |
9. rm [-r] target |
: delete folder/ file. |
10. find name |
: find file/folder with given name. |
11. kill [pid] |
: kill process with process id pid. |
12. exec [filename] |
: execute binary file. |
13. ./[filename] |
: execute binary file. |
14. ps |
: show process list. |
15. help |
: show available commands. |
.
├── README.md
├── bin
│ ├── OS2024.iso
│ ├── inserter
│ ├── kernel
│ ├── sample-image.bin
│ ├── sample-image.bin:Zone.Identifier
│ ├── shell
│ ├── shell_elf
│ └── storage.bin
├── makefile
├── other
│ └── grub1
└── src
├── cmos.c
├── crt0.s
├── disk.c
├── external
│ └── external-inserter.c
├── fat32.c
├── framebuffer.c
├── gdt.c
├── header
│ ├── cpu
│ │ ├── gdt.h
│ │ ├── idt.h
│ │ ├── interrupt.h
│ │ └── portio.h
│ ├── driver
│ │ ├── cmos.h
│ │ ├── disk.h
│ │ ├── framebuffer.h
│ │ └── keyboard.h
│ ├── filesystem
│ │ └── fat32.h
│ ├── kernel-entrypoint.h
│ ├── memory
│ │ └── paging.h
│ ├── process
│ │ ├── process.h
│ │ └── scheduler.h
│ └── stdlib
│ └── string.h
├── idt.c
├── interrupt.c
├── intsetup.s
├── kernel-entrypoint.s
├── kernel.c
├── keyboard.c
├── linker.ld
├── menu.lst
├── paging.c
├── portio.c
├── process.c
├── scheduler.c
├── stdlib
│ └── string.c
├── user
│ ├── clock.c
│ ├── command.c
│ ├── command.h
│ ├── syscall.c
│ ├── syscall.h
│ └── user-shell.c
└── user-linker.ld
NIM | Name | Github Profile |
---|---|---|
13522068 | Adril Putra Merin | ninoaddict |
13522098 | Suthasoma Mahardhika Munthe | sotul04 |
13522112 | Dimas Bagoes Hendrianto | dimasb1954 |
13522118 | Berto Richardo Togatorop | BertoRichardo |