İşletim Sistemi — Process

smnszr
İyi Programlama
Published in
4 min readJul 23, 2020

Process çalışmakta olan bir programı ifade etmektedir. Aslında bir program ile Process arasındaki fark da bu noktada meydana gelir. Program bilgisayar tarafından yapılmasını istediğimiz talimatların hafızadaki gösterimi olarak düşünülebilir. Process olmadan herhangi bir işlem gerçekleştiremezler. Process ise bu talimatları gerçekleştiren işlem olarak düşünülebilir. Ayrıca processler tek bir işlemci (CPU) üzerinde birden fazla işlemciye sahipmiş gibi işlem yapabilmemize olanak sağlarlar.

Processler arasında “yazılabilen hafıza” paylaşımı yoktur. Yani bir process başka bir processin işlem yaptığı bir alanda doğrudan doğruya değişiklik yapamaz/yapmamalı. Processlerin aralarında haberleşmeleri (Inter-Process Communication (IPC)) için bazı özelleşmiş yapılar kullanılmaktadır. Bu aşamada senkronizasyon önemlidir ve programcının bunu sağlaması gereklidir. Senkronizasyonu sağlanmamış bir program önemli problemler çıkarabilir. Ve bu problemlerin onarılması güçtür. Bunun için processlerin çalışma mantığının kavranmış olması gereklidir.

Bir program içerisinde ana process işlerken başka bir process oluşturduğunuzda ana process’in özelliklerine eşdeğer özellikte bir process meydana gelir. Ancak bütün bu özellikler (Program Counter, Stack Pointer, Memory Allocation, Open Files) kendine özeldir. Örneğin oluşan yavru process ana process’in program akışında kaldığı yerden (Program Counter) devam edecektir. Aynı şekilde ana process de akışını sürdürecektir. (Tabi ki bu istenmemektedir. Asıl amaç programın parçalara ayrılıp farklı parçalarını aynı anda başka bir processe yaptırmaktır. Aynı programı iki farklı processin aynı anda gerçekleştirmesi anlamsız olacaktır. Bu kısımda da çeşitli senkronizasyon yöntemleri mevcuttur.) Başka bir örnek vermek gerekirse yavru process daha önceden ana process tarafından oluşturulmuş yerel değişkenlere de sahip olacaktır. Ancak bu yerel değişkenler yine sadece değişiklik yapan processe özeldir. Ve değişiklik diğer processleri ilgilendirmeyecektir.

Bir Process’i oluşturmak için UNIX sistemlerde işletim sisteminden “fork” sistem çağrısı yapılır. Windows’ta aynı işlem “CreateProcess” kullanarak gerçekleştirilebilir. Bu Sistem Çağrıları (System Calls) arasında küçük farklar olsa da genel itibariyle aynı işlemi gerçekleştirirler. UNIX sistemlerde bütün processler birbirinden türer (parent-child ilişkisi) ve her birinin kökü “init” processine dayanır. Windows sistemlerinde ise bütün processler hiyerarşik olarak eşittir.

Biraz da processlerin CPU kullanım durumlarından (Process States) bahsedelim.

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.

Referans : Modern Operating Systems, Andrew S. Tanenbaum, Herbert Bos

--

--