Kernel yazmak için Türkçe kaynak önerisi

balyedi

Hectopat
Katılım
4 Temmuz 2020
Mesajlar
97
Daha fazla  
Cinsiyet
Erkek
İşletim sistemi kerneli yazmak için Türkçe kaynak arıyorum. Varsa lütfen yazın.
 
Son düzenleyen: Moderatör:
Türkçe kaynak bulmak imkansıza yakın. Caydırmak istemem sizi yolunuzdan ama ha deyince yapılacak bir iş değil. Bilgisayar üzerinde yapılan en zor iş olarak geçmekte işletim sistemi yazmak.

Bilginiz olması gereken konulardan sadece bazıları:
  • C, C++, Assembly veya Rust.
  • Dosya sistemleri.
  • İşlemci hakkında bilgiler, kesmeler, işlemcinin belleği nasıl yönettiği... Yazsam roman olur cinsinden. Hatta şöyle söyleyeyim, klavyede yazılan bir karakter bile işlemcinin kesme moduna girmesini sağlıyor.
  • Ağlar, sonuçta sürücülere TCP/IP desteğini sizin yazdığınız kernel sağlayacak. Sürücüler de bu kernel'e sistem çağrıları aracılığı ile ulaşacak. (Değineceğim.) Çünkü sürücüler ile işletim sistemleri, işlemcinin farklı katmanlarında çalışmaktadırlar.
  • Sürücüleri kendiniz yazmalısınız. En basit işletim sistemi için bile VGA Text Mode ile ekrana görüntü vermek için bir sürücü yazmalısınız.
  • Bu işletim sisteminin GUI kütüphanelerini kernel'e de yazabilirsiniz, veya UNIX tarzı bir işletim sistemi yazacaksanız işiniz daha kolay, X11 kullanabilirsiniz.
  • Tabii ki saf X11 kendi başına yetmeyecektir. Qt ile (tabii işletim sisteminizde çalışırsa) veya X11'in sağladığı kütüphaneler ile bir masaüstü ortamı veya pencere yöneticisi yazabilirsiniz, kolaya kaçacaksanız da KDE gibi masaüstü ortamlarını veya sadece Openbox gibi bir pencere yöneticisini tercih etmelisiniz.
  • UNIX demişken, eğer UNIX benzeri bir şeyler ortaya koyacaksanız, UNIX'in yaptıklarına benzer şeyleri implemente etmelisiniz. Örneğin UNIX'in parent-child uygulama ilişkisi gibi.
  • Bu uygulama ilişkisine de değinmişken, bu uygulama ilişkisini sağlamak için sistem çağrılarınız olmalı. fork(), exec() gibi. Linux'taki sistem çağrılarını görmek için uçbirim'e "man syscalls" yazmanız yeterli.
  • Sıfırdan çekirdek yazacaksınız, ama çekirdeğinizin C gibi bir dile desteği olmayacak, kabul edilemez. "libc" diye tabir edilen C kütüphanesini işletim sisteminizin kernelinin sistem çağrılarına göre baştan yazmalısınız. Kernel'in sistem çağrıları UNIX çağrılarıyla birebir eşitse, daha az yorucu bir iş olacaktır.
  • Kendi işletim sisteminize geliştirici çekmeniz lazım, bunun için de geliştirici araçları gerekli. Kernel için geliştirme yapılabilsin istiyorsanız, Herhangi bir C derleyicisini sisteminize port etmeniz gerekli. GCC'yi port edebilirsiniz.
  • UNIX felsefesine uygun olarak bir tane kabuk (shell) gerekli. Ya kendiniz yazabilirsiniz, ya da Bash gibi, Zsh gibi kabukları sisteminize port edebilirsiniz.
  • Şu anki UNIX benzeri veya UNIX tabanlı sistemlerde "pseudoterminal" yapısı kullanılıyor, yani terminal emüle edilmekte. Terminal emülatörü gerekiyor.
  • Bellek yönetimi. Bir işletim sistemi için olmazsa olmaz.
Daha da fazlası var. Fakat daha da uzatıp bu listeyi Topkapı Sarayı ihtiyaç listesi gibi bir hale getirmeye gerek yok bence.
 
Türkçe kaynak bulmak imkansıza yakın. Caydırmak istemem sizi yolunuzdan ama ha deyince yapılacak bir iş değil. Bilgisayar üzerinde yapılan en zor iş olarak geçmekte işletim sistemi yazmak.

Bilginiz olması gereken konulardan sadece bazıları:
  • C, C++, Assembly veya Rust.
  • Dosya sistemleri.
  • İşlemci hakkında bilgiler, kesmeler, işlemcinin belleği nasıl yönettiği... Yazsam roman olur cinsinden. Hatta şöyle söyleyeyim, klavyede yazılan bir karakter bile işlemcinin kesme moduna girmesini sağlıyor.
  • Ağlar, sonuçta sürücülere TCP/IP desteğini sizin yazdığınız kernel sağlayacak. Sürücüler de bu kernel'e sistem çağrıları aracılığı ile ulaşacak. (Değineceğim.) Çünkü sürücüler ile işletim sistemleri, işlemcinin farklı katmanlarında çalışmaktadırlar.
  • Sürücüleri kendiniz yazmalısınız. En basit işletim sistemi için bile VGA Text Mode ile ekrana görüntü vermek için bir sürücü yazmalısınız.
  • Bu işletim sisteminin GUI kütüphanelerini kernel'e de yazabilirsiniz, veya UNIX tarzı bir işletim sistemi yazacaksanız işiniz daha kolay, X11 kullanabilirsiniz.
  • Tabii ki saf X11 kendi başına yetmeyecektir. Qt ile veya X11'in sağladığı kütüphaneler ile bir masaüstü ortamı veya pencere yöneticisi yazabilirsiniz, kolaya kaçacaksanız da KDE gibi masaüstü ortamlarını veya sadece Openbox gibi bir pencere yöneticisini tercih etmelisiniz.
  • UNIX demişken, eğer UNIX benzeri bir şeyler ortaya koyacaksanız, UNIX'in yaptıklarına benzer şeyleri implemente etmelisiniz. Örneğin UNIX'in parent-child uygulama ilişkisi gibi.
  • Bu uygulama ilişkisine de değinmişken, bu uygulama ilişkisini sağlamak için sistem çağrılarınız olmalı. fork(), exec() gibi. Linux'taki sistem çağrılarını görmek için uçbirim'e "man syscalls" yazmanız yeterli.
  • Sıfırdan çekirdek yazacaksınız, ama çekirdeğinizin C gibi bir dile desteği olmayacak, kabul edilemez. "libc" diye tabir edilen C kütüphanesini işletim sisteminizin kernelinin sistem çağrılarına göre baştan yazmalısınız. Kernel'in sistem çağrıları UNIX çağrılarıyla birebir eşitse, daha az yorucu bir iş olacaktır.
  • Kendi işletim sisteminize geliştirici çekmeniz lazım, bunun için de geliştirici araçları gerekli. Kernel için geliştirme yapılabilsin istiyorsanız, Herhangi bir C derleyicisini sisteminize port etmeniz gerekli. GCC'yi port edebilirsiniz.
  • UNIX felsefesine uygun olarak bir tane kabuk (shell) gerekli. Ya kendiniz yazabilirsiniz, ya da Bash gibi, Zsh gibi kabukları sisteminize port edebilirsiniz.
  • Şu anki UNIX benzeri veya UNIX tabanlı sistemlerde "pseudoterminal" yapısı kullanılıyor, yani terminal emüle edilmekte. Terminal emülatörü gerekiyor.
Daha da fazlası var. Fakat daha da uzatıp bu listeyi Topkapı Sarayı ihtiyaç listesi gibi bir hale getirmeye gerek yok bence.
Öyle ölmezdi hocam, atom bombası atsaydınız.

Şaka bir yana güzel bir liste hazırlamışsınız. Ön çalışma için bilinmesi gerekenler listesi olarak kullanılabilir.
 
Ön çalışma için bilinmesi gerekenler listesi olarak kullanılabilir.
Bu kadarının bile kolay kolay yeteceğini zannetmiyorum hocam. Benim de daha öğrenmediğim sayısız şey var bu konuda. Eğer gelişme kat edilmek isteniyorsa, "Intel Programmer's Manual" okunabilir.
 
Tek kişilik bir olay değil zaten bu. Ekip işi, takım işi.
Kesinlikle hocam. Tek kişi ile çok yavaş ilerler eğer iş halinde değilse. Takım yoksa da açık kaynak kodlu bir işletim sistemi yapılabilir. Kimse kullanmasa bile en azından CV'ye yazılabilecek güzel bir detay olur.
 
Kesinlikle hocam. Tek kişi ile çok yavaş ilerler eğer iş halinde değilse. Takım yoksa da açık kaynak kodlu bir işletim sistemi yapılabilir. Kimse kullanmasa bile en azından CV'ye yazılabilecek güzel bir detay olur.
Tek kişi mikroişlemciye işletim sistemi yazsa yeter gibi. Ama assembly olsun mikroişlemci olmuşken.
 

Yeni konular

Geri
Yukarı