Sistem 5 init
size hikayenin sadece küçük bir bölümünü anlatacak.
Linux dünyasını etkileyen bir tür miyopi var. İnsanlar "Sistem 5 init
" diye bir şey kullandıklarını düşünüyorlar ve bu hem geleneksel olan hem de başlamak için en iyi yer. Aslında bu da değil.
Gelenek, aslında bu tür insanların ne söylediğini, başlangıç için değil. Sistem 5 init
ve Sistem 5 rc
, AT&T UNIX Sistem 5'e dayanıyor; bu, Linux-Mandrake'in ilk sürümünden hemen sonra şu anda olduğumuz gibi (ilk UNIX'ten hemen sonraydı).
1. Baskı UNIX sadece vardı init
. Olmadı rc
. 1. Baskı çevirici dili init
( kimin kod edilmiş restore ve Warren Toomey ve arkadaşları tarafından sunulan. ) Doğrudan olurken ve 12 respawned getty
süreçleri, 3 kablolu dosya sistemlerine monte bir tablo dahili ve doğrudan a ev dizininden bir program koştu kullanıcı adında mel
. getty
Tablo programı görüntüde doğrudan da oldu.
UNIX Sistem 5'ten sonra "geleneksel" Linux init sisteminin devreye girmesi de on yıldı. 1992'de, Miquel van Smoorenburg (yeniden) bir Linux init
+ yazdı rc
ve bunlarla birlikte insanların şu anda "Sistem 5 init
" olarak adlandırdığı ilgili araçlar, aslında UNIX Sistem 5'in yazılımı olmasa da (ve sadece init
).
Sistem 5 init
/ rc
başlamak için en iyi yer değil ve bilinmesi gereken şeyin yarısını kapsamayan bir systemd bilgisine sahip olsa bile. Init sistem tasarımı alanında (Linux ve BSD'ler için) yalnızca son yirmi yılda gerçekleşen çok fazla çalışma oldu. Her türlü mühendislik kararı tartışıldı, yapıldı, tasarlandı, uygulandı ve uygulandı. Ticari Unices de çok şey yaptı.
Çalışmak ve öğrenmek için mevcut sistemler
İşte bu ikisi dışındaki başlıca init sistemlerinden bazılarının ve (birkaç) göze çarpan noktalarından birinin veya ikisinin eksik bir listesi :
- Joachim Nilsson'un sırası daha insan tarafından okunabilen bir yapılandırma dosyası kullanma yoluna gitti.
- Felix von Leitner'ın emri , bir veritabanı sistem konfigürasyon sistemi, küçük bellek ayak izleri ve başlayanlar arasında başlat / durdur bağımlılıkları için gitti
init
.
- Gerrit Pape'in runitinde daha önce tarif edilenler için sadece spawn dört kabuk komut dosyası yaklaşımı olarak gitti.
- InitNG bağımlılıklara, adlandırılmış hedeflere, çoklu konfigürasyon dosyalarına ve alt işlemler için daha fazla ayar yüküne sahip daha esnek bir yapılandırma sözdizimine sahip olmayı hedeflemiştir.
- lansman , sistemi hiç bir şekilde hizmetler ve bağımlılıklar olarak değil, onlar tarafından tetiklenen olaylar ve işler olarak modelleyerek tamamen yeniden tasarlandı.
- Nosh tasarımı, tüm servis yönetimini (
getty
yumurtlama ve zombilerin ortaya çıkması dahil ) ayrı bir servis yöneticisine itmeyi ve sadece işletim sistemine özel "API" cihazlarını / sembolik bağlarını / dizinlerini ve sistem olaylarını idare etmeyi içerir .
- günah işlemek çok basit bir başlangıçtır. Bu yürütür
/bin/rc.init
kimin işi gibi bir şey kullanabilirsiniz Bunun için, vb dosya sistemi monte programları başlamaktır minirc .
Üstelik yaklaşık 10 yıl önce, daemontools kullanıcıları ve kullanmanın diğerleri arasında tartışma oldu svscan
gibi projelerde yol açtı süreç # 1, olarak Paul JARC en svscan sürecin 1 çalışma olarak , Gerrit Pape fikirleri ve Laurent Bercot en svscan süreci 1 olarak .
Bu da bizi # 1 programlarının yaptığı işleme getiriyor.
İşlem 1 numaralı programlar ne yapar
1 numaralı sürecin ne yapması gerektiği ile ilgili kavramlar, tabiatlarına göre özneldir. Anlamlı bir objektif tasarım kriteri, en azından 1 numaralı sürecin yapması gereken şeydir . Çekirdek üzerine birkaç gereksinim getirir. Ve her zaman, işletim sistemine özgü, yapması gereken çeşitli türde şeyler vardır. Geleneksel olarak # 1 numaralı sürecin ne olduğuna gelince , o zaman biz asgari düzeyde değiliz ve hiç olmadık.
Çeşitli işletim sistemi çekirdeği ve diğer programların, işlemden geçirilemeyecek 1 numaralı işlem için talep ettiği birkaç şey var.
İnsanlar size fork()
işleri yapmanın ve artık işlemlerin ebeveyni olarak davranmanın, işlem # 1'in asıl işlevi olduğunu söyleyecektir . İronik olarak, bu doğru değildir. Artık işlemlerle uğraşmak ( https://unix.stackexchange.com/a/177361/5132'de açıklandığı gibi son Linux çekirdeğinde olduğu gibi ), kişinin işlemden büyük ölçüde 1 numaralı işlemi diğer faktörlere ayırabileceği sistemdir. özel bir servis yöneticisi . Bunların hepsi 1 numaralı işlemden geçen servis yöneticileridir:
- IBM AIX
srcmstr
programı, Sistem Kaynağı Denetleyicisi
- Gerrit
runsvdir
Pape'den runit
- Daniel J. Bernstein var
svscan
daemontools gelen Adam Sampson adlı svscan
dan freedt Bruce Guenter en svscan
daemontools-bis olarak gelen ve Laurent Bercot en s6-svscan
dan s6
- Wayne Marshall
perpd
perp'ten
- Solaris'te Hizmet Yönetimi Tesisi 10
service-manager
nosh dan
Benzer şekilde, https://superuser.com/a/888936/38062 adresinde açıklandığı gibi , tüm /dev/initctl
fikrin işlem # 1'in yakınında hiçbir yerde olması gerekmez. İronik olarak, 1 numaralı süreçten çıkarılabileceğini gösteren merkezi bir sistemdir.
Tersine, zorunlu şeyler init
, yani insanlar genellikle kendi off-the-top-of-the-head tasarımlarda unutmak gibi elden geçirilmeden olarak şeylerdir SIGINT
, SIGPWR
, SIGWINCH
ve benzeri çekirdekten gönderilen ve gönderilen çeşitli sistem durum değişikliği isteklerini yürürlüğe koymak # 1'i işlemek için belirli sinyallerin belirli şeyler ifade ettiğini "bilen" programlardan. (Örneğin: https://unix.stackexchange.com/a/196471/5132 adresinde açıklandığı gibi , BSD araç setleri SIGUSR1
belirli bir anlamı olan "bilir" .)
"API" dosya sistemlerini kurmak veya dosya sistemi önbelleğini temizlemek gibi bir kişinin kaçamayacağı veya yapamamasından büyük zarar göreceği bir kereye mahsus başlatma ve sonlandırma görevleri de vardır .
"API" dosya sistemleriyle başa çıkmanın temelleri, init
1st Edition UNIX işletim sisteminden biraz farklıdır : Birinde programa bağlanmış bir bilgi listesi vardır ve bir mount()
tanesi de listedeki tüm girişlerdir. Bu mekanizması BSD (sic!) Kadar çeşitli sistemlerde init
, delikten sisteme doğru bulacaksınız system-manager
.
"sistemi basit bir kabuk için ayarla"
Gördüğünüz gibi, init=/bin/sh
"API" takılıyken fileystems alamıyor, bir tür yazıldığında exit
( https://unix.stackexchange.com/a/195978/5132 ) ve genel olarak ayrıldığında önbellek boşalmadan ungainly bir şekilde çöküyor sistemi çok az kullanılabilir kılan eylemleri manuel olarak yapmak için (süper) kullanıcıya.
Aslında 1 numaralı programda yapmaktan başka seçeneğin olmadığını görmek ve böylece belirtilen tasarım hedefiniz için sizi iyi bir kursa koymak için en iyi seçeneğiniz Gerrit Pape'in koşusu Felix von'in operasyonundaki örtüşmelere bakmaktır. Leitner'ın bakışı, ve system-manager
nosh paketindeki program. İlk ikisi, minimalist olmak için iki girişimde bulundular, ancak yine de kaçınılması mümkün olmayan şeylerle ilgileniyorlar.
İkincisi, system-manager
programın kapsamlı manuel girişi için , hangi "API" dosya sistemlerinin ne şekilde monte edildiğini, hangi başlatma görevlerinin yerine getirildiğini ve hangi sinyallerin ele alındığını ayrıntılarıyla açıklar; bir sistemde bu tasarım ile sistem yöneticisi vardır sadece üç başka şeyler (hizmet yöneticisi, beraberindeki logger ve durum değişikliklerini çalıştırmak için programı) ve sadece sürecin 1. kaçınılmaz yapmak yumurtlamaya.