Bugün öğrendim ki: "Watchdog zamanlayıcısı", bir şey ters gittiğinde (örneğin, sıkıntıda olan bir Mars gezgini) bilgisayarın insan müdahalesi olmadan kendini yeniden başlatmasını sağlayan bir çipin adıdır.
Bilgisayar arızalarını tespit etmek ve onarmak için kullanılan elektronik zamanlayıcı
Bir bekçi zamanlayıcısı (WDT veya kısaca bekçi), bazen bilgisayarın düzgün çalıştığını kontrol eden zamanlayıcı (COP zamanlayıcısı) olarak adlandırılan, bilgisayar arızalarını tespit etmek ve onarmak için kullanılan elektronik veya yazılım zamanlayıcısıdır.[1] Bekçi zamanlayıcıları, geçici donanım hatalarının otomatik olarak düzeltilmesini kolaylaştırmak ve hatalı veya kötü amaçlı yazılımların sistem çalışmasını bozmasını önlemek için bilgisayarlarda yaygın olarak kullanılır.
Normal çalışma sırasında, bilgisayar bekçi zamanlayıcısını, zaman aşımına uğramasını veya zaman aşımına girmesini önlemek için düzenli olarak yeniden başlatır. Donanım hatası veya program hatası nedeniyle bilgisayar bekçi zamanlayıcısını yeniden başlatamazsa, zamanlayıcı zaman aşımına uğrar ve bir zaman aşımı sinyali üretir. Zaman aşımı sinyali, düzeltici eylemleri başlatmak için kullanılır. Düzeltici eylemler genellikle bilgisayarı ve ilgili donanımı güvenli bir duruma getirmeyi ve bilgisayarın yeniden başlatılmasını içerir.
Mikrodenetleyiciler genellikle entegre, çip üstü bir bekçi zamanlayıcısı içerir. Diğer bilgisayarlarda bekçi zamanlayıcısı, doğrudan CPU'ya bağlanan yakındaki bir çipte bulunabilir veya bilgisayarın şasisindeki harici bir genişletme kartında bulunabilir.
Uygulamalar
[düzenle]
Bekçi zamanlayıcıları, insanların ekipmana kolayca erişemediği veya hatalara zamanında tepki veremeyeceği gömülü sistemlerde ve diğer bilgisayar kontrollü ekipmanlarda yaygın olarak bulunur. Bu tür sistemlerde, bilgisayar, takılırsa yeniden başlatmayı başlatmak için bir insana güvenemeyebilir; kendi kendine güvenli olması gerekir. Örneğin, uzay sondaları gibi uzaktan kumanda edilebilen gömülü sistemler, insan operatörler tarafından fiziksel olarak erişilemez; hatalardan bağımsız olarak kurtaramazlarsa kalıcı olarak devre dışı kalabilirler. Robotlarda ve diğer otomatik makinelerde, kontrol bilgisayarındaki bir hata, bilgisayar kolayca erişilebilir olsa bile, bir insan tepki vermeden önce ekipman hasarına veya yaralanmalara neden olabilir. Bu gibi durumlarda genellikle bir bekçi zamanlayıcısı kullanılır.
Bekçi zamanlayıcıları ayrıca normal çalışan bir bilgisayarda yazılım yürütme süresini izlemek ve sınırlamak için kullanılır. Örneğin, güvenilmeyen kod bir güvenli alanda çalıştırılırken, koda ayrılan CPU süresini sınırlamak ve böylece bazı hizmet reddi saldırılarını önlemek için bir bekçi zamanlayıcı kullanılabilir.[2] Gerçek zamanlı işletim sistemlerinde, bir bekçi zamanlayıcısı, zaman açısından kritik bir görevin maksimum tahsis edilen süresi içinde tamamlanmasını sağlamak ve bunu yapamazsa, görevi sonlandırmak ve hatayı bildirmek için kullanılabilir.
Mimarisi ve çalışması
[düzenle]
Yeniden başlatma
[düzenle]
Bir bekçi zamanlayıcısının yeniden başlatılması işlemine genellikle bekçiyi tekmelemek[a] denir.[3][4] Elektronik bekçilerde, tekmeleme genellikle bir bekçi kontrol portuna yazılarak veya bir kayıttaki belirli bir bit ayarlanarak yapılır. Alternatif olarak, bazı sıkı bir şekilde bağlantılı[b] bekçi zamanlayıcıları, özel bir makine dili komutu yürütülerek tekmelenir. Bunun bir örneği, bazı PIC mikrodenetleyicilerinin talimat setinde bulunan CLRWDT (bekçi zamanlayıcısını temizle) komutudur.
İşletim sistemi çalıştıran bilgisayarlarda, elektronik bekçi yeniden başlatmaları genellikle bir aygıt sürücüsü aracılığıyla çağrılır. Örneğin, Linux işletim sisteminde, bir kullanıcı alanı programı, bekçi aygıt sürücüsüyle etkileşim kurarak, genellikle /dev/watchdog adresine sıfır karakter yazarak veya bir KEEPALIVE ioctl çağırarak bekçiyi tekmeler.[5] Bekçi donanımını kullanıcı alanı programlarından soyutlamak için hizmet veren aygıt sürücüsü, zaman aşımı süresini ve zamanlayıcının başlatılmasını ve durdurulmasını yapılandırmak için de kullanılabilir.
Bazı bekçi zamanlayıcıları yalnızca belirli bir zaman penceresi sırasında tekmeleri kabul eder. Pencere zamanlaması genellikle önceki tekmeye göre veya bekçi henüz tekmelenmediyse, bekçinin etkinleştirildiği ana görelidir. Pencere, önceki tekmeyi takiben bir gecikmeden sonra başlar ve daha fazla bir gecikmeden sonra sona erer. Bilgisayar, bekçiyi pencereden önce veya sonra tekmelemeye çalışırsa, bekçi yeniden başlatılmaz ve bazı uygulamalarda bu bir hata olarak kabul edilir ve düzeltici eylemi tetikler.[6]
Etkinleştirme
[düzenle]
Çalışırken bir bekçi zamanlayıcısının etkin olduğu, boştayken devre dışı olduğu söylenir. Güç açıldığında, bir bekçi koşulsuz olarak etkinleştirilebilir veya başlangıçta devre dışı bırakılabilir ve etkinleştirmek için harici bir sinyal gerektirebilir. İkinci durumda, etkinleştirme sinyali donanım tarafından otomatik olarak üretilebilir veya yazılım kontrolü altında üretilebilir.
Bekçi durumu diyagramları
Koşulsuz olarak etkinleştirilmiş bekçi
Etkinleştirme giriş sinyali olan bekçi
Otomatik olarak üretildiğinde, etkinleştirme sinyali genellikle bilgisayar sıfırlama sinyalinden türetilir. Bazı sistemlerde sıfırlama sinyali doğrudan bekçiyi etkinleştirmek için kullanılır. Diğerlerinde, sıfırlama sinyali geciktirilir, böylece bekçi sıfırlamayı takiben daha sonra bir zamanda etkinleştirilir. Bu gecikme, bekçi etkinleştirilmeden önce bilgisayarın önyüklenmesi için zaman tanır. Bu gecikme olmadan, bekçi zaman aşımına uğrar ve bilgisayar uygulama yazılımını (bekçiyi tetikleyen yazılım) çalıştırmadan önce sonraki bir sıfırlamayı başlatır ve sistem tamamlanmamış yeniden başlatmaların sonsuz bir döngüsünde sıkışır.
Tek aşamalı bekçi
[düzenle]
Bekçi zamanlayıcıları birçok konfigürasyonda gelir ve birçoğu konfigürasyonlarının değiştirilmesine izin verir. Örneğin, bekçi ve CPU aşağıdaki blok diyagramında gösterildiği gibi ortak bir saat sinyali paylaşabilir veya bağımsız saat sinyallerine sahip olabilirler veya bazı durumlarda bekçi hiç saat sinyaline sahip olmayabilir. Temel bir bekçi zamanlayıcısı, zaman aşımında genellikle CPU'yu sıfırlayacak tek bir zamanlayıcıya sahiptir:
Çok aşamalı bekçi
[düzenle]
İki veya daha fazla zamanlayıcı bazen, her zamanlayıcının bir zamanlayıcı aşaması veya kısaca bir aşama olarak adlandırıldığı çok aşamalı bir bekçi zamanlayıcısı oluşturmak için birbirine bağlanır. Örneğin, aşağıdaki blok diyagramı üç aşamalı bir bekçiyi göstermektedir. Tasarıma bağlı olarak, bu birden fazla zamanlayıcı ile veya tek bir zamanlayıcı ve ek mantık ile birden fazla zamanlayıcı taklit ederek uygulanabilir.
Çok aşamalı bir bekçide, yalnızca ilk aşama işlemci tarafından tetiklenir. İlk aşama zaman aşımında, düzeltici bir işlem başlatılır ve kademede sonraki aşama başlatılır. Her sonraki aşama zaman aşımına uğradığında, bir düzeltici eylem tetikler ve sonraki aşamayı başlatır. Son aşama zaman aşımında, bir düzeltici eylem başlatılır, ancak kademenin sonuna ulaşıldığı için başka bir aşama başlatılmaz. Genellikle, tek aşamalı bekçi zamanlayıcıları bilgisayarı basitçe yeniden başlatmak için kullanılırken, çok aşamalı bekçi zamanlayıcıları sırayla bir dizi düzeltici eylemi tetikler ve son aşama bilgisayarın yeniden başlatılmasını tetikler.[4]
Zaman aralıkları
[düzenle]
Bekçi zamanlayıcıları sabit veya programlanabilir zaman aralıklarına sahip olabilir. Bazı bekçi zamanlayıcıları, birkaç seçilebilir, ayrık değer arasından seçim yaparak zaman aralığının programlanmasına izin verir. Diğerlerinde, aralık keyfi değerlere programlanabilir. Genellikle, bekçi zaman aralıkları on milisaniye ile bir dakika veya daha fazla arasında değişir. Çok aşamalı bir bekçide, her zamanlayıcının kendi benzersiz zaman aralığı olabilir.
Düzeltici eylemler
[düzenle]
Bir bekçi zamanlayıcısı, maskelenebilir kesme, maskelenemez kesme, donanım sıfırlama, emniyetli durum etkinleştirme, güç döngüsü veya bunların kombinasyonları dahil olmak üzere çeşitli düzeltici eylemlerden herhangi birini başlatabilir. Mimarisi bağlı olarak, bir bekçinin tetikleyebileceği düzeltici eylem veya eylemler sabit veya programlanabilir olabilir. Bazı bilgisayarlar (örneğin, PC uyumluları) donanım sıfırlamasını başlatmak için darbeli bir sinyal gerektirir. Bu gibi durumlarda, bekçi genellikle gerekli sıfırlama darbelerini oluşturan dahili veya harici bir darbe üreteci etkinleştirerek bir donanım sıfırlamasını tetikler.[4]
Gömülü sistemlerde ve kontrol sistemlerinde, bekçi zamanlayıcıları genellikle emniyetli devreleri etkinleştirmek için kullanılır. Etkinleştirildiğinde, emniyetli devreler tüm kontrol çıkışlarını güvenli durumlara zorlar (örneğin, motorları, ısıtıcıları ve yüksek voltajları kapatır) böylece hata devam ederken yaralanmaları ve ekipman hasarını önler. İki aşamalı bir bekçide, ilk zamanlayıcı genellikle emniyetli çıkışları etkinleştirmek ve ikinci zamanlayıcı aşamasını başlatmak için kullanılır; zamanlayıcı zaman aşımına uğramadan önce hata düzeltilemezse, ikinci aşama bilgisayarı sıfırlar.
Bekçi zamanlayıcıları bazen sistem durumu bilgilerinin kaydedilmesini tetiklemek için kullanılır—bu hata kurtarmada faydalı olabilir[4]—veya hata ayıklama bilgileri (hatanın nedenini belirlemek için faydalı olabilir) kalıcı bir ortama kaydedilir. Bu gibi durumlarda, ikinci bir zamanlayıcı—ilk zamanlayıcı zaman aşımına uğradığında başlatılır—genellikle veri kaydının tamamlanması için yeterli zaman tanıdıktan sonra bilgisayarı daha sonra sıfırlamak için kullanılır. Bu, bilgilerin kaydedilmesi için zaman tanır, ancak kayıt işlemi başarısız olsa bile bilgisayarın sıfırlanmasını sağlar.
Örneğin, yukarıdaki diyagram iki aşamalı bir bekçi zamanlayıcısı için olası bir konfigürasyonu göstermektedir. Normal çalışma sırasında, bilgisayar zaman aşımını önlemek için düzenli olarak Aşama 1'i tetikler. Bilgisayar Aşama 1'i tetikleyemezse (örneğin, donanım hatası veya programlama hatası nedeniyle), Aşama 1 sonunda zaman aşımına uğrar. Bu olay, Aşama 2 zamanlayıcısını başlatır ve aynı anda, bilgisayara (maskelenemez bir kesme ile) bir sıfırlamanın yaklaşmakta olduğunu bildirir. Aşama 2 zaman aşımına uğrayana kadar, bilgisayar sistem durumu bilgisi, hata ayıklama bilgisi veya her ikisini de kaydetmeye çalışabilir. Son çare olarak, bilgisayar Aşama 2 zaman aşımı üzerine sıfırlanır.
Arıza tespiti
[düzenle]
Bir bekçi zamanlayıcısı, bilgisayarı onu tetiklemesini engelleyen felaket arızalarının otomatik olarak tespit edilmesini sağlar. Bununla birlikte, bilgisayarların tetiklemeyi engellemeyen ancak yine de bekçi denetimine ihtiyaç duyan daha az ciddi arıza türleri olabilir. Bunları desteklemek için, bir bilgisayar sistemi tipik olarak, bekçi zamanlayıcısının yalnızca bilgisayar sistemi işlevsel olarak değerlendirdiğinde tetikleneceği şekilde tasarlanır. Bilgisayar, bir veya daha fazla arıza algılama testi gerçekleştirerek sistemin işlevsel olup olmadığını belirler ve yalnızca tüm testler geçerse bekçiyi tetikler.[7]
İşletim sistemi ve birden çok işlem çalıştıran bilgisayarlarda, ince bir arıza durumunu tespit etmekte başarısız olabileceğinden ve sonuç olarak bir arıza durumu olsa bile bekçiyi tetikleyebileceğinden, tek bir basit test normal çalışmayı garanti etmek için yetersiz olabilir. Örneğin, Linux işletim sistemi durumunda, bir kullanıcı alanı bekçi demini, herhangi bir test yapmadan yalnızca periyodik olarak bekçiyi tetikleyebilir. Daemon normal çalıştığı sürece, sistem, çekirdek paniği gibi ciddi sistem çökmelerine karşı korunur. Daha az ciddi hataları tespit etmek için, daemon[8], kaynak kullanılabilirliği (örneğin, bellek, dosya tutamakları, CPU süresi), beklenen işlem etkinliğinin kanıtları (örneğin, çalışan sistem daemon'ları, mevcut veya güncellenen belirli dosyalar), aşırı ısınma ve ağ etkinliği dahil olmak üzere sistem durumunun çeşitli yönlerini kapsayan testler gerçekleştirebilir.[9]
Başarısız bir testin keşfi üzerine, bilgisayar, yazılım tarafından başlatılan bir yeniden başlatma ile sonuçlanan, yazılım kontrolü altında bir dizi düzeltici eylem gerçekleştirmeye çalışabilir. Yazılım yeniden başlatmayı başlatamazsa, donanım bekçi zamanlayıcısı—mevcutsa—zaman aşımına uğrar ve bir donanım sıfırlaması başlatır. Aslında, bu, yazılımın birincisi ve donanım WDT'nin son aşaması olduğu çok aşamalı bir bekçi zamanlayıcısıdır. Örneğin, bir Linux sisteminde, bekçi demini, bir donanım sıfırlamasına göre daha tercih edilebilir olabilen, dosya sistemlerinin güvenli bir şekilde sökülmesine ve yeniden başlatmadan önce hata bilgilerinin günlüğe kaydedilmesine izin veren, yazılım tarafından başlatılan bir yeniden başlatmayı gerçekleştirmeye çalışacak şekilde yapılandırılabilir. Bununla birlikte, daemon'un kendisinin arızalanmasına ve böylece yeniden başlatmayı başlatamayacak hale gelmesine neden olan bir arıza durumu için donanım WDT'nin sağladığı güvenceye sahip olmak esastır.[7]
Uygulama
[düzenle]
Bekçi zamanlayıcıları çeşitli şekillerde uygulanır. Bazı elektronik WDT'ler (örneğin, Analog Devices MAX6324), dijital bir saat sinyali olmadan çalışan doğrusal zamanlama devreleri kullanır. Diğer elektronik WDT'ler ve yazılım WDT'leri genellikle dijital sayaçları zamanlayıcı olarak kullanır ve düzgün çalışma için bir saat sinyaline dayanır.
Elektronik bekçiler
[düzenle]
Elektronik WDT'ler genellikle bağımsız bir entegre devre (IC) olarak veya daha karmaşık bir IC'nin bir parçası olarak uygulanır. Bazı bağımsız uygulamalar yalnızca bir WDT içerirken, diğerleri bir WDT'yi diğer işlevlerle (örneğin, besleme gerilimi denetleyicileri) ortak bir IC'de birleştirir.
Birçok mikrodenetleyici, dijital bir WDT'den ve WDT'yi kontrol etme ve izleme mekanizmalarından oluşan bir bekçi "modülü" içerir. Bu tür modüller genellikle ilgili kontrol ve durum kayıtlarını, yeniden başlatma tetikleyicilerini ("tekmeler") nitelendirme devrelerini ve zaman aşımı sinyali için yönlendirme kontrol mantığını içerir. Bazı mikrodenetleyiciler, dijital bir WDT yerine analog bir WDT sağlar. Örneğin, Texas Instruments'ın TMS470 mikrodenetleyicisi, bekçi aralığını programlamak için harici bir kapasitör ve direnç kullanan bir analog WDT'ye sahiptir.[10]
Dijital bekçiler
[düzenle]
Mikrodenetleyicilerde ve diğer karmaşık dijital IC'lerde, bir dijital WDT tipik olarak VHDL, Verilog veya başka bir donanım tanımlama diliyle yazılan bir tanımdan sentezlenerek örneklenir. Örneğin, aşağıdaki VHDL kodu basit bir WDT'yi tanımlar:
entity watchdog_timer is
port(
CLK: in std_logic; -- clock
INIT: in std_logic; -- initialize watchdog
KICK: in std_logic; -- restart timer
INTERVAL: in unsigned(31 downto 0); -- timer interval in clocks
TIMEOUT: out std_logic; -- timeout indicator
);
end watchdog_timer;
architecture behavioral of watchdog_timer is
begin
process(CLK)
variable elapsed: std_logic; -- timeout register
variable counter: unsigned(31 downto 0); -- remaining clocks until timeout
begin
if rising_edge(CLK) then -- upon rising clock edge
if INIT='1' then -- if watchdog is being initialized
counter <= INTERVAL; -- start timer
elapsed <= '0'; -- reset timeout indicator
elsif counter=0 then -- else if watchdog interval has elapsed
elapsed <= '1'; -- indicate timeout; timer is halted
elsif KICK='1' then -- else if watchdog is being kicked
counter <= INTERVAL; -- restart timer
else -- else
counter <= counter-1; -- advance timer
end if;
end if;
TIMEOUT <= elapsed; -- send register output to TIMEOUT
end process;
end behavioral;
Analog bekçiler
[düzenle]
Analog WDT'lerin bir tekme girişi ve zaman aşımı çıkışı vardır, ancak dijital elektronik bekçilerde bulunan saat giriş sinyali yoktur.
Devreler ve bileşenler analog bekçiler arasında büyük ölçüde değişir, ancak genel olarak, analog WDT'ler zamanlama işlevlerini tipik olarak kapasitör şarj oranlarına göre belirler. Örneğin, sağda gösterilen analog bekçi devresinde, elektrik akımı i yavaşça kapasitör C'yi şarj eder ve bu da VC geriliminin artmasına (sabit bir oranda yükselmesine) neden olur. Normal çalışmada, periyodik "tekme" darbeleri tekme girişine uygulanır. Her tekme, kapasitör C'nin deşarj olmasına ve böylece gerilim artışının yeniden başlatılmasına neden olur. Ancak, tekmeler durursa veya zaman içinde çok uzak aralıklarla yapılırsa, VC eşik gerilimi VTH'nin üzerine çıkar ve sonuç olarak gerilim karşılaştırıcısı zaman aşımı sinyalini belirtir.
Yazılım bekçileri
[düzenle]
Bazı yazılım bekçi zamanlayıcıları standart yazılım modülleri olarak uygulanır. Bunların örnekleri arasında, elektronik bir WDT'yi taklit eden ve Linux bekçi API'sına uyan "Softdog",[11] ve blok diyagramına GUI gösterimini sürükleyerek örneklenebilen yeniden tetiklenebilir tek atışlı bir zamanlayıcı olan MathWorks'ün Yazılım Bekçi Zamanlayıcısı bulunur.[12] Diğer yazılım WDT'leri genellikle belirli gereksinimleri karşılamak üzere özel olarak tasarlanır.
Her yazılım WDT'si, zamanın geçişini doğru bir şekilde izlemesine izin vermek için bir zaman referansına bağlıdır. Bu amaç için çeşitli mekanizmalar yaygın olarak mevcuttur. Bilgisayara ve kullanılıyorsa işletim sistemine (OS) bağlı olarak, bu tür mekanizmalar programlanabilir aralıklı zamanlayıcılar, çekirdek zamanlayıcıları, sistem saati ve zamanlanmış beklemeleri destekleyen senkronizasyon nesnelerini (örneğin, semaforlar) içerebilir.
Bir yazılım WDT'nin tasarımı, bekçi aralığının uzunluğu, WDT kullanımı için mevcut zaman referansları, CPU yükü, ilgili koşullar karşılandıktan sonra WDT'nin ne kadar çabuk tetiklenmesi gerektiği, bilgisayarın bir OS çalıştırıp çalıştırmadığı ve eğer öyleyse, WDT'nin kullanıcıda mı yoksa çekirdek modunda mı çalışması gerektiği gibi bir dizi faktörden etkilenebilir. Örneğin, yalın metal uygulamalarında (OS olmadan çalışan program), zaman referansları genellikle programlanabilir aralıklı zamanlayıcılara (PIT) sınırlıdır. Bu gibi durumlarda, WDT, aşağıda gösterilen akış diyagramına benzer bir şekilde bir PIT ile uygulanabilir:
Yukarıdaki örnekte, uygulama programı bekçiyi tetikleyemezse (PIT'yi yeniden başlatarak), PIT bekçi aralığının sonuna ulaşacak ve bir kesme isteği (IRQ) üretecektir. İlgili kesme hizmeti alt programı (ISR) daha sonra programlanmış G/Ç, sistem çağrıları veya diğer yazılım kontrollü işlemler yoluyla düzeltici eylem yapacaktır.
Ayrıca bakınız
[düzenle]
Komut kaybı zamanlayıcısı
Güvenli mod (uzay aracı)
Ölümcül zamanlayıcı
Güç açma zamanlayıcısı
Kalp atışı (bilgisayar)
Bağlantıyı sürdürme
Notlar
[düzenle]
Kaynaklar
[düzenle]