Forum: D Programlama Dili RSS
D ile işletim sistemi
Sayfa:  önceki  1  2  3  4  sonraki 
acehreli (Moderatör) #31
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 7308
zafer:
saf D ile (yani extern(C) felan olmadan) yazılmış bir örneği var mı bunu öğrenmek istiyorum? Görmek ve denemek isterdim.

Sanmıyorum çünkü grub gibi boot loader'larla uyumlu olmak şart. Kernel'i boot loader alıp belleğe yerleştiriyor ve işletmeye başlıyor. İşletmeye başladığı noktada da extern(C) olan bir main bekler.

Ali
Avatar
Salih Dinçer #32
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Merhaba Zafer,

Aslında D'yi seviyorum ifadesi içinde gizli bir eleştiri var. Çünkü eksikliklerinin farkındayım. Gülü seven dikenine katlanır ya. Belki de eksiğinin en başında, bu dili çok iyi bilsen de iş bulamayışımız olabilir...:scared:

Aslında alt düzey ile çok da kafa yormamak lazım. Neden mi? Şimdi bir işletim sistemi TCP/IP'nin bütün katmanlarına hakim mi, değil! Kimi katmanlardan donanımlardaki yazılımlar görevi üstleniyor. Yani Cem Yılmaz'ın dediği gibi "burada yapılmışı var!"...:)

Linux Kernel'ı da dünyanın ... harikalarından biri olarak görüyorum; her ne kadar falanca kurum bunu miras listemize almayı hiç bir zaman düşünmese bile. Kernel, tamamen C dili ile yazılmıştır ki bazı durumlarda Assembly'e başvurulmuş. Eee, elimizde bunun yapılmış (harikası) varken D'de işletim sistemi (daha doğrusu Kernel'a) ne gerek var şimdi? Hatta günümüzdeki bazı programcılar, temel bir çok öğeyi geçmiş (öğrenme lüzumu bile görmemiş) ve nedense her şeyi bir internet uygulaması olarak görmüştür. Peki soruyorum, internet nedir?

Tabii ki alışık olduğumu tanımından ziyade, kullanıcıya ulaşan en son nokta (belki de dünyanın başka bir harikası!) olduğunu belirtmek için bu soruyu sordum. Düşünsenize siz veritabana giden veriyi işleyen bir uygulama yazıyorsunuz ve bir de bunu kullanıcıya sunan başka bir uygulama; gerisine de karışmıyorsunuz:

  • falanca ağ yolları üzerinden,
  • hangi sunucuya,
  • sunucudaki hangi işletim sistemine,
  • işletim sisteminden veri tabanına,
  • alınan bilgi kaçıncı işlemciye,
  • oradan ethernet arabirimine,
  • buradan hangi IP adresine,
  • istemcinin bilgisayarındaki hangi uygulamaya,
  • uygulamanın etkin olan kaçıncı ID'deki kopyasına,
  • kopya uygulamanın hangi miras alınan sınıfına,
  • sınıftaki hangi üyeye...

Evet, belki de yukarıdaki listede aklıma geleni yazdım. Ancak emin olun, bu listeyi herhalde 10 ile 100 ile ve belkide 1000 ile çarpmak gerekir. En basit haberleşme yöntemi olan duman iletileri bile atmosferin o an ki koşullarına bağlı bir şekilde haberleşme sağladığını düşünürseniz; biz programcıların elektronlar (1/0'lar) ile verdiğimiz bu mücadele akıl almaz boyutta. O yüzden uygulama ve sunum katmanları gibi son aşamalara hakim olmak verimli olmamızı sağlayacak.

Şimdi size çok gereksiz bir bilgi vereceğim: E²PROM nasıl çalışır...

Bu bilgi konuyla belki de çok alakasız ama donanım katmanlarını düşünürken aklıma gelmiş olmalı. Belki de sizin için, her şeyin temelini (elektronların mücadelesi) anlatan güzel bir bilgi olabilir. Hoş her an cebimizde taşıdığımız USB belleklerde bile aşağıda anlatacağım olayların benzeri gerçekleşmekte, tabi daha modern bir yapıyla...

ROM (Read Only Memory) bellek birimini hepimiz biliyoruz olmalıyız. Tıpkı bir sigorta kutusu gibi bazı yollar açık devre (akım akmaz / 0 bilgisi) ve bazıları ise tersi. Bir de PROM'lar vardı ki bir kereliğine programlanabiliyordu. Buna en iyi örnek ilk çıkan CD-ROM'lar olabilir. Sırada, elektrik ile programlanabilen ve silinebilen E²PROM (EEPROM) bellekler var ki CD-RW'ye çok benzese gerek. Ama arada bir şeyi unuttuk; hatırlayan vardır: İlk çıkan EPROM'ları UV ile silebiliyorduk ve bunu yapabilmek için tümdevre (integrated) üzerinde mercekli küçük bir cam pencere vardı. Bir nevi CD'lerde kullandığımız LASER yerine başka bir dalga boyu ile veriyi temizliyor (tıpkı bir giysiyi ütüleyip düzleştiriyor) ve yeni bilgi yazılabilir (kırıştırılabilir) hale getiriyorduk. İşte biz bu ara geçiş türüne (EPROM), bir zamanlar, nasıl olurda küçük yongalar (chip) içine verilerimizi emanet ettiğimizi ve elektrik olmasa bile uzun süre muhafaza ettiğini anlatmaya çalışacağım.

Bir oda düşünün ve elektronları da iki eli, iki gözü olan biz insanlar gibi farz edin! Bu odanın tek bir kapısı var ve içinde de ilgi çekici hiç bir şey yok. Biz elektronları, ne hikmetse, bu kapının önünde tıpkı Türkiye'deki meşhur kuyruklar gibi sıraya sokmayı başarmışız. Belki de elektronlar, içeride onlar bir ikram verilmeyi umuyordur...:)

Elektronların akması için bir elektriğe ihtiyacımız var ve akım eksi ( - )'den artıya ( + )'ya doğru akar. Bilirsiniz, elektron eksi değerlikli bir yüktür. Bu durumda odamızı ( + ) değerli bir yüke bağladığımızda sanki kapıyı açıp elektronları davet etmişiz gibi etkiye neden oluyor. Yukarıda dedik ya; odada ilgi çekici bir şey yok. Bu yüzden olsa gerek odaya giren elektron şöyle çevrelerine bakınıp aynı kapıdan usulca sıvışıyorlar. Ancak bu kapı hiç de öyle normal bir kapı gibi değil, özel bir teknolojiye (floating-gate) sahip dar (narrow) bir kapı. Öyle ki her anına herhangi bir yönde ve sadece bir elektronun geçişine imkan tanıyor. Peki biz akan akımı arttırırsak n'olur? Tabi ki önceden oda dolmadan sıvışan elektronlar (hayal edin, odaya giriyor bakıyor, burada bana ekmek yok diyor ve başını çevirdiği gibi az önce girdiği kapıdan geri dönüyor), şimdi trafik akışı hızlandığı için çıkmakta zorlanıyor. Çünkü kapıdan geçmesi için karşıdan gelen elektronun müsaade etmesi lazım. Kalabalık bir pazar yeri gibi de düşünebiliriz...

Şimdi, biz odayı doldurabileceğimiz akımı bildiğimize göre aninden elektriği kesersek n'olur? Oda kararır ve elektronlar bir anda panikleyerek hepsi birden çıkmak ister. Bu onlar için bir deprem etkisidir ve depremde yapılmayacak 10 şeyi bilmedikleri için bir kaçı hariç çoğu dar kapının dibinde sıkışıp kalırlar!

İşte buraya kadar bilginin yazımını betimlemeye çalıştım; silmeyi hızlıca anlatırsak: UV ışığı (2537 angstrom, mor ötesi dalga boyu) biz insanlar için de yıkıcı bir etkiye sahiptir. Peki biz bu odayı, UV aldığı zaman duvarlarının gevşediğini ve adeta esnek bir yapı gibi kayganlaşacak şekilde üretirsek ne olur? Tabi ki Kırkpınar'daki güreşçilerimizin vücuduna sürdüğü yağ gibi olur ve kapının kenarına sıkışmış elektron bir kuş gibi uçar gider...:)
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
Salih Dinçer #33
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Kaynak: Xtronics - So tell me just how does an EPROM work
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
zafer #34
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #31
acehreli:
Sanmıyorum çünkü grub gibi boot loader'larla uyumlu olmak şart. Kernel'i boot loader alıp belleğe yerleştiriyor ve işletmeye başlıyor. İşletmeye başladığı noktada da extern(C) olan bir main bekler.

Anladığım kadarıyla küçük bir parçada olsa C olmadan bir işletim sistemi yazmak mümkün değil. Ancak bu başlangıçtan sonra devamını D ile kodlamak mümkün.

Salih seni seviyoruz, bu budur diyorsan budur kardeşim sıkıntı yok ;) Bu arada EPROM bilgisi için teşekkürler sayende bilgilerimi tazeleme fırsatım oldu.
https://github.com/zafer06 - depo
Avatar
Salih Dinçer #35
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Belki de çok kastırmadan, C'ye ve D'ye ihtiyacımız yoktur...:)

Şöyle ki; MenuetOS'u duymuşsunuzdur. Hatta ondan önce (yıl 1997) QNX vardı da yaklaşık 1 MB'lık imajı diskete yükler de internete girerdik! Tabi bu işletim sisteminin kulvarı farklı ama Linux gibi ve hatta her zaman güncel! MenuetOS'a gelelim...

Ben uzun süredir bakmıyorum ama onun da tek disketlik bir sürümü var. Hatta işi sadece assembly kullanarak öyle bir noktaya götürmüş ki kendi içinde yazılım da yazabiliyorsun. Sanırım Linux'un bir dönem cebelleştiği üretici desteği (donanım sürücüleri) yüzünden pek geliştirilmiyor olsa gerek. İşte bu önemli, çünkü ürettiğiniz yazılım güncel bilgisayar ve/veya işlemcilerde çalışmıyorsa ağzınızda kuş da tutsanız kimse dönüp bakmaz herhalde.

Özetle, belki de bir kısmı assembly ile başlanıp D ile devam etmek imkansız değildir. Ne dersiniz?
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #36
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #34
zafer:
Anladığım kadarıyla küçük bir parçada olsa C olmadan bir işletim sistemi yazmak mümkün değil.

Benim işletim sistemi deneyimim hiç yok onun için yanlış anlıyor olabilirim ama main işlevinin kimliğinin C calling conventian'a (cdecl) uymasının gerekmesi o programın C dilini kullanması anlamına gelmemeli.

O, programı başlatan ortamın (boot loader) main'i çağırırken program yığıtını nasıl kullandığını belirliyor. Bu şuna benziyor: C veya başka bir dille yazılmış olan bir program pascal calling convention'ı kullanıyor olabilir ama bu o programın Pascal dilini kullandığı anlamına gelmez.

D ile işletim sistemi yazılabileceği konusunda ısrarcı görünmek istemiyorum. Belki gerçekten de yazılamıyordur.

Ali
zafer #37
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #35
Salih Dinçer on 2012-08-11, 03:03:
Belki de çok kastırmadan, C'ye ve D'ye ihtiyacımız yoktur...:)

Evet, Salih haklısın C veya D'ye ihtiyaç olmayabilr. Ben sadece D'nin bu duruma bakış açısını anlamaya çalışıyorum.

acehreli:
main işlevinin kimliğinin C calling conventian'a (cdecl) uymasının gerekmesi o programın C dilini kullanması anlamına gelmemeli.

Tabi ki. Kesinlikle haklısın. Neticede bildiğim kadarıyla bu tür işlerde assembly kodlarının kullanıldığı veya kullanıması gereken yerlerde oluyor. Bu sistemin assembly ile yazıldığı anlamına gelmez. Örneğin Microsoft Visual Studio hem C++ hem de C# kullanılarak geliştirilmiştir.

acehreli:
D ile işletim sistemi yazılabileceği konusunda ısrarcı görünmek istemiyorum.

http://wiki.xomb.org/index.php?title=Main_Page bu adreste D ile geliştirilen bir DışÇekirdek (exokernel) projesi var. Eğer bu yapılabiliyorsa devamında D ile sistemi oluşturmak bence mümkün.

Konu oldukça dağıldı. Neticede bir çekirdek yapmak isteyenler için D bu olanağı sunuyor. Gerisi size kalmış :)
https://github.com/zafer06 - depo
Avatar
huseyin #38
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Malesef d böyle şeyler için yeterince hazır değil aklımda bir proje daha var ancak Ali hocam sizden biraz bilgi almalıyım özellikle pointer lar hakkında
Huseyin
acehreli (Moderatör) #39
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
huseyin325325:
Ali hocam sizden biraz bilgi almalıyım özellikle pointer lar hakkında

Davet beklemiyorsun umarım. :) Nedir? Bu konuyla doğrudan ilgili değilse farklı konu açman daha iyi olur.

Ali
Avatar
huseyin #40
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Tamam ama hedefler biraz büyük hocam bu arada konferans için önümüzdeki yıl düşünceleriniz nedir yer zaman ?
Huseyin
acehreli (Moderatör) #41
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ben daha bir şey düşünmedim ama konferansı kısa tutmanın daha yararlı olduğunu anlamıştık. Sohbete fazla zaman kalmadı.

Ali
Avatar
huseyin #42
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Aslında düşündüğüm planlı olanların dışında bir konferans ancak mümkün olması zor gibi gözüküyor
Huseyin
jbytecode #43
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #37
bu başlığı başından sonuna heyecanla okudum. bilgisayar bilimlerinde alaylı biri olmama rağmen daha önce hakkında okuduğum ve bir kaç deneyim yaşadığım bir konu olduğu için paylaşayım, bazı sorulara da elimden geldiğinde cevap aramaya çalışayım:

Tanenbaum'un modern operating systems adlı kitabıyla tanışmam, Linus Torvalds'ın kitabını okumam sayesinde oldu. Tanenbaum Minix adlı işletim sisteminin yazarıdır ve kitabını Minix üzerinden anlatmaktadır. Linus ise Linux işletim sistemini yazarken bu kitaptan faydalanmış ancak litabında Minix hakkında yaptığı sert eleştirilerde fazlaca cömert davranmıştır.

Tanenbaum özellikle process management kısmında assembly kullanmak zorunda kaldığını söylüyor. Görevler arası geçiş olabildiğine hızlı olmalı, eğer olamıyorsa tüm sistemi yavaşlatıyor. Bu bağlamda işletim sistemi yazmak konusunda C bile hız konusunda yetersiz kalır.  Sonuç olarak process management kütüphanesi D içinde (ve diğer tüm dillerde) internal olarak yazılmadığı taktirde assembly kullanmak şart oluyor.

Bios, işletim sistemi yüklemek için ilk tetiklemeyi yaptığında ortada Bios kesmelerinden başka çağıracak fonksiyon olmadığı için standart kütüphanenin baştan aşağı yazılması gerekiyor. Standart kütüphane ekrana bir harf basmaktan dosya işlemlerine kadar binlerce fonksiyon içeriyor. Dosya açmak için tabi ki bir de dosya sisteminin önceden yazılması işi var. Bir nevi işletim sistemi yazma işlemi ile standart kütüphane yazma işlemi bot bağı gibi birbirine girmiştir (bootstrapping ifadesi bu yüzden kullanılır).

Standart kütüphaneden (nostdlib) ve işletim sistemi kesmelerinden hariç tutularak yazılan tüm programlar zaten birbirine benzer. Bu bağlamda, evet yalnızca D'de değil, tüm dillerde (derlenebilen) işletim sistemi yazmak teorik olarak mümkündür (yazılanlara göre pratik olarak da mümkün) ancak işi derlendiğinde hızlı kod üreten ikiliye bırakmak şimdiki teknoloji ile en iyi yoldur. Tabi ki bu ikili de C ve Assembly. C++ kullanmayı dahi önermeyenler var. Evet bazen sınıflardan nesne üretirken geçen zamana bile tahammül yoktur işletim sistemlerinde.

belki de araştırmayı şöyle yönlendirmek gerekebilir. Standart kütüphane kullanmadan döngüler, degisken ve dizi atamaları D'de ne kadar sürede gerçekleşiyor ve aynı işi yapan C programı için gereken toplam hesap süresi ne kadardır? Eğer D derleyicisi C 'dekine yakın kalitede bir kod üretmişse, C 'ye alternatif olarak yerini alabilir ancak yine assembly kullanmak gerekecek :)
acehreli (Moderatör) #44
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Değerli bilgiler için teşekkürler.

jbytecode:
C++ kullanmayı dahi önermeyenler var. Evet bazen sınıflardan nesne üretirken geçen zamana bile tahammül yoktur işletim sistemlerinde.

Nesne üretmek gerekmişse o nesne üretilecek demektir. C++'ın nesne üretirken C'den (veya assembly'den) daha yavaş kalmasını gerektirecek hiçbir sorunu yoktur. Temel C++, sonuçta C'nin hamallık işlemlerini otomatik hale getiren bir dildir. (Aslında şablon olanağı nedeniyle C++ bazı işlemlerde C'den daha hızlıdır.)

Benim bildiğim kadarıyla, C++'ın işletim sistemi gibi ortamlara uygun olmamasının en büyük nedeni, çokşekilliliğin geleneksel olarak vtbl göstergesi ile sağlanıyor olması. Her türün vtbl göstergesi tek olunca ve programın belirli bir noktasında bulununca virtual işlev çağrıları mikro işlemcinin ara belleğinin tekrar tekrar yeniden yazılmasına neden oluyor.

belki de araştırmayı şöyle yönlendirmek gerekebilir. Standart kütüphane kullanmadan döngüler, degisken ve dizi atamaları D'de ne kadar sürede gerçekleşiyor ve aynı işi yapan C programı için gereken toplam hesap süresi ne kadardır?

Evet, en doğru soru o. Ek soru: D'nin veya C++'ın C'nin ürettiğinden daha yavaş kod üretmesine neden olan dertleri var mı?

Yanıt, kullanılması şart olmayan çöp toplayıcı için bile açık değildir: Evet, dmd'nin kullandığı yavaş çöp toplayıcı arada sırada programı durdurup temizlik işleri yapıyor olsa bile o işlemleri toptan gerçekleştirdiği için bir kazanç da sağlıyor. Bu bedelin mi yoksa kazancın mı daha fazla olduğu denenerek bulunabilir.

Ali
jbytecode #45
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Merhaba Ali Bey,

Yazmayı ihmal ettiğim şeylere de değinmişsiniz, faydalı olmuş. Şu noktayı düzeltebilirim: Nesne üretilecekse üretilecektir. Evet böyle. Ancak C ve Assembly'de terminolojik olarak nesne üretmek kavramından bahsedemeyiz. (Evet her dilde object orientation taklit edilebilir. C 'de  de durum böyledir.) Benim söylemek istediğim, new ve delete operatörlerinin malloc ve free 'den fazlasını yaptığıdır. İşletim sistemi programcısının çoğu zaman istediği şey bir struct'ın (örneğin filesystem'de) belleğe alınması. Öyle ki, bu struct'un üzerine yazılacağı belleğin miktarının yeterli olduğu bile varsayılabilir (tehlikeli olsa da işletim sistemini yazan asıl patrondur).

Test etmedim ancak new, malloc'tan fazla iş yapıyor. Bunun en büyük delillerinden biri yeterli bellek kontrolü için hata denetim mekanizması içermesi ve gerektiğinde bir bad_alloc exception fırlatması. Fazladan 20 ms bir gecikme işletim sisteminin yavaşlaması demektir. Önemsiz olmakla birlikte performans optimizasyonlarında göz önüne alınmaya değer bir durumdur.
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  önceki  1  2  3  4  sonraki 
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-21, 15:22:36 (UTC -08:00)