Yazan : Şadi Evren ŞEKER

İşletim sistemi tasarımında en önemli hususlardan birisi de bir işlemcinin verimli kullanılmasıdır. Şayet işletim sistemi çok işlemliliği (multiprocessing) destekliyorsa ve donanımsal olarak tek işlemci (CPU) bulunuyorsa yapılacak tek şey birden fazla işlemi hafızada bekletip sırayla çalıştırmaktır.

CPU çok hızlı olduğu için kullanıcı sanki bütün işlemler aynı anda çalışıyormuş gibi hissedebilir ancak için hakikati aynı anda bir işlemcide tek işlemin çalışıyor olduğudur.

Çalışan her program hafızaya yüklendikten sonra işlemcide çalıştırılmak için sıra beklemeye başlar, bu sıraya bekleme sırası (ready queue) adı verilir.

Bu yazının konusu olan işlemci zamanlama algoritmalarına göre de sırası gelen işlem bu bekleme sırasından alınarak görevlendirici (dispatcher) ismi verilen bir işlem tarafından CPU’ya gönderilir. CPU’da yine işlemci zamanlama algoritmasının izin verdiği kadar (ya bitene ya da belirli bir zaman geçene kadar) çalışan program ya biter ve hafızadan kaldırılır ya da tekrar bekleme sırasına bir sonraki çalışma için yerleştirilir.

Yukarıda basitçe birden çok işlemin tek işlemcide nasıl çalıştığı anlatıldı şimdi bu bekleme sırası ile işlemci arasında zamanlama ilişkisini kuran işlemci zamanlama algoritmalarını (cpu scheduling algorithms) tanımaya çalışalım.

Temel olarak 2 grupta incelenebilen bu algoritmalar:

Bu algoritmalar arasındaki temel fark işlemcinin bir işleme başladıktan sonra o işlemi bitirmeden başka işleme başlayıp başlamamasıdır. Örneğin işlemci sıradaki işlemi aldı ve bu işlem her ne olursa olsun 3ms sonra bekleme sırasına geri konulup yeni bir işlem alınacak dersek bu algoritmamız kesintili algoritma olmuş olur.

Tersine işlemci bir işi aldıktan sonra ne olursa olsun işi bitirip öyle bir sonraki işlemi alacak (işlem yarım kalmayacak, kesilmeyecek) dersek o zaman algoritmamız kesmeyen algoritmaya örnek olmuş olur.

Kesintili algoritmalara en meşhur örnek Round Robin algoritmasıdır.

İşlemci zamanlama konusunda çok meşhur En kısa iş ilk (shortest job first, sjf), ilk gelen ilk çıkar (first in first out), ilk gelen son çıkar (first in last out) gibi algoritmalar ise kesmeyen algoritmalara örnektir.

Ayrıca aşağıdaki zamanlama algoritmalarına bakabiliriniz:

Yorumlar

  1. Şadi Evren ŞEKER Article Author

    ikisi arasındaki fark tasarım farkıdır. Kullanılan alana göre tercih değişebilir. Örneğin kısa süreli işler veya kullanıcı ile iletişime giren (interactive) işler için bir zamanlama kullanacaksanız kesintili (preemptive) algoritma kullanmanız daha mantıklıdır. Çünkü kullanıcı bir iş çalıştırıp bütün işler bittikten sonra (saatler sonra) sonuç almak istemez.

    Buna karşılık yığın işler (batch process) veya arka planda çalışan uzun süreli işler için kesmeyen algoritmalar (non-preemptive) algoritmalar daha mantıklıdır. Örneğin toplamda 10 saat çalışacak 1000 adet iş olsun. Sizin için bu işlerin tamamının 10 saatte yapılması önemliyse (örneğin gece çalışan ve kullanıcı müdahalesi olmayan işler gibi) sürekli bu işleri değiştirmek, yarıda kesmek yerine birini çalıştırıp hepsinin bitmesini beklemek daha anlamlıdır.

    başarılar

hakan için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir