Algoritma Nedir ?

Başlatan muhittin_kaplan, 06 Ekim 2013, 10:46:36

Tagli

Erişimin dışarıdan bozulamaması anlamına geliyor. Örneğin 8 bitlik bir işlemci ile x = x + 1 işlemini yapacağımızı varsayalım. Eğer x 8 bitlik bir sayı ise (mesela char türünden) bu erişim atomiktir çünkü tek komutla yapılır. Ama x 16 bitlik bir sayı ise bu iş tek seferde yapılamaz. Önce küçük byte 1 arttırılır, ardından taşma biti kontrol edilir. Eğer taşma biti 1 ise büyük byte da 1 arttırılır. Bu da fazladan birkaç komut daha olacağı anlamına gelir. Diyelim ki 16 bitlik x'in küçük byte'ını bir attırdık ama taşma olacak (mesela x = 255 iken x = x + 1 dedik). Taşma olduğu için büyüğü de arttıracağız ama tam o sırada kesme geldi, ve kesme kodu x'i okudu. Bu noktada işler karışıyor. Kesme kodu okuduğunda küçük byte sıfırlandı ama büyük byte arttırılmadı. Bu durumda kesme kodu x'i 255 veya 256 değil, 0 olarak okur.

Not: Ben yazarken mufitsozen hocam da cevaplamış.
Gökçe Tağlıoğlu

muhittin_kaplan

Mufit hocam ben birsey anlamadim taniminizdan,

muhittin_kaplan

Atomic
Baska bir komut yada donanim isteginden dolayi kesilemeyen islemdir. dersek yanlis yapmis olmayiz sanirim

mufitsozen

#33
Alıntı yapılan: muhittin_kaplan - 25 Ekim 2013, 11:27:05
Mufit hocam ben birsey anlamadim taniminizdan,

maalesef tanim benim değil. Keske  o kadar alim olsaydim  :(

Herhangi bir isletim sistemi ile ilgili kitaba bakilirsa daha dogru olur (turkceye cevirirken anlam kaybi cok fazla oluyor)

Ben sahsen tanenbaum'un kitaplarini tercih ederim.



mesaj birleştirme:: 25 Ekim 2013, 11:34:13

Alıntı yapılan: muhittin_kaplan - 25 Ekim 2013, 11:31:29
Atomic
Baska bir komut yada donanim isteginden dolayi kesilemeyen islemdir. dersek yanlis yapmis olmayiz sanirim

prensip olarak dogru kabul edilebilir. Zaten picprojeyi ilgilendirecek mimarilerde bu tanim dogru kabul edilebilir.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

muhittin_kaplan

aslında başlığı açmamdaki sebep bunları konuşmak değildi.
programlamanın ne olduğunu bilmeden kod yazmaya başlıyoruz onu biraz sıraya sokmaktı.
böylede güzel oldu.

mufitsozen

Alıntı yapılan: muhittin_kaplan - 25 Ekim 2013, 11:45:12
...............
programlamanın ne olduğunu bilmeden kod yazmaya başlıyoruz onu biraz sıraya sokmaktı.
böylede güzel oldu.

cok haklisiniz, +100

Aslinda delik o kadar buyuk ki, neresinden baksak (yaklassak) hep icine dusuyoruz.
  :D

Tabii yinede su kitapi oku filan demekten hala imtina ediyorum. nedense hic kimsenin okumaya/arastirmaya vakti yok, ama herseyide hap gibi bilmek istiyorlar (ogrenmeden/uygulamadan)

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

muhittin_kaplan

O kodumu kullansam boylemi yapsam dan ziyade programlamayi bilmek gerek gerisi
İhtiyac duydugumda ogrenecegim komutlar dile ait kisitlar. Bugun float kullanamiyorken yarin kullanabiliyor oluyorum.

kantirici

Şimdi ustadlar kafam karıştı. @tagli hocam sizin verdiginiz örneği ele alalım. x=255 ve x++; komutu icara edilirken low byte 0 oldu high byte arttırılamadan kesme geldi. Bu durum olumsuzluğundan kurutulmak için değişkeni volatile mi tanımlamamız lazım??

Yoksa zaten bu durum derleyici tarafından algılanarak atomik olarak işlem görüp işlemi bitirp mi kesmeye gidiliyor? 8 bitlik bir mcu da yukarıdaki işin bitip bitmediği nasıl anlaşılıyor?

yamak

Alıntı yapılan: mufitsozen - 25 Ekim 2013, 11:19:37
atom maddenin bolunemiyen en kucuk parcasidir tarif olarak.

atomic erisimide (turkcesi biraz icat bir terim oldugu icin uzun uzun aciklamak lazim gelebilir) cok basit olarak,  kesintiye ugramadan bir hamlede (1 instruction) yapilan erisim denebilir.

ornegin i++;

  i degiskenini registira al,
  registiri bir arttir
  registiri i degiskenine yaz olarakda yapilabilir
yada
inc i

diyede yapilabilir. tabiiki, i degiskenin oldugu yere hw olarak (ornegin dma ile) erisim varsa vede buda cycle stealing gibi instruction fetch cycleda yapiliyorsa (yada uniprocessor değilde multi processor/cekirdek yada shared memory yada ... filan falan diye konu uzaaar gider)

daha iyi anlamak icin en azindan "critical section" aciklamalarini okumaniz tavsiye edilir
Hocam bu durumda değişkeni volatile olarak tanımladığımızda değişken direkt işlmecinin genel amaçlı registerlarından birinde mi saklanmış oluyo.Doğru anlamış mıyım?

Tagli

PIC için konuşursak, ++x'ten önce kesmeleri kapatıp, arttırımdan sonra kesmeleri tekrar açmak gerekir. volatile tek başına yeterli olmaz.

Bilgisayarda multi-thread uygulama yazarken ise mutex kullanımı gerekir. Arka planda süreç nasıl işliyor bilmiyorum. Araştırılırsa internetten yeterli bilgi bulunabilir sanırım.

Volatile bildiğim kadarıyla sadece bazı optimizasyonları kapatıyor. Yani değişkenin saklanma yeriyle ilgisi yok. Pek gerçekçi değilse de şöyle bir örnek verebiliriz: Örneğin arka arkaya b = a + b ve c = a + c işlemleri yapılacak olsun. Bu işi PIC ile yaparsak ASM kullanarak, a'yı bir kez W'ye atarız, ardından W'yi önce b ile toplayarak kendi üzerine yazarız, sonra da aynısını c için yaparız (a zaten W içinde olduğundan ikinci bir kez a'yı okumayız yani). Bu arada bir kesme gelip a'yı güncellerse, c = a + c işlemi a'nın eski değeri ile yapılmış olur. Veya a dediğimiz şey belki de PORTB register'ı ve biz girişlerin en güncel değerine göre işlem yapmak istiyor olabiliriz ve bu iki komut arasında fiziksel ortamdaki bir değişiklik sebebiyle a değişmiş olabilir. Volatile kullanılırsa a iki kez W'ye kopyalanır. Bunları örnek olarak yazdım, süreç daha farklı işliyor olabilir.

Bu arada pek çok register adı (Yoksa hepsi miydi? Unuttum) ilgili header dosyasında volatile olarak tanımlıdır.
Gökçe Tağlıoğlu

muhittin_kaplan

İlişkisel veritabanında VERI MODELI nedir ?

Tagli

Wikipedia'da böyle yazmış:
Alıntı YapVeritabanında asıl önemli kavram, kayıt yığını ya da bilgi parçalarının tanımlanmasıdır. Bu tanıma Şema adı verilir. Şema veritabanında kullanılacak bilgi tanımlarının nasıl modelleneceğini gösterir. Buna Veri Modeli (Data Model) yapılan işleme de Veri modelleme denir. En yaygın olanı, İlişkisel Model' dir (relational model), bu modelde veriler tablolarda saklanır. Tablolarda bulunan satırlar (row) kayıtların kendisini, sütunlar (column) ise bu kayıtları oluşturan bilgi parçalarının ne türden olduklarını belirtir. Başka modeller (Sistem Modeli ya da Ağ Modeli gibi) daha belirgin ilişkiler kurarlar.

Veritabanlarını az çok biliyorum ama terimlere çok aşina değilim. Ben veritabanı şemasına "Entity - Relationship (E-R) Diagram" deniyor diye öğrenmiştim.
Gökçe Tağlıoğlu

muhittin_kaplan

evet ilişkisel dir - eğer veritabanı diyebiliyorsak en azından onu desteklemelidir-.

nedir bu ilişkisel veri yapısı ? genelde duyulur ama pek bilinmez. örnek üzerinden açıklamaya çalışayım.

bir cihaz yapacaksınız ve (yada PC de program) personel bilgisi gibi birşey.
kaydetmemiz gereken bilgiler;
adı,soyadı,kimlik no, eşinin adı, çocuklarının adı ve araçlarının plakası olsun.

nasıl yaparız ?

bir tabloda hepsini kaydederiz değilmi ?
eğer öyle yaparsak kendini tekrarlayan bilgilerden dolayı (5 çocuğu olan personel için her çocuk kaydında diğer bilgileride yazmanız gerekir.)ya veritabanımız gereksiz şişer yada, bir araba için açtığınız alan 2. arabası olan için yetersiz kalır.

bunu aşmanın yolu her çoklu kayıt olabilecek alan için tablo oluşturup bunları birbirleriyle (kimlik no) ilişkilendirmektir.

mufitsozen

Alıntı yapılan: muhittin_kaplan - 25 Ekim 2013, 16:38:14
evet ilişkisel dir - eğer veritabanı diyebiliyorsak en azından onu desteklemelidir-.

nedir bu ilişkisel veri yapısı ? genelde duyulur ama pek bilinmez. örnek üzerinden açıklamaya çalışayım.

bir cihaz yapacaksınız ve (yada PC de program) personel bilgisi gibi birşey.
kaydetmemiz gereken bilgiler;
adı,soyadı,kimlik no, eşinin adı, çocuklarının adı ve araçlarının plakası olsun.

nasıl yaparız ?

bir tabloda hepsini kaydederiz değilmi ?


HAYIR!  ;)

Hemen uygulamamiza SQLite ekleriz!  ;D
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

muhittin_kaplan

SqlLite,SqlServer yada MySql Nasıl Çalışıyor ki Hocam ?