İşlem yönetimi

**İşlem yönetimi** günümüz işletim sistemlerinin önemli bir parçasıdır. İşletim sisteminin işlemlere yer alması, aralarında haberleşmeyi sağlaması onun önemli görevlerindendir. İşletim sistemi kaynakları işlemlere göre ayırmalı, işlemleri veri aktarımı ve paylaşımına uygun hale getirmeli, her işlemin kaynağını diğer işlemlerden korumalı ve işlemler arası senkronizyonu sağlamalıdır. Bunları yapabilmek için işletim sistemi her işlem için o işlemin mevkisini ve sahipibi tanımlayan ve işletim sistemini her veriği üzerinde kontrol uyguladığı bir veri yapısı sağlamalıdır.

## Çok aşamalı programlama
Çoğu modern işletim sistemlerinde, aynı anda bir programın bellekte yüklü birden fazla aşaması olabilir; örnek verirsek birden fazla kullanıcı çalıştırıyor olabilir, her kullanıcı programın belleğe yüklü ayrı kopyalarına sahip olur. Bazı programlara, bellekte sadece bir kopyasına sahip olmak mümkün olabilmektedir, birkaç kullanıcının paylaşılmış erişimi olabilir, böylece her biri aynı program kodunu kullanabilir. Böyle bir programa "evresel" denebilir. Her aşamadaki işlemci sadece bir programdan gelen direktifi çalıştırıyor olabilir ancak birkaç işlem bir süre boyunca her işlemi işlemciye aralıklara atayarak geriye kalanlar geçici olarak pasif olursa sürdürülebilir. İşlemlerin sayısı bir süre boyunca sürdürelibir, aynı zamanda eşzamanlı olarak da yürütülebilir.

Çok aşamalı programlama ya da çok aşamalı görevlendirme yapan işletim sistemi eşzamanlı olarak bir sürü işlemi sürdüren bir sistemdir. Çok aşamalı programlama, işlemcinin her işlemi bir süre için tahsis etmesi ve uygun anda ayırmasını gerektirir. Eğer işlemci bir işlemin sürdürülmesi sırasında ayırmışsa, tekrar başlatılması mümkün olduğunca kolay olacak şekilde yapılmalıdır.

İşletim sisteminin bir programın sürdürülmesi için tahsis ya da ayırma sırasında işlemcinin kontrolünü yeniden almasın için iki mümkün yol vardır:

# İşlem bir sistem çağrısı yapar(yazılım kesilmesi olarak da bilinir); örnek olarak sabit diskteki bir dosyaya erişme talebi sırasında bir I/O talebi oluşur.
# Donanım kesilmesi meydana gelir; örnek olarak klavyede bir tuşa basılır ya da bir zamanlayıcının süresi biter(baraj çok aşamalı görevlendirmesinde kullanılır)

Bir işlemin durması ve başka bir işlemin başlaması bağlam değişimi olarak adlandırılır. Çoğu modern işletim sisteminde işlemler birçok alt işlem oluşturabilir. Bu *[[İş Parçacığı|iş parçacıkları]]* kavramına girer. Bir iş parcağı alt işlem olarak görüntülenir yani bir ayırma, bir işlemin kodunun içinde sürdürülen bağımsız dizidir. İş parçacıklarının önemi dağıtılmış ya da istemci-sunucu sistemlerin dizaynında ve bir yazılımın paralel hesaplama sisteminde çalışmasında önemi artar.

## Çok aşamalı programlama verimi nasıl artırır?
Çoğu bilgisayar programıyla ilişkili işlemlerin arasında ortak özelliklerinin gözlenmesidir yani işlemci devirleriyle giriş/çıkış devirlerinin yer değiştirmesidir. İşlemci devirleri için gereken sürede; işlem yürütülür yani; işlemciyi meşgul eder. Giriş çıkış için gereken sürede işlem, işlemciyi kullanmaz. Bunun yerine ya giriş çıkışı gerçekleştirmek beklenecek ya da giriş çıkış yapılacaktır. Bunun bir örneği, diskteki bir veriyi okumak ya da yazmaktır. Çok aşamalı programlamanın gelişinden önce, bilgisayarlar tek kullanıcı sistemiyle işletilirdi. Bu tür sistemlerin kullanıcıları bilgisayarın bir kullanıcıya tahsis ettiğine ve işlemcinin kullanıcı veri girdiğinde ya da hata ayıklarken boşta olduğunun farkına çabuk vardılar. Bilgisayar mühendisleri makinenin tüm performansının farklı işlemlerin işlemciyi başka bir işlem giriş çıkış için beklerken kullanmasıyla artırılabileceğinin farkına vardılar. Bir birleşik programlama sisteminde; *N* kullanıcıları programları *t*1, *t*2, ..., *t**N*, ardından toplam zaman *t*uni bireysel yürütme zamanlarıyla *N* işlemine servis etmek için(ardışık biçimde) bütün *N* kullanıcıları böyle olacaktı:

: *t*uni = *t*1 + *t*2 + ... + *t**N*.

Bununla birlikte, her işlem hem G/Ç hem işlemci devirlerini tüketeceğinden, her işlemin işlemciyi kullandığı zaman tüm işlem yürütme zamanlarının küçük bir bölümü olacaktı. Bu yüzden *i* işlemi için:

:*t**i* (işlemci) ≪ *t**i* (yürütme)

olursa

*t**i* (işlemci) *i* işleminin işlemciyi kullandığı zaman ve
*t**i* (yürütme) ise işlem için toplam yürütme zamanı yani işlemci devirleri + giriş çıkış devirleri işlemin tamamlanmasından önce yapılacak.

Aslında, genelde bütün işlemci zamanının toplamı, *N* işlemi tarafından kullanılan, zamanın küçük bir bölümünü nadiren aşan zamandan yürütmeye herhangi bir işlem;

: \sum_{j=1}^{N} t_{j \, (\mathrm{islemci})} 

## İşlemin başlaması
Bir işlem şu şekillerde çalışmaya başlayabilir:
* Sistemi çalışmaya başlaması
* Kullanıcının yeni bir iş başlatması
* İşlem yaratma sistem çağrısının kullanılması

## Üç durumlu işlem modeli
Bir  aşağıdaki 3 durumdan birindedir. 
* ÇALIŞIYOR: İşlem işleniyor.
* HAZIR: İşlem, eğer MİB'de yer bulursa çalışmaya hazır.
* ASKIDA: İşlem, bir olayın olmasını (örneğin bir girdiyi) bekliyor.

## Dış bağlantılar
* Sunum