İşletim sistemi olmadan çalışan programlar yazan biri olarak kesin bir cevap veriyorum.
Bir çalıştırılabilir dosyanın çalışması için bir işletim sistemi çekirdeğine ihtiyacı olur mu?
Bu, programın nasıl yazıldığı ve oluşturulduğuna bağlıdır.
Hiç bir işletim sistemi gerektirmeyen bir program (bilginiz olduğunu varsayarak) yazabilirsiniz.
Böyle bir program bağımsız olarak tanımlanmaktadır .
Önyükleyici ve tanılama programları, bağımsız programlar için tipik kullanımlardır.
Bununla birlikte, bazı ana işletim sistemi ortamlarında yazılmış ve oluşturulan tipik program, aynı ana işletim sistemi ortamında yürütme için varsayılan olacaktır.
Bağımsız bir program yazmak ve oluşturmak için çok açık kararlar ve eylemler gerekir.
... derleyiciden çıkan çıktı doğrudan CPU için talimat olduğunu düşündüğüm makine kodudur (çalıştırılabilir).
Doğru.
Son zamanlarda çekirdekleri okuyordum ve programların donanıma doğrudan erişemediğini, ancak çekirdeğin içinden geçmesi gerektiğini öğrendim.
Bu, işletim sisteminin programları yürütmek için kullandığı ve derleyiciler ve kütüphaneler gibi bazı derleme araçlarının kolaylaştırdığı bir CPU modu tarafından getirilen bir kısıtlamadır.
Şimdiye kadar yazılmış her program için gerçek bir sınırlama değildir.
Dolayısıyla, basit bir kaynak kodu derlediğimizde, sadece bir printf () işleviyle derlediğimizde ve derleme çalıştırılabilir makine kodunu ürettiğimizde, bu makine kodundaki her komut doğrudan bellekten doğrudan yürütülecektir (kod, işletim sistemi tarafından belleğe yüklendikten sonra). ) veya makine kodundaki her bir komutun yürütülecek işletim sistemi (çekirdek) içinden geçmesi gerekecek mi?
Her komut CPU tarafından yürütülür.
Desteklenmeyen veya yasa dışı olan bir talimat (örneğin, işlemin imtiyazının yetersiz olması) acil istisnalara neden olur ve CPU bunun yerine bu olağandışı durumu idare etmek için bir rutin yürütür.
Bir printf () işlevi "basit kaynak kod" örneği olarak kullanılmamalıdır .
Nesne yönelimli bir üst seviye programlama dilden makine koduna çeviri sizin ima ettiğiniz kadar önemsiz olmayabilir.
Ardından, veri dönüşümleri ve G / Ç işlemleri yapan bir çalışma zamanı kitaplığından en karmaşık işlevlerden birini seçersiniz .
Sorunuzun bir işletim sistemi (ve bir çalışma zamanı kütüphanesi) içeren bir ortam öngördüğünü unutmayın.
Sistem önyüklendiğinde ve işletim sistemine bilgisayarın kontrolünü verdikten sonra, bir programın yapabileceklerine kısıtlamalar getirilir (örn. İşletim sistemi tarafından G / Ç yapılması gerekir).
Bağımsız bir program (örneğin bir işletim sistemi olmadan) yürütmeyi düşünüyorsanız, işletim sistemini çalıştırmak için bilgisayarı başlatmamalısınız.
... makine kodu belleğe yüklendikten sonra ne olur?
Bu çevreye bağlı.
Bağımsız bir program için çalıştırılabilir, yani kontrol programın başlangıç adresine atlanarak teslim edilir.
İşletim sistemi tarafından yüklenen bir program için, programın bağlı olduğu paylaşılan kütüphanelerle dinamik olarak ilişkilendirilmesi gerekir. İşletim sistemi, programı yürütecek olan işlem için bir yürütme alanı yaratmalıdır.
Çekirdekten mi geçecek yoksa doğrudan işlemciyle mi konuşacak?
Makine kodu CPU tarafından yürütülür .
Onlar yok "çekirdek üzerinden gitmek" , ama ne de yok "işlemci konuşmak" .
Makine kodu (op kodu ve operand'lardan oluşur) kodu çözülmüş ve işlem yapılan CPU'ya bir talimattır.
Belki de araştırmanız gereken bir sonraki konu CPU modlarıdır .