[Çözüldü] Merak ettiklerim

Başlatan MetinErsin, 09 Ağustos 2016 - 12:35:35

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

MetinErsin

Ben programlamaya c# java öğrenerek başladım c# ve .net ile  uğraştım. O da çok değil ama genel konuları biliyorum sayılır. Alt seviye programlama yapabilmek için c öğrenmeye karar verdim. Zaten programlamayı bilen bir kişinin öğrenmesi uzun zaman almıyo. Ama ben hangi kaynaktan çalışırsam çalışayım özel konular öğrenemedim. Yani diğer programlama dillerinde ne yapılıyorsa c de de onu yapmayı öğretiyor kaynaklar genelde. C ye özel pek bir şey yok yani alt seviye pek * bir şey yok (pointerlar hariç). Şu konuları öğrenmek istiyorum bunlar için internetten veya kitap olarak bir kaynak önerirseniz sevinirim. İngilizce olması sıkıntı değil. okuduğumu anlayabilecek seviyedeyim.
1. İleri seviye c konuları nelerdir? Daha da açarsam ben ileride bu konularda iş sahibi olsam nelerle uğraşıcam. Neleri bilmem gerekecek iş bulabilmek ve adam gibi bir proje yapabilmek için.
2.İşletim sistemleri nasıl yazılıyor ve nasıl çalışırlar? Mesela bir işletim sistemi yazmaya kalksam neler bilmem gerek.(tek başına yazılmaz ama olsun)
3. Gömülü sistem programlama nedir? Gömülü sistem programlama için hangi kaynakları önerirsiniz. Şunu da belirteyim bu konu hakkında hiçbir fikrim yok. ama ben bu dalda yürümek istiyor gibiyim.
4. Mesela ben c kullanarak bilgisayarın usb portundan seri veya paralel portundan nasıl bilgi alıcam bunu bile bilmiyorum. Araştırdım hep ama c# ile örnekler çıkıyo.

Amenofis

Özel konudan kasıt nedir? O yazdıklarını hiçbir C kaynağı sana öğretmez, hepsi spesifik konular.

İşler şöyle yürüyor. Sen o özel konuyu zaten biliyorsundur. Sonra düşünürsün bu problem hangi dille daha kolay çözülür diye. Belki de küçük bir kısmı için C uygundur, gerisi için yüksek seviye bişeyler kullanırsın.

C/c++ bazen zorunlu da olabiliyor. Mesela elektroniğe merak saldın, bişeyleri kontrol etmek istiyorsun. Çinden 3 liraya alacağın bir kontrölör işini görebilir ama bunu programlamak için c# ya da java kullanmanın imkanı yok çünkü üzerinde en fazla birkaç KB ram bulunan bir alet üzerinde sanal makine çalıştıramazsın. Öyle bir dil kullanmalısın ki bu küçücük donanım üzerinde bile rahatça çalışabilsin. İşte C sana bu imkanı verir.

bugra9

Mesela bir işletim sistemi yazmaya kalksam neler bilmem gerek.

Aşağıdaki konuları bildiğin sürece kendi işletim sistemini yazabilirsin.
- Scheduling: Gerek cpu olsun gerek başka bir kaynak, bu kaynaklara gelen talepleri nasıl karşılayacağını ayarlaman lazım. Örneğin işlemciyi kullanmak isteyen 5 işlem var. İşlemciyi hangisine kullandıracaksın? Birisine kullandırmaya başlattığında biteseye kadar mı izin vereceksin yoksa belirli bir süre mi kullandıracaksın? vs. vs. Bu kararları verebilecek bir algoritma oluşturmalısın.

- Race Conditions: Bazı kaynaklar vardır aynı anda sadece bir işleme izin verilir. Çünkü biri yazarken başka biri okumaya çalışırsa hatalı sonuçlar çıkabilir. Bunun için bu kaynakların aynı anda sadece birisi tarafından kullanıldığını garanti altına almak için algoritma oluşturmalısın.

- Deadlocks: Diyelimki a ve b adında iki kaynağın var ve aynı anda bir işlem yapılabiliyor. Bir uygulama a kaynağına istekte bulundu ve aldı. Başka bir uygulama da b kaynağına istekte bulundu ve aldı. Şimdi İlk uygulamanın çalışması için b kaynağına da ihtiyacı ve ikinci uygulamanında a kaynağına ihtiyacı olsun. ilk uygulama a kaynağına eriştikten sonra b kaynağına erişmek istedi ama erişemedi çünkü b kaynağı dolu. Bundan dolayı b kaynağının boşalmasını bekledi. Aynı şekilde 2. uygulama da b kaynağına eriştikten sonra a kaynağına talepte bulundu ama alamadı ve boşalmasını beklemeye başladı. Bu iki uygulama sonsuza kadar birbirlerini beklerler ve bu çok ciddi bir sorundur. İşletim sistemi bu durumun yaşanma olasılığını düşürmek için algoritma üretirler. Ayrıca bu duruma düştükten sonra kurtarmak için de algoritmaları vardır. Eğer hiçbir şey yapamıyorlarsa halk arasında söylenen ismiyle windowsda mavi ekran, linux sistemlerinde siyah ekran gösterilir ve sistem kilitlenir.

- Bellek Yönetimi: İşletim sistemlerinin amacı tüm uygulamaları birbirinden soyutlamaktır. Bellek yönetiminde uygulamalar birbirlerinin alanlarına girmemelidir. Bunun için sanal bellek ve adres kullanır. Örneğin bir uygulama bellekte 0000 adresine bir şey yazdı ve başka bir uygulama aynı adrese başka bir şey yazdı. Yazacağın algoritma her uygulama için bellekte bir blok yer ayırmalı. Uygulama bir adres verdiğinde o uygulamanın bulunduğu blok göz önüne alınarak sanal adresten gerçek adres elde edilip gerekli yere yazılmalı ya da gerekli yerden okunmalı.

Ayrıca yüksek hızla çalışan bellek ile takas alanı gibi düşük hızda çalışan disk benzeri ortamların beraber kullanımı da planlanmalı. Hızlı erişim için algoritma, çok kullanılan verileri diskten belleğe taşımalı.

- Dosya Yönetimi: Verileri diskte hangi yapıda tutacağını ve nasıl yönetileceğini ayarlamalısın. (ext4, ntfs vs.)

Bunlar en temel işletim sistemi yapılarıdır ve olmazsa olmazlar. Geri kalanlar ise sistemini daha gelişmiş yapar. Bunlar belleğe direk erişim, sistem çağrıları, grafiksel kullanıcı arayüzü, ağ yönetimi, güç yönetimi vs. vs.

harun252525

eğer daha derine inmek istiyorsanız bence yapacağınız en önemli şey başkaların kodlarını incelemek. örneğin bir açık kaynak kodlu bir yazılımı inceleyebilirsiniz. bu arada programlama aynı satranç gibidir herkes satranç bilebilir ama herkes satrancı iyi oynayamaz bunun için tecrübe gerekir. tecrübede nasıl kazanılır sorusunada. bu işlerin ehli insanların yaptıklarını incelemek en güzel cevap olur sanırım. çünki satranç tada ustalaşmamızı sağlayan büyük satranç oyuncularının bizlere vermiş olduğu taktik tecrübelerdir. biz onlardan yardım isteyerek, onları izleyerek, araştırarak birçok şey öğreniriz bu şekilde derine ineriz. bu satrançtada böyledir programlamada'da. bazı gördüğünüz kodlar okadar estetik mükemmel gelebilirki işte ozaman insan hayrete düşüyor. ben bunu nasıl düşünememişim, bunu öğrenmem çok iyi oldu gibisinden laflar söylüyor kendine.
Kod Yazmak Bir Şiirdir.

MetinErsin

Çok sağolun bir de 4. soruya cevap gelirse çok güzel olur.

harun252525

nasıl araştırdınız bilmiyorum ama muhtemelen cevabı ingilizce kaynaklarda vardır. olmamasına ihtimal veremiyorum doğrusu çünki ingilizce kaynaklarde tonlarca bilgi var programlama için.
Kod Yazmak Bir Şiirdir.

MetinErsin

Aynn daha iyi araştırınca buldum.

afeser

Alıntı yapılan: MetinErsin - 10 Ağustos 2016 - 19:13:07
Çok sağolun bir de 4. soruya cevap gelirse çok güzel olur.

https://www.google.com.tr/search?client=ubuntu&channel=fs&q=c+how+to+read+and+write+to+serial+port&ie=utf-8&oe=utf-8&gfe_rd=cr&ei=EjG0V8POLqbY8AeWg5CYCQ#channel=fs&q=c+how+to+write+and+read+from+serial+port hocam google üzerinden aradığımda bayağı çıktı. İlk sitede de direk adam kendi programını paylaşmış.

Bir de c ile uzun zamandır uğraşmıyorum ama çıkış ve girişleri dosya gibi kabul ediyordu. Mesela yazıcı işlemleri için yazıcıyı dosya gibi kullanıyorduk. Belki seri-paralel portlar için de aynı olabilir.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 17 Ağustos 2016 - 12:46:39

Düzenleme: Zaten bulmuşsunuz  :D

Alıntı yapılan: MetinErsin - 11 Ağustos 2016 - 08:46:15
Aynn daha iyi araştırınca buldum.
Gelecek illa ki gelecek, önemli olan kimin getirdiği...

TheSpace

Çözülmüş ama ben yine de yazmak istiyorum. Veri yapıları ve algoritmalar diye bir dünya var. Pointer olmadan asla düşünülemeyen bir dünya. Rıfat Çölkesen diye bir büyüğümüz var onun kitabı güzeldi. Ona bir bak istersen C dilinin gücünü hissediyorsun :D