Process ve Thread
Proses (process) yani diğer bi anlamıyla işlem bir işletim sistemi üzerinde herhangi bir dil ile kodlanmış ve bir compiler (derleyici) ile derlenmiş, daha sonra hafızaya yüklenerek işlemcide çalıştırılan programlara verilen isimdir.
Genel anlamda her program bir proses olarak düşünülebilir, ancak bir programın birden fazla prosesi olabileceği gibi her proses, yeni başka proceslerde üretebilir. İşletim sisteminin tasarımına göre değişmekle birlikte işlemler kendi adres alanında çalışırlar ve hafıza koruması uygulanır. Bu sayede bir işlemin, başka işlemlerin bilgisine erişmesi engellenmiştir.
İşlemler arası iletişim aynı bilgisayarda çalışan farklı programların haberleşmesini hedef alır, bu durum ağ üzerinde birbiriyle haberleşen bilgisayarlara benzetilebilir.
Proses Durumları

- New (Yeni): Yeni bir proses yaratılıyor
- Running (Çalışma): Prosese ait talimatlar işletiliyor
- Waiting (Bekleme): Proses herhangi bir olay için bekliyor
- Ready (Hazır): Proses CPU için bekliyor
- Terminated (Sonlanma): Proses işletimini tamamlıyor
Proses oluşturulurken ilk önce kimlik ataması yapılır. Sonra text alanı yüklenir. Proses çalışmaya hazır hale geldiğinde hazır (ready) kuyruğunun en sonuna geçer. Ready kuyruğundaki prosese sıra gelince CPU’ya gönderilir. CPU’daki çalışma anında çalışıyor (running) durumunda olduğunu gösterir. Timeout olduğunda tekrar ready durumua geçer. Timeout olmazsa proses CPU’dan çıkamaz. Herhangi bir kesme (interrupt) gelince de ready durumuna geçer. Eğer bir proses herhangi bir I/O işlemini beklerse bekleme (waiting) durumuna geçer. Proses herhangi bir I/O işlemi ya da olay gerçekleşene kadar waiting durumunda kalır, olay gerçekleştiğinde tekrar ready durumuna geçer. Prosesin ready durumundan running durumuna geçişi sevk etme (dispatch) olarak tanımlanır. Çalışmakta olan bir proses, işletiminin bitmesi durumunda CPU’nun yanı sıra genelde sistem içindeki tanımını ve varlığı da sona erer (terminated).
Thread (iplik) kavramı, aynı proses ortamında birden fazla iş yürütme imkanı sağlar. Bir prosesin çalışmaya başlaması ile birlikte bir thread oluşturulur ve bu proses içerisinde birden fazla iplik oluşturulabilir. Yaratılan iplikler aynı adres uzayında koşarlar. Her ipliğin kendine has program sayacı, saklayıcıları, yığını ve durumu (yok edilme, askıya alınma, önceliğinin değiştirilmesi) vardır. Bir iplikteki değişkeni aynı işlem tarafından üretilmiş bütün iplikler değiştirebilir veya okuyabilir.
Threadler iş parçacıkları olup, çoklu görevlerde senkranizasyon sağlamak için kullanılır. Her threadin farklı bir görevi vardır. Eğer bu threadler aynı anda aynı bölgeye girerse hatalar meydana gelebilir.
Her prosesin en az bir threadi vardır, prosesin çalışması için o thread gereklidir. Prosesi çalıştıran bu threade main thread denir. Diğer threadlere child thread ya da worker thread denir. Bir prosesin tüm threadlere durdurulsa bile main thread çalışmaya devam eder. Proses eğer sonlanacaksa önce bütün threadler sonlanmalıdır. Threadler prosesinin bütün kaynaklarına erişip prosesine ait her şeyi kullanabilirken, başka thread’in kaynağına erişemezler. Threadlere ait tüm bilgiler proses kontrol bloğunda vardır. Bir threadin oluşması prosesin oluşmasından daha kolaydır. Aynı şekilde yok edilmesi de.

