Bir montaj programının işletim sistemini kilitlemesini ne engeller? [kapalı]


18

Her şeyden önce, ben bir acemiyim, bu yüzden bu soru aptalca geliyorsa, lütfen yanlış varsayımlara dikkat edin.

Anladığım kadarıyla, bir işletim sisteminin işi, işletim sisteminde çalışan donanımı ve yazılımı yönetmektir. Ayrıca, anladığım kadarıyla, montaj programları bir kişinin donanımı neredeyse doğrudan kontrol etmesine izin verir. Bir montaj programında, kayıtlara veri okuyabilir ve yazabilir ve RAM'a veri okuyabilir ve yazabilirsiniz.

Kayıtlar ve RAM ile uğraşma özgürlüğü göz önüne alındığında, montaj programlarının işletim sistemini etkilemesi mümkün olmaz mı? Bir işletim sisteminin, önemli bilgileri saklamak için A kaydını kullandığını ve bu işletim sisteminde birleştirilmiş bir program çalıştırdığımı varsayalım. Program başarıyla gereksiz kayıtları A kaydına yazarsa, işletim sistemi kesinlikle etkilenecektir.

Sorular:

  1. A kaydını, yukarıda tarif edildiği gibi karıştırmak mümkün mü?

  2. Değilse, derleme programlarının işletim sistemi tarafından kullanılan kayıtları değiştirmesini ne engeller?


13
akıllı programcılar ...
Tony Stewart Sunnyskyguy EE75

Şu anda ve geçmişte çok sayıda bilgisayar mimarisi var, ayrıca birçok işletim sistemi geliştirildi. Tam olarak hangi mimariden / işletim sisteminden bahsediyorsunuz? Bazı (eski) mimarilerde, programı başlangıçtan sonra yaptığı şeyden vazgeçme imkanı yoktu, bu doğru. Ancak modern donanım / işletim sistemi, programın belleğinin yalnızca "normal" modda (süper kullanıcı değil) bir kısmını veren donanım araçlarına sahiptir ve bu sınırın dışındaki belleğe erişemez. OS, kayıtlarda, sadece bellekte / diskte yararlı herhangi bir bilgi saklamadığından kayıtların kullanımı ücretsizdir.
siklon125

2
Bir mikroişlemcide programınız "kullanıcı modunda", işletim sistemleri "sistem modunda" çalışır. Örneğin, bir kullanıcı modu programı bir durdurma talimatı uyguladığında, makine durmaz. Duruş sıkışacak ve işletim sistemi başlatılacaktı. RAM ile ilgili olarak, işletim sistemi kullanıcı modu programı için bir ortam kuracak, böylece bellek yönetimi donanımı ile kullanıcı programının RAM adresi X olarak gördüğü şey gerçekten RAM adresi X olmayacaktır.
George White

1
@flux Yorumumu güncelledim. Cevap şu olurdu: Farklı bilgisayar mimarileri / işletim sistemleri olduğu için, sorunuza "genel" bir cevap yoktur. Farklı şekillerde olabilir.
siklon125

2
... Uzun zaman önce ham makine kodunu yazıyordum. Yee ha !!! :-)
Russell McMahon

Yanıtlar:


33

Sonunda, kaynak dilin birleştirici veya üst düzey bir dil olmasına bakılmaksızın, tüm programlar makine kodudur.

Önemli olan, belirli bir sürecin yapabileceklerini sınırlayan, diğer programları veya işletim sisteminin kendisini etkileyebilecek "karışıklık" kayıtları da dahil olmak üzere donanım mekanizmaları olmasıdır.

Bu, "kullanıcı" ve "süpervizör" çalışma modları arasında basit bir ayrımla başladı ve o zamandan beri birden fazla "ayrıcalık" halkası olan bir güvenlik mimarisine dönüştü.


İşte biraz daha somut hale getirmek için çok genel bir örnek:

  • "Kullanıcı modunda", bir işlem, işlem kimliğine atanmamış belleğe erişemez. Diğer işlemlere ve işletim sisteminin kendisine atanan bellek engellenir. Bu, diğer işlemler tarafından kullanılan kayıt değerlerini içerir. Bu, MMU donanımı tarafından zorunlu kılınmıştır.

  • Bu nedenle, "kullanıcı modunda", bir işlem MMU denetim kayıtlarına erişemez.

  • Açıkçası, "kullanıcı modunda", bir işlem, işletim sistemi işlevinin çağrılmasını içeren çok iyi tanımlanmış bir mekanizma dışında modu "denetleyici moduna" değiştiremez.

İşlem bu kurallardan herhangi birini ihlal etmeye çalışırsa işletim sistemi kontrol altına alınır. Bu gerçekleştiğinde, işletim sistemi rahatsız edici süreci durdurabilir, hiçbir zaman talimatlarını yürütmez.


2
Doğru anlarsam, söylediğiniz şey: Bazı işlemcilerde "kullanıcı modu" ve "yönetici modu" vardır. İşletim sistemi "süpervizör modunda" çalışır ve kurgusal montaj programımı çalıştırmak için işlemciyi "kullanıcı moduna" koyar. "Kullanıcı modunda", donanımın kasıtlı tasarımı nedeniyle montaj programının erişemediği kayıtlar ve RAM adresleri vardır.
Flux

3
Temel olarak, bu cevap MMU ve Korumalı mod ile modern "i386 benzeri" mimarileri açıklar. Ancak, bu özelliklere sahip olmayan ve bir çeşit işletim sistemi kullanılıyorsa (örneğin eski) modern daha basit (AVR, ARM Cortex-M vb.) Mimarilerin yanı sıra çok doğru (i8080, MOS 6502 vb.) CP / M, modern FreeRTOS, ChibiOS vb.) Hiçbir şey programı yaptıklarından durduramaz.
siklon125

2
@Flux i386 (ve üstü) mimariler öğrenilecek ayrıntılar sağlar. X86 mimarisinde yalnızca korunabilen bellek adresleri değil, aynı zamanda G / Ç adresleri de bulunur. (Bellek erişimi için G / Ç erişimine karşı kullanılan farklı talimatlar vardır.) İ386 + 'da üç bellek adresi vardır. Segmentli / seçici tabanlı adres, çifti tek bir 32 bit doğrusal adrese eşlemek için bir tablo girişine (GDT veya LDT) başvuran bir seçici kayıt kullanır. Sayfalama tabloları daha sonra 32-bit doğrusal adresi 36-bit fiziksel adrese (P-II) çevirir. Her iki çeviri adımında da koruma vardır.
jonk

4
@flux özetiniz doğru. Korumalı bir bellek sistemindeki uygun bir çoklu görev işletim sistemine sahip bir program, herhangi bir talimat akışı ile sistemi çökertemez. Geçersiz olanlar bile - bunlar özel bir işleyiciyle sonuçlanır.
pjc50

Birden fazla halka olmasına rağmen (en azından x86'da), ikiden fazla gerçekte kullanılması çok, çok nadirdir.
orman

10

Birçok çok görevli işletim sistemi , kayıt üzerine yazma sorunuyla ilgilenmek için İşlem Kontrol Bloğu (PCB) adı verilen bir veri yapısı kullanır . Kodunuzu çalıştırdığınızda, işletim sistemi kodu takip etmek için yeni bir işlem oluşturur. PCB, işleminiz ve kayıt içeriğini tutmak için ayrılan alan hakkında bilgi içerir. Diyelim ki A işlemi şu anda işlemcide çalışıyor ve kodunuz B işlemindedir. Kodunuzu çalıştırdığınızda ne olur?

  1. A işleminin durum verileri (kayıt içeriği, program sayacı, vb.) PCB'sine kopyalanır.

  2. Proses B'nin durum verileri PCB'sinden CPU kayıtlarına kopyalanır

  3. İşlem B, bitene veya önlenene kadar işlemci üzerinde çalışır

  4. Proses B'nin durum verileri PCB'sine geri kopyalanır

  5. A işleminin durum verileri CPU'ya geri kopyalanır ve çalışmaya devam eder

İşletim sistemi A işlemi olarak çalışıyorsa, programınız çalışmaya başlamadan önce kayıtlarının nasıl kaydedildiğini ve programınız sona erdiğinde bunları CPU'ya geri kopyaladığını görebilirsiniz, kullanıcı programlarının diğer işlemlerde neler olduğunu karıştırmasını önler.

Kullanıcı işlemlerinin bellekteki OS verileri üzerine yazılmasını önlemek için, çoğu platform bellek bölümleme kullanır. Temel olarak, sanal bellek kullanılarak, bir işlemin gördüğü adres alanı, herhangi bir keyfi fiziksel adres aralığına eşlenebilir. İşlemlerin fiziksel bellek alanları örtüşmediği sürece, bir işlemin diğerinin verilerinin üzerine yazması imkansızdır.

Tabii ki, farklı işletim sistemleri işleri farklı şekilde yapar, bu her durumda geçerli olmaz. Ayrıca, çoğu platformda, OS süreçleri kullanıcı süreçlerinden farklı bir modda çalışır ve orada bazı karışıklıklar vardır.


4

Hangi platformdan bahsettiğinize bağlıdır.

  • Daha temel bir işlemcide, işlemci programın yürütmesini istediği talimatları yürütür.

  • Daha sofistike bir işlemcide (en azından) iki mod vardır. Bir modda, işlemci programın yapmasını istediği her şeyi yapar. Diğer modda, işlemcinin kendisi belirli talimatları yürütmeyi reddeder .

Bir programın tüm sistemi kilitlemesini engelleyen nedir? İlk işlemci türünde, cevap "hiçbir şey" dir. Temel bir işlemci ile, tek bir haydut program gerçekten tüm sistemi çökertebilir. Tüm erken 8 bit ev bilgisayarları ve 16 bit bilgisayarların çoğu bu kategoriye girer.

Modern bir bilgisayarda, işlemci "koruma" donanımına sahiptir. Temel olarak işletim sistemi, her şeyi yapmasına izin veren özel bir modda çalışırken, normal programlar işlemcinin yalnızca belirli eylemlere izin vereceği bir modda çalışır (işletim sisteminin işlemci üzerinde yapılandırdığı ayarlara bağlı olarak). Yalnızca belirli kayıtlara erişmek veya yalnızca belirli bellek aralıklarına erişmek gibi şeyler.

Açıkçası, tek bir haydut programın tüm sistemi çökmesine izin vermek kötüdür. (Bir sahte programın istediği verilere erişmesine izin vermede ciddi güvenlik etkileri de vardır.) Bundan kaçınmak için iki şeye ihtiyacınız vardır:

  1. Aslında koruma donanımı olan bir işlemci (yani, belirli talimatları yürütmeyi reddedecek şekilde yapılandırılabilir).

  2. Kendini korumak için bu tesisleri kullanan bir işletim sistemi. (İşletim sistemi hiç kullanmıyorsa koruma devresine sahip bir çip olması iyi değildir!)

Hemen hemen tüm modern masaüstü işletim sistemlerini (Windows, Linux, Mac OS, BSD ...) koruma donanımına sahip bir işlemci üzerinde çalışan korumalı bir işletim sistemi olarak adlandırabilirsiniz. Bazı 8-bit mikrodenetleyicilerde yerleşik geliştirme yapıyorsanız, muhtemelen herhangi bir koruma donanımı yoktur. (Veya herhangi bir işletim sistemi, bu konuda ...)


1

S. Bir derleme programının işletim sistemini kilitlemesini ne engeller?

A. Hiçbir şey.

Bununla birlikte, bir çok zeki programcı yıllar geçtikçe daha zor hale getirmek için çok uğraştı. Ne yazık ki, her zeki programcı için, aralarında daha yaratıcı, daha hırslı ve bazen de zeki olanlardan daha şanslı olan birçok, çok daha fazlası var. Akıllı bir programcı, kimsenin bir şey yapmaması, yapmaması ya da yapamayacağını her söylediğinde, birileri bunu yapmanın bir yolunu bulacaktır. Microsoft Windows (örnek olarak) neredeyse 35 yıldır var ve hala işletim sistemini çökerten talimatlar olan BSoD (Ölümün Mavi Ekranları) var.

Küçük bir terminoloji ile başlayalım. Bir bilgisayarda çalışan her şey makine kodunda bunu yapar. Tuş vuruşlarını veya fare işaretçisinin hareketini okuyan bit, ekrandaki bir pikselin rengini değiştiren veya bir dosyadan bir bayt okuyan bit ve merminizin kötü adama mı yoksa karar veren bite mi çarptığını hesaplayan bit Kredi kartı başvurunuz kabul edilecekse, hepsi bir dizi makine kodu talimatı olarak uygulanır. Bazı işler o kadar yaygındır ve o kadar sık ​​yapılır ki, bunları yapmak için gereken talimatları bir araya getirmek ve herkesin bu montajı kullanmasını sağlamak mantıklıdır. Başkalarının bilgisayarı kullanmasına izin veren veya yardımcı olan bu işlerin bir kısmı işletim sistemi olarak adlandırılır, ancak bunlar ve diğer programlar arasında doğal olarak farklı bir şey yoktur. Hepsi sadece makine kodu talimatlarının dizisidir.

İşletim sistemlerini daha karmaşık (ve dolayısıyla çökmeye eğilimli) yapan şey, normalde düşünmeniz gerekmeyen şeyleri hesaba katmaları gerektiğidir. Örnek olarak en basit işleri ele alalım. Bir dosyanın sonuna mesaj yazmak istiyorum. Üst düzey bir dilde şöyle yazabilirsiniz:

  with open("myFile.txt", "w+") as f:
      # do some really clever things
      f.write("Goodbye cruel world!")

Fiziksel durumlara nasıl erişildiği ve değiştirildiği veya bit ve bayt olarak nasıl yorumlandığı ya da bu baytların bellek ve CPU'ya nasıl aktarıldığına dair tüm ayrıntıları göz ardı edelim ve işletim sisteminin sağladığı programların işlediği her şeye güvenelim kamera ARKASI. Bir dosyanın sonuna nasıl eklediğinizi düşünelim. 1) Dosyanın sonunun nerede olduğunu öğrenin, 2) bu konuma bir şeyler yazın. Ne yanlış gidebilir ki? Aslında, oldukça fazla. Akıllıca şeyler yaparken bilgisayarda başka neler olduğunu düşünün. Başka herhangi bir şey (işletim sisteminin kendisi dahil) üzerinde çalıştığınız dosyayı herhangi bir şekilde değiştirirse, bu gerçekten basit iş aniden çok daha karmaşık hale gelir. Dosya daha uzun, dosya daha kısa. Dosya artık orada değil. Disk dolu,

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.