C/C++ C ile OS nasıl geliştirilir?

Kalim_x

Kilopat
Katılım
30 Nisan 2018
Mesajlar
354
Makaleler
2
Çözümler
2
Daha fazla  
Cinsiyet
Erkek
Dostlar selam. Kafam çok karışık. Şimdi C kodlayan bir yazılımcı, C ile verdiği komutların hepsini, aslında işletim sistemine veriyor. Yani C ile kodladigimiz her komut, aslında işletim sistemine verdiğimiz emirler. İşletim sistemi de, bu komutları algılıyor ve donanıma emir veriyor. Yani biz direkt olarak donanıma emir veremiyoruz. Bu işlemleri işletim sistemi araciligi ile yapıyoruz. Peki bu işletim sistemi geliştiren Microsoft, Apple, Google falan Android'i, Windows'u IOS'u geliştirirken C kodlamıyorlar mi? E peki bunlar C ile nasıl kodlama yapıyorlar? Hangi derleyiciyi kullanıyorlar? Bu işletim sistemini kodlarken nasıl donanıma emir verebiliyorlar direkt? Ben bunu bir türlü bulamadım ya.
Bazıları diyor ki, "önce temeli Assembly ile yazıyorlar sonra C ile devam ediyorlar" ama bazı yerlerde de okudum ki Assembly'ye gerek kalmadan her şeyi C ile kodlayabiliyoruz. Arkadaşlar kısa ve net soruyorum. Biz bir işletim sistemi veya çok ilkel bir çekirdek geliştirecek olduğumuzda bu C dediğimiz dili hangi yöntemlerle kodlayacaz ya? "işletim sistemi çok zor kodlanır. Boş ver bu işleri" meselelerine falan girmenizi istemiyorum.

Net soru. C dili ile nasıl kodlanıyor bu lanet olası işletim sistemi?
 
Son düzenleyen: Moderatör:
Dostlar selam. Kafam çok karışık. Şimdi C kodlayan bir yazılımcı, C ile verdiği komutların hepsini, aslında işletim sistemine veriyor. Yani C ile kodladigimiz her komut, aslında işletim sistemine verdiğimiz emirler. İşletim sistemi de, bu komutları algılıyor ve donanıma emir veriyor. Yani biz direkt olarak donanıma emir veremiyoruz. Bu işlemleri işletim sistemi araciligi ile yapıyoruz. Peki bu işletim sistemi geliştiren Microsoft, Apple, Google falan Android'i, Windows'u IOS'u geliştirirken C kodlamıyorlar mi? E peki bunlar C ile nasıl kodlama yapıyorlar? Hangi derleyiciyi kullanıyorlar? Bu işletim sistemini kodlarken nasıl donanıma emir verebiliyorlar direkt? Ben bunu bir türlü bulamadım ya.
Bazıları diyor ki, "önce temeli Assembly ile yazıyorlar sonra C ile devam ediyorlar" ama bazı yerlerde de okudum ki Assembly'ye gerek kalmadan her şeyi C ile kodlayabiliyoruz. Arkadaşlar kısa ve net soruyorum. Biz bir işletim sistemi veya çok ilkel bir çekirdek geliştirecek olduğumuzda bu C dediğimiz dili hangi yöntemlerle kodlayacaz ya? "işletim sistemi çok zor kodlanır. Boş ver bu işleri" meselelerine falan girmenizi istemiyorum.

Net soru. C dili ile nasıl kodlanıyor bu lanet olası işletim sistemi?
Önce Assembly ile kendi derleyicini kodlayacaksın. Sonra yazdığın "kernel" kodlarını tek tek parametrelerini atayarak kodladığın derleyicine yazacaksın. İşletim sisteminin çekirdeği tamam.

Ama sadece çekirdeğini hazırladık. Daha bunun terminali, arayüzü ve terminal için programları var.

Terminal için hadi shell kullanabiliriz, ya da Windows gibi proprietary (kapalı kaynak) terminal yapabiliriz.

Terminal da tamam, şimdi işletim sisteminde işlem yapmak için gerekli terminal programları yapmamız gerekiyor ama işletim sistemiyle iletişime geçecek üst bilgi dosyaları ve API tasarlamamız lazım. Kendi bellek adreslerimizi atayacağız vs. vs.

Kütüphanemiz ve terminal için programlarımız hazır. Arayüzü de oluşturduğumuz kütüphane ile özel bir grafik API'si kodlayarak hazırlayabiliriz.

İşletim sistemi tamam, ama boot etmek için EFI kodlamayı öğrenmemiz gerekiyor. EFI üst bilgi dosyalarını aldıktan sonra EFI'mizi oluşturduk mu tamam.

Bayağı uğraştırıcı değil mi? Boşuna Microsoft ve Linux Foundation binlerce adam toplamıyor :)
 
Önce Assembly ile kendi derleyicini kodlayacaksın. Sonra yazdığın "kernel" kodlarını tek tek parametrelerini atayarak kodladığın derleyicine yazacaksın. İşletim sisteminin çekirdeği tamam.

Ama sadece çekirdeğini hazırladık. Daha bunun terminali, arayüzü ve terminal için programları var.

Terminal için hadi Shell kullanabiliriz, ya da Windows gibi proprietary (kapalı kaynak) terminal yapabiliriz.

Terminal da tamam, şimdi işletim sisteminde işlem yapmak için gerekli terminal programları yapmamız gerekiyor ama işletim sistemiyle iletişime geçecek üst bilgi dosyaları ve API tasarlamamız lazım. Kendi bellek adreslerimizi atayacağız vs. vs.

Kütüphanemiz ve terminal için programlarımız hazır. Arayüzü de oluşturduğumuz kütüphane ile özel bir grafik API'si kodlayarak hazırlayabiliriz.

İşletim sistemi tamam, ama boot etmek için EFI kodlamayı öğrenmemiz gerekiyor. EFI üst bilgi dosyalarını aldıktan sonra EFI'mizi oluşturduk mu tamam.

Bayağı uğraştırıcı değil mi? Boşuna Microsoft ve Linux Foundation binlerce adam toplamıyor :)

Hocam. Teşekkürler bu bilgiler için. Ben tabii ki de gelişmiş bir işletim sistemini tek başıma kodlayamayacğimı biliyorum. Sadece, ekrana "merhaba dünya " yazdırabilen çok ilkel bir çekirdek kodlamaktır hedefim. Bunu başarırsam içim rahatlayacak, işin mantığını anlamış olacağım ve gündelik hayatıma geri dönebileceğim :). Verdiğiniz bilgileri adım adım anlatan bir kitap varsa bana PDF'ini atabilirseniz çok mutlu olurum. Videolu anlatım rehberi atmayınız. Oralardan öğrenemiyorum. Bu tip konuları sakince kitaptan okuyarak yapmak istiyorum.

Zaten gcc'nin açık kaynak kodlu olduğunu. Biliyorum. İşletim sistemimi oluşturmadan önce Assembly ile yapılacak o derleyiciyi direkt gcc kollarıyla yapabilirim diye düşünüyorum.
 
Hocam. Teşekkürler bu bilgiler için. Ben tabii ki de gelişmiş bir işletim sistemini tek başıma kodlayamayacğimı biliyorum. Sadece, ekrana "merhaba dünya " yazdırabilen çok ilkel bir çekirdek kodlamaktır hedefim. Bunu başarırsam içim rahatlayacak, işin mantığını anlamış olacağım ve gündelik hayatıma geri dönebileceğim :). Verdiğiniz bilgileri adım adım anlatan bir kitap varsa bana PDF'ini atabilirseniz çok mutlu olurum. Videolu anlatım rehberi atmayınız. Oralardan öğrenemiyorum. Bu tip konuları sakince kitaptan okuyarak yapmak istiyorum.

Zaten gcc'nin açık kaynak kodlu olduğunu. Biliyorum. İşletim sistemimi oluşturmadan önce Assembly ile yapılacak o derleyiciyi direkt gcc kollarıyla yapabilirim diye düşünüyorum.
Aynen. Assembly'yi ben başka bir işletim sistemi kullanmadan tamamen kendi başınıza başlarsınız diye önerdim, yoksa tabii ki C ile GCC kullanabilirsiniz.
 
Aynen. Assembly'yi ben başka bir işletim sistemi kullanmadan tamamen kendi başınıza başlarsınız diye önerdim, yoksa tabii ki C ile GCC kullanabilirsiniz.

Yok ya o kadar da geriden başlamak istemiyorum :D. Ben direkt C ile yazmak istiyorum kerneli. Bunun yolunu arıyorum.
 
İşletim sistemi yazılan C ile masaüstü programı yaptığınız C arasında -çoğu zaman- fark yok. İşlemci mimarinize uygun derlemeyi sağlayacak herhangi bir derleyici kullanabilirsiniz. Sanıldığı gibi kendi derleyicinizi yapmak zorunda değilsiniz. GCC, MSVC, LLVM en bilindik derleyici örneklerinden. Genelde temel BIOS veya EFI işlemleri için Assembly kullanılır, boot işlemleri halledilir. Daha sonraki aşamada hangi dili kullandığınız önemli değil. İşletim sisteminizi başlattıktan sonra, dilin çıkardığı makine kodlarını çağırmanız yeterli. Genelde Assembly'den C/C++ çağırmak kolay olduğu için bu diller tercih edilir. Aklınıza takılan sorunları gidermek için OSDev güzel kaynak. Buradan daha fazla soruya daha iyi cevaplar bulabilirsiniz.
 
İşletim sistemi yazılan C ile masaüstü programı yaptığınız C arasında -çoğu zaman- fark yok. İşlemci mimarinize uygun derlemeyi sağlayacak herhangi bir derleyici kullanabilirsiniz. Sanıldığı gibi kendi derleyicinizi yapmak zorunda değilsiniz. GCC, MSVC, LLVM en bilindik derleyici örneklerinden. Genelde temel BIOS veya EFI işlemleri için Assembly kullanılır, boot işlemleri halledilir. Daha sonraki aşamada hangi dili kullandığınız önemli değil. İşletim sisteminizi başlattıktan sonra, dilin çıkardığı makine kodlarını çağırmanız yeterli. Genelde Assembly'den C/C++ çağırmak kolay olduğu için bu diller tercih edilir. Aklınıza takılan sorunları gidermek için OSDev güzel kaynak. Buradan daha fazla soruya daha iyi cevaplar bulabilirsiniz.

Teşekkürler bilgiler için
 

Technopat Haberler

Yeni konular

Geri
Yukarı