RTOS nedir ?

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

z

#15
@Gerbay
Cok yabanci oldugum yeni bir konuyu ogrenirken acaip zorlaniyorum. Kafamda garip garip sorular beliriyor cevaplarini da hazirda bulamayinca hircimlasiyorum.

Bahsettigin anahtar kelime ile arama yaptim fakat anlayabilecegim basitlikte aciklama iceren dokumana ulasamadim. Belki bu cok sayida isimlendirmenin varligindan konu karmasikmis gibi duruyor.

Fakat eminim basite indirgenmis benzetmelerle RTOS'un ic dunyasi en kazma adamin bile anlayacagi hale getirilebilir.

Neyse simdilik sorunumu posta kutusu tabir ettigim bir structure kullanarak cozdum. Bunun RTOS camiasindaki adi ne bilmiyorum.

Asagidaki hikayeyi aynen uygulayacak kodlari ortak bir fonksiyon olarak yazdim. Dileyen task bu fonksiyonu cagirabiliyor.

Veri yollamak isteyen TASK, ortak kullanilan posta kutusunda Alici TASK'in rafina bakiyor, raf bos ise mektubunu birakiyor. Doluysa bu adam daha once yollanan mektubunu bile acmamis diyip yeni mektup atmiyor ve zamanini bir sonraki taska hediye hediyor boylece posta yollanmak istenen alici taskin islerini daha cabuk yapip posta kutusunu bosaltmasi icin ona kiyak gecilmis oluyor.

Alici TASK, veriye ihtiyac duydugunda posta kutusuna gidip sevgiliden mektup gelip gelmedigine bakiyor.... Gibi bir senaryo kurdum ve en azindan simdilik isim gecici de olsa cozuldu.

Eger Posta kutusu dolu ise ve gonderici, alicinin posta kutusuna yeni mektup koymasi gerekiyorsa cunku bir an once  yazmasi gereken mektuplar varsa alicinin posta kutusunu acmasini beklemek gibi luksu yoksa simdilik getirdigim cozum ise yaramayacak, bunu da ileri de ele alacagim.

Ancak soyle bir durum var.

ARM islemcinin "int latency"si soyle iyi boyle iyi deniyor ama, RTOS'da su da olsun bu da olsun denip cekirdek kodlari sisirildikce RTOS hantallasmaya basliyor ve acikcasi bu durumdan hic hosnut kalmadim.

Bence bu isleri software'de değil de hardware'e yaptirmak lazim.

Tasktan Taska gecis otomatik hardware tarafindan halledilecek, Tasktan taska veri aktarimi gene hardware tarafindan yapilacak vs vs.

Kesinlikle boyle cipler de yapilacaktir. Fakat neden simdiye kadar boyle bir cipler cikartmamislar anlamiyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

MC_Skywalker

RTOS için A ve R serisi çekirdeklerde durum belki çözülmüştür birde onlar bakmak lazım. A serisi çekirdekler doğrudan işletim sitemi çalıştırıyor.

Bu şimdilik beni çok ama çok aşıyor.


z

Aşan bir sey yok. Hazir RTOS kullanirsan isler gercekten kolaylasiyor sadece kullanacagin RTOS'un kitapciginda hangi fonksiyonlar var sadece onlari ogreneceksin.
Ben RTOS'un icine kafayı takdim o yuzden kafam karisik. Aslinda hatam, hazir RTOS'lardan birisini iyi kullanmayi ogrenip ardindan bu RTOS'un benzerini yapmak olmali.


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

z

Task senkronizasyonu ne demek oluyor?

Mesela

4 tane task var. Her bir task islemeye basladiginda her biri farkli bir is yapiyor olacak.

1 task digerlerine, hey tasklar isinizi gucunuzu birakin, haydi dedigimde hepiniz birden ledleri yakin diye anlamalimiyim?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Erol YILMAZ

#19
Sıralamalı işler vardır bazen,
Şu iş bitmeden ötekine başlanamaz gibi,

Bu işlerin takibi de farklı TASK larda ise diğer TASK ın işini bitirip haber verir,
diğeri devam eder.

z

Cok basit fakat, oyle bir proje sorusu sorun ki;

RTOSla bu proje yapilmak istendiginde RTOS'un olmazsa olmaz butun ozellikleri kullanilmak istensin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#21
Sanirim asil soruyu buldum.

RTOS oldugu iddia edilen bir sistemin RTOS olmadigini hangi yazilim parcacigiyla ispatlarsiniz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Erol YILMAZ

Alıntı yapılan: bunalmis - 13 Kasım 2011, 18:32:24
Sanirim asil soruyu buldum.

RTOS oldugu iddia edilen bir sistemin RTOS olmadigini hangi yazilim parcacigiyla ispatlarsiniz?

Görevler arası öncelik sıralaması ile anlayabiliriz mesela...

z

Ama böyle dersen ben bir şey anlamam ki. RTOS bilmeyen birisine soruyu anlaşılır kılmanız gerekiyor.

Mesela deyin ki bir led var. Bir buton var. Butona basınca led yanacak.... vs vs.

Mutex ve semafor ile ilgili soruya ihtiyacım var.

Öyle bir yazılım sorusu sorunuz ki, eğer ki soruyu çözersem, bak şurda mutex şurda da semafor kullanmışsın diyebilesiniz.

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

vsalma

#24
--Task 1
if (bayrak_kapildi == 0)
{
    .bayrak_kapildi = 1; //bayrağı 1. task kaptı. Ona göre iş yapılacak
    .
    .
    .
}

--Task 2
if (bayrak_kapildi == 0)
{
    .bayrak_kapildi = 1; //bayrağı 2. task kaptı. Ona göre iş yapılacak
    .
    .
    .

}

Ortak bir kaynak olsun. Onu hangi süreç ilk alırsa o kullanacak olsun. Birinci task galib geldi diyelim (bayrak_kapildi == 0) şartı sağlandı. Sonra henüz bayrak_kapildi = 1 yapılamadan context switching oldu. Diğer task devreye girdi. baktı bayrak kapıldı flag i 0. O da kaptı.
Bu durumda(race condition) iki süreçte kaynağı kendisinde zannediyor. Ve bu durum belkide çok ciddi bir hataya sebep olabilir. Buradaki sorun

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.

Bilmiyorum sorunuzu anlayabilmiş miyim?

vsalma

Alıntı yapılan: bunalmis - 14 Kasım 2011, 14:09:25
Ama böyle dersen ben bir şey anlamam ki. RTOS bilmeyen birisine soruyu anlaşılır kılmanız gerekiyor.

Mesela deyin ki bir led var. Bir buton var. Butona basınca led yanacak.... vs vs.

Mutex ve semafor ile ilgili soruya ihtiyacım var.

Öyle bir yazılım sorusu sorunuz ki, eğer ki soruyu çözersem, bak şurda mutex şurda da semafor kullanmışsın diyebilesiniz.

RTOS la yaptığınız her şeyi asm ve işlemciye hakimseniz rtos suz yapabilirsiniz. Örneğin bir kritik sistem yazılımı düşünün 20 kişilik ekip yazıyor olsun. Örneğin bir uçak yazılımı. Görevler arası senkronizasyon  ve öncelik yönetimi için yazacağınız kod gerçekten yapılan iş kodunu çok fazla büyütür ve anlaşılmaz kılar. Böyle sistemlerinde testi, bakımı zorlaşır. Modülerliği azalır. Yazılan kodların tekrar kullanılabilirliği azalır. O nedenle rtos ların avantajı var diye düşünüyorum.

controller

Bu mesajı yukarıda yazılanlardan bağımsız olarak "rtos nedir" e cevaben yazıyorum. Öncelikle şunu belirteyim, şimdiye kadar gerçek anlamda rtos kullanmamı gerektirecek bir uygulama olmadı. Bende çoğu kişi gibi birgün kullanmam gerekebilir diye teorik olarak çalışmış birisiyim. Ayrıca hobi olarak işletim sistemi tasarımı ile ilgileniyorum, bu açıdan rtos da diğer işletim sistemleri gibi ilgilendiğim konulardan. Mesajımda yanlış bildiğim konular olabilir, doğrusunu bilen arkadaşlar düzeltmek için uyarabilirler.

Öncelikle "gerçek zamanlı" ne demek ona bakalım. Elimizde aşağıdaki resimde görünen bir sistem olduğunu varsayalım. Bir adet 10 saniye zaman ayarlı bomba, bombanın gerisayacını (10, 9, 8, 7....) resetleyen bir giriş, ve bu girişe bağlı gpio su olan bir mcu.



Ben işlemci olarak 16F84 ü seçiyorum. Programıda ccs c ile yazacağım. Amacımız bombayı patlatmamak. Sadece main i yazacağım.

main()
{
while(1)
{
delay_ms(9000);
output_high(GPIO); // RESET
output_low(GPIO);
}
}


Gördüğünüz gibi sistem çok basit. Bombaya ve mcu ya aynı anda enerji verdiğimizi düşünürsek 9 saniye sonra yani bombanın sayacı 1 saniye gösterirken mcu bombanın sayacını resetliyor ve bomba tekrar 10 saniyeden geriye doğru saymaya başlıyor.

Donanımsal bir arıza olmadıkça yukarıdaki sistem sonsuza kadar sorunsuz çalışacak ve bomba hiçbirzaman patlamayacaktır.

İşte yukarıda örneğini verdiğimiz bu sistem "gerçek zamanlı (real time)" bir sistemdir. Yani sistemin akışında kötü sürpriz, kararsızlık veya zaman aşımından dolayı bombanın patlaması mümkün değil. Mcu nun her 9 saniyede bir bombayı resetleyeceği gayet açık ve garantidir.

Bir diğer konuda "real time" ın anlamının sıklıkla kullanılan "çok hızlı" demek olmadığıdır. Buradaki real time dan kasıt zamanlamaların kesin değişmez olmasıdır.

Yani ben yukarıdaki devrede kullandığım 16F84 e 1Mhz kristalde taksam, 100Mhz kristalde taksam mcu yine her 9 saniyede bir bombayı resetleyecektir. Mcu hızı ancak yardımcı (yan) etken olabilir.

Şimdilik bu kadar, zamanım olursa ilerki zamanlarda diğer konulara da değinebilirim.

Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

Okan AKÇA

kücük mclarda yapmak pek mantıklı gelmiyor bana rtos  ile yazmak icin insan cok zorlanıyor anck kesin yapılması gereken iş ise rtos örnegin yapay kalp makinası kalbin ritminde bir bozulma olursa nasıl komaya giriyorsak makinada  zamanlamalarda 1ms bile saparsa sıkıntı yaratabilir rtos başlı basına bir konu bence

z

Peki bir projeyi tasklara nasıl bölüyorsunuz?

Mesela LCD taskı, seri port taskı, hesaplama taskı gibi mi düşünüyorsunuz yoksa ne nasıl parçalıyorsunuz?

Tek işlemciye projeyi kodlar gibi tek bir taska da uzun uzun kod yazıyormusunuz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Andromeda

yukarıdaki bombayı rtos olmadan patlatmamaya çalışırsak ne yapmamız lazı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"