İşletim sisteminin kısaca nasıl çalıştığını bilmek istiyorum :
- Temel bileşenleri
- Bu bileşenler birlikte nasıl çalışır?
- UNIX UNIX'i yapan nedir?
- Windows gibi diğer işletim sistemlerinden bu kadar farklı kılan nedir
İşletim sisteminin kısaca nasıl çalıştığını bilmek istiyorum :
Yanıtlar:
Bir UNIX sistemi, adlandırmak istediğim birkaç parçadan veya katmanlardan oluşur.
Bir sistemi başlatmak için, önyükleyici adı verilen bir program bir sabit disk bölümünün ilk bölümünde yaşar. Sistem tarafından başlatılır ve sırayla İşletim Sistemi çekirdeğini bulur ve yükleyin.
Katman
Çekirdek. Bu, önyükleyici tarafından başlatılan merkezi programdır. Sistem için temel donanım etkileşimini yapar (disk, bellek, video, ses) ve programları başlatabileceği sanal bir ortam sunar. Çekirdek ayrıca, donanım aygıtları arasındaki tüm küçük farklılıklarla ilgilenen tüm sürücüleri de gönderir. Dış dünyaya (daha yüksek katmanlar) her bir cihaz sınıfı aynı tutarlı bir şekilde davranıyor gibi görünüyor - bu da programların üzerine inşa edilebilir.
Arkaplan alt sistemleri. Sadece yolunda olmayan düzenli programlar var. Uzaktan oturum açma gibi işlemleri gerçekleştirir, gizli bir mesaj veriyolu sağlar ve donanım / ağ olaylarına dayalı eylemler gerçekleştirir. Örneğin, bluetooth keşfi, wifi yönetimi vb. Herhangi bir ağ servisi (dosya sunucusu, baskı sunucusu, web sunucusu) da bu düzeyde yaşar. UNIX sistemlerinde bunların hepsi normal programlardır.
Komut satırı araçları. Bunların hepsi metin düzenleme, dosya indirme veya sistemi yönetme gibi şeyler yapmaya başlayabilecek küçük programlardır. Bu noktada, bir UNIX sistemi sistem yöneticileri için tamamen kullanılabilir durumdadır. Windows'ta bu katman artık gerçekten yok.
Grafiksel kullanıcı arayüzü. Bunlar aynı zamanda sadece programlardır, tek fark metin yazmak yerine ekranda pencereleri çizmeleridir. Bu, sistemin normal kullanıcılar için kullanımını kolaylaştırır.
Herhangi bir servis veya etkinlik, en alttan en üste kadar gider.
Kütüphaneler - ortak platform
Programlar, bir pencereyi görüntülemek, ekranda bir şeyler çizmek veya bir dosyayı indirmek gibi birçok ortak işlem yapar. Bunlar birden fazla program için aynıdır, bu nedenle kod ayrı "kütüphane" dosyalarına ( .so
dosyalar - paylaşılan nesne anlamına gelir) yerleştirilir. Kütüphane tüm programlar arasında paylaşılabilir.
Akla gelebilecek her şey için bir kütüphane var. PNG dosyalarını okumak / yazmak için bir tane var. JPEG dosyaları, XML okumak, şifrelemek, video oynatmak vb. İçin bir tane var.
Linux'ta, uygulama geliştiricileri için ortak kütüphaneler Qt ve Gtk'dir. Bu kütüphaneler kendi iç ihtiyaçları için daha düşük seviyeli kütüphaneleri kendi içlerinde kullanırlar, aynı zamanda işlevselliklerini uygulama geliştiricilerin daha hızlı uygulamalar oluşturmaları için tutarlı ve özlü bir şekilde sunarlar.
Kütüphaneler, programcıların bir İşletim Sistemi için son kullanıcı uygulamaları oluşturabilecekleri uygulama platformunu sağlar. Bir sistemin sağladığı yüksek kaliteli kütüphaneler, bir programcının güzel bir program yapmak için yazması gereken kodun azlığıdır.
Bazı kütüphaneler farklı işletim sistemlerinde (örneğin, Qt) kullanılabilir, bazıları gerçekten tek bir işletim sistemine bağlıdır. Bu, programınızın yalnızca bu platformda çalışmasını kısıtlar.
Arası iletişim
Bir işletim sisteminin üçüncü köşe parçası, programların birbirleriyle iletişim kurabilmeleridir. Bunlar, Inter Process Communication (IPC) mekanizmalarıdır. Bunlar çeşitli lezzetlerde, örneğin bir paylaşılan hafızada bulunur veya veri alışverişi için iki program arasında küçük bir kanal kurulur. Ayrıca her programın mesaj gönderebileceği ve bir cevap alabileceği bir merkezi mesaj veri yolu vardır. Bu, hangi programın cevap verebileceğinin bilinmediği küresel iletişim için kullanılır.
Kütüphanelerden İşletim Sistemlerine
Kütüphaneler, IPC ve çekirdeğin yerinde olması durumunda, programcılar sistem hizmetleri, kullanıcı yönetimi, konfigürasyon, yönetim, ofis işleri, eğlence vb. İçin her türlü uygulamayı oluşturabilirler. ".
UNIX / Linux sistemlerinde, tüm hizmetler sadece programlardır. Tüm sistem yöneticisi araçları sadece programlardır. Hepsi işlerini yapıyorlar ve birlikte zincirlenebilirler. Http://codingdomain.com/linux/sysadmin/ adresinde birçok büyük programı özetledim.
Windows ile ayırt edilebilir parçalar
UNIX temel olarak bir programlar, dosyalar ve kısıtlı izinler sistemidir. Birçok karmaşıklıktan kaçınılır, bunu yaparken kolay bir işe sahip gibi gözükse de onu güçlü bir sistem yapar.
Ayrıntılı olarak, bunlar UNIX / Linux sistemlerinde bulunabilecek ilkelerdir:
Bilgiye erişmenin tek biçimli yolları var. ("Her şey sadece bir dosyadır"). Bir dosyayı açabilir, ağ soketini, IPC kanalını, çekirdek parametrelerini ve blok cihazını dosya olarak açabilirsiniz. Bu nedenle / dev, / sys ve / proc içindeki sanal dosya sistemlerinin görünümü. İhtiyacınız olan tek API open
, read
ve close
.
Temel sistem şeffaftır. Her program aynı kurallar altında çalışır. Windows’un aksine “konsol programı”, “gui programı” veya “arka plan servisi” arasında yapay bir fark yoktur. Hepsi sadece programdır, bu farklı şeyler yapar. Hepsi de aynı şekilde gözlemlenebilir, analiz edilebilir ve hata ayıklanabilir.
Ayarlar okunabilir, düzenlenebilir ve yorumlarla not edilebilir. Genelde INI stili bir biçime sahiptirler, ancak bu uygulamanın ihtiyaçları için özel bir biçim kullanabilirler. Sadece dosya oldukları için diğer sistemlere kopyalanabilir, arşivlenebilir veya standart araçlarla yedeklenebilirler.
Büyük, "hepsini bir kerede yap" uygulamaları. Mantra "bir şeyi yap, iyi yap". Komut satırı araçları zincirlenebilir ve birlikte güçlü olabilirler. Ayrı servisler (örneğin SMTP, IMAP ve POP ve giriş), karmaşık iç içe geçmiş kod ve güvenlik sorunlarından kaçınarak ayrı alt programlardır. Karmaşık masaüstü ortamları zor işleri bireysel programlara devreder.
fork()
. Yeni programlar, kendisini klonlayan mevcut bir program tarafından başlatılır. Klon her şeyi ayarlar (örn. Dosya tanıtıcısı) ve isteğe bağlı olarak yeni program koduyla kendi yerini alır. Bu, aynı güvenlik ayarlarını ve kısıtlamaları yeni programlara uygulamayı, belleği paylaşmayı veya bir IPC mekanizması kurmayı gerçekten kolaylaştırır. Bir işlem başlatmanın maliyeti de çok düşük.
Dosya sistemi, diğer disk bölümlerinin ve ağ paylaşımlarının monte edilebileceği bir ağaçtır. Yine, verilere erişmenin evrensel bir yolu var. Yaygın sistem konumları (örn /usr
. Ağ paylaşımı olarak kolayca monte edilebilir).
Sistem düşük kullanıcı ayrıcalıkları için inşa edilmiştir. Oturum açtıktan sonra, her kullanıcı (root hariç), yalnızca uygulamaları ve dosyaları çalıştırarak kendi kaynaklarını sınırlar. Şebeke servisleri, ayrıcalıklarını en kısa zamanda azaltır. Daha fazla ayrıcalık elde etmenin tek bir açık yolu var veya birinden kendi adına ayrıcalıklı bir iş yürütmesini isteyin. Diğer her çağrı, programın kısıtlamaları ve kısıtlamaları ile sınırlıdır.
Her program ayarları kullanıcı ana dizininin gizli bir dosya / klasöründe saklar. Hiçbir program global bir ayar dosyası yazmaya çalışmaz.
Açıkça anlatılan iletişim mekanizmalarının gizli mekanizmalar veya spesifik 1'e 1 mekanizmalar üzerindeki bir iyiliği. Diğer satıcılar ve yazılım geliştiriciler aynı şartnameye uymaya teşvik edilir, böylece işler kolayca bağlanabilir, değiştirilebilir ve yine de gevşek bir şekilde kalabilir.
UNIX, 40 yıldan fazla bir süredir başarılı olduğu kanıtlanmış sağlam bir tasarım üzerine kurulu güçlü bir işletim sistemidir (bilgisayar biliminde neredeyse sonsuzdur). Merkezi teknoloji, C diline ve sayısız küçük programa dayanıyor: UNIX komutları. Temel felsefe McIlroy tarafından özetlenmiştir:
Bir şey yapan programları yaz ve iyi yap. Birlikte çalışmak için programlar yazın. Metin akışlarını işlemek için programlar yazın, çünkü bu evrensel bir arayüzdür.
UNIX felsefesi hakkında daha fazla bilgi ESRaymond "UNIX Programlama Sanatı" nda bulunabilir.
Burada bazı mükemmel cevaplar var. Ancak, dışarıda bırakıldığımı düşündüğüm bir şey * nix'in diğer işletim sistemlerinden, özellikle de Microsoft Windows'tan ne kadar farklı olduğu.
Yukarıda “zaten bir şeyi yap, iyi yap” kavramının üzerinde durulan temel kavram, * nix işletim sistemlerinde bazen göz ardı edilebilecek kadar merkezidir. Yine de Linux'u çok esnek ve güçlü yapan bu tasarım felsefesidir.
Örneğin, MS Windows için Grafik Kullanıcı Arabirimi (GUI) işletim sisteminde iç içedir. GUI'siz bir MS işletim sistemi kurmak neredeyse imkansızdır. Linux'ta, hiçbir grafik bileşeni olmayan bir sunucuyu veya gömülü sistemi kolayca açabilirsiniz. Tamamen komut satırı ile yönlendirilebilir ve hala tam özellikli bir sunucu olabilir.
Linux'un modüler tasarımı aynı zamanda bir sistem yöneticisinin işletim sistemini yeniden başlatmadan bir hizmeti indirmesini, yükseltmesini ve tekrar başlatmasını sağlar. Aslında Linux işletim sistemini yeniden başlatmanız gereken tek zaman, çekirdeğin değiştirildiği veya yükseltildiği zamandır.
Örneğin, Linux'a yeni bir windows yöneticisi (gnome, kde, hangisi) kurabilir ve sisteme giriş yapmış bir kullanıcı asla farkında olmayabilir.
Windows'ta çoğu zaman sistemdeki en basit değişiklikler, yeniden başlatma gerektirir, ancak bu bazen gerçek bir teknik gereksinimden çok bir güvenlik sorunudur. Bunun, MS işletim sistemlerinin temel kusurlarından biri olduğunu söyleyebilirim. Linux'ta sürücü modüllerinin çoğunu yükseltebilir ve kullanıcılar üzerinde çok az etkisi olabilir veya etkisi yoktur. Windows'ta, yalnızca yeni bir uygulama yüklerseniz tüm kutuyu yeniden başlatmanız gerekebilir.
Bu modüler tasarım ayrıca Linux'a olağanüstü esneklik sağlar. Her Linux sistemi, mümkün olan en az kaynak ek yüküyle gerçekleştirmeniz gereken spesifik görev için uyarlanabilir. Windows ile GUI arayüzünü basit bir HTTP sunucusu çalıştırmak için kapatamazsınız. Windows'un donanımınızın altından geçemediği bir engel oluşturduğunu varsaydığı bir bellek izi vardır. Bu, Linux'un birçok mobil ve gömülü uygulama için tercih edilen işletim sistemi haline gelmesinin birincil nedenidir.
Devam edip gidebilirim, ancak bu örneklerin Linux'un neden bu kadar popüler hale geldiğini ve diğer işletim sistemlerinden gerçekte ne kadar farklı olduğunu açıklamaya yardımcı olacağını umuyorum.
“UNIX İşletim Sisteminin Tasarımı” okumak için iyi bir kitap olacaktır.
Tekli Unix Standardı (SUS) API ve POSIX hakkında bir çok şey öğrenmek için Unix Ortamı 2e'de Gelişmiş Programlamayı okumanızı tavsiye ederim .
Ancak, çok ağır bir kitap ve referans el kitabından daha fazlası. Uykusuzluk ile ilgili bir sorununuz varsa, sadece yanınıza alın. Bu bir Unix C programcısı iseniz bir zorunluluktur olması gerekir.
Önceki iki kitap önerisinin ruhu ile de tavsiye ederim
M. Kerrisk tarafından LINUX Programlama Arabirimi
UNIX / Linux sistem programlaması konusunu hedeflemesine rağmen, Linux ve daha genel olarak UNIX sistemlerinin programcı / kullanıcı bakış açısıyla nasıl çalıştığı hakkında tonlarca ayrıntılı bilgi ortaya koymaktadır. Vdboor'un cevabında belirtilen mermilerin çoğuna ayrıntılı olarak girer ve temel UNIX kavramlarını ve temellerini hissetmek / resmini almak için yeterince ayrıntılı ve anlaşılır ve okunabilir bir şekilde ortaya çıkar.