A hobby operating system (kernel) that I started to develop in the operating systems course when I was a student in computer engineering in 2011... This project is moved to https://gitlab.com/tanerguven/MakarnaX/
License
tanerguven/MakarnaX
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
MakarnaX Kernel 0.02 NELER VAR? - Bellek yonetimi: fiziksel bellek yonetimi sanal bellek (segmantasyon & paging) kernelde malloc fonksiyonu (kmalloc) - Process olusturma ve scheduling fork, execve vb.. - Standart user-kernel mode seklindeki kullanim ve sistem cagrilari - POSIX benzeri seyler signal handling ipc (shared memory, semaphore) - Sanal dosya sistemi - Bellekte uzerinde calisan bir dosya sistemi - Debug modu: ctrl-alt-delete ile sistemi duraklatip inceleme - Test programlari: sistem cagrilarini test etmek icin eklenmis programlar - Kullanici programlari icin C library destegi (newlib) - Linux uzerinde calisabilen GCC cross compiler (i686-makarnax-gcc) KULLANILABILEN SISTEM CAGRILARI exit, fork, execve, kill, pause, getpid, brk, sleep, alarm open, close, read, write, readdir, stat, lseek chdir, getcwd, mkdir, rmdir, creat, unlik signal, ipc, shmget, shmat, sem_init, sem_wait, sem_post gettimeofday HIZLI BASLANGIC kurulu olmasi gerekenler: C/C++ derleme araclari (gcc, g++, make, ...) kvm (ya da qemu) hizli baslangic komutlari: make make user make clean-test test-hello make initrd make qemu QEMU=kvm SANAL MAKINEDE CALISTIRMAK "make qemu" komutu sanal makinede calistirir. Sistemde hazir kurulu olan bir qemu ya da kvm ile calistirilabilir. Farkli versiyon kullanmak icin su sekilde kullanilir: make qemu QEMU=[qemu secimi ve paramtreleri] QEMU parametresi verilmezse tools/qemu altindaki qemu versiyonuyla calistirilir. Bu versiyon "MIT Operating System Engineering" dersi icin hazirlanmis ve debug icin daha uygun ozel bir QEMU versiyonudur. tools/qemu altindaki versiyonun kullanilabilmesi icin sitesinden indirilip derlenmesi gerekmektedir. Oncelikle su paketlerin sistemde kurulu olmasi gerekir: qemu, zlib1g-dev, libglib2.0-dev, libsdl1.2-dev. paketler kurulduktan sonra su komut ile indirme ve derleme islemi tamamlanabilir: make build-qemu SISTEMIN CALISMASI Sistem bellek uzerinden calisan bir dosya sistemi ile calismaktadir (denemefs) ve disk destegi bulunmamaktadir. Kernel acilirken initrd (bin/initrd.tar) dosya sistemine /initrd olarak baglanilir. Sistemde ilk olarak init processi baslatilir (initrd/init). Bu process initrd/init_programs dosyasini okur ve bu dosyaya gore diger programlari baslatir. init_programs dosyasinda her satir calistirilacak olan bir programi belirtir. /initrd/hello /initrd/foktest test1 Ornegin yukaridaki dosya baslangicta iki program calisacak ve forktest programi "test1" prametresiyle calistirilacak anlamina gelmektedir. init_programs dosyasi degistirildikten sonra calistirilmadan once make initrd komutu ile dosya sistemi guncellenmelidir. Dosya sistemi guncellenmezse eski init_programs calisir. MAKARNAX PROGRAMI DERLEYEBILMEK ICIN YAPILMASI GEREKENLER user_programs/test altindaki programlar cross-compiler olmadan derlenebilir. user_programs/bin altindaki programlarin derlenebilmesi icin standart C library ve cross-compiler gerekmektedir. Bunun icin projeye "GNU Binutils", "GNU GCC" target i686-markarnax olarak eklenilmis ve C library olarak "newlib" kullanilmistir. cross-compiler ve C library icin su paketler sistemde kurulu olmalidir: libgmp-dev, libmpfr-dev, libmpc-dev, autoconf gerekli paketler kurulduktan sonra cross-compiler ve C library su komut ile derlenebilir: make build-cross-compiler user_programs/lib altinda C kutuphanesi ile sistem cagrisi baglantilari bulunmaktadir. Bunlarin derlenmesi icin su komut kullanilabilir: make usr_lib Ardindan user_programs/bin altindaki programlar su komut ile derlenebilir: make usr_bin ONEMLI! C kutuphanesinde yapilan her degisiklikten sonra user_programs/lib ve usr_programs/bin tekrar derlenmelidir. Su komut kullanlabilir: make usr_lib usr_bin Programlarda yapilan degisikliklerden sonra isletim sistemi denenmeden once dosya sistemi tekrar olusturulmalidir. Su komut ile yapilabilir: make initrd Proje disinda herhangi bir program derlemek istenilirse, kullanilan isletim sistemine i686-makarnax-* araclarinin eklenmesi gerekmektedir. Su komut ile cross-compiler sisteme yuklenebilir: sudo make install-cross-compiler MakarnaX'da kendi programinizi calistirmak icin "PROGRAM EKLEME ORNEGI" basligina bakiniz. CALISTIRDIKTAN SONRA: Debug moduna gecmek icin: ctrl-alt-delete Sisteme henuz bir shell eklenmemistir. Yeni process baslatmak icin su komutlar kullanilabilir: ctrl-alt-delete create /initrd/hello // tek seferde birden fazla program baslatilabilir. continue Debug modunda "help" komutu ile kullanilabilecek komutlar goruntulenebilir: command list: help (h) kernelinfo (ki) - kernel info backtrace (bt) sysinfo (si) info (i) create (cr) - create process tasks (ts) task (t) - task info continue (c) - continue memdebug (md) - memory debug Process kill islemi sistem cagrisi ile yapilmaktadir. "kill" programi su sekilde kullanilabilir: cr /initrd/kill [process id] PROGRAM EKLEME ORNEGI: deneme.c: #include <stdio.h> void main() { printf("deneme\n"); } komutlar: # programi derle i686-makarnax-gcc -C deneme.c -o deneme # derlenen dosyayi MakarnaX programlarinin bulundugu dizine kopyala mv deneme /[MakarnaX proje dizini]/bin/initrd/bin/ # makarnax proje dizinini ac cd /[MakarnaX proje dizini]/ # baslangicta programi acsin make clean-test test-deneme # dosya sistemini guncelle make initrd # isletim sistemini baslat make qemu QEMU=kvm PROGRAM CALISTIRMAYA ORNEK: debug moduna geciyoruz ctrl-alt-delete 3 tane sonsuz dongu yapan program olusturuyoruz cr /initrd/dongu cr /initrd/dongu cr /initrd/dongu debug modundan cikiyoruz continue programlar birlikte calisiyorlar. Durdurup (debug moduna gecip) inceleyelim: ctrl-alt-delete task listesine bakiyoruz ts cikti: ----------- $:ts current task: 3 zombie task: 0 0 running 1 interruptible 2 running 3 running 4 running ------------ 2 numarali process bilgilerine bakiyoruz: t 2 cikti: ----------- $:t 2 id:2 parent id:0 status:0 run count:12 priority:3 time_start: 378 time_end: 0 time_kernel: 48 time_user: 0 memory usage: 48 kb user: 20 kb stack: 4 kb program: 16 kb shared: 0 kb kernel: 28 kb kernel stack: 4 kb task struct 512 b(?) page table vb. ------------- 2 numarali processi sonlandiriyoruz cr /initrd/kill 2 sonlandima processinin calismasi icin debug modundan cikmamiz gerek continue 1 sn bekliyoruz ve tekrar debug moduna geciyoruz: ctrl-alt-delete process listesine bakiyoruz: ts cikti: ---------------- $:ts current task: 3 zombie task: 2 0 running 1 interruptible 2 zombie 3 running 4 running 5 zombie ----------------
About
A hobby operating system (kernel) that I started to develop in the operating systems course when I was a student in computer engineering in 2011... This project is moved to https://gitlab.com/tanerguven/MakarnaX/