Yönetilen işletim sistemlerinin iyi bir fikir olduğunu düşünüyor musunuz? [kapalı]


15

Microsoft Singularity ve JNode gibi yönetilen işletim sistemleri oldukça ilginç bir kavram. Esasen, işletim sistemi, sanal bir makineyi uygulayan düşük seviyeli bir dilde (C / C ++ / Assembly) yazılmış kodla önyüklenir. İşletim sisteminin geri kalanı (ve tüm kullanıcı uygulamaları) sanal makinede çalışır. Bununla ilgili bazı harika şeyler var. Örneğin, birdenbire keyfi işaretçileri geçersiz hale getirirsiniz. Ve iyi yazılmışsa, çoğu modern işletim sisteminin sahip olduğu bir ton eski kabuktan kurtulursunuz.

Bununla birlikte, bir dezavantaj olarak, donanımdan çok daha uzaktasınız ve bir geliştirici olarak, daha düşük bir soyutlama seviyesine düşme ve ellerinizi kirletme yeteneğini kaybedersiniz.

Bu konudaki görüşleriniz neler?



2
Her zamankinden daha hızlı bilgisayarlarda bence bu çok önemli. Bununla birlikte, MSFT bunu uygularsa, ya büyük olur ya da çok fazla emer - arasında hiçbir şey yoktur.
İş

Mevcut uygulamaların çalışmasını sağlayan "eski kabuk" olduğunu unutmayın. Kullanılacak bir şeye sahip olmanın önemini hafife almayın.

Yanıtlar:


8

Bu durumun "duruma bağlı" olduğu başka bir durum olduğunu düşünüyorum.

Şimşek hızında performansın bir sorun olmadığı web tarayıcıları, kelime işlemcileri vb. Uygulamalar yazıyorsanız, bu yaklaşımın avantajları vardır. Bu yaklaşımı kullanarak müşterilerinize daha güvenli ve daha kontrollü bir deneyim sunabilirsiniz. Yalnızca kötü amaçlı yazılımlar tarafından yapılabilecek hasarı sınırlamakla kalmaz, aynı zamanda daha tutarlı bir ortamda da çalışıyorsunuz.

Konsol oyunları ve PC oyunları arasındaki fark gibi. Birincisi tam olarak hangi donanım ile çalışmaları gerektiğini biliyor, bu nedenle bu bilgiyi kullanabilirken, ikincisi daha çeşitli grafik kartları, ses kartları, sabit disk hızları vb.İle başa çıkabilmelidir.

Ancak, düşük düzeyde erişim gerektiren ve yine de "yerel" olarak çalıştırılması gereken uygulamalar (oyunlar! Gibi) olacaktır.

Yönetilen diller gibi, iş için uygun aracı kullanmanız gerekir.


3
Gerçekten katılmıyorum. Bir oyunun yerel olarak çalışmasının bir nedeni yoktur ve işletim sistemleri size ihtiyacınız olan tüm yönetilen giriş noktasını verirse, düşük seviyeye gitmek için yerel olmanıza gerek yoktur. Tabii ki bazı performans dezavantajı var (aslında tüm sistem yönetiliyorsa ihmal edilebilir), ancak bugün bol miktarda işleme gücümüz ve çok güvenilir yazılıma ihtiyacımız var.
Wizard79

@Lorenzo Games zaten bilgisayarları yeterince vurguladı, bu yüzden performans isabet önemlidir. Ancak, tüm VM'nin yerel çağrıları sarması performans performansının ne kadar olacağından emin değilim
TheLQ

4
@TheLQ: mesele, oyunların her zaman bazı ara katman yazılımları (DirectX, Open GL ve benzeri) olduğu için zaten "düşük seviye şeyler" ile uğraşmak zorunda olmamasıdır. Tabii ki hesaplama açısından yoğun, ancak bir ara katman yazılımı kullanmak zaten bir performans isabeti. Sadece yönetilen (ve jitted) bir ara katman yazılımı olurdu.
Wizard79

3
İşletim sistemi JITting ile ilgileniyorsa, az çok "yerli" kod kadar hızlı çalışan yönetilen kod elde edersiniz. Unutmayın, program üzerinde derleme benzeri bir denetime sahip olmanız gerekiyorsa , programı her zaman doğrudan bayt kodunda kullanabilirsiniz.
Chinmay Kanchi

3
Afaik, MS Singularity, çekirdek modu ve kullanıcı modu arasında geçiş yapmasına gerek olmadığı gerçeğinden önemli bir performans artışı elde ediyor. Çatallaşma da çok daha ucuz hale geliyor.
9000

3

Genel olarak iyi bir fikir olduklarını düşünüyorum, ama etrafta veya tamamen pişirmeye çok yakın olmadığından, gerçek dünyada nasıl performans gösterdiklerini söylemek çok zor. Keşke MS, Singularity projesini nereye gittiğini görebilmemiz için güncellemiş olsaydı, ama tahminim bazılarının Windows'un bazı sürümlerinde çalışılıyor olması


3

Tamamen yönetilen bir işletim sisteminin faydalarının çok büyük olduğunu ve bunun gerçekten gelecek olabileceğini düşünüyorum, ancak uzun yıllar gerektirecek.

İyi yönetilen bir işletim sistemi, yönetilmeye bakılmaksızın ihtiyacınız olan her düşük seviye işi yapmanız gereken tüm yönetilen giriş noktasını sağlayacaktır: kesintileri yakalamak ve cihazlarla G / Ç gerçekleştirme. C # da güvenli olmayan kod (işaretçiler ile ilgili) için izin verir, ancak sadece "aygıt sürücülerinde" (sadece başka bir yazılım izole işlem türü olacak) izin verilir.

Güvenlik, tekdüzelik, taşınabilirlik ve özellikle güvenilirlikteki faydalar kesinlikle herhangi bir performans dezavantajını aşacaktır. Daha sonra, bağlam anahtarı yapmaya gerek olmadığından, tamamen yönetilen bir sistem şaşırtıcı derecede hızlıdır.


Bağlam anahtarının gerekli olmadığından emin misiniz? Aynı anda birden fazla program çalıştırmanız gerekiyor.
İş

VM'de hem programlar hem de kod çalışıyorsa, bağlam anahtarı olamaz. Ancak MMU'nun HL dilinde yeniden uygulanmasını gerektireceğinden, performanstan çok fayda sağlayacağından şüpheliyim.
Maciej Piechotka

2

Yönetilen işletim sistemleri muhtemelen bir şekilde mikro çekirdekler gibidir - güvenlik adına performansı feda edersiniz.

Kodu 2 parçaya bölmeyi gerektirdiğinden benzer sorunlar olabilir:

  • C / montajcıda yazılmış düşük düzeyli çekirdek
  • Yönetilen dilde yazılmış üst düzey çekirdek

Güvenli bir şekilde HL diline girme / bırakma maliyetine bağlı olarak, mikro çekirdekler gibi benzer problemler oluşturabilir - muhtemelen biraz daha hızlı (HL'yi bırakmak tam bağlam anahtarından daha hızlıdır, ancak IIRC, örneğin JNI oldukça pahalıdır).

Diğer uygulamalarda (örneğin C, Java veya .Net) birçok uygulama yazıldığı için kullanıcı uygulamasının da muhtemelen ayrı bağlamlara ihtiyacı olacaktır. Aynı durumlarda uygulamalar CPU'ya bağlı olabilir (derleyiciler, müzik dönüştürücüler vb.) Ve yeterli hızda çalışmak için montajcı optimizasyonuna bile ihtiyaç duyulabilir. Ayrıca - HL dilinde uygulanan MMU koruması, çok daha ince ayarlanmış olsa bile, muhtemelen donanım kadar hızlı olmayacaktır.

Ayrıca HL dili düşük seviyeli işlemlerde yetkin değildir. Yazılım genellikle "iyi" kodlama uygulamasıyla tasarlanırken, sürücülere gerek yoktur. En azından bazı hatalara karşı koruyacaklarını düşünmüyorum çünkü çekirdekler bazen elle yönetim gerektiriyor.

Son olarak böyle bir işletim sisteminin tam VM gerektireceğini düşünmüyorum. İşletim sistemi, her yerde bir kez çalıştır-derle ilkesi ile inşa edilemediğinden HL dilleri (GC & co ile bile) daha iyi bir aday olacaktır.

Örneğin, birdenbire keyfi işaretçileri geçersiz hale getirirsiniz.

İşletim sistemi doğal olarak düşük seviyelidir. Donanıma yalnızca 'rasgele işaretçi' değil, sanal adres yerine fiziksel adres de geçiyorsunuz. Bazı DMA yalnızca ilk 16MiB belleği işleyebilir. Böyle bir işletim sistemi çok basitleştirebilir, ancak adreslerden kurtulamaz.

Ve iyi yazılmışsa, çoğu modern işletim sisteminin sahip olduğu bir ton eski kabuktan kurtulursunuz.

  1. Bir sürü eski donanım var. Yazılımdan çok daha fazlası. İlk önce gerçek modda başlıyorsunuz, sonra A20 geçidini (sorma) korumalı moda ve uzun moda geçebiliyorsunuz.
  2. API / ABI uyumluluğu iyidir. Böyle bir işletim sistemi yazdıklarını söyleyin - üzerinde ne çalıştırırsınız? Firefox - hayır (WinAPI kullanarak C ve C ++). Java - JNI kullanmadıkça muhtemelen taşınması veya ikvm yoluyla bazı küçük sorunları olması gerekiyordu. Sanırım MSSQL (ve kesin olarak Oracle, MySQL, Postgresql ...) yönetilen dilde yazılmış değil, bu yüzden sunucu için uygun olmaz.
  3. Hata uyumluluğu bile "iyi". AFAIK MS, bazı yazılımların akıllı (yanlış okuma) şekilde API kullanmadığını test etmek ve kontrol etmek için çok zaman harcıyor. freeWindows gerçekten belleği boşaltmaya başladığında işaretçi kullanma sorunu gibi .

Sanırım mikro çekirdeklerle aynı zamanda popülerlik kazanacak.


2

Şahsen, yönetilen bir işletim sistemi fikrinin biraz komünizm gibi olduğunu düşünüyorum: teoride iyi, ama uygulanması pratik değil.

Sorun, yönetilen işletim sistemini tamamen sıfırdan yeniden yazmadan yönetilen işletim sistemini getirmenin herhangi bir yolunu görmememdir (ve umarım birisi bu bölümde yanlış olduğunu kanıtlayabilir). Ayrıca, onlarca yıl yönetilmeyen kodun yönetilen bir işletim sistemine uymasını nasıl sağlıyorsunuz?

Orada en popüler işletim sistemlerinin çekirdekleri savaş testinden geçmiştir ve birkaç on yıl boyunca olgunlaşmıştır. Onları bir hevesle yeniden yazmazsınız. Tarihin, inkar edilemeyecek kadar iyi olan ancak kimseyi değiştirmenin maliyetine değdiğine asla ikna edemeyen işlemci tasarımları ve çekirdek mimarileri örnekleriyle dolu olduğundan bahsetmiyoruz.

Son olarak, Microsoft veya Apple gibi bir şirket müşterilere yönetilen bir işletim sistemini nasıl satacak? Ortalama bir bilgisayar kullanıcısı işletim sisteminin yönetilip yönetilmediğini bile düşünür mü?

Yukarıda belirtilen, umarım yanılıyorum ve yönetilen işletim sistemleri bir gerçeklik olacak. Ama şüpheliyim. Eğer hiç görmezsek, muhtemelen bir iki on yıl daha olmayacak.


2
İşletim sistemi çekirdeği kabul için çok önemli değildir. MS, tamamen yeni, hiçbir şeyle uyumsuz bir NT çekirdeği tasarladı ve bu bir başarıydı. Apple çekirdek mimarisini büyük ölçüde değiştirdi (ve CPU mimarisi üç kez) ve hala gelişiyor. Anahtar, mevcut yazılımla uyumluluk ve taşıma kolaylığıdır. Eski koddan yeni koda sorunsuz geçişe izin veren uyumluluk ve / veya sanallaştırma katmanları, yönetilen bir işletim sisteminde makul olmayan bir şekilde zor görünmüyor.
9000

2

Yönetilen kod, bugün sanal bellek korumasının sizi satın aldıklarının, yani bilgisayarın kaynaklara erişimi reddetme yeteneğinin bir tahminidir.

IBM bunu zaten kendi ana bilgisayar sistemlerinde yapıyor (sadece başka bir şey diyorlar), bu yüzden bence bu herkesin kullanımına açık sistemlerde gerçekleşmeden önce sadece bir zaman meselesi.

Bir Google Dizüstü Bilgisayarın (Chrome'u çalıştıran ve temelde hiçbir şeyi çalıştırmayan) yönetilen kodda çalışıp çalışmadığını umar mısınız?


1

Bununla birlikte, bir dezavantaj olarak, donanımdan çok daha uzaktasınız ve bir geliştirici olarak, daha düşük bir soyutlama seviyesine düşme ve ellerinizi kirletme yeteneğini kaybedersiniz.

Bu aslında doğru değil. Örneğin JNode'da, Unsafebellek konumlarına vb. Erişmenizi sağlayan bir sınıf (ve diğerleri) vardır. JIT derleyicisi tarafından ayrıcalıklı talimatlara çevrilen bazı "sihirli" sınıflar / yöntemler de vardır. Bu sınıflara / yöntemlere erişim, güvenlik yöneticisi, JIT derleyicisi vb. Tarafından kısıtlanır (veya kısıtlanır). Ancak, işletim sistemi düzeyinde çalışan bir kod yazıyorsanız, bu özellikler sizin için kullanılabilir durumdadır.

Uyarı (elbette) Unsafeve ilgili sınıfların yanlış kullanımının işletim sisteminin hemen veya yolda aşağı çökmesine yol açabileceğidir.


0

Masaüstü bilgisayarlar için yararlı olduklarından şüphe ediyorum. Ama bu noktada zaman beni yanlış gösterebilir.

Ancak gözlerimdeki ilginç bir potansiyel, bir sunucu işletim sistemi, daha özel olarak sanallaştırılmış bir ortamda bir konuk işletim sistemi. Tam bir GUI de dahil olmak üzere kaç gereksiz hizmeti çalıştırdığını bilerek, sanal bir sunucu ortamına tam bir windows sunucusu yüklemesi kurmak için benimle hiç oturmadı.

Şimdi ASP.NET uygulamalarını barındırmak için sanal bir sunucuya Singularity gibi bir şey yüklemek daha mantıklı. Hafif bir işletim sistemi tutabileceklerini varsayarsak.


1
Mümkün olduğunda Windows'u tamamen terk etmek güzel.
İş

1
Korumalı alan tarayıcılarına ve internete dönük diğer şeylere eğilim, muhtemelen yönetilen veya en azından bölümlere ayrılmış bir işletim sisteminin veya masaüstünün de arzu edildiğini gösterir.
9000
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.