İşletim Sistemleri Günlüğüm-2 : PROCESS DURUMLARI (PROCESS STATES)

Aslında bu şema tam anlamıyla anlatmak istediğim konuyu
içerisinde barındıran ve sıklıkla kullanılan bir yapıdır.
Şimdi bilgisayarımızın tek bir işlemciye sahip olduğunu farz
edelim ve şemamızı anlattıklarını ifade etmeye çalışalım.
Durum 1 (Start):
Bir processin oluşturulması
aşaması “Start (Başlama)” durumu ile ifade edilmiştir. Ve daha önce de
belirttiğim gibi UNIX sistemlerde “fork” işlemi ile, Windows’ta ise “CreateProcess”
işlemi ile gerçekleştirilebilir. Peki bu işlemleri yapar yapmaz process
çalışmaya başlar mı? Tabi ki bu sorunun cevabı gözle görülür biçimde evettir. Göz
görmeyince gönül katlanır deyip cevabın “Bilemem” olması gerektiğini üzülerek
ifade ediyorum. Çünkü yalnızca bir tane işlemcimiz var ve işlemci aynı anda
yalnızca tek bir iş yapabilir. Bu durumda bir process oluştuğunda işlemcinin
uygun olduğu bir anı kollamak için “Ready (Çalışmaya Hazır)” durumuna geçer.
Durum 2 (Ready):
Uygun anı kollamak dediysem, öyle
her fırsat bulan process işlemciye yerleşemez. Bunu kontrol eden İşletim Sistemidir.
İşletim Sistemi işlemcini boşalmasıyla birlikte kontrolü ele alır ve kendisi
için tasarlanmış olan algoritmaya dayanarak işlemciye bir process atar. Bu
işlem için çeşitli algoritmalar tasarlanmıştır. Bu algoritmalara bizim oralarda
“Scheduling Algorithms” denir. Ve İşletim Sistemi işlemciyi paylaştırma
konusunda adil olmak zorundadır. Kullanıcıyı memnun da etmelidir. Öncelikli iş
varsa kıyak da geçmelidir. Yani ne şiş yanmalı ne de kebap… Belki bu konu
hakkında ilerleyen zamanlarda bir yazı yazabilirim. Konumuza geri dönecek
olursak eğer uygun koşullar oluşmuş ve işlemci boşalmışsa İşletim Sistemi
işlemciyi sıradaki process’e tahsis eder. Ve processimiz “Running (Çalışmakta)” durumuna
geçer.
Durum 3 (Running):
İşlemcisine
kavuşan işlem (process) işini yapmaya başlar. Tabi ki ne kadar müsaade edilmişse
o kadar çalışır. Sonuçta diğer processlerinde yapılması gereken işleri vardır.
Ama şunu da söylemem gerekir ki processler birbiriyle yarışırlar. Yani her biri
işlemciyi kullanıp işlerini bir an önce tamamlamak isterler. Bunun nedeni her
bir processin başka amaçlara hizmet etmesidir. Gel gör ki işlemci tam bir
adalet mekanizmasıyla korunmaktadır. Ve süresi dolan process işlemciden yaka
paça atılır. Ve “Ready” vaziyetine geri dönerler.
Vadesi dolan bir processin yaka
paça atılması olayı üzerine sayfalarca yazı yazılacak bir durum ki benim de
bu konudaki bilgim kısıtlı (İşte bana araştırılacak bir konu). Ancak bunun
donanımsal bir durum olduğunu belirteyim. Yani donanım process için bir zaman
tutuyor ve bu zaman bittiğinde processi defediyor. Sonuçta İşletim Sistemi de
bir process ve bir işlemci aynı anda iki processin işini göremez. Doğal olarak
yaka paça atma işini İşletim sistemi yapamaz. Çünkü işlemcinin içerisinde yaka
paça atılmak üzere duran bir process var zaten. Bu yüzden donanımsal bir yardım
söz konusu olmuştur.
Bir ihtimal
daha vardır ki bu bir process için yaka paça atılmaktan daha kötüdür.
Kullanıcıdan veya başka bir programdan bir girdi beklemek üzere “Blocked (Askıda)”
durumuna geçmek.
Durum 4 (Blocked):
Process
bu duruma bir input beklemek üzere gelmiştir. Ve bu input gelene kadar burada
bekleyecektir. “Bu input gelecek de, process “ready” konumuna geçecek de,
İşletim Sistemi insaf edip bu processi seçecek de, bu process tekrar işine
devam edecek. Ölme eşeğim ölme!” demeyin. Hele bir input gelsin, devamı çok
hızlı ya da adil bir şekilde gerçekleşecektir elbet. Bütün bu döngü
tamamlandığında ve process işini bitirdiğinde yahut çeşitli müdahalelerle
bitirmek durumunda kaldığında son duruma geçer.
Durum 5 (Terminated):
Bir processin
sona ermesi çeşitli yollarla gerçekleşebilir. Bunlardan en doğal olanı işini
bitirmesidir. Bu Unix Sistemlerde “exit” ile sağlanırken Windows’ta “ExitProcess”
ile sağlanır.
Veya geçici
(Error Exit) yahut geçici olmayan(Fatal Error) hatalarla karşılaşabilir. Bu durumlarda
da process vadesini doldurmuş olacaktır. Ve bu döngüden çıkacaktır.
Bunlara
ek olarak başka bir process veya kullanıcı tarafından bitirilebilir ki bizim oralarda buna
öldürmek diyoruz. Unix sistemlerde “kill” ile, Win32’de “TerminateProcess” ile
yapılabilmektedir.
Günlüğümün bu bölümüne dair hazırlayacağım diğer yazımda
Processler arası haberleşmeden bahsetmeye çalışacağım.
Sürçülisan etmişsem affola…
Referans : Modern Operating Systems, Andrew S. Tanenbaum, Herbert Bos
Referans : Modern Operating Systems, Andrew S. Tanenbaum, Herbert Bos
Çok teşekkürler.. gerçekten istifade ettim
YanıtlaSil