Çoklu görev nasıl çalışır


15

Bir işletim sisteminin iç işleyişi hakkında tamamen bilgim yok, ancak birçok işlevin yaklaşık davranışını az çok tahmin edebiliyorum. Yine de anlayamadığım bir şey, çoklu görev.

Teorik olarak, işletim sistemi, çalışan çeşitli programlara küçük aralıklar için CPU'ya göre zamanı yönetir. Ama bu nasıl belli değil gerçekten çalışıyor.

İşletim sisteminin programımı başlatmak istediğini varsayalım. Makine kodu, belirli bir adresten başlayarak RAM'de bir yere yüklenir. Sanırım bu adrese bir atlama yapılmalı, kodumun yürütülmesine izin verilmeli. Ancak bu şekilde, işletim sistemi geri atlayana kadar kontrolü geri alamaz.

Temel olarak, bu işi yapmanın sadece iki yolunu hayal edebiliyorum, ancak ikisi de gerçekten uygun görünmüyor:

  • İşletim sistemi, gerçekleştirmek istediğim makine talimatlarını okuyabilir ve doğrudan yürütmek yerine taklit edebilir. Bunun nasıl çalışacağını bilmediğim için kasıtlı olarak belirsizim, ama programı önemli ölçüde yavaşlatacak gibi görünüyor.

  • Alternatif olarak, bir sistem çağrısı yapana kadar işletim sistemi bekleyebilir. O anda kontrolü yeniden kazanır ve ne kadar süredir çalıştığımı kontrol edebilir ve zaman paylaşımını yapabilir. Bu işe yarayabilir, ancak sistem çağrılarını içermeyen uzun bir hesaplama yapabileceğim ve her şeyi bir süre asabileceğim için güvenilir görünmüyor.

Yani, her iki mekanizmanın da çok iyi işlemediği görülüyor. Çoklu görev gerçekte nasıl yapılır?


Tahmininiz tam olarak doğru olmasa da, belirttiğiniz sorun evet: "Sistem çağrılarını içermeyen uzun bir hesaplama yapabilir ve her şeyi bir süre asabilirim."
jhocking

Aranacak bir anahtar kelime:interrupt
SK-logic

Evet, ama kesmeyi kim başlatıyor? Kodum yürütülüyorsa, işletim sisteminin bir INTtalimat yürütmesi mümkün değildir . Bir şey hala benim için gizemli
Andrea

@Andrea, harware saati bir kesintiyi tetikliyor. Bu kadar basit. en.wikipedia.org/wiki/Scheduling_%28computing%29
SK-logic

Tamam, şimdi anlıyorum. Bu nedenle, doğru anlarsam, sadece işletim sisteminde uygulanabilecek bir şey değil, donanım tabanlı bir özelliktir.
Andrea

Yanıtlar:


21

İşletim sistemi, her birkaç mikrosaniyede (veya sistem hızına bağlı olarak milisaniye) tekme yapacak bir zamanlayıcı programlar. Bu zamanlayıcı donanım kesintisini yükseltir, bu da CPU'nun şu anda yaptığı şeyi durdurmasına, tüm içeriğini yığına dökmesine ve kesme kontrolörü tarafından sağlanan adres tarafından belirtilen kesme rutinini işlemesine neden olur. Bu rutin, daha sonra hangi çalıştırma işleminin tekrar başlatılması gerektiğine karar vermek için yığını ve diğer çeşitli değişkenleri inceleyebilir. Aynı işlemse, kesme rutini basitçe geri döner. Farklıysa, yığının ilgili kısımları kaydedilir ve daha önce kesilmiş bir işlemin içeriği ile değiştirilir, böylece kesme rutini geri döndüğünde bu işlem devam eder. Biraz zaman geçmesi dışında,

Bu (modern CPU'lar için) olanların ÇOK ÇOK basitleştirilmiş bir versiyonudur, ancak prensibi açıklar. İşletim sistemi tarafından kontrol edilen bu kesintilere ek olarak, genellikle olay işleyicilerine bağlı olan ayrı kesme yordamlarıyla işlenen harici olayların (fare, klavye, seri bağlantı noktaları, ağ bağlantı noktaları, vb.) Neden olduğu kesintiler de vardır.

Çoğu zaman süreç / görev / bağlam değiştirme, harici kaynakların kullanılabilirliğine de bağlıdır. Genellikle depolamadan veri gerektiren (yani RAM'de olmayan) bir işlem, isteği bir kuyruğa yerleştirir, donanım kesintisi için isteğin sunulduğunu belirten bir olay işleyicisi ayarlar ve denetimi görev zamanlayıcısına bırakır (çünkü bekleme noktası). Yine, gerçekte neler olup bittiğinin çok basitleştirilmiş bir açıklaması, ancak bu cevabın amaçlarına hizmet etmelidir.


5

Sistemden sisteme değişir.

Önleyici olmayan çoklu görev sistemlerinde (orijinal Oberon veya orijinal Apple Macintosh gibi), işletim sistemi periyodik olarak tüm görevleri "yok eder" ve onlara çalışma fırsatı verir. Görevlerin birlikte güzel oynaması bekleniyor. Yapacakları biraz iş varsa, bunu yaparlar ve işletim sistemine geri dönerler. Bir görevin yapmak için BÜYÜK bir parça varsa, onu küçük parçalara ayırması ve her sorgulandığında küçük bir parça çalışması beklenir.

Donanım kesintileri (disk sürücüsü DMA tamamlamaları, seri bağlantı noktası kesintileri, ne var) kesme yordamlarının çalışmasına neden olur. Bu kesme rutinleri, görev bir sonraki çalıştırıldığında yapılacak işleri görevlerine bildirebilir.

Önleyici olmayan çoklu görev sistemlerinde, bir kesintinin meydana gelmesi veya gerçekleşmemesi, kesinti rutini bittikten sonra hangi görevin çalıştığını etkilemez.

Önleyici çoklu görev sistemlerinde, bir kesme rutininin bir programlama değişikliğini zorlaması mümkündür. Geleneksel bir robin önleyici çoklu görev sisteminde, periyodik bir zamanlayıcı kesintisi tam olarak bunu yapar. Zamanlayıcı kesintisi patlar, zamanlayıcı kesme rutini, kesme görevinden geri dönüş komutunun çalışan görev yerine işletim sisteminin önleyici programına geri dönmesini sağlamak için biraz kara büyü yapar ve işlemciyi geçerli görevden uzaklaştırır ve (OLASI) ) başka bir göreve vermek. Bu noktada başka bir görev çalışmaya hazır değilse, geçerli görev işlemciyi yeniden alır ve yalnızca biraz zaman kaybeder.

Önleyici çoklu görev, bir çok sorun yaratabilir. Muteksler ve kritik bölümler ve ölümcül kucaklamalar ve öncelikli ters çevirmelerle ilgili tüm bu sinir bozucu şeyler ... ve işlemci uyarılmadan sizden uzaklaştığında ortaya çıkar. Tüm bunları, işletim sistemine nitrogliserin karıştırmanın ortasında olduğunuzu ve işlemciyi sizden hemen ayırmanın, sunucu odası tabanının ortasında büyük bir sigara içme sanal deliği ile sonuçlanacağını söylemek için kullanmanız gerekir.


İşlemci uyarı yapmadan sizden uzaklaştırılırsa ne kötü olabilir? Sanırım kayıtlarda aynı değerlerle işlemcinin kontrolünü tekrar alacaksınız. Bunun sadece hesaplamanızı tutmaktan farkı nedir?
Andrea

@Andrea: Karşılıklı dışlama ve kritik bölümler, işlemciyi kritik bir anda kaybetmemekle ilgilidir. İşleminizde kilitli bir şey varsa ve işlemciyi kaybederseniz, işlemciyi tekrar alana kadar bir şey kilitli kalır. Bu sorunlara neden olabilir.
John R. Strohm

@Andrea İşlemcinin kontrolünü tekrar ele geçirirsiniz ve başka bir işlem kullanmak üzere olduğunuz hafıza ile uğraşmış olabilir.
user253751

4

CPU'yu kesmek için zamanlayıcı kesintileri bilgisayar donanımı tarafından üretilebilir. Bu şekilde, İşletim Sistemi tarafından kullanılan zamanlama algoritmasına bağlı olarak OS, geçerli programınızı veya bağlam anahtarınızı çalıştırılmaya hazır başka bir programa yürütmeye devam edip etmeyeceğinize karar verebilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.