Linux çekirdeğindeki kodun çoğu C ile yazılmış olsa da, bu kodun çalıştığı ve bunu hesaba katması gereken platforma özgü olan birçok bölüm var.
Bunun özel bir örneği, çoğu mimaride benzer şekilde çalışan (sayfa tablolarının hiyerarşisi) aynı şekilde çalışan ancak her bir mimari için belirli ayrıntılara sahip (her bir mimarideki seviye sayısı gibi) ve bu x86'da bile artmakta olan sanal hafızadır. daha büyük yongaların tanıtılması.) Linux çekirdeği kodu, derleyici tarafından daha az sayıda sayfa tablosu seviyesine sahip mimariler üzerinde seçilebilecek bu sıradüzenlerin üstesinden gelmek için makrolar sunar (böylece kod C ile yazılır, ancak mimarinin ayrıntılarını alır) göz.)
Diğer birçok alan, her bir mimariye çok özeldir ve arşive özgü kodlarla ele alınması gerekir. Bunların çoğu derleme dilinde kod içeriyor. Örnekler:
Bağlam Anahtarlama : Bağlam anahtarlama, kapatılmakta olan işlem için tüm kayıtların değerinin kaydedilmesini ve kayıtların CPU'ya programlanmış işlem kümesinden geri yüklenmesini içerir. Hatta kayıt sayısı ve sayısı her mimariye özeldir. Bu kod tipik olarak, kayıtlara tam erişime izin vermek ve bağlam anahtarlama performansı sistem için kritik olabileceğinden olabildiğince hızlı çalıştığından emin olmak için montajda uygulanır.
Sistem Çağrıları : Kullanıcı alanı kodunun bir sistem çağrısını tetikleyebileceği mekanizma, genellikle mimariye özgüdür (ve bazen belirli CPU modeline bile, örneğin Intel ve AMD bunun için farklı talimatlar getirmiştir, eski CPU'lar bu talimatlara sahip olmayabilir. Çünkü bunlar hala benzersiz olacak.)
Kesin İşleyiciler : Kesmelerin nasıl ele alınacağına (donanım kesintileri) ilişkin detaylar genellikle platforma özgüdür ve genellikle platform için kullanılan belirli çağrı kurallarını ele almak için bir miktar montaj seviyesi yapıştırıcısı gerektirir. Ayrıca, kesintileri etkinleştirmek / devre dışı bırakmak için ilkeler genellikle platforma özgüdür ve montaj kodu da gerektirir.
Başlatma : Başlatma işleminin nasıl yapılması gerektiğinin ayrıntıları da genellikle platforma özgü ayrıntıları içerir ve genellikle çekirdeğe giriş noktasını işlemek için bazı montaj kodları gerektirir. Çok işlemcili (SMP) olan platformlarda, diğer işlemcileri nasıl çevrimiçi hale getireceğine ilişkin detaylar genellikle platforma özgüdür.
Kilitleme Primitifleri : Kilitleme primitiflerinin (spinlocklar gibi) uygulanması, bazı mimariler bunları etkin bir şekilde uygulamak için farklı CPU talimatları sağladığından (veya tercih ettiğinden) genellikle platforma özgü ayrıntıları içerir. Bazıları atomik işlemleri uygulayacak, bazıları atomik olarak test edebilecek / güncelleyebilecek bir cmpxchg sağlayacaktır (ancak başka bir yazar önce gelirse başarısız olur), diğerleri ise CPU talimatlarına bir "kilit" değiştiricisi içerecektir. Bunlar genellikle montaj kodu yazmayı da içerir.
Muhtemelen bir çekirdekte (ya da özellikle Linux çekirdeğinde) platforma ya da mimariye özgü kodun gerekli olduğu başka alanlar da vardır. Çekirdek kaynak ağacına bakıldığında, daha fazlasını bulabileceğiniz altında arch/
ya da altında mimariye özgü alt ağaçlara include/arch/
bakabilirsiniz. bunun örnekleri.
Bazıları gerçekten şaşırtıcı, örneğin her mimaride mevcut sistem çağrısı sayısının farklı olduğunu ve bazı sistem çağrıları diğer mimarilerde değil bazı mimarilerde var olacağını göreceksiniz. (X86'da bile, sistem çağrılarının listesi 32 bit ve 64 bit çekirdek arasında değişir.)
Kısacası, bir çekirdeğin platforma özgü olduğunu bilmesi gereken birçok durum vardır. Linux çekirdeği bunların çoğunu soyutlamaya çalışır, böylece yüksek seviye algoritmalar (bellek yönetimi ve zamanlamanın nasıl çalıştığı gibi) C'ye uygulanabilir ve tüm mimarilerde aynı (veya çoğunlukla aynı) çalışabilir.