Skip to content

MertSenyildiz/2021-OSProje

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

2021-OSProje

2021 Güz Dönemi SAU Bilgisayar Mühendisliği İşletim Sistemleri Projesi

Bir dizi yerleşik işlevin (buit-in functions) yürütülmesini ve diğer proseslerin çalıştırılmasını sağlayan temel bir robust kabuk(shell).
MAX 80 Karakter ve 10 Argüman ile çalışmaktadır.

Distro Shell Built-in cd Built-in exit Built-in showpid
Fedora Fedora Fedora Fedora Fedora
Ubuntu Ubuntu Ubuntu Ubuntu Ubuntu
Pop!_OS Pop!_OS Pop!_OS Pop!_OS Pop!_OS
Kali Kali Kali Kali Kali
Mint Mint Mint Mint Mint

Grup Üyeleri

Şube Öğrenci No Ad Soyad
1C B181210036 Mert Şenyıldız
1B B181210089 Fatih Abidin Silan
1C B181210060 Yasin Ağa
1B G191210401 Aslı Sakarya
1C B181210075 Abdulvahit Müjdat Camlı

Dosya ve Dizinler

  • bin : Derlenmiş Programın bulunduğu dizin
    • bash : Kabuk çalıştırabilir dosya
  • include : Library headerları'nın bulunduğu dizin
    • bash.h : Kabuk library header dosyası
  • lib : Derlenmiş library nesnelerinin bulunduğu dizin
    • bash.o : Kabuk derlenmiş library dosyası
  • src : Kaynak kodlarının bulunduğu dizin
    • program.c : Kabuk program kaynak kodları dosyası
    • bash.c : Kabuk library kaynak kodları dosyası
  • makefile : Proje makefile

Derleme Talimatları

Proje, derleyici olarak gcc kullanmaktadır.

  • MAKEFILE kullanarak derleme
  make 
  • Alternatif yöntem
 gcc -I ./include -c ./src/bash.c -o ./lib/bash.o
 gcc -I ./include -o ./bin/bash -s ./src/program.c ./lib/bash.o

Çalıştırma Talimatları

Kabuk başarılı bir şekilde derlendikten sonra

 ./bin/bash

Geliştirme Sırasında Karşılaşılan Zorluklar

Built-in showpid fonksiyonunun zombi process bırakmakdan gerçeklenmesi proje'nin geliştirilmesi sırasında karşılaşılan en büyük zorluktu.
Problem:
Kabuk tarafından oluşturulmuş en az 5 aktif yavru proses PID’sinin ekrana yazdırılması.
Çözüm:

  1. & sembolü eklenen tüm komutlar'ı arkaplanda çalıştıracak runBackground fonksiyonu yazıldı.
  2. Arkaplanda çalışacak processlerin çıkış yaptığında veya yok edildiğinde zombi'ye dönüşmemeleri için runBackground fonkisyonu içerisinde SIGCHLD sinyali yakalandı ve parent process tarafından beklenmesi sağlandı.
  3. Kabuk ilk açıldığında runBackground fonksiyonu ile arkaplanda 5 yavru process oluşturuldu.
  4. Bu processlerin PID'leri bir diziye eklendi.
  5. Daha sonrasında açılan tüm processlerin PID'leri de bu diziye dahil edildi.
  6. Showpid fonksiyonunda bu dizideki processlerin durumları kontrol edildi ve aktif olarak çalışmakta olan processler ekrana yazdırıldı.

Proje Geliştirilirken Kullanılan Kaynaklar

https://man7.org/linux/man-pages/man2/sigaction.2.html
https://linux.die.net/man/2/waitpid
https://www.cplusplus.com/reference/cstring/strtok/
https://www.qnx.com/developers/docs/6.5.0SP1.update/com.qnx.doc.neutrino_lib_ref/e/execvp.html
https://man7.org/linux/man-pages/man2/chdir.2.html
https://www.cplusplus.com/reference/cstring/memset/