Yönetilen kod çalıştıran minimal bir çekirdeğe sahip olmanın potansiyel tuzakları nelerdir?


14

Yönetilen bir kod yorumlayıcı / çalışma zamanı ve yerel olmayan bir makine diline (Java bayt kodu, CIL, vb.) Derlenmiş daha büyük bir üst çekirdeğe dayanan çok küçük bir yerel alt çekirdeğe dayalı bir işletim sistemi oluşturmak istediğinizi varsayalım. Benzer işletim sistemlerine örnek olarak Singularity ve Cosmos verilebilir .

Tamamen doğal bir çözümün aksine bu tür altyapıya sahip bir işletim sistemi yazarken hangi güçlükler ve kalkınma zorlukları var?

Yanıtlar:


8

Dile bağlı olarak, birçok geliştirme zorluğu olabilir:

  1. İşaretçiler: Bir dilin işaretçileri yoksa, nispeten kolay görevler yapmak zor olacaktır. Örneğin, ekrana yazdırmak üzere VGA belleğe yazmak için işaretçileri kullanabilirsiniz. Ancak, yönetilen bir dilde, aynısını yapmak için bir tür "plug" (C / C ++ 'dan) gerekir.

  2. Montaj: Bir işletim sisteminin her zaman bir miktar montaja ihtiyacı vardır. C #, Java, vb. Gibi diller, C / C ++ 'dan farklı olarak onunla çok iyi çalışmaz. C veya C ++ 'da, birçok görev için çok, çok yararlı olan satır içi montaj da yapabilirsiniz. Bunun gerekli olduğu birçok durum vardır (x86'daki örnekler): GDT yükleme, IDT yükleme, sayfalamayı etkinleştirme, IRQ'ları ayarlama vb.

  3. Kontrol: Cosmos gibi bir şey kullanıyorsanız, tam kontrole sahip değilsiniz. Cosmos bir mikro çekirdektir ve aslında "çekirdeğinizi" "çizer". Bununla birlikte, uzun, uzun zaman alabilen gerçekten istiyorsanız, Cosmos gibi bir şeyi sıfırdan uygulayabilirsiniz.

  4. Ek yük: Yönetilen dillerde, C veya hatta C ++ ile karşılaştırıldığında çok fazla ek yük vardır. Cosmos gibi şeyler, bir C # merhaba dünya çekirdeği bile çalıştırılmadan önce birçok şeyi uygulamalıdır. C'de, hazırsınız, gerçek bir kurulum gerekmez. C ++ 'da, C ++' nın bazı özelliklerini kullanmak için uygulanması gereken birkaç şey vardır.

  5. Yapılar: C / C ++ 'da birçok yönetilen dilin sahip olmadığı yapılar vardır ve bu nedenle bir yapıya sahip olmanın bir yolunu uygulamanız gerekir. Örneğin, bir IDT (Kesme Tanımlayıcı Tablosu) yüklemek istiyorsanız, C / C ++ 'da (paketlenmiş öznitelik ile) bir yapı oluşturabilir ve x86 ASM yönergesi lidt'ını kullanarak yükleyebilirsiniz . Yönetilen bir dilde, bunu yapmak çok daha zor ...

Sözdizimi açısından yönetilen diller daha kolaydır, ancak işletim sistemi ile ilgili birçok şey çoğu zaman çok uygun değildir. Bu, onların kullanılamayacağı anlamına gelmez, ancak C / C ++ gibi bir şey sıklıkla önerilir.


Bu cevap oldukça zayıf. İşaretçiler olmadan (küçük bir temel hariç) yapamayacağınız “nispeten kolay görevler” nelerdir? Montaj gereken parçalar nelerdir? Hangi kontrole sahip değilsiniz? Genel gider hakkındaki ifadenizi neye dayandırıyorsunuz? Neden yönetilen dilde yapılarınız olamaz?
Gilles 'SO- kötü olmayı bırak

1. Yönetilen bir dilin VGA belleğe erişme yeteneği sunmamasının bir nedeni yoktur, yalnızca ilkel (bellek yönetimi ilkel) olarak sağlanması gereken haritalama / eşlemeyi kaldırma. 2. Bazı görev değiştirme işlemleri (örn. Kayıtların kaydedilmesi) genellikle montaj kodu olarak yapılmalıdır, ancak çok yerelleştirilmiştir, işletim sisteminin% 99'unun yönetilen bir dilde olmasına karşı bir argüman değildir. MMU'yu değiştirmek bir bellek yönetimi ilkesidir. 4. C'nin de kurulumu gerekiyor (yığın ve yığın oluşturma); yönetilen diller biraz daha kuruluma ihtiyaç duyar, ancak niteliksel bir fark yoktur.
Gilles 'SO- kötü olmayı bırak

@Gilles, soru, yönetilen bir dili kullanmak için gelişimsel zorlukların neler olduğu. Bunlar gelişimsel zorluklar, ancak yine de bu tür zorlukları başarıyla aşabilirsiniz ...
mmk

5

Yönetilen kod aracılığıyla genişletilebilir sistemlerin güvenliğinin nasıl değerlendirileceği hakkında çok az şey bilindiğini iddia eden ( rakip bir mikro çekirdek tekniği üzerinde çalışan bir araştırmacı tarafından) duyduğumu duydum .

Sorun, bir güvenlik açığına neden olabilecek hataların, güvenlik araştırmacılarının alışkın olduğundan çok farklı olmasıdır. Geleneksel bir mikro çekirdeğin içinde, çekirdeğin tüm sürücüleri ve diğer alt bölümleri, farklı adres alanlarında çalıştırılarak birbirlerinden izole edilir. İzolasyonun tip kontrolü yönetilen kod yoluyla uygulandığı bir mikro çekirdeğe, bir alt hizmet kullanmanız gerektiğinde adres alanlarının değiştirilmesinin muazzam yüklerinden kaçınırsınız, ancak artık, izolasyon mekanizmasını değerlendirmenin daha zor olmasıdır.

Çekirdekin yönetilen dilde yazılmış herhangi bir kısmı (bir aygıt sürücüsü diyelim) yalnızca tür denetleyicisi sürücünün güvenli olduğunu ve tür denetleyicisinde hata bulunmadığını söylüyorsa güvenlidir . Yani tip denetleyicisi çekirdek çekirdeğinin bir parçasıdır. Uygulamada, tip denetleyicilerin geleneksel mikro çekirdek çekirdeklerinden çok daha büyük ve daha karmaşık olduğu görülmektedir. Bu, saldırı yüzeyinin potansiyel olarak daha büyük olduğu anlamına gelir .

Geleneksel mikro-çekirdek izolasyon teknikleri veya yönetilen kod tabanlı izolasyon tekniklerinin gerçekten az ya da çok güvenilir olup olmadığını bilmiyorum. Burada bir önyükleme sorunu var: yönetilen kod yalıtım teknikleri yaygın olarak kullanılana kadar, ne kadar güvensiz olduklarını bilemeyiz. Ancak ne kadar güvensiz olduklarını bilmeden, güvenlik açısından kritik durumlarda bunları kullanmak zordur.


Bu mükemmel bir nokta.
Adam Maras

Bu argümanları çok garip buluyorum. (Verilmiş, resmi yöntemlerde benim arka plan tarafından önyargılı olabilir, ama bu benim görüşüm için tek temel değildir.) Bir daktilo bir mikro çekirdek artı bir MMU ile karşılaştırıldığında, o kadar karmaşık değil. Örneğin, Coq'un mikro çekirdeği yaklaşık 14kLoC OCaml'dir - bir mikro çekirdekten daha büyüktür, ancak çok fazla değil ve çoğu çekirdeğe göre daha az hataya açık bir dilde yazılmıştır (C veya montajcı yok). Tip denetleyicileri, özellikle ince bir böcek sınıfı olan yarış koşullarına karşı hassas değildir.
Gilles 'SO- kötü olmayı kes

Yönetilen kod belirli hata sınıflarını işlemek için daha iyi bir fırsat verir; Örneğin, bilgi akışı analizi yan kanalların olmadığını kanıtlayabilir (çok fazla çalışma gerektirebilir ve ne kadar yapıldığını bilmiyorum, ancak prensipte yapılabilir), ancak donanım yalıtımı sadece test etmenizi sağlar Düşündüğünüz yan kanallar.
Gilles 'SO- kötü olmayı bırak'

Pratik açıdan, izolasyon sağlayan birkaç sanal makine EAL5 ve üstü sertifikalara sahiptir. Avrupalıysanız cüzdanınızda iyi olabilecek iki örnek vardır, çünkü kredi kartları gibi akıllı kartlarda kullanılırlar: MULTOS , Java Kartı açık platform . Güvenlik değerlendirme topluluğunda, MMU izolasyonunun EAL2'nin ötesine geçebileceğine dair birçok kuşku duydum.
Gilles 'SO- kötü olmayı bırak'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.