Download as pdf or txt
Download as pdf or txt
You are on page 1of 29

İskenderun

Teknik
Üniversitesi

Fakülte: Mühendislik ve Doğa Bilimleri Fakültesi


Bölüm: Bilgisayar Mühendisliği Bölümü
Ders: İleri İşletim Sistemleri
Dönem: 2020 – 2021 (Güz)
2.
Öğretim üyesi: Dr. Öğr. Üyesi Mehmet SARIGÜL Hafta
● Günümüz bilgisayarları eş zamanlı olarak bir çok görevi yerine
getirmektedir. Modern işletim sistemleri bilgisayar üzerinde
çalışan her yazılımı birer proses olarak görür. Kullanıcı
bilgisayarını başlattığında birçok proses arkaplanda halihazırda
çalışmaya başlar.
● Bir proses arkada mail trafiğini izlerken başka bir proses
bilgisayarı virüslerden korumak için sistem taraması yapıyor
olabilir. Kullanıcı aynı zamanda tarayıcı programları ile o anda
web üzerinde gezinmekte, yada bir CD/DVD yazdırıyor
olabilmektedir.
● Bütün bu işlemlerin eş zamanlı başarılı bir biçimde çalışması
işletim sisteminin prosesleri doğru bir biçimde yönetmesi ile
mümkün olur.

Prosesler
● Birçok prosesin eş zamanlı çalışmasına gereksinim
duyulması çok işlemcili sistemlerin ortaya çıkmasına
sebep olmuştur.
● İşletim sistemi bir işlemci üzerinde çalışıran prosesi
1/100 sn ya da 1/1000 sn gibi zaman aralıkları ile
değiştirir. Bu da kullanıcıya herşeyin aynı zamanda
çalıştığı ilüzyonunu yaşatır.
● Çok işlemcili sistemlerde ise birden fazla işlem gerçek
anlamda farklı işlemciler üzerinde eş zamanlı olarak
çalışmaktadır.

Prosesler
● Proseslerin hangi işlemciyi ne kadar süre kullanacağına
karar vermek kullanıcı için zor bir iştir. İşletim sistemi
bazı konseptler ile bu konuda en etkili yönetimi
sağlamaya çalışır.

Prosesler
● Bu modelde bir bilgisayar üzerinde çalışan tüm yazılımlar
sıralı bir proses listesi halinde tutulur. Her bir proses için
aşağıdaki veriler saklanır:
● Program sayacı
● Yazmaçlar (Registers)
● Değişkenler

Proses Modeli
● Bu konsepte göre her bir proses kendi sanal işlemcisine
sahiptir, oysa gerçek işlemci aslında bir çok prosesi hızlı
geçişler yaparak ardışıl olarak çalıştırmaktadır.
● Bu hızlı anahtarlama işlemine çoklu programlama adı
verilir.

Proses Modlei
● İlk figürde belleğe yüklü 4 farklı program olduğu
görülmektedir. Her birinin kendine ait bir akışı vardır ve
diğerlerinden bağımsız olarak çalışmaktadır. Her bir program
çalışırken onun program sayacı gerçek(fiziksel) program
sayacına yüklenerek o programın çalıştırılması sağlanır. Son
figürde proseslerin işlemci üzerindeki çalışma durumu
görülmektedir.

Proses Modeli
● İşlemci üzerinde prosesler arası geçiş yapılırken yarım kalan
prosesin program sayacı belleğe yazılırken yeni prosesin
program sayacı fiziksel olarak yüklenir. Her proses işlem
yapacak zamana sahip olur ama tek bir zaman anında işlemci
üzerinde tek bir proses çalışmaktadır.

Proses Modeli
● Burada fikir aslında şu şekildedir. Bir proses ne
olduğundan bağımsız olarak çalıştırılacak kodu, girişi
verisi, çıkış verisi ve durumu olan bir yapıdır.
● Bir işlemci birden çok proses arasında proseslerin hangi
zamanda ve ne şekilde çalıştırılacağına karar veren bir
anahtarlama algoritması kullanılarak paylaştırılabilir.

Proses Modeli
● Bir proses aşağıdaki durumlarda yaratılır:
● Sistem başlangıcı
● Bir proses tarafından sistem çağrısı ile başka bir proses
oluşturulması
● Kullanıcının talebi ile yeni bir proses oluşturulması
● Toplu bir iş akışı başlatılması (batch job)

Proses Yaratma
● UNIX tabanlı işletim sistemlerinde yeni bir proses
yaratmak için “fork” sistem çağrısı kullanılır. Bu çağrı
çağıran prosesin birebir aynısı olan yeni bir proses
oluşturur. Anne ve çocuk proses aynı hafıza imajına, aynı
açık dosyalara, aynı çevresel katarlara(string) sahiptir.
● Genellikle çocuk proses “exec” sistem çağrısını çağırıp
kendi hafıza imajını değiştirir ve yeni bir program
çalıştırır.

Proses Yaratma
● Windows işletim sisteminde ise “CreateProcess” çağrısı
ile yeni bir proses oluşturulur. Bu çağrı hem yeni prosesi
yaratır hem de ilgili programı belleğe yükler. Bu çağrı
çalıştıracağı programı, bazı parametreleri, güvenlik
seçeneklerini, kontrol bitlerini, öncelik bilgilerini,
pencere bilgilerini ve yeni prosesin işaretçisini içeren 10
tane parametre alır.
● Buna ek olarak Win32 api’si prosesler ve işleyişleri ile
ilgili 100den fazla farklı fonksiyon barındırmaktadır.

Proses Yaratma
● Prosesler aşağıdaki konullarda sonlanır:
● Normal sonlanma (olağan)
● Hatalı sonlanma (olağan)
● Ölümcül Hata (olağan dışı)
● Başka bir proses tarafından öldürülme (olağan dışı)

Prosesin Sonlanması
● Normal: Çoğu proses kendilerine atanmış işlemleri bitirdikten
sonra sonlanırlar. Sonlanma işleminde işletim sistemine bunu
bildirmek için sistem çağrısı yaparlar. Bu sistem çağrısı UNIX
için exit(), Windows için exitprocess()’tir.
● Hata: Burada proses bir hata ile karşılaşır ve sonlanır. Program
içerisindeki herhangi bir hatadan kaynaklı olabilir.
● Ölümcül hata: Proses ölümcül hata durumuna sebebiyet
verdiği için zorunlu olarak sonlandırılır.
● Başka bir proses tarafından sonlandırılma: Bir proses işletim
sistemi üzerinden sistem çağrısı kullanarak başka bir prosesi
sonlandırabilir.

Proses Sonlanması
● Bazı sistemlerde bir proses yaratıldığında anne proses ve
çocuk proses ilişkili bir halde bulunurlar. Çocuk proses
kendisi de yeni prosesler oluşturabilir.
● UNIX tabanlı sistemlerde bir proses ve ailesi bir grup
oluşturur. Kullanıcı klavye üzerinden bir sinyal
yolladığında bu sinyal proses grubunun tüm fertlerine
iletilir. Her proses bu sinyali işlemek ya da görmezden
gelmek konusunda kendi karar verir.

Proses Hiyerarşisi
● Windows OS’ta bunun aksine böyle bir hiyerarşi yoktur.
Tüm prosesler eşittir.
● Yeni bir proses oluşturan anne proses bu prosesin id’sini
alır, başka proseslere geçirebilir. Bu da üst alt ilişkisini
bozar.

Proses Hiyerarşisi
● Bir proses 3 farklı durumda bulunabilir:
– Çalışıyor (Halihazırda CPU üzerinde çalışıyor)
– Hazır (CPU üzerinde çalışmayı bekliyor)
– Bloklanmış (Dışarıdan bir olayın gerçekleşmesini bekliyor)

1 Çalışıyor 2

Bloklanmış Hazır

Proses Durumları 4
● 4 geçiş durumu mümkün olabilir.
– 1. Proses giriş beklediği için blok duruma geçer
– 2. Zamanlayıcı yeni bir prosesi seçer
– 3. Zamanlayıcı bir prosesi hazır durumuna
alır 1 Çalışıyor 2
– 4. Beklenen giriş gelir. 3

Bloklanmış Hazır

Proses Durumları
● 1. Geçiş proses dışarıdan bir bilgi bekleme durumuna
geçtiğinde ve işlemci üzerinde bir işi kalmadığında olur.
● 2. ve 3. geçişler zamanlayıcının anahtarlama
durumlarında gerçekleşirler. Zamanlayıcı istediği işlemci
üzerindeki prosesi belleğe yazıp hazır durumuna
alırken(2) bir diğer prosesi işlemci üzerine alarak
çalışıyor duruma geçirir(3). Bu zamanlama işlemlerinin
nasıl yapılması gerektiği ile ilgili bir çok farklı
zamanlayıcı algoritması bulunmaktadır.

Proses Durumları
● 4. geçiş ise ilgili prosesin beklediği giriş gerçekleştiğinde
olur. Bu proses hazır duruma alınır ve zamanlayıcının
kendisini işlemci üzerine almasını bekler.

Proses Durumları
● İşletim sistemi bütün çalışan prosesleri yönetmek için
“Proses tablosu” adı verilen yapılardan oluşan bir dizi
tutar. Burada her proses için bir kayıt tutulur.
● Bu kayıt üzerinde proses ile ilgili önemli bilgiler tutulur.
Bunlar; prosesin durumu, program sayacı, hafıza kaplama
durumu, açık dosyaları, işlemci zaman bilgileri ve
prosesin işlemesi için gerekli tüm bilgilerdir.

Proses Yönetimi
● Bazı konseptleri tam anlayabilmek için bazı kod
örneklerine bakılabilir.
– Hatalı paralellik
– Standart paralellik
– Seri paralellik
– Katil proses
– Zombi proses
– Öksüz proses

Sistem Programlama
• #include <stdio.h>
• #include <unistd.h>
• main()
• {
fork();
execl(“hello”, “hello”, NULL , NULL );
printf(“I am parent process.”);
• }

Hatalı Paralellik
• #include <stdio.h>
• #include <unistd.h>
• main()
• {
int pid = fork();
if (pid==0)
execl(“hello”, “hello”, NULL , NULL );
else
printf(“I am parent process.”);
• }

Standart Paralellik
• #include <stdio.h>
• #include <sys/types.h>
• #include <sys/wait.h>
• #include <stdlib.h>
• #include <unistd.h>
• main(){
pid_t pid;
int status;
pid = fork();
if (pid==0){ execl(“hello”, “hello”, NULL , NULL );}
else{waitpid(pid, &status, 0);printf(“I am parent process.”);}}

Sıralı Paralellik
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
main(){
pid_t pid; int status; pid = fork();
if (pid==0){ printf(“I am child process”);
sleep(5); printf(“I woke up”);}
else{ kill(pid, SIGKILL);
waitpid(pid, &status, 0);
printf(“I killed my child.”);}}

Katil Proses
• #include <stdio.h>
• #include <sys/types.h>
• #include <stdlib.h>
• #include <unistd.h>
• main()
• { pid_t pid;
pid = fork();
if (pid==0) exit(0);
else
sleep(30); }

Zombi Proses
• #include <stdio.h>
• #include <sys/types.h>
• #include <stdlib.h>
• #include <unistd.h>
• main(){
pid_t pid; pid = fork();
if (pid==0){ sleep(5);
printf(“where is my mom?”);}
else printf(“I am parent process.”); }

Öksüz Proses
Ders Sonu

You might also like