Skip to content

tanerguven/MakarnaX

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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/

Topics

Resources

License

Stars

Watchers

Forks