Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

RTOS nedir ?

Başlatan muhittin_kaplan, 12 Ocak 2011, 21:08:27

mufitsozen

Alıntı yapılan: bunalmis - 15 Kasım 2011, 12:59:59
Spin atma diye bir tabir var. Bu siz RTOS kullananlara tanıdık bir ifademi?

sayin @bunalmis eger kasdettiginiz "spinlock" tabiri ise, thread/taski re-schedule edilmesin, yada context-switch edilmesin diye loop icinde bir lock free edilsin diye donup duran loop'lara denir. Thread/task loop'da surekli lock free edilmismi diye baktigindan scheduler acisindan calisiyor gibi gozukur ve rescheduling yada context-switching overhead olmadan (vakit kaybetmeden) calisir. Fakat spinlock kullanilirken spinlockda gececek zamanin cok kucuk olmasi gerekir. Yani beklenen lock'u bekleyen butun threadlar bunu cok cok kisa bir sure icin kullanmalari lazim, yoksa kullanim amacindan cikar.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

z

Evet tam olarak bununla ilgiliydi.

Bir kilit açıkmı değilmi diye bakıp, eğer kilitli ise açılıncaya dek döngü içinde kiliti okuma olayında karşılaştım bu tabirle.

Peki burada sözü edilen kilide RTOS dünyasında özel bir ad veriliyormu?

Çünkü mutex ve semaphore hala benim için birer X.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

vsalma

mutex_pend(&lock)

dedik diyelim. Eğer lock kilitli ise burada takılı kalıyor. Yani bu fonksiyon scheduler ı çağırıyor. Lock un değerini soruyor eğer lock kilitli ise bu süreç devam etmiyor . Bekleme kuyruğuna giriyor. Bir dahaki schedular çağrısında (timer tick le olabilir veya başka bir sistem çağrısıyla olabilir.) kuyrukta bekleyen mutexlere bakılıyor. Açılmışsa bu sürecin devam etmesine izin veriliyor. Yani her bir schedular çağrısında kilit kontrolü yapılıyor. 

z

#48
Alıntı yapılan: vsalma - 15 Kasım 2011, 14:11:04
mutex_pend(&lock)

dedik diyelim. Eğer lock kilitli ise burada takılı kalıyor. Yani bu fonksiyon scheduler ı çağırıyor. Lock un değerini soruyor eğer lock kilitli ise hiç bir işlem yapmıyor. Bekleme kuyruğuna giriyor. Bir dahaki schedular çağrısında (timer tick le olabilir veya başka bir sistem çağrısıyla olabilir.) kuyrukta bekleyenlere bakılıyor. Açılmışsa bu işlemin devam etmesine izin veriliyor. Yani her bir schedular çağrısında kilit kontrolü yapılıyor.

Daha önce zaten yazmışsınız şimdi olaylar ard ardına gelişip şekillenince anladım.

Alıntı Yap
if (bayrak_kapildi == 0)
    .bayrak_kapildi = 1;   

işlemlerinin atomik olmaması. Bu işlemleri atomik yapmak için bayrak_kapildi  değişkenini atomik olarak tanımlamamız lazım. Bu değişkeni atomik olarak tanımlarız. Eğer bayrak_kapildi  sadece 1 veya 0 değerini alıyorsa buna mutex denir. Eğer çok değişken alıyorsa semaphore denir. Burada sadece bir örnek oldu. Başka kullanımlarıda var.


Semaphore, konusunu daha önce okumuştum oradaki anlatılanları da bu vesile ile anlamış oldum. Şimdi hem mutexi hem de semaphoru çekirdeğe ekleyebilirim.

Fakat şimdi de aklıma şu soru takıldı.

Ne zaman mutex ne zaman semaphore tercih edilir?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

vsalma

Mutexe binary semaphore da deniyor. sadece 1-0 değerleri alıyorsa flag imizdeki gibi mutex. Ama diyelim 3 sürecin girişine izin veriliyor bir kaynak için sonra gelen bekliyor ise bu semaphore. Semaphore un ilk değerine 3 atanıyor her gelen onu 0 değilse bir azaltıyor.  0 ise bir sürecin onu serbest bırakmasını (arttırmasını) bekliyor. Wikipedia da semaphore için şöyle bir örnek var.

Suppose a library has 10 identical study rooms, intended to be used by one student at a time. To prevent disputes, students must request a room from the front counter if they wish to make use of a study room. When a student has finished using a room, the student must return to the counter and indicate that one room has become free. If no rooms are free, students wait at the counter until someone relinquishes a room.


z

Kusura bakmayın çok soru soruyorum.

Doğru anladığımdan emin olmak istiyorum.

İki örnek vereceğim.

Birinci örnek fonk1 adındaki fonksiyonu kim kaparsa o çalıştıracak diğerleri ancak fonksiyon boşa çıkınca kapabilecek.

Bunun için fonksiyonun girişine bir mutex koyarım. Kilit açıksa kilitler ve fonksiyonu çalıştırır. Fonksiyonun çıkış noktasında da kilidi açar.
Fonksiyona girildiğinde kilit varsa fonksiyondan çıkar.

Burada fonksiyonu çalıştırıp çalıştırmamak hala kodun inisiyatifindedir. Fakat kilit varsa buna rağmen fonksiyonu koşturursa sistem sapıtır.

Olay böylemidir? Yoksa Kilit varsa task otomatik olarak Run durumundan Ready durumuna mı alınır?

Bir diğer örneğim de

Bir değişkenimiz var. Bu değişkeni tasklar istediği gibi değiştirebiliyor. Bu değişkenle işi olan task bir kilide bakıyor. Kilitli ise değişkene ellemiyor yada task Ready konumuna geçiyor.

Kilit açıksa kilitliyor değişkeni değiştiriyor işi bitince kilidi açıyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

vsalma

Alıntı yapılan: bunalmis - 15 Kasım 2011, 15:08:43
Kusura bakmayın çok soru soruyorum.

Doğru anladığımdan emin olmak istiyorum.

İki örnek vereceğim.

Birinci örnek fonk1 adındaki fonksiyonu kim kaparsa o çalıştıracak diğerleri ancak fonksiyon boşa çıkınca kapabilecek.

Bunun için fonksiyonun girişine bir mutex koyarım. Kilit açıksa kilitler ve fonksiyonu çalıştırır. Fonksiyonun çıkış noktasında da kilidi açar.
Fonksiyona girildiğinde kilit varsa fonksiyondan çıkar.

Burada fonksiyonu çalıştırıp çalıştırmamak hala kodun inisiyatifindedir. Fakat kilit varsa buna rağmen fonksiyonu koşturursa sistem sapıtır.

Olay böylemidir? Yoksa Kilit varsa task otomatik olarak Run durumundan Ready durumuna mı alınır?

Bir diğer örneğim de

Bir değişkenimiz var. Bu değişkeni tasklar istediği gibi değiştirebiliyor. Bu değişkenle işi olan task bir kilide bakıyor. Kilitli ise değişkene ellemiyor yada task Ready konumuna geçiyor.

Kilit açıksa kilitliyor değişkeni değiştiriyor işi bitince kilidi açıyor.

Est. 1. örnek için Kilit varsa task otomatik olarak Run durumundan Suspended durumuna alınır. Yani orada bekler. (Ne kadar bekleyeceği eğer açılmazsa devam edebileceği de var gelişmiş sistemlerde)

2. örnekte de geliyor kilitli ise askıda kalıyor. Taskın biri askıda kaldı diyelim. Kilidi almış task ta askıda kalıp 3. bir taskı bekliyorsa 1. mecburen 3. yü de beklemiş olur.

1. task ikinciyi bekliyor. 2. task ta 3.  bekliyor 3. task ta 1. yi bekliyorsa  :) deadlock oluşur.
   

z

Peki mutex ve semaphore özelliğini de çekirdek kodlara eklediğimizi varsayalım.
Çekirdeğe çizelgeleme işlemini de (scheduling) eklersek, artık RTOS yazdık diyebilirmiyiz yoksa eklenmesi gereken daha çok şey mi var?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muuzoo

@vsalma deadlock deyince daha önce okuduğum bir problem geldi aklıma.

Alıntı YapYuvarlak masa cevresinde oturan n>2 sayıda filozof vardır. Bu filozoflar ya makarna yerler ya da düsünürler. Makarna yemek icin 2 catal gerekir ve her iki filozof arasında 1 catal vardir. Şimdi efendim bu filozoflardan hepsi once sag taraflarındaki catalı alırlarsa ne olur, hicbiri yemek yiyemez, e ellerinde catal olunca düsünemezler de kalırlar oyle. ama mesela egitirsin filozofu, belki diger catal yerinde yoksa eline aldıgını bırakır, ama ya hepsi eline aldıgı catalı bırakırsa? o zaman yine yiyemezler dallamalar. hepsinin sırayla tıkınıp düsündükleri bi masada deadlock olmaz, livelock da olmaz.

ekşisözlükten alıntı. "dining philosophers problem" olarak geçiyor. Sanırım task iletişimi için güzel bir örnek.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

vsalma

Evet öyleymiş. Teşekkürler

Andromeda

Windows 95,xp,vista vs.... real time  mı?
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

z

Bu kapıştırma işini nasıl yapıyorsun?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Andromeda

iki tane flip flop devresi yapsam,çıkışlarına led...  biryerlerden tetiklenip aynı anda yanıp sönse...real time oluyor...
pic in a1 ve a2 çıkışına iki led bağlasam,"sözde aynı anda" yanıp sönse, bu real time olmaz...
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

mufitsozen

Alıntı yapılan: elek - 15 Kasım 2011, 20:38:50
iki tane flip flop devresi yapsam,çıkışlarına led...  biryerlerden tetiklenip aynı anda yanıp sönse...real time oluyor...
pic in a1 ve a2 çıkışına iki led bağlasam,"sözde aynı anda" yanıp sönse, bu real time olmaz...

neden? eger butun sistem bu kadarsa bence olur!
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mufitsozen

Alıntı yapılan: gerbay - 15 Kasım 2011, 20:23:30
hassas ölçümleri GPIO pinlerini farklı osiloskop kanallarına bağlayıp pulse layarak osiloskop üzerinden yapıyorum..

VxWorks ile FreeRTOS'uda bir denermisin (Hatta birde RTEMS ile. RTEMS'i ciddi merak ediyorum)? Sonuclarida bir tablo ile verebilirmisin?
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.