Önleyici Olmayan, Önleyici ve Seçici Önleyici Çekirdek arasındaki fark nedir?


Yanıtlar:


14

Önleyici bir çekirdekte, çekirdek modunda çalışan bir işlem, çekirdek işlevinin ortasındayken başka bir işlemle değiştirilebilir.

Bu sadece çekirdek modunda çalışan işlemler için geçerlidir, kullanıcı modunda bir CPU yürütme işlemi "boşta" kabul edilir. Bir kullanıcı modu işlemi çekirdekten bir hizmet istemek istiyorsa, çekirdeğin işleyebileceği bir istisna yayınlaması gerekir.

Örnek olarak:

Proses Ayürütür bir durum işleyici, işlem Bbir IRQ istek uyandırmak alır, çekirdek yerine geçer işlem Aile B(zorunlu işlem anahtarı). İşlem Abitmeden bırakılır. Aİşlemci CPU zamanı alıp almadığını zamanlayıcı daha sonra karar verir .

Önleyici olmayan bir çekirdekte, süreç Abitinceye veya gönüllü olarak diğer süreçlerin kendisini kesmesine izin vermeye karar verene kadar (planlı bir süreç anahtarı) tüm işlemci süresini kullanmış olurdu.

Günümüzün Linux tabanlı işletim sistemleri genellikle tamamen önleyici bir çekirdek içermez, hala kesintisiz çalışması gereken kritik işlevler vardır. Sanırım buna "seçici önleyici çekirdek" diyebilirsiniz.

Bunun dışında, Linux çekirdeğini (neredeyse) tamamen önleyici hale getirmek için yaklaşımlar var.


Macintosh Sistem 6 ve ilgili kod (ör. Sistem 7, Sistem 8 ve Sistem 9) önleyici değildi. Apple'ın MacOS X'e geçmesi de önleyici çoklu görevin tanıtımını da gördü.
Mei

çekirdek A sürecini B ile değiştirir (zorlamalı işlem anahtarı). -> İngilizce olarak, alternatif olarak A süreci önlendiği için (B süreci ile) cümle için söyleyebilir miyiz?
snr

2

önleme şudur:> İşletim sisteminin halihazırda planlanmış bir görevi daha yüksek öncelikli bir görev lehine önleme veya durdurma yeteneği. Programlama, bunlarla sınırlı olmamak üzere, proses veya G / Ç programlamasından vb. Biri olabilir, ancak bunlarla sınırlı değildir.

Linux altında, kullanıcı-alanı programları her zaman önlenebilir olmuştur: çekirdek, normal-saat işaretini kullanarak, diğer alanlara geçmek için kullanıcı-uzay programlarını kesintiye uğratır. Bu nedenle, çekirdek kullanıcı-uzay programlarının işlemciyi açıkça serbest bırakmasını beklemez (işbirlikli çoklu görevlerde olduğu gibi). Bu, bir kullanıcı-uzay programındaki sonsuz bir döngünün sistemi engelleyemeyeceği anlamına gelir.

Bununla birlikte, 2.6 çekirdeğe kadar, çekirdeğin kendisi önlenebilir değildi: bir iş parçacığı çekirdeğe girer girmez, başka bir iş parçacığının yürütülmesi önlenemedi. Bununla birlikte, çekirdekte bu önleme yokluğu, gecikme ve ölçeklenebilirlik ile ilgili çeşitli sorunlara neden oldu. Böylece, çekirdek önleme 2.6 çekirdekte tanıtıldı ve CONFIG_PREEMPT seçeneği kullanılarak etkinleştirilebilir veya devre dışı bırakılabilir. CONFIG_PREEMPT etkinse, kodun yerel kesmeleri devre dışı bırakması durumu dışında, çekirdek kodu her yerde önlenebilir. Koddaki sonsuz döngü artık tüm sistemi engelleyemez. CONFIG_PREEMPT devre dışı bırakılmışsa, 2.4 davranışı geri yüklenir.

Yeniden alıntı ve şu adresten biçimlendirilmiş: http://www.linuxquestions.org/questions/linux-general-1/pre-emptive-vs-non-pre-emptive-kernel-582437/


2.4 çekirdek neden önleyici değildi?
Sen

Daha iyi sor Linus Torvalds :)
Madhur Ahuja

1

Önleyici bir çekirdek, bir işlemin çekirdek modunda çalışırken önlenmesini sağlar. Önleyici olmayan bir çekirdek, çekirdek modunda çalışan bir işlemin önlenmesine izin vermez; çekirdek modu işlemi, çekirdek modundan çıkana, CPU'yu denetleyene veya gönüllü olarak kontrol edene kadar çalışır. Açıkça görüldüğü gibi, önleyici olmayan bir çekirdek, çekirdekte veri yapıları üzerindeki ırk koşullarından bağımsızdır, çünkü çekirdekte bir seferde sadece bir işlem aktiftir. Önleyici çekirdekler için aynı şeyi söyleyemeyiz, bu nedenle paylaşılan çekirdek verilerinin yarış koşullarından arınmış olmasını sağlamak için dikkatle tasarlanmalıdırlar. Önleyici çekirdeklerin SMP mimarileri için tasarlanması özellikle zordur, çünkü bu ortamlarda iki çekirdek modu işleminin farklı işlemcilerde aynı anda çalışması mümkündür. Önleyici bir çekirdek, gerçek zamanlı programlama için daha uygundur, çünkü gerçek zamanlı bir işlemin çekirdekte çalışmakta olan bir işlemi önermesine izin verir. Ayrıca, önleyici bir çekirdek daha duyarlı olabilir, çünkü bir çekirdek modu işleminin işlemciyi bekleme süreçlerine bırakmadan önce keyfi olarak uzun bir süre çalışması riski daha azdır. Elbette, bu etki bu şekilde davranmayan çekirdek kodu tasarlanarak en aza indirilebilir. Bu bölümün ilerleyen kısımlarında, çeşitli işletim sistemlerinin çekirdek içindeki önleme yönetimini nasıl yönettiğini keşfedeceğiz. bu etki, bu şekilde davranmayan çekirdek kodu tasarlanarak en aza indirilebilir. Bu bölümün ilerleyen kısımlarında, çeşitli işletim sistemlerinin çekirdek içindeki önleme yönetimini nasıl yönettiğini keşfedeceğiz. bu etki, bu şekilde davranmayan çekirdek kodu tasarlanarak en aza indirilebilir. Bu bölümün ilerleyen kısımlarında, çeşitli işletim sistemlerinin çekirdek içindeki önleme yönetimini nasıl yönettiğini keşfedeceğiz.

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.