İş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

Yorumlar

Yorum Gönder

Bu blogdaki popüler yayınlar

Bilgem Çakır ile Röportaj (Deneyim Mühim…)

Bitirme Projesi 6 - Rapor - İkili Sınıflandırma (Binary Classification)