Bilgi işlem düzeylerini anlama


9

Üzgünüm, kafam karışmış sorum için. Bazı işaretçiler arıyorum.

Şimdiye kadar çoğunlukla uygulama katmanında Java ve Python ile çalışıyorum ve işletim sistemleri ve donanımları hakkında sadece belirsiz bir anlayışım var. Daha düşük bilgi işlem seviyeleri hakkında çok daha fazla şey anlamak istiyorum, ama bir şekilde gerçekten çok zorlaşıyor. Üniversitede mikroprogramlama, yani işlemcilerin ASM kodlarını uygulamak için nasıl bağlandıkları hakkında bir ders aldım. Şimdiye kadar "düşük seviye" hakkında daha fazla bilgi edinirsem daha fazlasını yapamayacağımı düşündüm.

Bir sorum var: donanımın geliştiriciden neredeyse tamamen gizlenmesi nasıl mümkün olabilir? İşletim sisteminin donanım için bir yazılım katmanı olduğunu söylemek doğru mu? Küçük bir örnek: programlamada L2 veya L3 Önbellek'in ne olduğunu anlama ihtiyacımla hiç karşılaşmadım. Tipik iş uygulama ortamı için, neredeyse hiçbir zaman montajcıyı ve daha düşük bilgi işlem düzeylerini anlamaya gerek yoktur, çünkü günümüzde neredeyse her şey için bir teknoloji yığını vardır. Sanırım bu düşük seviyelerin bütün amacı daha yüksek seviyelere bir arayüz sağlamaktır. Öte yandan, daha düşük seviyelerin ne kadar etkisi olabileceğini merak ediyorum, örneğin tüm grafik bilgi işlem.

Öte yandan, soyut bilgisayar modelleri üzerinde çalışan bu teorik bilgisayar bilimi dalı var. Bununla birlikte, karmaşıklık modelleri, kanıt doğrulama, vb. çok sayıda N. Eksik olduğum şey, bunları düşünmek için bir çerçeve için bir referans. Bana öyle geliyor ki, nadiren etkileşime giren her türlü farklı kamp var.

Son birkaç haftadır güvenlik sorunları hakkında okuyorum. Burada bir şekilde, farklı katmanların çoğu bir araya geliyor. Saldırılar ve istismarlar neredeyse her zaman alt düzeyde gerçekleşir, bu nedenle OSI katmanlarının ayrıntıları, bir OS'nin iç işleri vb. Hakkında bilgi edinmek gerekir.


1
Bu (sorunun ilk
örneği

Tüm seviyelerde saldırı ve istismarlar olabilir. Güvenlik açığından etkilenen bir PHP betiği yazarsam, altta yatan işletim sistemi ne olursa olsun, donanımdan bağımsız olarak yararlanılabilir.
tdammers

1
Bu konuda harika bir kitap buldum: Bilgisayar Sistemlerinin Elemanları: İlk İlkelerden Modern Bir Bilgisayar Kurmak Noam Nisan, Shimon Schocken. Schocken'in bu yaklaşımla ilgili bir konuşması: youtube.com/watch?v=IlPj5Rg1y2w&feature=plcp
RParadox

Dos günlerinde VGA grafik rutinleri için montaj dilini kullanmak, herhangi bir performans elde etmenin tek yoluydu ama sanırım ne yaptığımı bilmiyordum! Ancak kariyerimin son 10 yılında veya daha fazlasında bu kadar düşük bir şeye bakmak zorunda kalmadım. Ve şimdi çoğunlukla bu seviyelerde olanlardan habersizim. Nadiren kendi belleğimi ayırmam veya temizlemem bile gerekiyor. Ekibimdeki birçok kişinin yığının ne olduğunu bilmediğinden şüpheleniyorum! Birçok yönden böyle bir seviyede kodlama yapmak, tekerleği yeniden icat etmek için verimli değildir. Daha ziyade devlerin omuzlarında duruyoruz.
Gavin Howden

Yanıtlar:


19

Bunları düşünmenin anahtar kelimesi soyutlamadır .

Soyutlama, bir sistemin ayrıntılarını kasıtlı olarak görmezden gelmek anlamına gelir, böylece birçok alt sistemden daha büyük bir sistemi birleştirirken tek, bölünmez bir bileşen olarak düşünebilirsiniz. Düşünülemez derecede güçlü - bellek tahsisi ve kayıt dökülme ve transistör çalışma zamanlarının ayrıntılarını düşünürken modern bir uygulama programı yazmak idealize edilmiş bir şekilde mümkün olacak, ancak karşılaştırılamayacak kadar kolay değilonları düşünmek ve sadece üst düzey işlemleri kullanmak. Modern bilgi işlem paradigması, önemli ölçüde çoklu soyutlama düzeylerine dayanır: katı hal elektroniği, mikro programlama, makine talimatları, yüksek düzey programlama dilleri, işletim sistemi ve Web programlama API'ları, kullanıcı tarafından programlanabilen çerçeveler ve uygulamalar. Bugünlerde hiç kimse tüm sistemi anlayamadı ve bu duruma geri dönebileceğimiz akla gelebilecek bir yol bile yok.

Soyutlamanın kapak tarafı güç kaybıdır. Ayrıntılarla ilgili kararları daha düşük seviyelere bırakarak, genellikle düşük verimlilikle verilebileceğini kabul ediyoruz, çünkü daha düşük seviyeler 'Büyük Resim'e sahip değildir ve çalışmalarını sadece yerel bilgi ile optimize edebilir ve (potansiyel olarak) değildir. bir insan olarak zeki. (Genellikle, isntance için, HLL'yi makine koduna derlemek, günümüzde işlemci mimarisi çok karmaşık hale geldiğinden, makineler tarafından en bilgili insanlardan bile daha iyi yapılmaktadır .)

Güvenlik konusu ilginç bir konudur, çünkü soyutlamadaki kusurlar ve 'sızıntılar' genellikle bir sistemin bütünlüğünü ihlal etmek için kullanılabilir. Bir API, A, B ve C yöntemlerini çağırabileceğinizi varsayar, ancak yalnızca X koşulu geçerliyse, koşulu unutmak ve koşul ihlal edildiğinde gerçekleşen serpinti için hazırlıksız olmak kolaydır. Örneğin, klasik arabellek taşması, bu özel bellek bloğunu kendiniz tahsis etmedikçe bellek hücrelerine yazmanın tanımsız davranış sağladığı gerçeğinden yararlanır. API yalnızca bir şeyinsonuç olarak ortaya çıkacaktır, ancak pratikte sonuç, bir sonraki alt seviyedeki sistemin detayları ile tanımlanmaktadır - ki bu kasten unutmuşuzdur! Koşulu yerine getirdiğimiz sürece, bunun önemi yoktur, ancak değilse, her iki seviyeyi de yakından anlayan bir saldırgan genellikle tüm sistemin davranışını istendiği gibi yönlendirebilir ve kötü şeylerin olmasına neden olabilir.

Bellek ayırma hataları durumu özellikle kötüdür, çünkü büyük bir sistemde tek bir hata olmadan belleği manuel olarak yönetmek gerçekten, gerçekten zor olmuştur. Bu başarısız bir soyutlama vakası olarak görülebilir: C ile ihtiyacınız olan her şeyi yapmak mümkün olsa damallocAPI, basitçe kötüye kullanımı kolaydır. Programlama topluluğunun bazı bölümleri artık bunun sisteme bir seviye sınırı getirmenin yanlış bir yer olduğunu düşünüyor ve bunun yerine otomatik bellek yönetimi ve çöp toplama ile dilleri teşvik ediyor, bu da biraz güç kaybediyor, ancak bellek bozulmasına ve tanımlanmamış davranışlara karşı koruma sağlıyor . Aslında, günümüzde hala C ++ kullanmanın önemli bir nedeni, tam olarak hangi kaynakların ne zaman edinildiğini ve serbest bırakıldığını kontrol etmenize izin vermesidir. Bu şekilde, bugün yönetilen ve yönetilmeyen diller arasındaki ana şema, bir soyutlama katmanının tam olarak nerede tanımlanacağı konusunda bir anlaşmazlık olarak görülebilir.

Aynı şey, bilgisayar kullanımındaki diğer birçok alternatif paradigma için de söylenebilir - sorun, büyük sistemlerin inşa edilmesi gereken her zaman ortaya çıkıyor, çünkü bugün yaygın olan karmaşık gereksinimler için çözümleri sıfırdan tasarlayamıyoruz. (Bugünlerde AI'da ortak bir bakış açısı, insan beyninin aslında böyle çalıştığıdır - aralarında basit, soyutlanmış arayüzlere sahip ayrı modüller ve katmanlar yerine geri bildirim döngüleri, büyük ölçüde birbirine bağlı ağlar vb. kendi istihbaratımızı simüle etmede çok az başarılı oldu.)


1
Çok teşekkürler. Yani, çöp toplama / bellek yönetimi örneği muhtemelen bu etkileşimin en iyi bilinen örneğidir. Neil Gershenfeld bazı kısımlarını anlasam da ilginç şeyler yazdı.
RParadox

... karmaşıklık konusunda çok iyi bir nokta. Makinelerimizi sadece makineler tasarlayabilirse, bu nereye yol açar? Yapay zeka insanları daha akıllı yapay zeka yaratan yapay zekâlardan bahsediyorsa, belki de neredeyse oradayız. ;)
RParadox
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.