Minix 3

Minix 3, Unix benzeri bir küçük bir işletim sistemidir. BSD-3-Lisansı  altında yayınlanır ve önceki sürümler olan Minix 1 ve 2'nin devamı niteliğinde bir projedir.

Projenin ana hedefi, sistemin herhangi bir kullanıcı müdahalesi olmadan anında tespit edilip onarılarak sistemin arızaya dayanıklı hale getirilmesidir. Sistemin temel kullanımlarının gömülü sistemler ve eğitim olması öngörülmektedir.

, Minix 3, IA-32 ve ARM mimarili işlemcileri destekler. Bochs, VMware Workstation, Microsoft Virtual PC, Oracle VirtualBox ve QEMU gibi emülatörler veya sanal makineler üzerinde de çalışabilir. PowerPC mimarisi için bir port geliştirme aşamasındadır.

Dağıtım, canlı bir CD'de gelir ve canlı USB kurulumunu desteklemez.

Minix 3'ün, Skylake ve Kaby Lake işlemcilerle birlikte kullanılan ME 11'in piyasaya sürülmesinden başlayarak Intel'in Platform Denetleyici Merkezinde bulunan Intel Management Engine (ME) işletim sistemine ilham verdiğine inanılıyor.

Intel ME'de kullanılması nedeniyle Minix'in Microsoft Windows, Linux veya macOS'tan daha fazla kurulumla x86 / AMD64 işlemcilerde en yaygın kullanılan işletim sistemi olabileceği tartışıldı.

Minix 3 tartışma grubu hala aktif olmasına rağmen, proje 2018'den beri atıl durumdadır ve en son sürüm 2017'den 3.4.0 rc6'dır

 Projenin hedefleri 
küçükresim| Sırasıyla monolitik çekirdek ve mikro çekirdek tabanlı işletim sistemlerinin yapısı
Bir sürücünün (Minix'in yaratıcısı Tanenbaum'a göre normal bir programa göre yaklaşık 3-7 kat daha fazla hataya sahip olan) tüm sistemi çökertebileceği yekpare çekirdek tabanlı sistemlerin doğasını düşünerek, Minix 3, "güvenilir, kendi kendini iyileştiren, çok sunuculu Unix klonu" olan bir işletim sistemi oluşturmayı amaçlar.

Bunu başarmak için, dosya sunucusu, işlem sunucusu ve her bir aygıt sürücüsü ayrı kullanıcı modu işlemleri olarak çalışırken, çekirdekte çalışan kod minimum düzeyde olmalıdır. Her sürücü, reenkarnasyon sunucusu adı verilen sistemin bir bölümü tarafından dikkatle izlenir. Bir sürücü bu sunucudan gelen pinglere yanıt veremezse kapatılır ve sürücünün yeni bir kopyası ile değiştirilir.

Monolitik bir sistemde, bir sürücüdeki bir hata, tüm çekirdeği kolaylıkla çökertebilir. Bunun Minix 3'te olma olasılığı çok daha düşüktür

 Tarih 
+MINIX 3 versions! VersionRelease dateDescription3.1.0(OSDI3)2005-10-18 The first release of Minix 3 (Book Release), under BSD-3-Clause.3.1.1(SOSP)2005-10-24 The last version under the standard BSD-3-Clause license.3.1.22006-04-18 The first version under the custom BSD-3-Clause license.3.1.2a2006-05-29 New Packman package manager.
 Fixed an installation issue with auto-partitioning disks.3.1.32007-04-13 Added new virtual file system3.1.3a2007-06-08 Bug fixes.3.1.42009-06-09 Virtual memory support.
 Improved virtual machine support (when Minix runs as guest).3.1.52009-11-05 Improvements performance
 Shared memory
 setitimer function
 ISO 9660 file system
 Open Sound System
 Trap NULL accesses now, for user convenience
 Improved signal handling
 Better support for debuggers (ptrace improvements, etc.)
 Network card autodetection (for supported PCI cards), improved network configuration3.1.62010-02-08 New Network drivers: Atheros L2, Intel E1000, Realtek 8169, DEC Tulip
 PipeFS – removed pipe handling from filesystem drivers
 HGFS – support for mounting VMware shared folders as file system
 VFS: supplemental group support and sticky bit support
 Floating-point unit support
 System Event Framework (SEF)
 Experimental APIC support3.1.72010-06-16 Userspace scheduling and a scheduling server
 Proper support for multiple Ethernet cards of the same type
 Boot monitor allows loading images > 16 MB
 Buildsystem support for building Minix with GCC
 Support for Windows-1251 and KOI8-U charsets3.1.82010-10-04 New package management infrastructure: pkgsrc and pkgin
 Unix domain socket support
 Multiboot support
 ext2 support
 ACPI driver
 full APIC mode including I/O APICs
 Experimental AHCI support3.2.02012-02-29 Porting GNU Debugger to Minix 3 and implementing core dumping support
 FUSE support with experimental NTFS-3G file system
 Gradually replacing userland, from Minix to NetBSD
 Replacing the default compiler ACK with Clang; GCC is also supported
 Switch to ELF and NetBSD libc libraries
 Pkgsrc upstreaming and application porting
 Asynchronous virtual filesystem (VFS) server
 Replacing the bootloader from Minix to NetBSD
 NCQ support in the AHCI driver3.2.12013-02-21 Support for dynamically linked executables
 Removal of Intel segments
 Dropped support for a.out binaries
 Cross-compilation support
 Device Driver Environment kit support
 VBFS – support for mounting VirtualBox Shared Folder as file system3.3.02014-09-15 ARM architecture support; cross-compilable
 Support for mmap() I/O mechanism; allows for shared dynamic libraries and lower memory needs
 New input infrastructure: input server and keyboard driver separated from TTY
 VND: vnode disk (loopback) block driver
 LLVM Bitcode build of the system
 Import of LLVM and clang in the sources
 Unified block cache shared by FSes and VM
 Improved NetBSD compatibility: utilities, calls, types (lots of 64-bit), toolchain, codebase, and packages
 C type for messages: cleaner, bigger
 Improved driver modularity: UDS separate from PFS, PTY from TTY, one controller per at_wini instance, LOG removed from boot image
 Packages are now dynamically linked3.4.0 rc62017-05-09X11 is now part of the operating system. 



Minix 3, 24 Ekim 2005'te Andrew Tanenbaum tarafından Association for Computing Machinery (ACM) Sempozyumu İşletim Sistemleri İlkeleri konferansının zirvesindeki açılış konuşması sırasında kamuoyuna duyuruldu. Hala Tanenbaum ve Woodhull'un ders kitabının yeni baskısı için bir örnek teşkil etse de, "kaynak sınırlı ve gömülü bilgisayarlarda ve yüksek güvenilirlik gerektiren uygulamalarda ciddi bir sistem olarak kullanılabilir" olacak şekilde kapsamlı bir şekilde yeniden tasarlandı.

Başlangıçta, Minix'in 2000'den beri lisanslandığı aynı BSD-3-Clause lisansı altında yayınlandı. 2005 sonlarında telif hakkı sahibi değiştirildi ve dördüncü bir madde eklendi.

 Güvenilirlik politikaları 
Minix 3'ün ana hedeflerinden biri güvenilirliktir. Aşağıda, güvenilirliğini artıran daha önemli ilkelerden bazıları tartışılmaktadır.

 Çekirdek boyutunun küçültülmesi 
Linux ve FreeBSD gibi monolitik işletim sistemleri ve Windows gibi hibrit işletim sistemleri milyonlarca satırlık çekirdek koduna sahiptir. Buna karşılık, Minix 3'te yaklaşık 6.000 satır yürütülebilir çekirdek kodu vardır, bu kodda sorunların bulunmasını kolaylaştırabilir.

 Böcekleri (hataları) kafesleyebilme 
Monolitik çekirdeklerde, aygıt sürücüleri çekirdekte bulunur. Böylece yeni bir çevre birimi kurulduğunda çekirdeğe bilinmeyen, güvenilmeyen kod eklenir. Bir sürücüdeki hatalı bir kod satırı sistemi çökertebilir.

Bunun yerine, Minix 3'te her aygıt sürücüsü ayrı bir kullanıcı modu işlemidir. Sürücüler ayrıcalıklı yönergeleri yürütemez, sayfa tablolarını değiştiremez, isteğe bağlı giriş/çıkış (G/Ç) gerçekleştiremez veya mutlak belleğe yazamaz. Bu hizmetler için çekirdek çağrıları yapmaları gerekir ve çekirdek her yetki çağrısını kontrol eder.

 Sürücülerin bellek erişimini sınırlayabilme 
Monolitik çekirdeklerde, bir sürücü herhangi bir bellek sözcüğüne yazabilir ve böylece kazara kullanıcı programlarını bozabilir.

Minix 3'te, bir kullanıcı örneğin dosya sisteminden veri beklediğinde, kimin ve hangi adreslerde erişime sahip olduğunu söyleyen bir tanımlayıcı oluşturur. Daha sonra, bu tanımlayıcıya bir dizini, onu bir sürücüye iletebilecek olan dosya sistemine iletir. Dosya sistemi veya sürücü daha sonra çekirdeğe tanımlayıcı aracılığıyla yazmasını ister, bu da arabellek dışındaki adreslere yazmalarını imkansız hale getirir.

 Kötü işaretçilerden kurtulabilme 
Bir sürücü içindeki hatalı bir işaretçinin başvurusunun kaldırılması, sürücü sürecini çökertecektir, ancak bir bütün olarak sistem üzerinde hiçbir etkisi olmayacaktır. Reenkarnasyon sunucusu, çöken sürücüyü otomatik olarak yeniden başlatacaktır. Kullanıcılar bazı sürücüler için (örn. disk ve ağ) kurtarmayı fark etmeyeceklerdir ancak diğerleri için (örn. ses ve yazıcı) fark edebilirler. Monolitik çekirdeklerde, bir sürücüdeki hatalı bir işaretçinin başvurusunun kaldırılması normalde sistem çökmesine neden olur.

 Sonsuz döngüleri işleyebilme 
Bir sürücü sonsuz bir döngüye girerse, zamanlayıcı boşta kalana kadar önceliğini kademeli olarak düşürür. Sonunda reenkarnasyon sunucusu durum isteklerine yanıt vermediğini görecek, bu nedenle döngü sürücüsünü öldürecek ve yeniden başlatacaktır. Yekpare bir çekirdekte, bir döngü sürücüsü sistemi kilitleyebilir.

 Arabellek taşmalarından kaynaklanan hasarı sınırlayabilme 
Minix 3, belirli arabellek taşmalarını ve arabellek yönetimi sorunlarını ortadan kaldıran dahili iletişim için sabit uzunlukta mesajlar kullanır. Ayrıca, birçok istismar, saldırgan tarafından kontrol edilen belleğe, genellikle taşma arabelleğine işaret eden üzerine yazılmış bir yığın dönüş adresi kullanarak programı bir işlev çağrısından geri dönmesi için kandırmak üzere bir arabelleği taşarak çalışır. Minix 3'te, talimat ve veri alanı bölündüğü ve yürütülebilir alan koruması olarak adlandırılan yalnızca (salt okunur) talimat alanındaki kod yürütülebildiği için bu saldırı hafifletilir. Ancak, yasal olarak yürütülebilir belleğin kötü niyetli bir şekilde çalıştırılmasına dayanan saldırılar (libc'ye dönüş, geri dönüş yönelimli programlama ) bu hafifletme ile engellenmez.

 Çekirdek işlevlerine erişimi kısıtlayabilme 
Aygıt sürücüleri, çekirdek çağrıları yaparak çekirdek hizmetlerini (kullanıcıların adres alanlarına veri kopyalamak gibi) alır. Minix 3 çekirdeği, her sürücü için hangi çağrıları yapmaya yetkili olduğunu belirten bir bit haritasına sahiptir. Monolitik çekirdeklerde, her sürücü yetkili olsun ya da olmasın her çekirdek işlevini çağırabilir.

 G/Ç bağlantı noktalarına erişimi kısıtlayabilme 
Çekirdek ayrıca her sürücünün hangi G/Ç bağlantı noktalarına erişebileceğini söyleyen bir tablo tutar. Bu nedenle, bir sürücü yalnızca kendi G/Ç bağlantı noktalarına dokunabilir. Monolitik çekirdeklerde, hatalı bir sürücü başka bir aygıta ait G/Ç bağlantı noktalarına erişebilir.

 İşletim sistemi bileşenleriyle iletişimi kısıtlayabilme 
Her sürücü ve sunucunun diğer tüm sürücü ve sunucularla iletişim kurması gerekmez. Buna göre, işlem başına bir bit haritası, her işlemin hangi hedeflere gönderim yapabileceğini belirler.

 Ölü veya hasta sürücüleri reenkarne edin 
Reenkarnasyon sunucusu adı verilen özel bir işlem, her aygıt sürücüsüne düzenli aralıklarla ping gönderir. Sürücü ölürse veya pinglere doğru yanıt veremezse, reenkarnasyon sunucusu otomatik olarak onu yeni bir kopyayla değiştirir. Çalışmayan sürücülerin algılanması ve değiştirilmesi kullanıcının herhangi bir işlem yapmasına gerek kalmadan otomatik olarak yapılır. Bu özellik şu anda disk sürücüleri için çalışmamaktadır, ancak bir sonraki sürümde sistem, rastgele erişim belleğinde (RAM) gölgelenecek olan disk sürücülerini bile kurtarabilecektir. Sürücü kurtarma, çalışan işlemleri etkilemez.

 Kesintileri ve mesajları entegre edebilme 
Bir kesme meydana geldiğinde, düşük seviyede uygun sürücüye gönderilen bir bildirime dönüştürülür. Sürücü bir mesaj bekliyorsa, kesmeyi hemen alır; aksi takdirde, bir sonraki sefer bir mesaj almak için RECEIVE bildirim alır. Bu şema, iç içe kesintileri ortadan kaldırır ve sürücü programlamayı kolaylaştırır.

 Mimari 
küçükresim|upright=1.82| Minix 3'ün mimarisi
Görülebileceği gibi, en alt seviyede, yaklaşık 4.000 satırlık koddan (çoğunlukla C'de ve az miktarda da Assembly dilinde) oluşan mikro çekirdek bulunur. Kesintileri, zamanlamayı ve ileti geçişini yönetir. Ayrıca, yetkili sunucuların ve sürücülerin yapabileceği yaklaşık 30 çekirdek çağrısından oluşan bir uygulama programlama arabirimini (API) destekler. Kullanıcı programları bu çağrıları yapamaz. Bunun yerine, sunuculara mesaj gönderen POSIX sistem çağrıları yapabilirler. Çekirdek çağrıları, kesmeleri ayarlamak ve adres alanları arasında veri kopyalamak gibi işlevleri yerine getirir.

Bir sonraki seviyede, her biri ayrı bir kullanıcı alanı işlemi olarak çalışan aygıt sürücüleri vardır. Her biri, disk veya yazıcı gibi bazı G/Ç aygıtlarını kontrol eder. Sürücülerin G/Ç bağlantı noktası alanına erişimi yoktur ve doğrudan G/Ç yönergeleri veremez. Bunun yerine, yazılacak G/Ç bağlantı noktalarının ve yazılacak değerlerin bir listesini veren çekirdek çağrıları yapmaları gerekir. Bunu yaparken küçük bir miktar ek yük olsa da (tipik olarak 500 ns), bu şema çekirdeğin yetkilendirmeyi kontrol etmesini mümkün kılar, böylece örneğin ses sürücüsü diske yazamaz.

Bir sonraki seviyede sunucular var. Bu, neredeyse tüm işletim sistemi işlevlerinin bulunduğu yerdir. Kullanıcı işlemleri, örneğin dosyaları açmak, kapatmak, okumak ve yazmak için dosya sunucusuna mesajlar göndererek dosya hizmeti alır. Buna karşılık, dosya sunucusu, diski kontrol eden disk sürücüsüne mesajlar göndererek disk G/Ç'sini gerçekleştirir.

Anahtar sunuculardan biri reenkarnasyon sunucusudur. Görevi, sağlıklarını periyodik olarak kontrol etmek için diğer tüm sunucuları ve sürücüleri yoklamaktır. Bir bileşen doğru şekilde yanıt vermezse veya çıkarsa veya sonsuz bir döngüye girerse, reenkarnasyon sunucusu (sürücülerin ve sunucuların ana işlemidir) hatalı bileşeni öldürür ve onu yeni bir kopyayla değiştirir. Bu sayede çalışan programlara müdahale etmeden sistem otomatik olarak kendi kendini onarır hale getirilir.

Şu anda reenkarnasyon sunucusu, işlem sunucusu ve mikro çekirdek, güvenilir bilgi işlem tabanının parçalarıdır. Bunlardan herhangi biri başarısız olursa, sistem çöker. Bununla birlikte, Linux ve Windows sistemlerinde olduğu gibi 3-5 milyon satır koddan güvenilir bilgi işlem tabanını yaklaşık 20.000 satıra düşürmek, sistem güvenilirliğini büyük ölçüde artırır.

 Minix 3 ve önceki sürümler arasındaki farklar 
küçükresim|Birkaç Unix benzeri sistem arasındaki ilişkilerin şeması
Minix 1.0, 1.5 ve 2.0, insanların işletim sistemlerinin tasarımı hakkında bilgi edinmelerine yardımcı olacak araçlar olarak geliştirildi.

1987'de piyasaya sürülen Minix 1.0, 12.000 satır C ve biraz x86 derleme diliydi. Minix 1.0'ın çekirdeğinin, bellek yöneticisinin ve dosya sisteminin kaynak kodu kitapta basılıdır. Tanenbaum, Minix'i orijinal olarak o sırada mevcut olan IBM PC ve IBM PC/AT mikrobilgisayarlarıyla uyumluluk için geliştirdi.

1991'de piyasaya sürülen Minix 1.5, MicroChannel IBM PS/2 sistemleri için destek içeriyordu ve ayrıca Atari ST, Commodore Amiga, Apple Macintosh ve Sun Microsystems SPARCstation bilgisayar platformlarını destekleyen Motorola 68000 ve SPARC mimarilerine taşındı. SunOS altında bir kullanıcı işlemi olarak çalışan bir Minix sürümü de mevcuttu.

1997'de piyasaya sürülen Minix 2.0, yalnızca x86 ve Solaris tarafından barındırılan SPARC mimarileri için mevcuttu. Minix-vmd, iki Vrije Universiteit araştırmacısı tarafından oluşturuldu ve X Pencere Sistemi için sanal bellek ve destek eklendi.

Minix 3 de aynı şeyi yapar ve birçok yeni araç ve birçok Unix uygulamasıyla modern bir işletim sistemi sağlar. Prof. Tanenbaum bir keresinde şöyle demişti:

Minix 2 sürümünden bu yana çekirdeğin yapısında da birçok iyileştirme yapılarak sistem daha güvenilir hale getirildi. 
upright=1.1|küçükresim|right|MINIX 3.1.7 running X11 with the EDE
Minix sürüm 3.1.5, 5 Kasım 2009'da yayınlandı. X11, Emacs, vi, cc, GCC, Perl, Python, Almquist kabuğu, Bash, Z kabuğu, FTP istemcisi, SSH istemcisi, Telnet istemcisi, Pine ve 400'ün üzerinde diğer yaygın Unix yardımcı programlarını içerir. X11'in eklenmesiyle bu sürüm salt metin sisteminden geçişi işaret ediyor. Gelecekte geliştirilecek olan bu versiyonun bir başka özelliği de, sistemin aygıt sürücüsü çökmelerine dayanabilmesi ve çoğu durumda çalışan işlemleri etkilemeden bunları otomatik olarak değiştirebilmesidir. Bu sayede Minix kendi kendini onarır ve yüksek güvenilirlik gerektiren uygulamalarda kullanılabilir.

Minix 3.2.0, Şubat 2012'de yayınlandı. Bu sürüm, Clang derleyici, deneysel simetrik çoklu işlem desteği, procfs ve ext2fs dosya sistemi desteği ve GNU Hata Ayıklayıcı (GDB) dahil olmak üzere birçok yeni özelliğe sahiptir. Önyükleyici, libc ve çeşitli yardımcı programlar ve diğer kitaplıklar dahil olmak üzere NetBSD'nin çeşitli bölümleri de yayına entegre edilmiştir.

Minix 3.3.0, Eylül 2014'te piyasaya sürüldü. Bu sürüm, x86'ya ek olarak ARM mimarisini destekleyen ilk sürümdür. Ayrıca, kutudan çıkar çıkmaz çalışan binlerce NetBSD paketiyle bir NetBSD kullanıcı alanını da destekler.

 Maskot 
küçükresim|Minix 3'ün maskotu Rocky Raccoon.
Rocky Raccoon, Minix 3'ün maskotudur.

 MINIXCon 
MINIXCon, Minix ile ilgili konuşmaların, çabaların ve araştırmaların paylaşıldığı bir konferanstır.

2016 yılında bir kez yapılmıştır. MINIXCon2017, sunulan görüşme eksikliği nedeniyle iptal edildi.

 Ayrıca bakınız 
 Minix
 İşletim sistemi çekirdeklerinin karşılaştırılması
 MINIX dosya sistemi
 Bilgi işlem maskotlarının listesi
 Kategori:Bilgisayar maskotları

 Not listesi 

 Kaynakça 

 İleri okumalar 

Building a dependable operating system: fault tolerance in MINIX 3  by Jorrit N. Herder (PDF)
Reorganizing Unix for Reliability  by Jorrit N. Herder, Herbert Bos, Ben Gras, Philip Homburg, and Andrew S. Tanenbaum (PDF)
Modular system programming in MINIX 3  by Jorrit N. Herder, Herbert Bos, Ben Gras, Philip Homburg, and Andrew S Tanenbaum (PDF)
J. N. Herder et al., Modular System Programming in MINIX 3, ;Login, April 2006  (PDF)
Pablo A Pessolani. MINIX4RT: A Real-Time Operating System Based on MINIX 
Building Performance Measurement Tools for the MINIX 3 Operating System, by Rogier Meurs  (PDF)
Design and implementation of the MINIX virtual file system  (PDF)
Reference manual for MINIX 3 Kernel API  (PDF)
Towards a true microkernel operating system  (PDF)
Construction of a Highly Dependable Operating System  (PDF)
Minix 3 and the microkernel experience: Smart Kernel  by Rüdiger Weis (PDF) 
Safe and Automatic Live Update  by Cristiano Giuffrida (PDF)

 Dış bağlantılar 



Kategori:Mikro çekirdekler
Kategori:Eğitsel işletim sistemleri
Kategori:Bilgisayar ortamları
Kategori:2005 yazılımları
Kategori:İncelenmemiş çeviri içeren sayfalar