Professional Documents
Culture Documents
Bir DFS'de şemaları adlandırmak için üç ana yaklaşım vardır . En basit yaklaşımda, bir
dosya, sistem çapında benzersiz bir adı garanti eden ana bilgisayar adı ve yerel
adının bir kombinasyonu ile tanımlanır. Örneğin, Ibis'te bir dosya, host:local-name
adıyla benzersiz bir şekilde tanımlanır; burada yerel-ad , UNIX benzeri bir yoldur.
İnternet URL sistemi de bu yaklaşımı kullanır. Bu adlandırma şeması, ne konumdan
şeffaf ne de konumdan bağımsızdır. DFS , her biri tam bir geleneksel dosya sistemi
olan yalıtılmış bileşen birimleri koleksiyonu olarak yapılandırılmıştır . Uzak dosyalara
atıfta bulunmak için araçlar sağlanmış olmasına rağmen, bileşen birimleri izole kalır.
Bu planı burada daha fazla dikkate almıyoruz.
İkinci yaklaşım NFS tarafından popüler hale getirildi . NFS , uzak dizinleri yerel
dizinlere eklemek için bir araç sağlar, böylece tutarlı bir dizin ağacı görünümü verir.
Erken NFS sürümleri, yalnızca önceden monte edilmiş uzak dizinlere şeffaf bir şekilde
erişilmesine izin verdi. Otomatik bağlama özelliğinin ortaya çıkışı, bağlama
noktalarının ve dosya yapısı adlarının bir tablosuna dayalı olarak isteğe bağlı olarak
bağlamaların yapılmasına izin verdi. Bileşenler, şeffaf paylaşımı desteklemek için
entegre edilmiştir, ancak bu entegrasyon sınırlıdır ve tek tip değildir, çünkü her
makine ağacına farklı uzak dizinler ekleyebilir. Ortaya çıkan yapı çok yönlüdür.
Saydam adlandırmanın uygulanması, bir dosya adının ilişkili konuma eşlenmesi için
bir hüküm gerektirir. Bu eşlemeyi yönetilebilir tutmak için, dosya kümelerini bileşen
birimlerinde toplamalı ve eşlemeyi tek dosya yerine bileşen-birim temelinde
sağlamalıyız. Bu toplama, idari amaçlara da hizmet eder. UNIX benzeri sistemler, ad-
konum eşleştirmesi sağlamak ve dosyaları yinelemeli olarak dizinlerde toplamak için
hiyerarşik dizin ağacını kullanır.
Machine Translated by Google
Ardından, uzak bir dosyaya erişim isteyen bir kullanıcıyı ele alalım. Dosyayı depolayan
sunucu, adlandırma şemasına göre konumlandırılmıştır ve şimdi gerçek veri aktarımı
gerçekleşmelidir.
Bu aktarımı gerçekleştirmenin bir yolu , erişim isteklerinin sunucuya iletildiği,
sunucu makinesinin erişimleri gerçekleştirdiği ve sonuçlarının kullanıcıya geri iletildiği
bir uzaktan hizmet mekanizmasıdır . Uzaktan hizmeti uygulamanın en yaygın yollarından
biri, Bölüm 3'te tartıştığımız RPC paradigmasıdır. Geleneksel dosya sistemlerindeki disk
erişim yöntemleri ile bir DFS'deki uzaktan hizmet yöntemi arasında doğrudan bir analoji
vardır : uzak hizmeti kullanma yöntem, her erişim isteği için bir disk erişimi
gerçekleştirmeye benzer.
Önbelleğe alma kavramı basittir. Erişim talebini karşılamak için gereken veriler önceden
önbelleğe alınmamışsa, verilerin bir kopyası sunucudan sunucuya getirilir.
Machine Translated by Google
Bir DFS'deki önbelleğe alınmış verilerin ayrıntı düzeyi , bir dosyanın bloklarından bir
dosyanın tamamına kadar değişebilir. Genellikle, tek bir erişimi karşılamak için
gerekenden daha fazla veri önbelleğe alınır, böylece önbelleğe alınan veriler tarafından
birçok erişim sağlanabilir. Bu yordam, disk okuma işlemine çok benzer (Bölüm 14.6.2).
OpenAFS , dosyaları büyük parçalar halinde (64 KB) önbelleğe alır. Burada tartışılan diğer
sistemler, müşteri talebi tarafından yönlendirilen bireysel blokların önbelleğe alınmasını
destekler. Önbelleğe alma biriminin arttırılması, isabet oranını artırır, ancak her bir
ıskalamanın aktarılması için daha fazla veri gerektirdiğinden, ıska cezasını da artırır.
Tutarlılık sorunları için potansiyeli de artırır. Önbelleğe alma biriminin seçilmesi, ağ
aktarım birimi ve RPC protokolü hizmet birimi (bir RPC protokolü kullanılıyorsa) gibi
parametrelerin dikkate alınmasını içerir. Ağ aktarım birimi (Ethernet için, bir paket)
yaklaşık 1,5 KB'dir, bu nedenle önbelleğe alınmış daha büyük veri birimlerinin teslimat
için parçalarına ayrılması ve alım sırasında yeniden birleştirilmesi gerekir.
Blok boyutu ve toplam önbellek boyutu, blok önbelleğe alma şemaları için açıkça
önemlidir. UNIX benzeri sistemlerde ortak blok boyutları 4 KB ve 8 KB'dir . Büyük
önbellekler için (1 MB'ın üzerinde), büyük blok boyutları (8 KB'nin üzerinde) faydalıdır.
Daha küçük önbellekler için, büyük blok boyutları daha az faydalıdır çünkü önbellekte
daha az blok ve daha düşük bir isabet oranı sağlarlar.
Önbelleğe alınan veriler nerede saklanmalıdır - diskte mi yoksa ana bellekte mi? Disk
önbelleklerinin, ana bellek önbelleklerine göre açık bir avantajı vardır: güvenilirdirler.
Önbellek geçici bellekte tutulursa, önbelleğe alınan verilerde yapılan değişiklikler bir
çökme sırasında kaybolur. Ayrıca, önbelleğe alınan veriler diskte tutuluyorsa, kurtarma
sırasında hala oradadırlar ve bunları tekrar getirmeye gerek yoktur. Ana bellek
önbelleklerinin kendilerine göre birçok avantajı vardır:
• Teknoloji daha büyük ve daha ucuz belleğe doğru ilerliyor. Ortaya çıkan performans
hızlanmasının, disk önbelleklerinin avantajlarından daha ağır basacağı tahmin
edilmektedir.
766 Bölüm 19 Ağlar ve Dağıtılmış Sistemler
Machine Translated by Google
• Sunucu önbellekleri (disk G/ Ç'sini hızlandırmak için kullanılır ) , kullanıcı önbelleklerinin nerede
bulunduğuna bakılmaksızın ana bellekte olacaktır; Ana bellek önbelleklerini kullanıcı makinesinde
de kullanırsak, hem sunucular hem de kullanıcılar tarafından kullanılmak üzere tek bir önbelleğe
alma mekanizması oluşturabiliriz.
bu da gecikmeli yazmaların performans avantajlarını azaltır. Bununla birlikte, uzun süre açık
olan ve sık sık değiştirilen dosyalar için, daha sık temizleme ile gecikmeli yazmaya göre bu
politikanın performans avantajları açıktır.
19.8.4 Tutarlılık
Bir istemci makine bazen yerel olarak önbelleğe alınmış bir veri kopyasının ana kopyayla
tutarlı olup olmadığına (ve dolayısıyla kullanılabilir) karar verme sorunuyla karşı karşıya kalır.
İstemci makine, önbelleğe alınmış verilerinin güncel olmadığını belirlerse, daha fazla erişime
izin vermeden önce verilerin güncel bir kopyasını önbelleğe almalıdır.
Önbelleğe alınmış verilerin geçerliliğini doğrulamak için iki yaklaşım vardır:
2. Sunucu tarafından başlatılan yaklaşım. Sunucu, her istemci için önbelleğe aldığı dosyaları
(veya dosya bölümlerini) kaydeder. Sunucu olası bir tutarsızlık algıladığında tepki
vermelidir. Çakışan modlarda iki farklı istemci bir dosyayı önbelleğe aldığında
tutarsızlık olasılığı oluşur. UNIX semantiği ( Bölüm 15.7) uygulanırsa, sunucunun aktif
bir rol oynamasını sağlayarak olası tutarsızlığı çözebiliriz. Bir dosya açıldığında
sunucuya bilgi verilmeli ve her açılış için istenen mod (okuma veya yazma) belirtilmelidir.
Sunucu daha sonra bir dosyanın eşzamanlı olarak çakışan modlarda açıldığını
algıladığında, söz konusu dosya için önbelleğe almayı devre dışı bırakarak harekete
geçebilir. Aslında, önbelleğe almanın devre dışı bırakılması, uzaktan hizmet çalışma
moduna geçilmesine neden olur.
Küme tabanlı bir DFS'de, önbellek tutarlılığı sorunu, bir meta veri sunucusunun ve
çeşitli veri sunucularında çoğaltılmış birkaç dosya verisi parçasının varlığıyla daha karmaşık
hale getirilir. Daha önceki HDFS ve GFS örneklerimizi kullanarak bazı farklılıkları
karşılaştırabiliriz. HDFS , yalnızca ekleme yazma işlemlerine (rastgele yazma yok) ve tek bir
dosya yazıcısına izin verirken, GFS eşzamanlı yazarlarla rastgele yazmalara izin verir. Bu,
HDFS için basitleştirirken GFS için yazma tutarlılığı garantilerini büyük ölçüde karmaşıklaştırır .
GFS, HDFS ve diğer büyük ölçekli DFS'ler , POSIX olmayan bir API dışa aktarır , bu nedenle
dizinleri NFS ve OpenAFS'nin yaptığı gibi şeffaf bir şekilde normal kullanıcı makinelerine
eşleyemezler. Bunun yerine, sistemlerin bu DFS'lere erişmesi için istemci kodunun kurulu olması
gerekir. Bununla birlikte, NFS'nin bu tür DFS'lerin üzerine monte edilmesine izin vermek için diğer
yazılım katmanları hızla geliştirilmektedir . Bu, küme tabanlı DFS'lerin ölçeklenebilirliğinden ve
diğer avantajlarından yararlanırken yerel işletim sistemi yardımcı programlarının ve kullanıcıların
doğrudan DFS üzerindeki dosyalara erişmesine izin vereceği için çekicidir.
Bu yazı itibariyle, açık kaynaklı HDFS NFS Ağ Geçidi, NFS Sürüm 3'ü destekler ve
HDFS ile NFS sunucu yazılımı arasında bir proxy olarak çalışır.
HDFS şu anda rastgele yazmaları desteklemediğinden, HDFS NFS Ağ Geçidi de bu özelliği
desteklemez. Bu, yalnızca bir bayt değiştirilse bile bir dosyanın silinmesi ve sıfırdan yeniden
oluşturulması gerektiği anlamına gelir. Ticari kuruluşlar ve araştırmacılar bu sorunu ele almakta
ve bir DFS'nin, paralel hesaplama modüllerinin (MapReduce gibi), dağıtılmış veritabanlarının ve
NFS aracılığıyla dışa aktarılan dosya birimlerinin yığınlanmasına izin veren yığınlanabilir çerçeveler
inşa etmektedir.
Küme tabanlı bir DFS'den daha az karmaşık, ancak bir istemci-sunucu DFS'sinden
daha karmaşık olan başka bir dosya sistemi türü, kümelenmiş bir dosya sistemi (CFS)
veya paralel dosya sistemidir (PFS). Bir CFS tipik olarak bir LAN üzerinden çalışır. Bu
sistemler önemlidir ve yaygın olarak kullanılmaktadır ve bu nedenle ayrıntılı olarak
ele almasak da burada anılmayı hak etmektedir. Yaygın CFS'ler arasında Lustre ve
GPFS bulunur, ancak başkaları da vardır. Bir CFS esas olarak veri depolayan N
sistemlerini ve bu verilere erişen Y sistemlerini tek bir istemci-sunucu örneği olarak
ele alır. Örneğin NFS, sunucu başına adlandırma özelliğine sahipken ve iki ayrı NFS
sunucusu genellikle iki farklı adlandırma şeması sağlarken, bir CFS , çeşitli
sunuculardaki çeşitli depolama aygıtlarındaki çeşitli depolama içeriklerini tek tip,
şeffaf bir ad alanına örer. GPFS'nin kendi dosya sistemi yapısı vardır, ancak Lustre,
dosya depolama ve yönetimi için ZFS gibi mevcut dosya sistemlerini kullanır. Daha
fazla bilgi edinmek için bkz . http://lustre.org.
Dağıtılmış dosya sistemleri günümüzde yaygın olarak kullanılmaktadır ve LAN'lar
içinde, küme ortamları içinde ve WAN'lar arasında dosya paylaşımı sağlamaktadır.
Böyle bir sistemin uygulanmasının karmaşıklığı, özellikle DFS'nin yaygın olarak
benimsenmesi için işletim sisteminden bağımsız olması gerektiği ve uzun mesafeler,
ticari donanım arızaları, bazen zayıf ağlar ve sürekli artan kullanıcılar ve iş yükleri.
19.10 Özet
• Dağıtılmış sistem, belleği veya saati paylaşmayan bir işlemciler topluluğudur.
Bunun yerine, her işlemcinin kendi yerel belleği vardır ve işlemciler, yüksek hızlı
veri yolları ve İnternet gibi çeşitli iletişim hatları aracılığıyla birbirleriyle iletişim
kurar. Dağıtılmış bir sistemdeki işlemciler, boyut ve işlev bakımından farklılık
gösterir.
• Dağıtılmış bir sistem, kullanıcıya tüm sistem kaynaklarına erişim sağlar.
Paylaşılan bir kaynağa erişim, veri geçişi, hesaplama geçişi veya süreç geçişi ile
sağlanabilir. Erişim, kullanıcı tarafından belirlenebilir veya işletim sistemi ve
uygulamalar tarafından dolaylı olarak sağlanabilir.
Alıştırmalar 769
Machine Translated by Google
• Uzak bir dosyaya erişim talepleri genellikle iki tamamlayıcı yöntemle işlenir.
Uzaktan hizmet ile erişim istekleri sunucuya iletilir. Sunucu makine erişimleri
gerçekleştirir ve sonuçlar istemciye geri iletilir. Önbelleğe alma ile, erişim
talebini karşılamak için gereken veriler önceden önbelleğe alınmamışsa,
verilerin bir kopyası sunucudan istemciye getirilir. Erişimler, önbelleğe alınmış
kopya üzerinde gerçekleştirilir.
Önbelleğe alınmış kopyaları ana dosyayla tutarlı tutma sorunu, önbellek
tutarlılığı sorunudur.
Machine Translated by Google
19.1 Yönlendiricilerin yayın paketlerini ağlar arasında geçirmesi neden kötü bir fikir
olsun? Bunu yapmanın avantajları ne olurdu?
19.2 Uzak etki alanlarında bulunan bilgisayarlar için ad çevirilerini önbelleğe
almanın avantajlarını ve dezavantajlarını tartışın.
19.3 Şeffaflık kalitesine sahip bir ağ sistemi uygulamak için tasarımcıların çözmesi
gereken iki zorlu sorun nedir?
19.4 Sağlam bir dağıtılmış sistem oluşturmak için ne tür arızaların meydana
gelebileceğini bilmelisiniz.
19.5 Gönderdiğiniz mesajın hedefine güvenli bir şekilde ulaştığını bilmek her zaman
önemli midir? Cevabınız “evet” ise nedenini açıklayınız. Cevabınız “hayır”
ise uygun örnekler veriniz.
19.6 Dağıtılmış bir sistemin A ve B olmak üzere iki yeri vardır.
Aşağıdakiler arasında ayrım yapabilir: a.
[Peterson ve Davie (2012)] ve [Kurose ve Ross (2017)] bilgisayar ağlarına genel bir
bakış sağlar. İnternet ve protokolleri [Comer (2000)]'de açıklanmıştır. TCP/IP kapsamı
[Fall ve Stevens (2011)] ve [Stevens (1995)]'te bulunabilir. UNIX ağ programlaması
[Steven et al. (2003)].
Ethernet ve WiFi standartları ve hızları hızla gelişiyor. Güncel IEEE 802.3 Ethernet
standartları http://standards.ieee.org/about/get/ 802/802.3.html adresinde
bulunabilir. Güncel IEEE 802.11 Kablosuz LAN standartları şu adreste bulunabilir:
http://standards.ieee.org/about/get/802/802.11.html.
Sun'ın ağ dosya sistemi (NFS) , [Callaghan (2000)] tarafından açıklanmıştır. bilgi
OpenAFS hakkında bilgi http://www.openafs.org adresinde mevcuttur .
Google dosya sistemiyle ilgili bilgiler [Ghe mawat et al. (2003)]. Google MapReduce yöntemi
http://research.google.com/archive/mapreduce.html adresinde açıklanmıştır. Hadoop dağıtılmış
dosya sistemi [K. Shvachko ve Chansler (2010)] ve Hadoop çerçevesi http://hadoop.apache.org/
adresinde tartışılmaktadır.
bibliyografya 771
bibliyografya
[Comer (2000)] D. Comer, TCP/IP ile İnternet Çalışması, Cilt I, Dördüncü Baskı,
Prentice Salonu (2000).
[K. Shvachko ve Chansler (2010)] SRK Shvachko, H. Kuang ve R. Chansler, “Hadoop Dağıtılmış
Dosya Sistemi” (2010).
[Kurose ve Ross (2017)] J. Kurose ve K. Ross, Computer Networking— A Top– Down Approach,
Seventh Edition, Addison-Wesley (2017).
[Steven et al. (2003)] R. Steven, B. Fenner ve A. Rudoff, Unix Ağ Programı ming, Cilt 1: The
Sockets Networking API, Üçüncü Baskı, John Wiley and Sons (2003).
Egzersizler EX-56
Bölüm 19 Alıştırmalar
19.7 Hesaplama geçişi ile süreç geçişi arasındaki fark nedir? Hangisinin uygulanması
daha kolaydır ve neden?
19.8 OSI ağ modeli yedi işlevsellik katmanı belirtse de, çoğu bilgisayar sistemi bir ağı
uygulamak için daha az katman kullanır . Neden daha az katman kullanıyorlar?
Daha az katman kullanılması hangi sorunlara neden olabilir?
19.9 Bir Ethernet segmentindeki sistemlerin hızının iki katına çıkarılmasının, UDP
aktarım protokolü kullanıldığında neden ağ performansının düşmesine neden
olabileceğini açıklayın . Hangi değişiklikler bu sorunu çözmeye yardımcı olabilir?
19.10 Yönlendiriciler için özel donanım aygıtları kullanmanın avantajları nelerdir? Genel
amaçlı bilgisayarlara kıyasla bu cihazları kullanmanın dezavantajları nelerdir?
19.11 Bir ad sunucusunu kullanmak hangi yönlerden statik ana bilgisayar tablolarını kullanmaktan daha iyidir?
Ad sunucularıyla ilişkili sorunlar veya komplikasyonlar nelerdir?
Çeviri isteklerini karşılamak için oluşturulan trafik adı sunucularının miktarını
azaltmak için hangi yöntemleri kullanabilirsiniz?
19.13 OSI ağ modelinin alt katmanları, mesajlar için teslim garantisi olmaksızın datagram
hizmeti sağlar. Güvenilirlik sağlamak için TCP gibi bir taşıma katmanı protokolü
kullanılır. Mümkün olan en düşük katmanda güvenilir mesaj teslimini
desteklemenin avantajlarını ve dezavantajlarını tartışın.
adlarından: • www.wiley.com
• www.cs.yale.edu •
www.apple.com •
www.westminstercollege.edu •
www.ietf.org
19.15 Bir DNS adı, www.google.com gibi birden çok sunucuyla eşlenebilir.
Ancak Şekil 19.4'teki programı çalıştırırsak sadece bir IP adresi alırız . Programı ,
yalnızca bir tane yerine tüm sunucu IP adreslerini gösterecek şekilde değiştirin.
19.16 Orijinal HTTP protokolü , temel ağ protokolü olarak TCP/IP'yi kullandı. Her sayfa,
grafik veya uygulama için ayrı bir TCP oturumu oluşturuldu, kullanıldı ve yıkıldı.
TCP/IP bağlantılarını oluşturma ve yok etme ek yükü nedeniyle, bu uygulama
yönteminden kaynaklanan performans sorunları. TCP yerine UDP kullanmak iyi
bir alternatif olur mu? HTTP performansını iyileştirmek için başka ne gibi
değişiklikler yapabilirsiniz ?
EX-57
Machine Translated by Google
19.17 Com'u yapmanın avantajları ve dezavantajları nelerdir?
puter ağı kullanıcıya şeffaf mı?
19.18 Merkezi bir sistemdeki dosya sistemine kıyasla DFS'nin faydaları nelerdir ?
19.19 Aşağıdaki iş yüklerinin her biri için, küme tabanlı bir DFS modelinin mi yoksa bir istemci-
sunucu DFS modelinin mi iş yükünü en iyi şekilde idare edeceğini belirleyin.
Cevaplarınızı açıklayın.
19.21 Bir müşteri hangi koşullar altında bir konum şeffaf DFS'yi tercih eder? Hangi
koşullar altında konumdan bağımsız bir DFS'yi tercih ederdi? Bu tercihlerin
nedenlerini tartışın.
19.22 Bir sistem için dağıtılmış bir sistemin hangi yönlerini seçerdiniz?
tamamen güvenilir bir ağda mı çalışıyorsunuz?
19.23 Disk bloklarını yerel olarak, bir istemci sisteminde ve bir sunucuda uzaktan
önbelleğe alma tekniklerini karşılaştırın ve karşılaştırın.
19.24 Hangi şema, çok kullanıcılı bir DFS'de daha fazla alan tasarrufu sağlar : dosya
düzeyinde tekilleştirme mi yoksa blok düzeyinde tekilleştirme mi?
Cevabını açıkla.
19.25 Tekilleştirme kullanan bir DFS'de ne tür ekstra meta veri bilgilerinin depolanması
gerekir ?
Machine Translated by Google
Machine Translated by Google
Dokuzuncu Bölüm
Durum çalışmaları
Şimdi bu kitapta daha önce açıklanan kavramları gerçek işletim sistemlerini
inceleyerek bütünleştiriyoruz. Bu tür iki sistemi ayrıntılı olarak ele alıyoruz— Linux
ve Windows 10.
Linux'u birkaç nedenden dolayı seçtik: popüler, ücretsiz olarak erişilebilir,
ve tam özellikli bir UNIX sistemini temsil eder. Bu, bir öğrenciye
işletim sistemleri, gerçek işletim sistemi kaynak kodunu okuma ve değiştirme fırsatı
sunar.
Windows 10 ile öğrenci, tasarımı ve uygulaması diğerlerinden çok farklı olan
modern bir işletim sistemini inceleyebilir.
UNIX'in . Microsoft'un bu işletim sistemi, masaüstü işletim sistemi olarak çok
popülerdir, ancak aynı zamanda bir işletim sistemi olarak da kullanılabilir.
mobil cihazlar. Windows 10 modern bir tasarıma sahiptir ve bir görünüm ve
Microsoft tarafından üretilen önceki işletim sistemlerinden çok farklı hissediyorum.
Machine Translated by Google
Machine Translated by Google
20 BÖLÜM
Linux Sistemi
Robert Love tarafından güncellendi
BÖLÜM HEDEFLERİ
Linux, diğer UNIX sistemlerine çok benziyor ve hissediyor ; gerçekten de, UNIX
uyumluluğu, Linux projesinin ana tasarım hedefi olmuştur. Ancak Linux, çoğu
UNIX sisteminden çok daha gençtir . Gelişimi 1991'de Finli bir üniversite öğrencisi
olan Linus Torvalds'ın 80386 işlemci için küçük ama bağımsız bir çekirdek
oluşturmaya başlamasıyla başladı, Intel'in PC uyumlu CPU'lar serisindeki ilk
gerçek 32-bit işlemci.
775
776 Bölüm
Machine Translated by Google 20 Linux Sistemi
Geliştirilmesinin başlarında, Linux kaynak kodu, hem ücretsiz olarak hem de
minimum dağıtım kısıtlamaları ile İnternette ücretsiz olarak sunuldu.
Sonuç olarak, Linux'un tarihi, dünyanın her yerinden birçok geliştiricinin neredeyse
yalnızca İnternet üzerinden karşılık gelen işbirliğinden biri olmuştur.
UNIX sistem hizmetlerinin küçük bir alt kümesini kısmen uygulayan ilk çekirdekten ,
Linux sistemi, modern bir UNIX sisteminden beklenen tüm işlevleri içerecek şekilde
büyümüştür .
İlk günlerinde, Linux geliştirmesi büyük ölçüde merkezi işletim sistemi çekirdeği
etrafında dönüyordu - tüm sistem kaynaklarını yöneten ve doğrudan bilgisayar
donanımıyla etkileşime giren çekirdek, ayrıcalıklı yönetici. Tam bir işletim sistemi
üretmek için elbette bu çekirdekten çok daha fazlasına ihtiyacımız var.
Bu nedenle, Linux çekirdeği ile eksiksiz bir Linux sistemi arasında bir ayrım yapmamız
gerekiyor. Linux çekirdeği , Linux topluluğu tarafından sıfırdan geliştirilen orijinal bir
yazılım parçasıdır. Linux sistemi, bugün bildiğimiz şekliyle, bazıları sıfırdan yazılmış,
diğerleri diğer geliştirme projelerinden ödünç alınmış ve yine diğerleri diğer ekiplerle
işbirliği içinde oluşturulmuş çok sayıda bileşen içerir.
Halka sunulan ilk Linux çekirdeği, 14 Mayıs 1991 tarihli 0.01 sürümüydü. Ağ bağlantısı
yoktu, yalnızca 80386 uyumlu Intel işlemciler ve PC donanımı üzerinde çalışıyordu ve
son derece sınırlı aygıt sürücüsü desteği vardı. Sanal bellek alt sistemi de oldukça
basitti ve bellek eşlemeli dosyalar için destek içermiyordu; bununla birlikte, bu erken
enkarnasyon bile, yazma üzerine kopyalama ve korumalı adres boşluklarına sahip
paylaşılan sayfaları destekledi. Desteklenen tek dosya sistemi Minix dosya sistemiydi,
çünkü ilk Linux çekirdekleri bir Minix platformunda çapraz olarak geliştirildi.
Bir sonraki dönüm noktası olan Linux 1.0, 14 Mart 1994'te yayınlandı. Bu sürüm,
Linux çekirdeğinin üç yıllık hızlı gelişimini sonuçlandırdı. Belki de en büyük yeni
özellik ağ iletişimiydi: 1.0, UNIX'in standart TCP/IP ağ protokolleri için desteğin yanı
sıra ağ programlaması için BSD uyumlu bir soket arabirimini içeriyordu. Ethernet
üzerinden veya ( PPP veya SLIP protokolleri aracılığıyla) seri hatlar veya modemler
üzerinden IP çalıştırmak için aygıt sürücüsü desteği eklendi .
1.0 çekirdeği ayrıca orijinal Minix dosya sisteminin sınırlamaları olmaksızın yeni,
çok gelişmiş bir dosya sistemi içeriyordu ve yüksek performanslı disk erişimi için bir
dizi SCSI denetleyicisini destekledi. Geliştiriciler vir-
20.1 Linux Geçmişi 777
Machine Translated by Google
Bu noktada, 1.1 çekirdek akışında geliştirme başladı, ancak daha sonra 1.0 için çok
sayıda hata düzeltme yaması yayınlandı. Linux çekirdekleri için standart numaralandırma
kuralı olarak bir model benimsenmiştir. 1.1 veya 2.5 gibi tek küçük sürüm numarasına
sahip çekirdekler, geliştirme çekirdekleridir; çift numaralı küçük sürüm numaraları,
kararlı üretim çekirdekleridir. Kararlı çekirdekler için güncellemeler yalnızca düzeltici
sürümler olarak düşünülürken, geliştirme çekirdekleri daha yeni ve nispeten test
edilmemiş işlevler içerebilir.
Göreceğimiz gibi, bu kalıp sürüm 3'e kadar yürürlükte kaldı.
Mart 1995'te 1.2 çekirdek yayınlandı. Bu sürüm, 1.0 sürümüyle neredeyse aynı
işlevsellik geliştirmesini sunmadı, ancak yeni PCI donanım veri yolu mimarisi de dahil
olmak üzere çok daha geniş bir donanım yelpazesini destekledi. Geliştiriciler , PC
bilgisayarları için DOS işletim sisteminin öykünmesine izin vermek için, 80386 CPU'nun
sanal 8086 modunu destekleyen, bilgisayara özgü başka bir özellik eklediler . Ayrıca, IP
uygulamasını muhasebe ve güvenlik duvarı desteği ile güncellediler. Dinamik olarak
yüklenebilen ve yüklenemeyen çekirdek modülleri için basit destek de sağlandı.
1.2 çekirdeği, yalnızca PC'ye yönelik son Linux çekirdeğiydi. Linux 1.2 için kaynak
dağıtımı, SPARC, Alpha ve MIPS CPU'ları için kısmen uygulanan desteği içeriyordu ,
ancak bu diğer mimarilerin tam entegrasyonu, kararlı 1.2 çekirdeğinin yayınlanmasından
sonra başlamadı.
Linux 1.2 sürümü, daha geniş donanım desteğine ve mevcut işlevlerin daha eksiksiz
uygulamalarına odaklandı. O sırada pek çok yeni işlev geliştiriliyordu, ancak yeni kodun
ana çekirdek kaynak koduna entegrasyonu, kararlı 1.2 çekirdeğin yayınlanmasından
sonraya ertelendi. Sonuç olarak, 1.3 geliştirme akışı çekirdeğe eklenen çok sayıda yeni
işlevsellik gördü.
Bu çalışma Haziran 1996'da Linux sürüm 2.0 olarak yayınlandı. Bu sürüme, iki
önemli yeni özellik nedeniyle büyük bir sürüm numarası artışı verildi: 64 bit yerel Alfa
bağlantı noktası dahil olmak üzere birden çok mimari desteği ve simetrik çoklu işlem
(SMP) desteği. Ek olarak, bellek yönetim kodu, blok aygıtların önbelleğe alınmasından
bağımsız olarak dosya sistemi verileri için birleşik bir önbellek sağlamak üzere önemli
ölçüde iyileştirildi. Bu değişikliğin bir sonucu olarak, çekirdek, büyük ölçüde artan dosya
sistemi ve sanal bellek performansı sundu. İlk kez, dosya sistemi önbelleğe alma, ağ
bağlantılı dosya sistemlerine genişletildi ve yazılabilir bellek eşlemeli bölgeler de
desteklendi. Diğer önemli iyileştirmeler arasında dahili çekirdek iş parçacıklarının
eklenmesi, yüklenebilir modüller arasındaki bağımlılıkları ortaya çıkaran bir mekanizma,
isteğe bağlı olarak modüllerin otomatik yüklenmesi için destek, dosya sistemi kotaları
ve POSIX uyumlu gerçek zamanlı işlem zamanlama sınıfları yer aldı.
778 Bölüm
Machine Translated by Google 20 Linux Sistemi
1999'da Linux 2.2'nin piyasaya sürülmesiyle iyileştirmeler devam etti. UltraSPARC
sistemlerine bir bağlantı noktası eklendi. Ağ iletişimi, daha esnek güvenlik duvarı,
gelişmiş yönlendirme ve trafik yönetimi ve TCP geniş pencere ve seçici onaylama
desteği ile geliştirildi. Acorn, Apple ve NT diskleri artık okunabiliyordu ve NFS , yeni
bir çekirdek modu NFS arka plan programı ile geliştirildi. Simetrik çok işlemcili (SMP)
performansını iyileştirmek için sinyal işleme, kesintiler ve bazı G/ Ç'ler öncekinden
daha hassas bir düzeyde kilitlendi .
Çekirdeğin 2.4 ve 2.6 sürümlerindeki ilerlemeler, SMP sistemleri, günlük kaydı
dosya sistemleri için artan desteği ve bellek yönetimi ve blok G/Ç sistemlerinde
geliştirmeleri içeriyordu. İş parçacığı zamanlayıcı, sürüm 2.6'da değiştirildi ve verimli
bir O(1) zamanlama algoritması sağlandı. Ek olarak, 2.6 çekirdeği önleyiciydi ve
çekirdek modunda çalışırken bile bir iş parçacığının önceden alınmasına izin veriyordu.
Linux çekirdeği sürüm 3.0, Temmuz 2011'de piyasaya sürüldü. 2'den 3'e büyük
sürüm artışı, Linux'un yirminci yıldönümünü anmak için gerçekleşti.
Yeni özellikler arasında iyileştirilmiş sanallaştırma desteği, yeni bir sayfa geri yazma özelliği, bellek
yönetim sisteminde iyileştirmeler ve yine yeni bir iş parçacığı planlayıcısı olan Tamamen Adil
Zamanlayıcı (CFS) yer alıyor.
Linux çekirdeği sürüm 4.0, Nisan 2015'te piyasaya sürüldü. Bu sefer ana sürüm
yükseltmesi tamamen keyfiydi; Linux çekirdeği geliştiricileri, her zamankinden daha
büyük küçük sürümlerden bıktı. Bugün Linux çekirdek sürümleri, yayın sıralamasından
başka bir şey ifade etmez. 4.0 çekirdek serisi, yeni mimariler, geliştirilmiş mobil
işlevsellik ve birçok yinelemeli iyileştirme için destek sağladı. Bu bölümün geri
kalanında bu en yeni çekirdeğe odaklanacağız.
Araçların bu paylaşımı her iki yönde de işe yaradı. Linux'un ana sistem kitaplıkları,
GNU projesi tarafından oluşturuldu, ancak Linux topluluğu, eksiklikleri, verimsizlikleri
ve hataları ele alarak kitaplıkları büyük ölçüde geliştirdi. GNU C derleyicisi (gcc) gibi
diğer bileşenler, doğrudan Linux'ta kullanılmak için zaten yeterince yüksek kalitedeydi.
Linux altındaki ağ yönetim araçları, ilk olarak 4.3 BSD için geliştirilen koddan
türetilmiştir , ancak FreeBSD gibi daha yeni BSD türevleri, karşılığında Linux'tan kod
ödünç almıştır. Bu paylaşıma örnek olarak Intel kayan nokta öykünmesi matematik
kitaplığı ve PC ses donanımı aygıt sürücüleri dahildir.
Standart belge, çeşitli sistem bileşenleri arasında uyumluluğu sağlamanın bir yolu
olarak Linux topluluğu tarafından da korunur. Bu standart, standart bir Linux dosya
sisteminin genel düzenini belirtir; yapılandırma dosyalarının, kitaplıkların, sistem ikili
dosyalarının ve çalışma zamanı veri dosyalarının hangi dizin adları altında saklanması
gerektiğini belirler.
PC'ler daha güçlü hale geldikçe ve bellek ve sabit diskler daha ucuz hale geldikçe,
orijinal, minimalist Linux çekirdekleri daha fazla UNIX işlevselliği uygulamak için
büyüdü. Hız ve verimlilik hala önemli tasarım hedefleridir, ancak Linux üzerindeki
çok yakın tarihli ve güncel çalışmalar üçüncü bir ana tasarım hedefine odaklanmıştır:
standardizasyon. Halihazırda mevcut olan UNIX uygulamalarının çeşitliliği için
ödenen ücretlerden biri, biri için yazılan kaynak kodun bir diğeri üzerinde derlenmesi
veya doğru şekilde çalışması gerekmeyebileceğidir. Aynı sistem çağrıları iki farklı
UNIX sisteminde mevcut olsa bile, tam olarak aynı şekilde davranmaları gerekmez.
POSIX standartları , işletim sistemi davranışının farklı yönleri için bir dizi belirtim
içerir. Ortak işletim sistemi işlevselliği ve süreç dizileri ve gerçek zamanlı işlemler gibi
uzantılar için POSIX belgeleri vardır . Linux, ilgili POSIX belgelerine uyacak şekilde
tasarlanmıştır ve en az iki Linux dağıtımı resmi POSIX sertifikası almıştır.
UNIX dünyasında pek çok başka standart vardır , ancak bu standartlarla ilgili olarak
Linux'un tam sertifikasyonu bazen yavaşlar çünkü sertifikalandırma genellikle yalnızca
bir ücret karşılığında sağlanır ve bir işletim sisteminin çoğu standartla uyumluluğunun
onaylanması için gereken masraf çok büyüktür. Bununla birlikte, geniş bir uygulama
tabanını desteklemek herhangi bir işletim sistemi için önemlidir, bu nedenle standartların
uygulanması, resmi sertifika olmasa bile Linux geliştirme için ana hedeftir. Temel POSIX
standardına ek olarak, Linux şu anda POSIX iş parçacığı uzantılarını (Pthreads) ve gerçek
zamanlı süreç kontrolü için POSIX uzantılarının bir alt kümesini desteklemektedir.
1. Çekirdek. Çekirdek, sanal bellek ve işlemler gibi şeyler de dahil olmak üzere işletim
sisteminin tüm önemli soyutlamalarını sürdürmekten sorumludur.
Şekil 20.1, tam bir Linux sistemini oluşturan çeşitli bileşenleri göstermektedir.
Buradaki en önemli ayrım, çekirdek ve diğer her şey arasındadır. Tüm çekirdek kodu,
işlemcinin ayrıcalıklı modunda yürütülür
sistem kullanıcı
kullanıcı
yönetimi programları derleyiciler
süreçler
yardımcı programlar
Linux çekirdeği
Çeşitli modern işletim sistemleri, çekirdek iç yapıları için bir mesaj ileten mimariyi
benimsemiş olsalar da, Linux, UNIX'in tarihsel modelini korur: çekirdek, tek, monolitik
bir ikili olarak oluşturulur. Bunun ana nedeni performanstır. Tüm çekirdek kodu ve veri
yapıları tek bir adres alanında tutulduğundan, bir iş parçacığı bir işletim sistemi işlevini
çağırdığında veya bir donanım kesmesi teslim edildiğinde bağlam anahtarlarına gerek
yoktur. Dahası, çekirdek, daha karmaşık süreçler arası iletişimi (IPC) değil, nispeten
ucuz C işlevi çağırmayı kullanarak çeşitli alt sistemler arasında veri iletebilir ve isteklerde
bulunabilir . Bu tek adres alanı, yalnızca çekirdek zamanlamayı ve sanal bellek kodunu
değil, tüm aygıt sürücüleri, dosya sistemleri ve ağ kodu dahil olmak üzere tüm çekirdek
kodunu içerir.
Tüm çekirdek bileşenleri aynı eritme potasını paylaşsa da, modülerlik için hala yer
var. Kullanıcı uygulamalarının gerekli bir kod parçasını çekmek için çalışma zamanında
paylaşılan kitaplıkları yükleyebildiği gibi, Linux çekirdeği de çalışma zamanında
modülleri dinamik olarak yükleyebilir (ve kaldırabilir). Çekirdeğin hangi modüllerin
yüklenebileceğini önceden bilmesi gerekmez - bunlar gerçekten bağımsız yüklenebilir
bileşenlerdir.
Linux çekirdeği, Linux işletim sisteminin çekirdeğini oluşturur. İşlemleri yönetmek
ve iş parçacıklarını çalıştırmak için gerekli tüm işlevleri sağlar ve donanım kaynaklarına
tahkim edilmiş ve korumalı erişim sağlamak için sistem hizmetleri sağlar. Çekirdek, bir
işletim sistemi olarak nitelendirilmek için gereken tüm özellikleri uygular. Ancak kendi
başına, Linux çekirdeği tarafından sağlanan işletim sistemi tam bir UNIX sistemi
değildir. UNIX'in işlevsellik ve davranışının çoğundan yoksundur ve sağladığı özellikler,
mutlaka bir UNIX uygulamasının görünmelerini beklediği biçimde değildir. Çalışan
uygulamalar tarafından görülebilen işletim sistemi arabirimi, doğrudan çekirdek
tarafından korunmaz. Bunun yerine, uygulamalar sistem kitaplıklarına çağrı yapar ve
bu da gerektiğinde işletim sistemi hizmetlerini çağırır.
Linux sistemi, hem sistem yardımcı programları hem de kullanıcı yardımcı programları
olmak üzere çok çeşitli kullanıcı modu programları içerir. Sistem yardımcı programları, ağ
arabirimlerini kurmak ve sisteme kullanıcı eklemek ve sistemden kullanıcı çıkarmak için olanlar
gibi, sistemi başlatmak ve ardından yönetmek için gerekli tüm programları içerir. Kullanıcı
yardımcı programları da sistemin temel çalışması için gereklidir, ancak çalıştırmak için
yükseltilmiş ayrıcalıklar gerektirmez. Dosya kopyalama, dizin oluşturma ve metin dosyalarını
düzenleme gibi basit dosya yönetimi yardımcı programlarını içerirler. En önemli kullanıcı
yardımcı programlarından biri, UNIX sistemlerinde standart komut satırı arabirimi olan
kabuktur . Linux birçok kabuğu destekler; en yaygın olanı bourne tekrar kabuğudur (bash).
Linux çekirdeği, isteğe bağlı olarak çekirdek kodunun isteğe bağlı bölümlerini yükleme ve
boşaltma yeteneğine sahiptir. Bu yüklenebilir çekirdek modülleri ayrıcalıklı çekirdek modunda
çalışır ve sonuç olarak üzerinde çalıştıkları makinenin tüm donanım özelliklerine tam erişime
sahiptir. Teoride, bir çekirdek modülünün ne yapmasına izin verildiği konusunda herhangi bir
kısıtlama yoktur. Diğer şeylerin yanı sıra, bir çekirdek modülü bir aygıt sürücüsü, bir dosya
sistemi veya bir ağ protokolü uygulayabilir.
Çekirdek modülleri birkaç nedenden dolayı uygundur. Linux'un kaynak kodu ücretsizdir,
bu nedenle çekirdek kodu yazmak isteyen herkes değiştirilmiş bir çekirdeği derleyebilir ve bu
yeni işlevselliğe yeniden başlayabilir. Ancak, tüm çekirdeği yeniden derlemek, yeniden
bağlamak ve yeniden yüklemek, yeni bir sürücü geliştirirken üstlenilmesi hantal bir döngüdür.
Çekirdek modülleri kullanıyorsanız, yeni bir sürücüyü test etmek için yeni bir çekirdek
oluşturmanız gerekmez; sürücü kendi başına derlenebilir ve halihazırda çalışan çekirdeğe
yüklenebilir. Tabii ki, yeni bir sürücü yazıldığında, bir modül olarak dağıtılabilir, böylece diğer
kullanıcılar, çekirdeklerini yeniden oluşturmak zorunda kalmadan bundan yararlanabilir.
Bu son noktanın başka bir anlamı var. GPL lisansı kapsamında olduğu için , Linux çekirdeği,
bu yeni bileşenler de GPL altında yayımlanmadıkça ve bunlara ilişkin kaynak kodu talep üzerine
sağlanmadıkça, kendisine eklenen özel bileşenlerle yayımlanamaz . Çekirdeğin modül arayüzü,
üçüncü tarafların, GPL kapsamında dağıtılamayan aygıt sürücülerini veya dosya sistemlerini
kendi şartlarına göre yazmasına ve dağıtmasına olanak tanır .
Çekirdek modülleri, bir Linux sisteminin, yerleşik herhangi bir ekstra aygıt sürücüsü
olmadan, standart bir minimum çekirdek ile kurulmasına olanak tanır. Kullanıcının ihtiyaç
duyduğu herhangi bir aygıt sürücüsü, başlangıçta sistem tarafından açık bir şekilde yüklenebilir
veya isteğe bağlı olarak sistem tarafından otomatik olarak yüklenebilir ve sistem tarafından
otomatik olarak yüklenebilir. kullanılmadığında boşaltılır. Örneğin, sisteme bir USB fare
takıldığında bir fare sürücüsü yüklenebilir ve fare fişten çekildiğinde kaldırılabilir.
Linux altındaki modül desteğinin dört bileşeni vardır:
2. Kullanıcı modu yardımcı programları olan modül yükleyici ve boşaltıcı, bir modülü belleğe
yüklemek için modül yönetim sistemiyle birlikte çalışır.
784 Bölüm 20 Linux Sistemi
Machine Translated by Google
3. Sürücü kayıt sistemi , modüllerin çekirdeğin geri kalanına yeni bir sürücünün
kullanıma sunulduğunu söylemesine izin verir.
4. Bir çakışma-çözüm mekanizması , farklı aygıt sürücülerinin donanım kaynaklarını
ayırmasına ve bu kaynakları başka bir sürücü tarafından yanlışlıkla
kullanılmasına karşı korumasına olanak tanır.
Bir çekirdek işlevinden sembolleri dışa aktarmak, programcı tarafından açık bir
istek gerektirse de, bu sembolleri bir modüle aktarmak için özel bir çabaya gerek
yoktur. Bir modül yazıcısı sadece C dilinin standart dış bağlantısını kullanır. Modül
tarafından başvurulan ancak modül tarafından bildirilmeyen herhangi bir harici
sembol, derleyici tarafından üretilen son modül ikili dosyasında basitçe çözülmemiş
olarak işaretlenir. Çekirdeğe bir modül yükleneceği zaman, bir sistem yardımcı
programı önce modülü bu çözülmemiş referanslar için tarar. Hala çözülmesi gereken
tüm semboller, çekirdeğin sembol tablosunda aranır ve o anda çalışan çekirdekte bu
sembollerin doğru adresleri modülün koduna değiştirilir. Ancak o zaman modül
yükleme için çekirdeğe iletilir. Sistem yardımcı programı modüldeki tüm referansları
çekirdeğin sembol tablosunda arayarak çözemezse, modül reddedilir.
Bir modül yüklendikten sonra, çekirdeğin geri kalanının hangi yeni işlevleri sağladığını
bilmesini sağlayana kadar, yalnızca yalıtılmış bir bellek bölgesi olarak kalır.
Çekirdek, bilinen tüm sürücülerin dinamik tablolarını tutar ve herhangi bir zamanda bu
tablolara sürücülerin eklenmesine veya bu tablolardan çıkarılmasına izin vermek için bir dizi
rutin sağlar. Çekirdek, bir modül yüklendiğinde bir modülün başlatma yordamını çağırdığından
ve bu modül kaldırılmadan önce modülün temizleme yordamını çağırdığından emin olur. Bu
rutinler, modülün işlevselliğini kaydetmekten sorumludur.
Bir modül birçok işlevsellik türünü kaydedebilir; tek tiple sınırlı değildir. Örneğin, bir
aygıt sürücüsü, aygıta erişim için iki ayrı mekanizmayı kaydetmek isteyebilir. Kayıt tabloları,
diğerlerinin yanı sıra aşağıdaki öğeleri içerir:
• Dosya sistemleri. Dosya sistemi, Linux'un sanal dosya sistemi çağrı rutinlerini uygulayan
herhangi bir şey olabilir. Dosyaları bir diskte depolamak için bir biçim uygulayabilir,
ancak NFS gibi bir ağ dosya sistemi veya içeriği isteğe bağlı olarak oluşturulan, Linux'un /
proc dosya sistemi gibi sanal bir dosya sistemi de eşit derecede iyi olabilir .
• Ağ protokolleri. Amodule, TCP gibi tüm bir ağ iletişim kuralı sütununu veya bir ağ
güvenlik duvarı için yalnızca yeni bir paket filtreleme kuralları kümesini uygulayabilir.
Ek olarak, bir modül, modülün dinamik olarak yapılandırılmasına izin vermek için sysctl ve /
proc tablolarına yeni bir giriş kümesi kaydedebilir (Bölüm 20.7.4).
Ticari UNIX uygulamaları genellikle bir satıcının kendi donanımında çalışacak şekilde satılır.
Tek tedarikçili bir çözümün bir avantajı, yazılım satıcısının hangi donanım konfigürasyonlarının
mümkün olduğu konusunda iyi bir fikre sahip olmasıdır. Ancak PC donanımı, ağ kartları ve
video görüntü bağdaştırıcıları gibi aygıtlar için çok sayıda olası sürücüyle birlikte çok sayıda
yapılandırmayla gelir. Modüler aygıt sürücüleri desteklendiğinde, donanım yapılandırmasını
yönetme sorunu, halihazırda etkin aygıt kümesi dinamik olarak değişken hale geldiğinden
daha ciddi hale gelir.
Linux, belirli donanım kaynaklarına erişimin hakemliğine yardımcı olmak için merkezi bir
çakışma çözme mekanizması sağlar. Amaçları aşağıdaki gibidir:
786
Bölüm 20 Linux Sistemi
• Aynı donanıma erişmeye çalışan birden çok sürücü arasındaki çakışmaları çözmek için;
örneğin, hem paralel yazıcı sürücüsü hem de paralel hat IP (PLIP) ağ sürücüsü paralel
bağlantı noktasıyla konuşmaya çalıştığında
İşlem, kullanıcı tarafından istenen tüm etkinliklere işletim sistemi içinde hizmet
verilen temel bağlamdır. Diğer UNIX sistemleriyle uyumlu olmak için Linux, UNIX'in
diğer sürümlerine benzer bir süreç modeli kullanmalıdır . Ancak Linux, birkaç önemli
yerde UNIX'ten farklı çalışır . Bu bölümde, geleneksel UNIX süreç modelini (Kısım
C.3.2) inceleyeceğiz ve Linux'un iş parçacığı modelini tanıtacağız.
temel ilkesi , genellikle tek bir işlemde birleştirilen iki işlemi iki adıma ayırmaktır: yeni
bir sürecin oluşturulması ve yeni bir programın çalıştırılması. fork() sistem çağrısı
tarafından yeni bir süreç yaratılır ve exec() çağrısından sonra yeni bir program
çalıştırılır . Bunlar birbirinden tamamen farklı iki işlevdir. Yeni bir program
çalıştırmadan fork() ile yeni bir süreç oluşturabiliriz - yeni alt süreç, ilk (ana) sürecin
çalıştığı tam olarak aynı programı, tam olarak aynı noktada yürütmeye devam eder.
Aynı şekilde, yeni bir program çalıştırmak, önce yeni bir işlemin oluşturulmasını
gerektirmez. Herhangi bir işlem herhangi bir zamanda exec() 'i çağırabilir . İşlemin
adres alanına yeni bir ikili nesne yüklenir ve yeni yürütülebilir dosya, mevcut işlem
bağlamında yürütülmeye başlar.
Bu model, büyük bir basitlik avantajına sahiptir. Yeni bir programın ortamının
her detayını o programı çalıştıran sistem çağrısında belirtmek gerekli değildir. Yeni
program sadece mevcut ortamında çalışır.
Bir ana süreç, yeni bir programın çalıştırılacağı ortamı değiştirmek isterse,
çatallayabilir ve ardından orijinal yürütülebilir dosyayı bir alt süreçte çalıştırmaya
devam ederek, son olarak yürütmeden önce bu alt süreci değiştirmek için gereken
herhangi bir sistem çağrısını yapabilir. yeni program.
UNIX altında , o zaman, bir işlem, işletim sisteminin tek bir yürütmenin bağlamını
izlemek için tutması gereken tüm bilgileri kapsar.
Machine Translated by Google
tek program. Linux altında, bu bağlamı birkaç özel bölüme ayırabiliriz. Genel olarak,
süreç özellikleri üç gruba ayrılır: süreç kimliği, çevre ve bağlam.
• İşlem Kimliği (PID). Her işlemin benzersiz bir tanımlayıcısı vardır. PID , bir uygulama
işlemi bildirmek, değiştirmek veya beklemek için bir sistem çağrısı yaptığında
işletim sistemine işlemi belirtmek için kullanılır . Ek tanımlayıcılar, süreci bir süreç
grubuyla (tipik olarak, tek bir kullanıcı komutuyla çatallanan bir süreç ağacı) ve
oturum açma oturumuyla ilişkilendirir.
• Kimlik bilgileri. Her işlemin ilişkili bir kullanıcı kimliği ve bir işlemin sistem
kaynaklarına ve dosyalarına erişim haklarını belirleyen bir veya daha fazla grup
kimliği (kullanıcı grupları Bölüm 13.4.2'de tartışılmaktadır) olması gerekir.
• Ad alanı. Her işlem, dosya sistemi hiyerarşisinin ad alanı adı verilen belirli bir
görünümüyle ilişkilendirilir . Çoğu işlem ortak bir ad alanını paylaşır ve bu nedenle
paylaşılan bir dosya sistemi hiyerarşisi üzerinde çalışır. Bununla birlikte, süreçler
ve bunların çocukları, her biri benzersiz bir dosya sistemi hiyerarşisine sahip farklı
ad alanlarına sahip olabilir - kendi kök dizinleri ve bağlı dosya sistemleri kümesi.
Bu tanımlayıcıların çoğu, sürecin kendisinin sınırlı kontrolü altındadır. Süreç yeni bir
grup veya oturum başlatmak isterse, süreç grubu ve oturum tanımlayıcıları
değiştirilebilir. Kimlik bilgileri, uygun güvenlik kontrollerine tabi olarak değiştirilebilir.
Ancak, bir sürecin birincil PID'si değiştirilemez ve sonlandırılana kadar bu süreci
benzersiz şekilde tanımlar.
Bir işlemin ortamı, üst öğesinden miras alınır ve iki boş sonlandırılmış vektörden oluşur:
argüman vektörü ve ortam vektörü. Argüman vektörü , çalışan programı çağırmak için
kullanılan komut satırı argümanlarını basitçe listeler; geleneksel olarak programın
adıyla başlar.
Ortam vektörü , adlandırılmış ortam değişkenlerini rastgele metin değerleriyle
ilişkilendiren "NAME=DEĞER" çiftlerinin bir listesidir . Ortam, çekirdek belleğinde
tutulmaz, ancak işlemin yığınının en üstündeki ilk veri olarak işlemin kendi kullanıcı
modu adres alanında depolanır.
Argüman ve çevre vektörleri, yeni bir süreç oluşturulduğunda değiştirilmez. Yeni
alt süreç, üst öğesinin ortamını devralır. Ancak, yeni bir program çağrıldığında
tamamen yeni bir ortam kurulur. exec () çağrılırken, bir süreç yeni program için ortamı
sağlamalıdır. Çekirdek bu ortam değişkenlerini bir sonrakine aktarır.
788 Bölüm
Machine Translated by Google 20 Linux Sistemi
program, sürecin mevcut ortamını değiştirir. Aksi takdirde, çekirdek ortamı ve komut satırı
vektörlerini kendi haline bırakır - bunların yorumlanması tamamen kullanıcı modu
kitaplıklarına ve uygulamalarına bırakılır.
Ortam değişkenlerinin bir süreçten diğerine geçirilmesi ve bu değişkenlerin bir sürecin
çocukları tarafından devralınması, kullanıcı modu sistem yazılımının bileşenlerine bilgi
iletmek için esnek yollar sağlar. Çeşitli önemli ortam değişkenleri, sistem yazılımının ilgili
bölümleri için geleneksel anlamlara sahiptir. Örneğin, TERM değişkeni, bir kullanıcının
oturum açma oturumuna bağlı uçbirim türünü adlandırmak için ayarlanır. Birçok program,
imleci hareket ettirmek ve bir metin bölgesini kaydırmak gibi, kullanıcının ekranında
işlemlerin nasıl gerçekleştirileceğini belirlemek için bu değişkeni kullanır. Çok dilli desteği
olan programlar, çok dilli desteği içeren programlar için sistem mesajlarının görüntüleneceği
dili belirlemek için LANG değişkenini kullanır.
Ortam değişkeni mekanizması, işletim sistemini işlem bazında özel olarak uyarlar.
Kullanıcılar kendi dillerini seçebilir veya birbirinden bağımsız olarak kendi editörlerini
seçebilirler.
• Dosya tablosu. Dosya tablosu, açık dosyaları temsil eden çekirdek dosya yapılarına
yönelik bir dizi işaretçidir. Dosya G/Ç sistem çağrıları yaparken , işlemler , çekirdeğin
bu tabloya indekslemek için kullandığı , dosya tanımlayıcısı (fd) olarak bilinen bir
tamsayıya göre dosyalara başvurur .
• Dosya sistemi bağlamı. Dosya tablosu mevcut açık dosyaları listelerken, dosya sistemi
bağlamı yeni dosya açma istekleri için geçerlidir. Dosya sistemi bağlamı, işlemin kök
dizinini, geçerli çalışma dizinini ve ad alanını içerir.
Machine Translated by Google
• Sinyal işleyici tablosu. UNIX sistemleri, çeşitli harici olaylara yanıt olarak bir
işleme eşzamansız sinyaller iletebilir. Sinyal işleyici tablosu, belirli bir sinyale
yanıt olarak yapılacak eylemi tanımlar. Geçerli eylemler, sinyali yok saymayı,
işlemi sonlandırmayı ve işlemin adres alanında bir rutini çağırmayı içerir. •
Sanal bellek bağlamı. Sanal bellek bağlamı, bir işlemin özel adres alanının tüm
içeriğini tanımlar; Bunu Bölüm 20.6'da tartışıyoruz.
Linux, yeni bir yürütülebilir görüntü yüklemeden bir işlemi çoğaltan fork() sistem
çağrısını sağlar. Linux ayrıca, klon() sistem çağrısı yoluyla iş parçacıkları oluşturma
yeteneği sağlar . Ancak Linux, süreçler ve iş parçacıkları arasında ayrım yapmaz.
Aslında Linux, bir program içindeki bir kontrol akışına atıfta bulunurken genellikle
süreç veya iş parçacığı yerine görev terimini kullanır. Clone() sistem çağrısı , üst öğe
ve alt öğe arasında hangi kaynakların paylaşılacağını belirleyen bir dizi işareti
bağımsız değişken olarak kabul etmesi dışında, fork() ile aynı şekilde davranır (oysa
fork() ile oluşturulan bir işlem üst öğesiyle hiçbir kaynak paylaşmaz) . Bayraklar
şunları içerir:
bayrak anlam
Bu nedenle, klon() CLONE FS, CLONE VM, CLONE SIGHAND ve CLONE FILES
bayraklarından geçirilirse, üst ve alt görevler aynı dosya sistemi bilgilerini (geçerli
çalışma dizini gibi), aynı bellek alanını, aynı sinyal işleyicileri ve aynı açık dosya
kümesi. Clone() 'u bu şekilde kullanmak , diğer sistemlerde bir iş parçacığı
oluşturmaya eşdeğerdir, çünkü ana görev, kaynaklarının çoğunu alt göreviyle
paylaşır. Ancak klon() çağrıldığında bu bayraklardan hiçbiri ayarlanmadıysa , ilişkili
kaynaklar paylaşılmaz ve bu da fork() sistem çağrısına benzer işlevsellik ile sonuçlanır.
Linux bir sürecin tüm içeriğini ana süreç veri yapısı içinde tutmadığı için süreçler
ve iş parçacıkları arasında ayrım olmaması mümkündür. Aksine, bağlamı bağımsız
alt bağlamlar içinde tutar. Böylece, bir işlemin dosya sistemi bağlamı, dosya
tanımlayıcı tablosu, sinyal işleyici tablosu ve sanal bellek bağlamı ayrı veri yapılarında
tutulur. İşlem veri yapısı basitçe bu diğer yapılara işaretçiler içerir, böylece herhangi
bir sayıda işlem aynı alt bağlama işaret ederek ve bir referans sayısını artırarak bir
alt bağlamı kolayca paylaşabilir.
fork() sistem çağrısı , hiçbirini paylaşmadan tüm alt bağlamları kopyalayan özel bir klon()
durumundan başka bir şey değildir .
20.5 Planlama
Programlama, bir işletim sistemi içindeki farklı görevlere CPU zamanını ayırma işidir . Linux,
tüm UNIX sistemleri gibi, önleyici çoklu görevi destekler.
Böyle bir sistemde, süreç zamanlayıcı hangi iş parçacığının ne zaman çalışacağına karar verir.
Bu kararları, birçok farklı iş yükü arasında adalet ve performansı dengeleyecek şekilde
vermek, modern işletim sistemlerindeki daha karmaşık zorluklardan biridir.
Rutin zaman paylaşımı görevleri için kullanılan zamanlama algoritması, çekirdeğin 2.6
sürümüyle büyük bir revizyon aldı. Daha önceki sürümler, geleneksel UNIX zamanlama
algoritmasının bir varyasyonunu çalıştırıyordu . Bu algoritma, SMP sistemleri için yeterli
desteği sağlamaz, sistemdeki görev sayısı arttıkça iyi ölçeklenmez ve özellikle masaüstü ve
mobil cihazlar gibi sistemlerde etkileşimli görevler arasında adaleti sağlamaz. İş parçacığı
zamanlayıcı ilk önce çekirdeğin 2.5 sürümüyle elden geçirildi. Sürüm 2.5 , sistemdeki görev
veya işlemci sayısından bağımsız olarak, O(1) olarak bilinen, sabit zamanda hangi görevin
çalıştırılacağını seçen bir zamanlama algoritması uyguladı . Yeni zamanlayıcı ayrıca, işlemci
benzeşimi ve yük dengeleme dahil olmak üzere SMP için artırılmış destek sağladı . Bu
değişiklikler ölçeklenebilirliği iyileştirirken, etkileşimli performansı veya adaleti iyileştirmedi
ve aslında bu sorunları belirli iş yükleri altında daha da kötüleştirdi. Sonuç olarak, iş parçacığı
zamanlayıcı, Linux çekirdeği sürüm 2.6 ile ikinci kez elden geçirildi. Bu sürüm, Tamamen Adil
Zamanlayıcı'da (CFS) kullanılmaya başlandı.
Linux zamanlayıcı, iki ayrı öncelik aralığına sahip, önleyici, önceliğe dayalı bir algoritmadır:
0 ile 99 arasında gerçek zamanlı bir aralık ve -20 ile 19 arasında bir nice değeri . Daha küçük
nice değerler daha yüksek öncelikleri gösterir. Böylece nice değerini artırarak önceliğinizi
azaltıyor ve sistemin geri kalanına karşı “iyi” oluyorsunuz.
sırasıyla. Bir süreç, kendi zaman dilimi boyunca çalışabilir ve daha yüksek öncelikli
süreçler, düşük öncelikli süreçlerden önce çalışır. UNIX olmayan birçok sistemin kullandığı
basit bir algoritmadır . Bu basitlik, erken zaman paylaşımlı sistemler için iyi çalıştı, ancak
günümüzün modern masaüstleri ve mobil cihazlarında iyi etkileşimli performans ve
adalet sağlama konusunda yetersiz olduğunu kanıtladı.
CFS , geleneksel anlamda zaman dilimlerini ortadan kaldıran adil çizelgeleme adı
verilen yeni bir çizelgeleme algoritması tanıttı . Zaman dilimleri yerine, tüm iş
parçacıklarına işlemcinin zamanının bir oranı tahsis edilir. CFS , çalıştırılabilir iş
parçacıklarının toplam sayısının bir fonksiyonu olarak bir iş parçacığının ne kadar süreyle
çalışması gerektiğini hesaplar. Başlamak için, CFS , N çalıştırılabilir iş parçacığı varsa, her
birine işlemcinin 1 N zamanının verilmesi gerektiğini söylüyor. CFS daha sonra bu
tahsisi, her bir iş parçacığının tahsisini nice değerine göre ağırlıklandırarak ayarlar.
Varsayılan Nice değerine sahip iş parçacıklarının ağırlığı 1'dir— öncelikleri değişmez.
Daha küçük Nice değerine (daha yüksek öncelikli) sahip dişler daha yüksek bir ağırlık
alırken, daha büyük bir nice değerine (düşük öncelikli) sahip dişlere daha düşük bir ağırlık
verilir. CFS daha sonra her bir iş parçacığını, işlemin ağırlığının tüm çalıştırılabilir
işlemlerin toplam ağırlığına bölümüyle orantılı bir "zaman dilimi" için çalıştırır.
Bir iş parçacığının çalıştığı gerçek süreyi hesaplamak için CFS , her çalıştırılabilir
görevin en az bir kez çalışması gereken zaman aralığı olan hedef gecikme adı verilen
yapılandırılabilir bir değişkene güvenir . Örneğin, hedef gecikme süresinin 10 milisaniye
olduğunu varsayalım. Ayrıca, aynı önceliğe sahip iki çalıştırılabilir iş parçacığımız olduğunu
varsayalım. Bu iş parçacıklarının her biri aynı ağırlığa sahiptir ve bu nedenle işlemcinin
zamanının aynı oranını alır. Bu durumda, 10 milisaniyelik bir hedef gecikme süresiyle, ilk
işlem 5 milisaniye çalışır, ardından diğer işlem 5 milisaniye çalışır, ardından ilk işlem
tekrar 5 milisaniye çalışır ve bu böyle devam eder. 10 çalıştırılabilir iş parçacığımız varsa,
CFS tekrar etmeden önce her birini bir milisaniye çalıştırır.
Linux çekirdeği, çekirdeğe kilitlemek için döndürme kilitleri ve semaforlar (ve bu iki
kilidin okuyucu-yazıcı versiyonları) sağlar. SMP makinelerinde , temel kilitleme mekanizması
bir döndürme kilididir ve çekirdek, döndürme kilitleri yalnızca kısa süreler boyunca tutulacak
şekilde tasarlanmıştır. Tek işlemcili makinelerde, döndürme kilitleri kullanım için uygun
değildir ve çekirdek önalımını etkinleştirip devre dışı bırakarak değiştirilir. Yani, bir
döndürme kilidi tutmak yerine, görev dis-
Machine Translated by Google 20.5 Planlama 793
çekirdek önceliği sağlar. Görev aksi halde döndürme kilidini serbest bırakacaksa,
çekirdek önceliğini etkinleştirir. Bu model aşağıda özetlenmiştir:
Linux, çekirdek ön alımını devre dışı bırakmak ve etkinleştirmek için ilginç bir yaklaşım
kullanır. İki basit çekirdek arabirimi sağlar: preempt disable() ve preempt enable(). Ek
olarak, bir çekirdek modu varsa, çekirdek öncelikli değildir.
görev bir spinlock tutuyor. Bu kuralı uygulamak için sistemdeki her görevin
olan alan öncelik sayısını içeren bir iş parçacığı bilgisi yapısı
görev tarafından tutulan kilitlerin sayısını gösteren sayaç. sayaç
bir kilit alındığında artırılır ve bir kilit serbest bırakıldığında azaltılır.
Şu anda çalışmakta olan görev için önceden alma sayısının değeri şundan büyükse:
sıfır, bu görev şu anda bir kilit içerdiğinden, çekirdeği önceden almak güvenli değildir. Eğer
sayı sıfırdır, çekirdek güvenli bir şekilde kesintiye uğratılabilir,
devre dışı bırakmak () için bekleyen çağrılar .
Spinlock'lar— çekirdek önceliğinin etkinleştirilmesi ve devre dışı bırakılmasıyla birlikte—
çekirdekte yalnızca kilit kısa süre tutulduğunda kullanılır. Zaman
kilit daha uzun süre tutulmalıdır, semaforlar kullanılır.
Linux tarafından kullanılan ikinci koruma tekniği, kesme servis rutinlerinde meydana
gelen kritik bölümler için geçerlidir. Temel araç, işlemcinin
kesme kontrol donanımı. sırasında kesintileri devre dışı bırakarak (veya döndürme kilitlerini kullanarak)
kritik bir bölüm olan çekirdek, risk olmadan ilerleyebileceğini garanti eder.
paylaşılan veri yapılarına eşzamanlı erişim.
Ancak, kesintileri devre dışı bırakmanın bir cezası vardır. Çoğu donanımda
mimariler, kesme etkinleştirme ve devre dışı bırakma talimatları ucuz değildir. Daha
daha da önemlisi, kesintiler devre dışı kaldığı sürece tüm G/Ç askıya alınır ve
servis için bekleyen herhangi bir cihaz, kesintiler yeniden etkinleştirilene kadar beklemek
zorunda kalacaktır; dolayısıyla performans düşer. Bu sorunu çözmek için Linux çekirdeği
için uzun kritik bölümlerin çalışmasına izin veren bir senkronizasyon mimarisi kullanır
kesintileri devre dışı bırakmadan tüm süreleri. Bu yetenek özellikle ağ kodunda
kullanışlıdır. Bir ağ aygıtı sürücüsünde bir kesinti
tüm bir ağ paketinin geldiğini bildirebilir, bu da büyük bir
paketi sökmek, yönlendirmek ve iletmek için yürütülen kod miktarı
kesme servis rutini içinde.
Linux bu mimariyi kesme servis rutinlerini ayırarak uygular.
iki bölüme ayrılır: üst yarı ve alt yarı. Üst yarı standarttır
özyinelemeli kesintiler devre dışı bırakılarak çalışan kesme hizmeti rutini. Aynı sayıdaki
(veya satırdaki) kesmeler devre dışı bırakılır, ancak diğer kesmeler çalışabilir.
Bir servis rutininin alt yarısı , tüm kesmeler etkinleştirilerek çalıştırılır.
Alt yarıların kendilerini asla kesintiye uğratmamasını sağlayan minyatür bir zamanlayıcı.
Alt yarı zamanlayıcı, bir kesinti hizmeti rutini çıktığında otomatik olarak çağrılır.
Bu ayırma, çekirdeğin bir kesintiye yanıt olarak yapılması gereken herhangi bir
karmaşık işlemi endişelenmeden tamamlayabileceği anlamına gelir.
kendi kendine kesiliyor. Bir alt yarı yürütülürken başka bir kesinti meydana gelirse
Machine Translated by Google
794
Bölüm 20 Linux Sistemi
kesme, o zaman bu kesme aynı alt yarının yürütülmesini isteyebilir, ancak yürütme,
çalışmakta olan tamamlanana kadar ertelenir. Alt yarının her uygulaması bir üst yarı
tarafından kesintiye uğratılabilir, ancak asla benzer bir alt yarı tarafından kesintiye
uğratılamaz.
Üst yarı/alt yarı mimarisi, normal, ön plan çekirdek kodunu yürütürken seçilen alt
yarıları devre dışı bırakmak için bir mekanizma ile tamamlanır. Çekirdek, bu sistemi
kullanarak kritik bölümleri kolayca kodlayabilir. Kesme işleyicileri, kritik bölümlerini alt
yarılar olarak kodlayabilir; ve ön yer çekirdeği kritik bir bölüme girmek istediğinde, diğer
kritik bölümlerin kesintiye uğramasını önlemek için ilgili alt yarıları devre dışı bırakabilir.
Kritik bölümün sonunda, çekirdek alt yarıları yeniden etkinleştirebilir ve kritik bölüm
sırasında üst yarı kesme servis rutinleri tarafından kuyruğa alınmış alt yarı görevlerini
çalıştırabilir.
Şekil 20.2, çekirdek içindeki çeşitli kesme koruma düzeylerini özetlemektedir. Her
seviye, daha yüksek bir seviyede çalışan kod tarafından kesintiye uğrayabilir, ancak aynı
veya daha düşük seviyede çalışan kod tarafından asla kesintiye uğramaz. Kullanıcı modu
kodu dışında, bir zaman paylaşımlı zamanlama kesintisi meydana geldiğinde, kullanıcı iş
parçacıkları her zaman başka bir iş parçacığı tarafından engellenebilir.
simetrik çok işlemcili (SMP) donanımını destekleyen ve ayrı iş parçacıklarının ayrı işlemciler
üzerinde paralel olarak yürütülmesine izin veren ilk kararlı Linux çekirdeğiydi . SMP'nin
orijinal uygulaması, aynı anda yalnızca bir işlemcinin çekirdek kodunu yürütebileceği
kısıtlamasını getirdi.
Çekirdeğin 2.2 sürümünde , çekirdekte aynı anda birden fazla iş parçacığının (farklı
işlemcilerde çalışan) etkin olmasına izin vermek için tek bir çekirdek döndürme kilidi (bazen
"büyük çekirdek kilidi" için BKL olarak adlandırılır) oluşturuldu. Bununla birlikte, BKL çok
kaba bir kilitleme ayrıntı düzeyi sağladı ve bu, birçok işlemci ve iş parçacığına sahip
makinelerde zayıf ölçeklenebilirlik ile sonuçlandı. Çekirdeğin sonraki sürümleri, bu tek
çekirdek döndürme kilidini, her biri çekirdeğin veri yapılarının yalnızca küçük bir alt
kümesini koruyan çoklu kilitlere bölerek SMP uygulamasını daha ölçeklenebilir hale getirdi.
Bu tür spinlock'lar Bölüm 20.5.3'te açıklanmıştır.
3.0 ve 4.0 çekirdekleri, daha da hassas kilitleme, işlemci benzeşimi, yük dengeleme
algoritmaları ve tek bir sistemde yüzlerce hatta binlerce fiziksel işlemci için destek dahil
olmak üzere ek SMP geliştirmeleri sağladı.
nedeniyle Linux, fiziksel belleği dört farklı bölgeye veya bölgeye ayırır:
• BÖLGE DMA
• BÖLGE DMA32
• BÖLGE NORMAL
• BÖLGE HIGHMEM
ZONE_DMA < 16 MB
ZONE_NORMAL 16 .. 896 MB
796
Bölüm 20 Linux Sistemi
her bölge. Fiziksel bellek için bir istek geldiğinde, çekirdek, uygun bölgeyi kullanarak
isteği karşılar.
Linux çekirdeğindeki birincil fiziksel bellek yöneticisi, sayfa ayırıcıdır. Her
bölgenin, bölge için tüm fiziksel sayfaları tahsis etmekten ve serbest bırakmaktan
sorumlu olan ve istek üzerine fiziksel olarak bitişik sayfa aralıklarını tahsis edebilen
kendi ayırıcısı vardır. Ayırıcı, mevcut fiziksel sayfaların kaydını tutmak için bir
arkadaşlık sistemi (Bölüm 10.8.1) kullanır. Bu şemada, tahsis edilebilir belleğin bitişik
birimleri birlikte eşleştirilir (dolayısıyla adı). Ayrılabilir her bellek bölgesinin bitişik bir
ortağı veya arkadaşı vardır. Ayrılan iki ortak bölge serbest bırakıldığında, daha büyük
bir bölge oluşturmak için birleştirilirler - bir arkadaş yığını. Bu daha geniş bölgenin,
daha da büyük bir serbest bölge oluşturmak için birleşebileceği bir ortağı da vardır.
Tersine, küçük bir bellek talebi, mevcut bir küçük boş bölgenin tahsisi ile
karşılanamıyorsa, talebi karşılamak için daha büyük bir boş bölge iki ortağa
bölünecektir. İzin verilen her boyutun boş bellek bölgelerini kaydetmek için ayrı
bağlantılı listeler kullanılır.
Linux altında, bu mekanizma altında tahsis edilebilecek en küçük boyut, tek bir
fiziksel sayfadır. Şekil 20.4, buddy-heap tahsisinin bir örneğini göstermektedir. 4
KB'lık bir bölge tahsis ediliyor, ancak kullanılabilir en küçük bölge 16 KB'dir. Bölge,
istenen boyutta bir parça mevcut olana kadar özyinelemeli olarak bölünür.
Sonuç olarak, Linux çekirdeğindeki tüm bellek ayırmaları, sistem önyükleme
süresi sırasında bitişik bir bellek alanı ayıran sürücüler tarafından statik olarak veya
sayfa ayırıcı tarafından dinamik olarak yapılır. Ancak, çekirdek işlevleri, bellek ayırmak
için temel ayırıcıyı kullanmak zorunda değildir. Birkaç özel bellek yönetimi alt sistemi,
kendi bellek havuzlarını yönetmek için temeldeki sayfa ayırıcıyı kullanır. En önemlileri,
Bölüm 20.6.2'de açıklanan sanal bellek sistemidir; kmalloc () değişken uzunluklu
ayırıcı; çekirdek veri yapıları için bellek ayırmak için kullanılan levha ayırıcı; ve
dosyalara ait sayfaları önbelleğe almak için kullanılan sayfa önbelleği.
Linux işletim sisteminin birçok bileşeninin istek üzerine tüm sayfaları ayırması
gerekir, ancak genellikle daha küçük bellek blokları gerekir. Çekirdek, bir isteğin
boyutunun önceden bilinmediği ve yalnızca birkaç bayt olabileceği, isteğe bağlı
boyuttaki istekler için ek bir ayırıcı sağlar. C dilinin malloc() işlevine benzer olan bu
kmalloc() hizmeti, talep üzerine tüm fiziksel sayfaları tahsis eder, ancak daha sonra
bunları daha küçük parçalara böler. bu
8 KB 8 KB
16 KB
4 KB
8 KB
4 KB
3 KB
nesneler
fiziksel olarak
bitişik sayfalar
7 KB
nesneler
Linux tarafından çekirdek belleği tahsis etmek için benimsenen başka bir strateji,
levha tahsisi olarak bilinir. Çekirdek veri yapıları için bellek ayırmak için bir levha
kullanılır ve bir veya daha fazla fiziksel olarak bitişik sayfadan oluşur. Bir önbellek ,
bir veya daha fazla levhadan oluşur. Her benzersiz çekirdek veri yapısı için tek bir
önbellek vardır; örneğin, işlem tanımlayıcılarını temsil eden veri yapısı için bir
önbellek, dosya nesneleri için bir önbellek, düğümler için bir önbellek vb. Her
önbellek, önbelleğin temsil ettiği çekirdek veri yapısının somut örnekleri olan
nesnelerle doldurulur . Örneğin, düğümleri temsil eden önbellek, düğüm yapılarının
örneklerini depolar ve süreç tanımlayıcılarını temsil eden önbellek, süreç tanımlayıcı
yapılarının örneklerini depolar. Döşemeler, önbellekler ve nesneler arasındaki ilişki
Şekil 20.5'te gösterilmektedir. Şekil, 3 KB boyutunda iki çekirdek nesnesini ve 7 KB
boyutunda üç nesneyi göstermektedir. Bu nesneler, 3-KB ve 7-KB nesneler için ilgili
önbelleklerde depolanır .
Döşeme tahsisi algoritması, çekirdek nesnelerini depolamak için önbellekleri
kullanır. Bir önbellek oluşturulduğunda, önbelleğe birkaç nesne tahsis edilir.
Önbellekteki nesnelerin sayısı, ilişkili döşemenin boyutuna bağlıdır. Örneğin, 12
KB'lık bir levha (üç bitişik 4 KB sayfadan oluşan) altı adet 2 KB'lık nesne depolayabilir .
Başlangıçta, önbellekteki tüm nesneler ücretsiz olarak işaretlenir. Bir çekirdek veri
yapısı için yeni bir nesneye ihtiyaç duyulduğunda, ayırıcı, talebi karşılamak için
önbellekten herhangi bir boş nesne atayabilir. Önbellekten atanan nesne kullanılmış
olarak işaretlenir.
Çekirdeğin, bir süreç tanımlayıcısını temsil eden bir nesne için levha ayırıcıdan
bellek talep ettiği bir senaryoyu ele alalım. Linux sistemlerinde, bir süreç tanımlayıcısı
struct task struct tipindedir ;
Machine Translated by Google
yaklaşık 1,7 KB bellek. Linux çekirdeği yeni bir görev oluşturduğunda , önbelleğinden struct task
struct nesnesi için gerekli belleği talep eder. Önbellek, bir döşemede önceden tahsis edilmiş ve
boş olarak işaretlenmiş bir struct görevi struct nesnesini kullanarak talebi yerine getirecektir .
Döşeme ayırıcı, önce talebi kısmi bir döşemede serbest bir nesneyle karşılamaya çalışır. Hiçbiri
yoksa, boş bir levhadan serbest bir nesne atanır. Boş levha yoksa, bitişik fiziksel sayfalardan yeni
bir levha tahsis edilir ve bir önbelleğe atanır; nesne için bellek bu levhadan tahsis edilir.
Linux'taki diğer iki ana alt sistem, fiziksel sayfaların kendi yönetimini yapar: sayfa önbelleği
ve sanal bellek sistemi. Bu sistemler birbirleriyle yakından ilişkilidir. Sayfa önbelleği , çekirdeğin
dosyalar için ana önbelleğidir ve aygıtları engellemek için G/ Ç'nin (Bölüm 20.8.1) gerçekleştirildiği
ana mekanizmadır. Yerel Linux disk tabanlı dosya sistemleri ve NFS ağ bağlantılı dosya sistemi
dahil olmak üzere her türden dosya sistemi, G/Ç'lerini sayfa önbelleği aracılığıyla gerçekleştirir.
Sayfa önbelleği, dosya içeriğinin tüm sayfalarını saklar ve cihazları engellemekle sınırlı değildir.
Ayrıca ağa bağlı verileri önbelleğe alabilir. Sanal bellek sistemi, her işlemin sanal adres alanının
içeriğini yönetir. Sayfa önbelleğindeki bir veri sayfasının okunması, sanal bellek sistemi kullanılarak
sayfa önbelleğindeki sayfaların eşlenmesini gerektirdiğinden, bu iki sistem birbiriyle yakından
etkileşime girer. Aşağıdaki bölümde, sanal bellek sistemine daha ayrıntılı olarak bakıyoruz.
bellek sistemi, her işlem için erişilebilir adres alanını korumaktan sorumludur. İsteğe
bağlı olarak sanal bellek sayfaları oluşturur ve bu sayfaları diskten yüklemeyi ve
gerektiğinde bunları diske geri aktarmayı yönetir. Linux altında, sanal bellek
yöneticisi, bir işlemin adres alanının iki ayrı görünümünü korur: bir dizi ayrı bölge ve
bir dizi sayfa olarak.
Bir adres alanının ilk görünümü, adres alanının düzeniyle ilgili olarak sanal bellek sisteminin
aldığı talimatları açıklayan mantıksal görünümdür. Bu görünümde, adres alanı, her biri adres
alanının sürekli, sayfa hizalı bir alt kümesini temsil eden bir dizi örtüşmeyen ping bölgesinden
oluşur. Her bölge , işlemin bölgedeki okuma, yazma ve yürütme izinlerinin yanı sıra bölgeyle ilişkili
tüm dosyalar hakkındaki bilgiler de dahil olmak üzere bölgenin özelliklerini tanımlayan tek bir vm
alan yapısı yapısıyla dahili olarak tanımlanır. Her adres alanı için bölgeler, herhangi bir sanal
adrese karşılık gelen bölgenin hızlı aranmasını sağlamak için dengeli bir ikili ağaca bağlanır.
Çekirdek ayrıca her adres alanının ikinci bir fiziksel görünümünü de korur.
Bu görünüm, işlem için donanım sayfası tablolarında saklanır. Sayfa tablosu girişleri, sanal
belleğin her sayfasının tam geçerli konumunu tanımlar,
Machine Translated by Google 20.6 Bellek Yönetimi 799
ister diskte ister fiziksel bellekte olsun. Fiziksel görünüm, bir işlem o anda sayfa
tablolarında mevcut olmayan bir sayfaya erişmeye çalıştığında, çekirdeğin yazılım
kesme işleyicilerinden çağrılan bir dizi rutin tarafından yönetilir. Adres alanı
açıklamasındaki her vm alanı yapısı , herhangi bir sanal bellek bölgesi için anahtar
sayfa yönetimi işlevini uygulayan bir işlevler tablosuna işaret eden bir alan içerir.
Kullanılamayan bir sayfayı okumak veya yazmak için yapılan tüm istekler, sonunda
vm alan yapısı için işlev tablosundaki uygun işleyiciye gönderilir , böylece merkezi
bellek yönetimi rutinleri, olası her bir bellek bölgesi türünü yönetme ayrıntılarını
bilmek zorunda kalmaz. .
birkaç tür sanal bellek bölgesi uygular. Sanal belleği karakterize eden bir özellik,
bölge sayfalarının nereden geldiğini açıklayan bölge için yedekleme deposudur.
Çoğu bellek bölgesi ya bir dosya tarafından ya da hiçbir şey tarafından desteklenmez.
Hiçbir şey tarafından desteklenmeyen bir bölge, en basit sanal bellek bölgesi türüdür.
Böyle bir bölge, talep-sıfır belleği temsil eder: bir işlem böyle bir bölgede bir sayfayı
okumaya çalıştığında, sadece sıfırlarla dolu bir bellek sayfası geri verilir.
Bir dosya tarafından desteklenen bir bölge, o dosyanın bir bölümünde bir görünüm alanı görevi görür.
İşlem o bölge içindeki bir sayfaya erişmeye çalıştığında, sayfa tablosu, dosyadaki
uygun uzaklığa karşılık gelen çekirdeğin sayfa önbelleğindeki bir sayfanın adresiyle
doldurulur. Aynı fiziksel bellek sayfası, hem sayfa önbelleği hem de işlemin sayfa
tabloları tarafından kullanılır, bu nedenle dosya sistemi tarafından dosyada yapılan
herhangi bir değişiklik, o dosyayı adres alanına eşleyen tüm işlemler tarafından
hemen görülebilir. Herhangi bir sayıda işlem aynı dosyanın aynı bölgesini eşleyebilir
ve hepsi bu amaç için aynı fiziksel bellek sayfasını kullanır.
Bir sanal bellek bölgesi, yazmalara verdiği tepkiyle de tanımlanır. Bir bölgenin
işlemin adres alanına eşlenmesi, özel veya paylaşılan olabilir. Bir işlem özel olarak
eşlenmiş bir bölgeye yazıyorsa, çağrı cihazı, değişiklikleri işlemde yerel tutmak için
yazma üzerine kopyalamanın gerekli olduğunu algılar. Buna karşılık, paylaşılan bir
bölgeye yazma işlemi, o bölgeye eşlenen nesnenin güncellenmesiyle sonuçlanır,
böylece değişiklik, o nesneyi eşleyen diğer herhangi bir işlem tarafından hemen
görünür olur.
durumda yeni bir sanal adres alanı oluşturur: bir süreç exec() sistem çağrısı ile yeni
bir program çalıştırdığında ve fork() sistem çağrısı tarafından yeni bir süreç
oluşturulduğunda . İlk durum kolaydır. Yeni bir program yürütüldüğünde, sürece
yeni, tamamen boş bir sanal adres alanı verilir. Adres alanını sanal bellek bölgeleriyle
doldurmak programın yüklenmesi rutinlerine bağlıdır.
İkinci durum, fork() ile yeni bir süreç yaratmak, mevcut sürecin sanal adres
alanının tam bir kopyasını yaratmayı içerir. Çekirdek, üst işlemin vm alan yapısı
tanımlayıcılarını kopyalar, ardından alt öğe için yeni bir sayfa tablosu kümesi
oluşturur. Ebeveynin sayfa tabloları doğrudan çocuğunkine kopyalanır ve kapsanan
her sayfanın referans sayısı artırılır. Böylece,
Machine Translated by Google
Bir sanal bellek sistemi için önemli bir görev, belleğe ihtiyaç duyulduğunda bellek
sayfalarını fiziksel bellekten diske yeniden yerleştirmektir. İlk UNIX sistemleri bu
yeniden yerleştirmeyi tüm süreçlerin içeriğini bir kerede değiştirerek gerçekleştirdi,
ancak UNIX'in modern sürümleri daha çok sayfalamaya, yani sanal belleğin tek tek
sayfalarının fiziksel bellek ve disk arasında taşınmasına dayanır. Linux, tüm süreç
değiş tokuşunu uygulamaz; yalnızca daha yeni sayfalama mekanizmasını kullanır.
Çağrı sistemi iki bölüme ayrılabilir. İlk olarak, politika algoritması , hangi
sayfaların destek deposuna yazılacağına ve ne zaman yazılacağına karar verir. İkinci
olarak, sayfalama mekanizması aktarımı gerçekleştirir ve yeniden ihtiyaç
duyulduğunda verileri fiziksel belleğe geri gönderir.
Linux'un sayfa çıkış politikası , Bölüm 10.4.5.2'de açıklanan standart saat (veya
ikinci şans) algoritmasının değiştirilmiş bir sürümünü kullanır. Linux altında, çok
geçişli bir saat kullanılır ve her sayfanın, saatin her geçişinde ayarlanan bir yaşı
vardır. Yaş, daha kesin olarak sayfanın gençliğinin veya sayfanın son zamanlarda ne
kadar etkinlik gördüğünün bir ölçüsüdür. Sık erişilen sayfalar daha yüksek bir yaş
değeri elde edecek, ancak seyrek erişilen sayfaların yaşı her geçişte sıfıra düşecektir.
Bu yaş değerlendirme, çağrı cihazının en az sık kullanılan (LFU) ilkesine dayalı olarak
sayfadan çıkarılacak sayfaları seçmesine olanak tanır .
altında, ikili yükleyici fiziksel belleğe ikili dosya yüklemez. Bunun yerine, ikili dosyanın
sayfaları sanal belleğin bölgelerine eşlenir. Yalnızca program belirli bir sayfaya
erişmeye çalıştığında, bir sayfa hatası, o sayfanın talep sayfalama kullanılarak fiziksel
belleğe yüklenmesine neden olur.
İlk bellek eşlemesini ayarlamak, çekirdeğin ikili yükleyicisinin sorumluluğundadır.
ELF biçimli bir ikili dosya, bir başlık ve ardından sayfa hizalı birkaç bölümden oluşur.
ELF yükleyici , başlığı okuyarak ve dosyanın bölümlerini sanal belleğin ayrı bölgelerine
eşleyerek çalışır.
Şekil 20.6, ELF yükleyici tarafından kurulan tipik bellek bölgeleri düzenini
gösterir . Adres alanının bir ucundaki ayrılmış bir bölgede, normal kullanıcı modu
programlarına erişilemeyen kendi ayrıcalıklı sanal bellek bölgesinde çekirdek
bulunur. Sanal belleğin geri kalanı, bir dosyanın bir bölümünü eşleyen veya uygulama
verileri için kullanılabilen bölgeler oluşturmak için çekirdeğin bellek eşleme işlevlerini
kullanabilen uygulamalar tarafından kullanılabilir.
Yükleyicinin işi, programın yürütülmesinin başlamasına izin vermek için ilk bellek
eşlemesini ayarlamaktır. Başlatılması gereken bölgeler yığını ve programın metin ve
veri bölgelerini içerir.
Yığın, kullanıcı modu sanal belleğinin en üstünde oluşturulur; daha düşük
numaralı adreslere doğru aşağı doğru büyür. exec() sistem çağrısında programa
verilen argümanların ve ortam değişkenlerinin kopyalarını içerir . Diğer bölgeler,
sanal belleğin alt ucuna yakın oluşturulur.
İkili dosyanın program metni veya salt okunur verileri içeren bölümleri, yazmaya
karşı korumalı bir bölge olarak belleğe eşlenir. Yazılabilir başlatılabilir veriler daha
sonra eşlenir; daha sonra başlatılmamış veriler özel talep sıfır bölgesi olarak eşlenir.
yığın
bölge
'brk' işaretçisi
çalışma zamanı verileri
başlatılmamış veri
başlatılmış veri
program metni
yasak bölge
Statik bağlamanın ana dezavantajı, oluşturulan her programın tam olarak aynı
ortak sistem kitaplığı işlevlerinin kopyalarını içermesi gerektiğidir. Sistem kitaplıklarını
yalnızca bir kez belleğe yüklemek hem fiziksel bellek hem de disk alanı kullanımı
açısından çok daha verimlidir. Dinamik bağlantı bunun olmasına izin verir.
Linux, özel bir bağlayıcı kitaplığı aracılığıyla kullanıcı modunda dinamik bağlantı
uygular. Dinamik olarak bağlantılı her program, program başladığında çağrılan küçük,
statik olarak bağlantılı bir fonksiyon içerir. Bu statik işlev, bağlantı kitaplığını yalnızca
belleğe eşler ve işlevin içerdiği kodu çalıştırır. Bağlantı kitaplığı, ELF ikili dosyasının
bölümlerinde yer alan bilgileri okuyarak, programın gerektirdiği dinamik kitaplıkları
ve bu kitaplıklardan ihtiyaç duyulan değişkenlerin ve işlevlerin adlarını belirler . Daha
sonra kütüphaneleri sanal belleğin ortasına eşler ve bu kütüphanelerde bulunan
sembollere yapılan referansları çözer. Bu paylaşılan kitaplıkların bellekte tam olarak
nerede eşlendiği önemli değildir: bellekteki herhangi bir adreste çalışabilen konumdan
bağımsız kod (PIC) halinde derlenirler.
Linux , UNIX'in standart dosya sistemi modelini korur . UNIX'te, bir dosyanın diskte
depolanan veya uzak bir dosya sunucusundan ağ üzerinden alınan bir nesne olması
gerekmez . Bunun yerine, UNIX dosyaları, bir veri akışının girişini veya çıkışını
işleyebilen herhangi bir şey olabilir. Aygıt sürücüleri dosyalar olarak görünebilir ve
süreçler arası iletişim kanalları veya ağ bağlantıları da dosya gibi görünebilir.
kullanıcı.
Linux çekirdeği, tüm bu tür dosyaları, herhangi bir tek dosya türünün uygulama
ayrıntılarını bir yazılım katmanı olan sanal dosya sistemi (VFS) arkasına saklayarak
işler. Burada önce sanal dosya sistemini ele alacağız ve ardından standart Linux dosya
sistemini— ext3'ü tartışacağız.
804 Bölüm 20 Linux Sistemi
Machine Translated by Google
20.7.1 Sanal Dosya Sistemi
Linux VFS , nesne yönelimli ilkeler etrafında tasarlanmıştır. İki bileşeni vardır: hangi dosya
sistemi nesnelerinin nasıl görünmesine izin verildiğini belirten bir dizi tanım ve nesneleri
işlemek için bir yazılım katmanı. VFS , dört ana nesne türünü tanımlar :
fil nesnesi , açık bir dosyayı temsil eder. • Bir süper blok
Bu dört nesne türünün her biri için VFS , bir dizi işlem tanımlar.
Bu türlerden birinin her nesnesi, bir işlev tablosuna bir işaretçi içerir. İşlev tablosu, o nesne
için tanımlanan işlemleri uygulayan gerçek işlevlerin adreslerini listeler. Örneğin, dosya
nesnesinin bazı işlemleri için kısaltılmış bir API şunları içerir:
İnode ve dosya nesneleri, dosyalara erişmek için kullanılan mekanizmalardır. Bir inode
nesnesi, gerçek dosya içeriklerini içeren disk bloklarına yönelik işaretçiler içeren bir veri
yapısıdır ve bir dosya nesnesi, açık bir dosyadaki verilere erişim noktasını temsil eder. Bir iş
parçacığı, önce inode'a işaret eden bir dosya nesnesi almadan bir inode'un içeriğine
erişemez. Dosya nesnesi, sıralı dosya G/ Ç'sini takip etmek için işlemin o anda dosyada
nerede okuduğunu veya yazdığını takip eder . Ayrıca, dosya açıldığında istenen izinleri
(örneğin, okuma veya yazma) hatırlar ve gerekirse, uyarlamalı ileri okuma gerçekleştirmek
için iş parçacığının etkinliğini izler, performansı artırmak için iş parçacığı verileri istemeden
önce dosya verilerini belleğe alır.
Dosya nesneleri genellikle tek bir işleme aittir, ancak inode nesneleri değildir.
Açık bir dosyanın her örneği için bir dosya nesnesi vardır, ancak her zaman yalnızca bir
20.7 Dosya Sistemleri 805
Machine Translated by Google
tek inode nesnesi. Bir dosya artık herhangi bir işlem tarafından kullanılmadığında
bile, dosya yakın gelecekte tekrar kullanılırsa performansı artırmak için inode nesnesi
VFS tarafından önbelleğe alınabilir. Tüm önbelleğe alınmış dosya verileri, dosyanın
inode nesnesindeki bir listeye bağlanır. İnode ayrıca her dosya hakkında sahip, boyut
ve en son değiştirilme zamanı gibi standart bilgileri de tutar.
Dizin dosyaları, diğer dosyalardan biraz farklı şekilde ele alınır. UNIX programlama
arabirimi, bir dizindeki bir dosyayı oluşturma, silme ve yeniden adlandırma gibi
dizinler üzerinde bir dizi işlemi tanımlar . Bu dizin işlemleri için sistem çağrıları, veri
okuma veya yazma durumundan farklı olarak, kullanıcının ilgili dosyaları açmasını
gerektirmez. Bu nedenle VFS , bu dizin işlemlerini dosya nesnesi yerine inode
nesnesinde tanımlar.
Süper blok nesnesi, bağımsız bir dosya sistemi oluşturan bağlantılı bir dosya
kümesini temsil eder. İşletim sistemi çekirdeği, dosya sistemi olarak bağlanan her
disk aygıtı ve şu anda bağlı olan her ağ bağlantılı dosya sistemi için tek bir süper blok
nesnesi tutar. Süper blok nesnesinin ana sorumluluğu düğümlere erişim sağlamaktır.
VFS , her düğümü benzersiz bir dosya sistemi/inode numarası çifti ile tanımlar ve
süper blok nesnesinden inode'u bu numarayla döndürmesini isteyerek belirli bir
inode numarasına karşılık gelen inode'u bulur.
Son olarak, bir dentry nesnesi, bir dosyanın yol adında bir dizinin adını ( /usr
gibi) veya gerçek dosyayı ( stdio.h gibi) içerebilen bir dizin girişini temsil eder .
Örneğin, /usr/include/stdio.h dosyası (1) /, (2) usr, (3) include ve (4) stdio.h dizin
girişlerini içerir . Bu değerlerin her biri ayrı bir diş hekimliği nesnesi ile temsil edilir.
kullanılan standart disk üzeri dosya sistemi , tarihsel nedenlerden dolayı ext3 olarak
adlandırılır. Linux başlangıçta Minix geliştirme sistemiyle veri alışverişini kolaylaştırmak
için Minix uyumlu bir dosya sistemiyle programlanmıştı, ancak bu dosya sistemi 14
karakterlik dosya adı sınırları ve maksimum 64 MB dosya sistemi boyutuyla ciddi
şekilde kısıtlanmıştı. Minix dosya sisteminin yerini, genişletilmiş dosya sistemi (extfs)
olarak adlandırılan yeni bir dosya sistemi aldı. Performansı ve ölçeklenebilirliği
geliştirmek ve birkaç eksik özellik eklemek için daha sonraki bir yeniden tasarım,
ikinci genişletilmiş dosya sistemine (ext2) yol açtı. Daha fazla geliştirme, günlük
oluşturma yetenekleri ekledi ve sistem üçüncü genişletilmiş dosya sistemi (ext3)
olarak yeniden adlandırıldı. Linux çekirdeği geliştiricileri daha sonra ext3'ü uzantılar
gibi modern dosya sistemi özellikleriyle güçlendirdi. Bu yeni dosya sistemine
dördüncü genişletilmiş dosya sistemi (ext4) denir . Ancak bu bölümün geri kalanı ext3'ü
Machine Translated by Google
Ext3 ve FFS arasındaki temel farklar , disk ayırma ilkelerinde yatmaktadır. FFS'de
disk , 8 KB'lik bloklar halinde dosyalara tahsis edilir . Bu bloklar, küçük dosyaların veya
dosyaların sonunda kısmen doldurulmuş blokların depolanması için 1 KB'lik parçalara
bölünmüştür . Buna karşılık, ext3 parçaları hiç kullanmaz, tüm tahsislerini daha küçük
birimlerde gerçekleştirir. Ext3'teki varsayılan blok boyutu, dosya sisteminin toplam
boyutunun bir fonksiyonu olarak değişir. Desteklenen blok boyutları 1, 2, 4 ve 8 KB'dir.
Yüksek performansı sürdürmek için işletim sistemi, fiziksel olarak bitişik G/Ç
isteklerini kümeleyerek mümkün olduğunda büyük parçalar halinde G/Ç işlemlerini
gerçekleştirmeye çalışmalıdır. Kümeleme, aygıt sürücülerinin, disklerin ve disk
denetleyici donanımının neden olduğu istek başına ek yükü azaltır. Blok boyutlu bir G/
Ç istek boyutu, iyi performansı sürdürmek için çok küçüktür, bu nedenle ext3, bir
dosyanın mantıksal olarak bitişik bloklarını diskteki fiziksel olarak bitişik bloklara
yerleştirmek için tasarlanmış ayırma ilkelerini kullanır, böylece birkaç için bir G/Ç isteği
gönderebilir. tek bir işlem olarak disk blokları.
Ext3 tahsis ilkesi aşağıdaki gibi çalışır: FFS'de olduğu gibi, bir ext3 dosya sistemi
birden çok segmente bölünür. Ext3'te bunlara blok grupları denir. FFS , her grubun bir
fiziksel diskin tek bir silindirine karşılık geldiği benzer silindir grupları kavramını
kullanır . (Modern disk sürücüsü teknolojisinin, disk kafasının diskin merkezinden ne
kadar uzak olduğuna bağlı olarak farklı yoğunluklarda ve dolayısıyla farklı silindir
boyutlarında sektörleri disk üzerine paketlediğine dikkat edin. Bu nedenle, sabit
boyutlu silindir grupları zorunlu değildir. diskin geometrisine karşılık gelir.)
Bir dosya tahsis ederken, ext3 önce o dosya için blok grubunu seçmelidir.
Veri blokları için, dosyayı, dosyanın düğümünün tahsis edildiği blok grubuna tahsis
etmeye çalışır. İnode tahsisleri için, dizin olmayan dosyalar için dosyanın üst dizininin
bulunduğu blok grubunu seçer. Dizin dosyaları bir arada tutulmaz, bunun yerine
mevcut blok gruplarına dağıtılır. Bu ilkeler, yalnızca ilgili bilgileri aynı blok grubu içinde
tutmak için değil, aynı zamanda diskin herhangi bir alanının parçalanmasını azaltmak
için disk yükünü diskin blok grupları arasında dağıtmak için de tasarlanmıştır.
Bir blok grubu içinde, ext3 mümkünse ayırmaları fiziksel olarak bitişik tutmaya
çalışır, mümkünse parçalanmayı azaltır. Bir blok grubundaki tüm serbest blokların bir
bitmap'ini tutar. Yeni bir dosya için ilk blokları tahsis ederken, blok grubunun başından
itibaren boş bir blok aramaya başlar. Bir dosyayı genişletirken, dosyaya en son tahsis
edilen bloktan aramaya devam eder. Arama iki aşamada gerçekleştirilir. İlk olarak, ext3
bitmap'te tam bir boş bayt arar; birini bulamazsa, herhangi bir boş bit arar.
Boş bayt araması, mümkün olduğunda en az sekiz bloktan oluşan parçalar halinde
disk alanı ayırmayı amaçlar.
Machine Translated by Google
Boş bir blok tanımlandığında, arama tahsis edilmiş bir blokla karşılaşılıncaya
kadar geriye doğru uzatılır. Bitmap'te boş bir bayt bulunduğunda, bu geriye doğru
uzantı, ext3'ün önceki sıfır olmayan baytta en son tahsis edilen blok ile bulunan sıfır
bayt arasında bir boşluk bırakmasını önler.
Ayrılacak bir sonraki blok bit veya bayt aramasıyla bulunduğunda, ext3 tahsisi sekiz
bloğa kadar uzatır ve bu ekstra blokları dosyaya önceden tahsis eder. Bu ön tahsis,
ayrı dosyalara aralıklı yazma işlemleri sırasında parçalanmayı azaltmaya yardımcı
olur ve aynı zamanda birden çok bloğu aynı anda tahsis ederek CPU disk tahsisi
maliyetini azaltır. Dosya kapatıldığında önceden tahsis edilmiş bloklar boş alan bit
eşlemine döndürülür.
Şekil 20.7, tahsis politikalarını göstermektedir. Her satır, diskteki kullanılmış ve
boş blokları gösteren, bir tahsis bit eşlemindeki bir dizi ayarlanmış ve ayarlanmamış
biti temsil eder. İlk durumda, aramanın başlangıcına yeterince yakın herhangi bir
serbest blok bulabilirsek, ne kadar parçalanmış olurlarsa olsunlar onları tahsis ederiz.
Parçalanma, blokların birbirine yakın olması ve muhtemelen herhangi bir disk
araması olmadan okunabilmesi gerçeğiyle kısmen telafi edilir. Ayrıca, diskte geniş
boş alanlar kıt hale geldiğinde, uzun vadede hepsini tek bir dosyaya tahsis etmek,
ayrı dosyalara izole bloklar tahsis etmekten daha iyidir. İkinci durumda, hemen
yakınlarda boş bir blok bulamadık, bu nedenle bitmap'te tam bir boş bayt ararız. Bu
baytı bir bütün olarak tahsis edersek, onunla ondan önceki tahsis arasında
parçalanmış bir boş alan yaratırız. Bu nedenle, tahsis etmeden önce, bu tahsisi
kendisinden önceki tahsisat ile aynı hizada yapmak için yedekleriz ve sonra sekiz
blokluk varsayılan tahsisi karşılamak için ileri tahsis ederiz.
blok seçildi
kullanımda blok bit sınırı
tahsis eden tarafından
Ext3 dosya sistemi, dosya sistemindeki değişikliklerin bir günlüğe sırayla yazıldığı,
günlük kaydı adı verilen popüler bir özelliği destekler . Belirli bir görevi yerine getiren
bir dizi işlem bir işlemdir . Bir işlem dergiye yazıldığında, taahhüt edilmiş sayılır. Bu
arada, işlemle ilgili yevmiye kayıtları gerçek dosya sistemi yapılarında yeniden
oynatılır. Değişiklikler yapıldıkça, hangi eylemlerin tamamlandığını ve hangilerinin
hala eksik olduğunu gösteren bir işaretçi güncellenir. Taahhüt edilen bir işlemin
tamamı tamamlandığında, günlükten kaldırılır. Aslında dairesel bir arabellek olan
günlük, dosya sisteminin ayrı bir bölümünde olabilir, hatta ayrı bir disk mili üzerinde
olabilir. Ayrı okuma-yazma kafaları altında olması daha verimli, ancak daha
karmaşıktır, böylece kafa çekişmesini ve arama sürelerini azaltır.
Linux VFS'nin esnekliği, verileri kalıcı olarak depolamayan, bunun yerine başka bazı
işlevler için bir arayüz sağlayan bir dosya sistemi uygulamamızı sağlar. Linux /proc
dosya sistemi, içeriği gerçekte hiçbir yerde depolanmayan, ancak kullanıcı dosyası G/
Ç isteklerine göre talep üzerine hesaplanan bir dosya sistemine bir örnektir.
A/proc dosya sistemi Linux'a özgü değildir. UNIX v8, bir /proc dosya sistemini
tanıttı ve kullanımı diğer birçok işletim sistemine uyarlandı ve genişletildi. Çekirdeğin
süreç ad alanı için verimli bir arabirimdir ve hata ayıklamaya yardımcı olur. Dosya
sisteminin her alt dizini, herhangi bir diskteki bir dizine değil, mevcut sistemdeki aktif
bir işleme karşılık geliyordu. Dosya sisteminin bir listesi, dizinle birlikte işlem başına
bir dizini ortaya çıkarır.
20.7 Dosya Sistemleri 809
Machine Translated by Google
Linux böyle bir /proc dosya sistemini uygular, ancak dosya sisteminin kök
dizininin altına bir dizi fazladan dizin ve metin dosyası ekleyerek onu büyük ölçüde
genişletir. Bu yeni girişler, çekirdek ve ilişkili yüklü sürücülerle ilgili çeşitli istatistiklere
karşılık gelir. /proc dosya sistemi , programların bu bilgilere düz metin dosyaları
olarak erişmesi için bir yol sağlar; standart UNIX kullanıcı ortamı, bu tür dosyaları
işlemek için güçlü araçlar sağlar. Örneğin, geçmişte, çalışan tüm işlemlerin
durumlarını listelemek için kullanılan geleneksel UNIX ps komutu, işlem durumunu
doğrudan çekirdeğin sanal belleğinden okuyan ayrıcalıklı bir işlem olarak
uygulanıyordu. Linux altında, bu komut, /proc'tan gelen bilgileri basitçe ayrıştıran ve
biçimlendiren tamamen ayrıcalıksız bir program olarak uygulanır .
/ proc dosya sistemi iki şeyi uygulamalıdır: bir dizin yapısı ve içindeki dosya
içeriği. UNIX dosya sistemi, düğüm numaralarıyla tanımlanan bir dizi dosya ve dizin
düğümü olarak tanımlandığından, / proc dosya sisteminin her dizin ve ilişkili dosyalar
için benzersiz ve kalıcı bir düğüm numarası tanımlaması gerekir. Böyle bir eşleme
mevcut olduğunda, dosya sistemi, bir kullanıcı belirli bir dosya düğümünden
okumaya veya belirli bir dizin düğümünde arama yapmaya çalıştığında hangi işlemin
gerekli olduğunu belirlemek için bu düğüm numarasını kullanabilir. Bu dosyalardan
birinden veri okunduğunda, /proc dosya sistemi uygun bilgileri toplayacak, metin
biçiminde biçimlendirecek ve istekte bulunan işlemin okuma arabelleğine
yerleştirecektir.
İnode numarasından bilgi tipine eşleme, inode numarasını iki alana böler.
Linux'ta bir PID 16 bit boyutundadır, ancak bir düğüm numarası 32 bittir. İnode
numarasının ilk 16 biti bir PID olarak yorumlanır ve kalan bitler bu süreç hakkında ne
tür bilgilerin istendiğini tanımlar.
Sıfır PID geçerli değildir, bu nedenle düğüm numarasındaki sıfır PID alanı, bu
düğümün sürece özel değil, genel bilgi içerdiği anlamına gelir. Çekirdek sürümü, boş
bellek, performans istatistikleri ve çalışmakta olan sürücüler gibi bilgileri bildirmek
için /proc içinde ayrı genel dosyalar bulunur .
810
Bölüm 20 Linux Sistemi
kullanıcı uygulaması
cihaz
dosya sistemi karakter ağ soketi
dosyasını engelle
aygıt dosyası
G/Ç zamanlayıcı
astar protokol
TTY sürücüsü
disiplin sürücüsü
Kullanıcıya, Linux'taki G/Ç sistemi, herhangi bir UNIX sistemindekine çok benzer .
Yani, mümkün olduğu ölçüde, tüm aygıt sürücüleri normal dosyalar olarak görünür.
Kullanıcılar bir aygıta erişim kanalını başka herhangi bir dosyayı açtıkları gibi
açabilirler; aygıtlar dosya sistemi içinde nesneler olarak görünebilir. Sistem yöneticisi,
belirli bir aygıt sürücüsüne referanslar içeren bir dosya sistemi içinde özel dosyalar
oluşturabilir ve böyle bir dosyayı açan bir kullanıcı, referans verilen aygıttan
okuyabilir ve bu aygıta yazabilir. Yönetici, kimin hangi dosyaya erişebileceğini
belirleyen normal dosya koruma sistemini kullanarak, her cihaz için erişim izinleri
ayarlayabilir.
Linux, tüm cihazları üç sınıfa ayırır: blok cihazları, karakter cihazları ve ağ
cihazları. Şekil 20.8, aygıt sürücü sisteminin genel yapısını gösterir.
disk erişiminin mümkün olduğunca hızlı olmasını sağlamak için işlevsellik sağlar. Bu
işlevsellik, G/Ç işlemlerinin programlanması yoluyla elde edilir .
Blok aygıtları bağlamında bir blok, çekirdeğin G/Ç gerçekleştirdiği birimi temsil
eder. Bir blok belleğe okunduğunda, bir arabellekte saklanır.
İstek yöneticisi , bir blok aygıt sürücüsünden arabellek içeriğinin okunmasını ve
yazılmasını yöneten yazılım katmanıdır.
Her blok aygıt sürücüsü için ayrı bir istek listesi tutulur. Geleneksel olarak, bu
istekler, isteklerin listelere eklendiği ve listelerden kaldırıldığı sırayı kullanan tek
yönlü bir asansör (C-SCAN) algoritmasına göre planlanmıştır . Talep listeleri, artan
başlangıç sektör sayısına göre sıralanır. Bir blok aygıt sürücüsü tarafından işlenmek
üzere bir istek kabul edildiğinde, listeden kaldırılmaz. Yalnızca G/Ç tamamlandıktan
sonra kaldırılır, bu noktada sürücü, etkin istekten önce listeye yeni istekler eklenmiş
olsa bile listedeki bir sonraki istekle devam eder. Yeni G/Ç istekleri yapıldıkça, istek
yöneticisi listelerdeki istekleri birleştirmeye çalışır.
Linux çekirdeği sürüm 2.6, yeni bir G/Ç zamanlama algoritması tanıttı.
Basit bir yükseltici algoritması mevcut kalsa da, varsayılan G/Ç zamanlaması artık
Tamamen Adil Kuyruklama (CFQ) zamanlayıcısıdır. CFQ I/O planlayıcısı, asansör
tabanlı algoritmalardan temel olarak farklıdır. CFQ , istekleri bir liste halinde
sıralamak yerine, varsayılan olarak her işlem için bir tane olmak üzere bir dizi liste
tutar. Bir süreçten kaynaklanan istekler, o sürecin listesine girer. Örneğin, iki işlem
G/Ç istekleri yayınlıyorsa, CFQ , her işlem için bir tane olmak üzere iki ayrı istek listesi
tutacaktır. Listeler, C-SCAN algoritmasına göre tutulur .
CFQ , listelere de farklı şekilde hizmet eder. Geleneksel bir C-SCAN algoritmasının
belirli bir sürece kayıtsız olduğu durumlarda, CFQ her işlemin sıralı sıralı listesine
hizmet eder. Bir sonrakine geçmeden önce her listeden yapılandırılabilir sayıda istek
(varsayılan olarak dört) çeker. Bu yöntem, süreç düzeyinde adaletle sonuçlanır; her
süreç, diskin bant genişliğinin eşit bir kısmını alır. Sonuç, G/Ç gecikmesinin önemli
olduğu etkileşimli iş yüklerinde faydalıdır .
Ancak pratikte, CFQ çoğu iş yüküyle iyi performans gösterir.
20.8.2 Karakter Cihazları
Bir karakter aygıtı sürücüsü, sabit veri bloklarına rastgele erişim sunmayan hemen
hemen her aygıt sürücüsü olabilir. Linux çekirdeğine kayıtlı tüm karakter-aygıt
sürücülerinin , sürücünün işleyebileceği dosya G/Ç işlemlerini uygulayan bir dizi işlevi
de kaydetmesi gerekir. Çekirdek, bir karakter aygıtına bir dosya okuma veya yazma
isteği için neredeyse hiç ön işleme gerçekleştirmez. İsteği ilgili cihaza iletir ve cihazın
istekle ilgilenmesini sağlar.
kullanıcı terminali. Bu iş, bu tür birkaç işlemin aynı anda çalışıyor olabileceği gerçeği
nedeniyle karmaşıktır ve tty satırı disiplini, bu işlemler kullanıcı tarafından askıya alınır
veya uyandırılırken, terminalin giriş ve çıkışlarını kendisine bağlı çeşitli işlemlerden
eklemek ve ayırmaktan sorumludur.
Bir kullanıcı işlemine G/Ç ile ilgisi olmayan diğer hat disiplinleri de uygulanmaktadır .
PPP ve SLIP ağ iletişimi protokolleri , seri hat gibi bir terminal cihazı üzerinden bir ağ
bağlantısını kodlamanın yollarıdır. Bu protokoller Linux altında, bir uçta terminal
sistemine hat disiplinleri olarak görünen ve diğer uçta ağ sistemine ağ aygıtı sürücüleri
olarak görünen sürücüler olarak uygulanmaktadır. Bir terminal aygıtında bu hat
disiplinlerinden biri etkinleştirildikten sonra, o terminalde görünen tüm veriler
doğrudan uygun ağ aygıtı sürücüsüne yönlendirilecektir.
Linux, süreçlerin birbirleriyle iletişim kurması için zengin bir ortam sağlar. İletişim,
yalnızca başka bir işlemin bir olayın meydana geldiğini bilmesini sağlama meselesi
olabilir veya bir süreçten diğerine veri aktarımını içerebilir.
Sinyaller her zaman süreçler arasında asenkron olayları iletmek için ana
mekanizma olmasına rağmen, Linux ayrıca System V UNIX'in semafor mekanizmasını
da uygular . Bir süreç, bir sinyali bekleyebildiği kadar kolay bir şekilde bir semafor
üzerinde de bekleyebilir, ancak semaforların iki avantajı vardır: büyük
Machine Translated by Google
sayıda semafor birden çok bağımsız süreç arasında paylaşılabilir ve birden çok
semafor üzerindeki işlemler atomik olarak gerçekleştirilebilir. Dahili olarak, standart
Linux bekleme kuyruğu mekanizması, semaforlarla iletişim kuran süreçleri senkronize
eder.
arasında veri geçişi için çeşitli mekanizmalar sunar. Standart UNIX boru mekanizması,
bir alt işlemin üst öğesinden bir iletişim kanalı devralmasına izin verir; borunun bir
ucuna yazılan veriler diğer ucunda okunabilir. Linux altında, borular sanal dosya
sistemi yazılımına başka bir tür düğüm olarak görünür ve her borunun okuyucu ve
yazıcıyı senkronize etmek için bir çift bekleme kuyruğu vardır. UNIX ayrıca, hem yerel
hem de uzak işlemlere veri akışları gönderebilen bir dizi ağ tesisi tanımlar. Ağ
oluşturma, Bölüm 20.10'da ele alınmaktadır.
Diğer bir süreç iletişim yöntemi olan paylaşılan bellek, büyük veya küçük
miktarlardaki verileri iletmek için son derece hızlı bir yol sunar. Bir işlem tarafından
paylaşılan bir bellek bölgesine yazılan herhangi bir veri, o bölgeyi adres alanına
eşleyen diğer herhangi bir işlem tarafından hemen okunabilir.
Paylaşılan belleğin ana dezavantajı, kendi başına hiçbir senkronizasyon sunmamasıdır.
Bir işlem, işletim sistemine bir paylaşılan hafıza parçasının yazılıp yazılmadığını
soramaz veya böyle bir yazma gerçekleşene kadar yürütmeyi askıya alamaz.
Paylaşılan bellek, eksik senkronizasyonu sağlayan başka bir süreçler arası iletişim
mekanizması ile birlikte kullanıldığında özellikle güçlü hale gelir.
20.10 Ağ Yapısı
Ağ oluşturma, Linux için önemli bir işlevsellik alanıdır. Linux yalnızca çoğu UNIX'ten
UNIX'e iletişim için kullanılan standart İnternet protokollerini desteklemekle kalmaz,
aynı zamanda UNIX olmayan diğer işletim sistemlerine özgü bir dizi protokolü de
uygular . Özellikle, Linux başlangıçta büyük iş istasyonları veya sunucu sınıfı sistemler
yerine öncelikle PC'lerde uygulandığından, AppleTalk ve IPX gibi PC ağlarında tipik
olarak kullanılan birçok protokolü destekler.
2. Protokol sürücüleri
3. Ağ aygıtı sürücüleri
Ağ yığınının katmanları arasındaki tüm iletişim, tek skbuff (soket arabelleği) yapıları
geçirilerek oluşturulur. Bu yapıların her biri, içinde ağ paketlerinin oluşturulabileceği bir
arabelleği temsil eden, tek bir sürekli bellek alanına bir dizi işaretçi içerir. Bir skbuff'taki
geçerli verilerin, skbuff'ın arabelleğinin başında başlamasına ve sonuna kadar çalışmasına
gerek yoktur. Ağ oluşturma kodu, sonuç hala skbuff'a uyduğu sürece, paketin her iki
ucundan veri ekleyebilir veya verileri kesebilir. Bu kapasite, CPU hızındaki iyileştirmelerin
ana belleğin performansını çok geride bıraktığı modern mikroişlemcilerde özellikle
önemlidir . Skbuff mimarisi, gereksiz veri kopyalamadan kaçınırken paket başlıklarını ve
sağlama toplamlarını manipüle etmede esneklik sağlar .
protokol türünü farklı şekillerde kodlayın; bu nedenle, gelen veri protokolü aygıt
sürücüsünde tanımlanmalıdır. Aygıt sürücüsü, uygun protokolü aramak için bilinen
ağ protokolü tanımlayıcılarının bir karma tablosunu kullanır ve paketi bu protokole
iletir. Karma tablosuna çekirdek yüklenebilir modüller olarak yeni protokoller
eklenebilir.
Gelen IP paketleri IP sürücüsüne teslim edilir. Bu katmanın görevi yönlendirme
yapmaktır. Paketin nereye gönderileceğine karar verdikten sonra, IP sürücüsü paketi
yerel olarak teslim edilmek üzere uygun dahili protokol sürücüsüne iletir veya başka
bir ana bilgisayara iletilmek üzere seçilen bir ağ aygıtı sürücüsü kuyruğuna geri
enjekte eder. Yönlendirme kararını iki tablo kullanarak gerçekleştirir: kalıcı iletme
bilgi tabanı (FIB) ve son yönlendirme kararlarının önbelleği. FIB , yönlendirme
yapılandırma bilgilerini tutar ve belirli bir hedef adrese veya birden çok hedefi temsil
eden bir joker karaktere dayalı olarak rotaları belirleyebilir. FIB , hedef adrese göre
indekslenen bir dizi karma tablo olarak düzenlenir; en spesifik rotaları temsil eden
tablolar her zaman önce aranır. Bu tablodaki başarılı aramalar, rotaları yalnızca
belirli bir hedefe göre önbelleğe alan rota önbelleğe alma tablosuna eklenir.
Önbellekte hiçbir joker karakter saklanmaz, bu nedenle aramalar hızlı bir şekilde
yapılabilir. Rota önbelleğindeki bir giriş, isabetsiz sabit bir sürenin ardından sona
erer.
Çeşitli aşamalarda, IP yazılımı paketleri güvenlik duvarı yönetimi için ayrı bir kod
bölümüne geçirir - genellikle güvenlik amacıyla paketlerin isteğe bağlı kriterlere
göre seçici filtrelenmesi. Güvenlik duvarı yöneticisi bir dizi ayrı güvenlik duvarı zinciri
tutar ve bir skbuff'ın herhangi bir zincirle eşleştirilmesine izin verir. Zincirler ayrı
amaçlar için ayrılmıştır: biri iletilen paketler için, biri bu ana bilgisayara girilen
paketler için ve diğeri bu ana bilgisayarda oluşturulan veriler için kullanılır. Her
zincir, sıralı bir kurallar listesi olarak tutulur; burada bir kural, bir dizi olası güvenlik
duvarı karar işlevinden birini ve eşleştirme amaçları için bazı rasgele verileri belirtir.
2. Erişim kontrolü. Bir kullanıcının belirli bir nesneye erişim hakkına sahip olup
olmadığını kontrol etmek ve gerektiğinde nesnelere erişimi engellemek için bir
mekanizma sağlamak
UNIX'te kimlik doğrulama , tipik olarak, genel olarak okunabilir bir parola dosyası
kullanılarak gerçekleştirilmiştir. Bir kullanıcının şifresi rastgele bir “tuz” değeri ile
birleştirilir ve sonuç tek yönlü bir dönüşüm fonksiyonu ile kodlanır ve şifre dosyasında
saklanır. Tek yönlü işlevin kullanılması, orijinal parolanın deneme yanılma dışında parola
dosyasından çıkarılamayacağı anlamına gelir. Bir kullanıcı sisteme bir şifre sunduğunda,
şifre, şifre dosyasında saklanan tuz değeri ile yeniden birleştirilir ve aynı tek yönlü
dönüşümden geçirilir. Sonuç, şifre dosyasının içeriğiyle eşleşirse, şifre kabul edilir.
UNIX satıcıları tarafından kimlik doğrulama sorunlarını çözmek için yeni bir güvenlik
mekanizması geliştirilmiştir . Takılabilir kimlik doğrulama modülleri (PAM) sistemi ,
kullanıcıların kimliğini doğrulaması gereken herhangi bir sistem bileşeni tarafından
kullanılabilen paylaşılan bir kitaplığı temel alır. Bu sistemin bir uygulaması Linux altında
mevcuttur. PAM , sistem çapında bir yapılandırma dosyasında belirtildiği gibi kimlik
doğrulama modüllerinin talep üzerine yüklenmesine izin verir. Daha sonraki bir tarihte
yeni bir kimlik doğrulama mekanizması eklenirse, yapılandırma dosyasına eklenebilir ve
tüm sistem bileşenleri bundan hemen yararlanabilecektir. PAM modülleri, kimlik
doğrulama yöntemlerini, hesap kısıtlamalarını, oturum kurulum işlevlerini ve parola
değiştirme işlevlerini belirleyebilir (böylece, kullanıcılar parolalarını değiştirdiğinde,
gerekli tüm kimlik doğrulama mekanizmaları bir kerede güncellenebilir).
Machine Translated by Google
Linux dahil UNIX sistemleri altında erişim kontrolü , benzersiz sayısal tanımlayıcılar
kullanılarak gerçekleştirilir. Bir kullanıcı tanımlayıcısı (UID) , tek bir kullanıcıyı veya
tek bir erişim hakları grubunu tanımlar. Grup tanımlayıcısı (GID) , birden fazla
kullanıcıya ait hakları tanımlamak için kullanılabilen ekstra bir tanımlayıcıdır.
Erişim kontrolü, sistemdeki çeşitli nesnelere uygulanır. Sistemde bulunan her
dosya, standart erişim kontrol mekanizması tarafından korunmaktadır. Ayrıca,
paylaşılan bellek bölümleri ve semaforlar gibi diğer paylaşılan nesneler de aynı
erişim sistemini kullanır.
UNIX sistemindeki kullanıcı ve grup erişim kontrolü altındaki her nesnenin tek
bir UID'si ve onunla ilişkili tek bir GID'si vardır. Kullanıcı işlemlerinin de tek bir UID'si
vardır, ancak birden fazla GID'si olabilir. Bir işlemin UID'si bir nesnenin UID'si ile
eşleşirse, işlemin o nesne üzerinde kullanıcı hakları veya sahip hakları vardır.
UID'ler eşleşmiyorsa ancak sürecin herhangi bir GID'si nesnenin GID'si ile eşleşiyorsa ,
grup hakları verilir ; aksi takdirde, sürecin nesne üzerinde dünya hakları vardır.
Linux, nesnelere sahip, grup veya dünya erişimi olan işlemlere hangi erişim
modlarının (okuma, yazma veya yürütme) verileceğini belirten bir koruma maskesi
atayarak erişim kontrolünü gerçekleştirir . Böylece, bir nesnenin sahibi bir dosyaya
tam okuma, yazma ve yürütme erişimine sahip olabilir; belirli bir gruptaki diğer
kullanıcılara okuma erişimi verilebilir ancak yazma erişimi reddedilebilir; ve diğer
herkese hiç erişim izni verilmeyebilir.
Tek istisna, ayrıcalıklı kök UID'dir. Bu özel UID'ye sahip bir işleme , normal erişim
kontrollerini atlayarak sistemdeki herhangi bir nesneye otomatik erişim izni verilir.
Bu tür işlemlere ayrıca herhangi bir fiziksel belleği okuma veya ayrılmış ağ soketlerini
açma gibi ayrıcalıklı işlemleri gerçekleştirme izni de verilir. Bu mekanizma, çekirdeğin
normal kullanıcıların bu kaynaklara erişmesini engellemesine izin verir: çekirdeğin
temel dahili kaynaklarının çoğu, dolaylı olarak kök UID'ye aittir.
Linux altında, bu mekanizma iki şekilde artırılır. İlk olarak, Linux, POSIX
belirtiminin kayıtlı kullanıcı kimliği mekanizmasını uygular; bu, bir işlemin etkin
UID'sini tekrar tekrar bırakmasına ve yeniden almasına izin verir . Güvenlik nedeniyle,
bir program, setuid statüsünün verdiği ayrıcalıklardan feragat ederek, işlemlerinin
çoğunu güvenli modda gerçekleştirmek isteyebilir ; ancak seçilen işlemleri tüm
ayrıcalıkları ile yapmak isteyebilir. Standart UNIX uygulamaları bu kapasiteye yalnızca
gerçek ve etkili UID'leri değiştirerek ulaşır. Bu yapıldığında, önceki etkin UID
hatırlanır, ancak programın gerçek UID'si her zaman programı çalıştıran kullanıcının
UID'sine karşılık gelmez . Kaydedilmiş UID'ler , bir işlemin kendi etkin UID'sini gerçek
UID'sine ayarlamasına ve ardından geri dönmesine izin verir.
818 Bölüm
Machine Translated by Google 20 Linux Sistemi
herhangi bir zamanda gerçek UID'yi değiştirmek zorunda kalmadan etkin UID'sinin
önceki değeri .
Linux tarafından sağlanan ikinci geliştirme, etkin UID haklarının yalnızca bir alt
kümesini veren bir süreç özelliğinin eklenmesidir. Dosyalara erişim hakları verildiğinde
fsuid ve fsgid işlem özellikleri kullanılır. Etkin UID veya GID her ayarlandığında uygun
özellik ayarlanır. Bununla birlikte, fsuid ve fsgid, etkin kimliklerden bağımsız olarak
ayarlanabilir ve bir işlemin, diğer kullanıcının kimliğini başka bir şekilde almadan
başka bir kullanıcı adına dosyalara erişmesine izin verir. Spesifik olarak, sunucu
süreçleri bu mekanizmayı, belirli bir kullanıcıya, o kullanıcı tarafından öldürülmeye
veya askıya alınmaya karşı savunmasız hale gelmeden dosya sunmak için kullanabilir.
Son olarak, Linux, hakların bir programdan diğerine esnek geçişi için bir
mekanizma sağlar; bu, UNIX'in modern sürümlerinde yaygın hale gelen bir
mekanizmadır. Sistemdeki herhangi iki işlem arasında bir yerel ağ soketi kurulduğunda,
bu işlemlerden biri diğer işleme açık dosyalarından biri için bir dosya tanımlayıcı
gönderebilir; diğer işlem, aynı dosya için yinelenen bir dosya tanımlayıcısı alır. Bu
mekanizma, bir istemcinin, bu işleme başka ayrıcalıklar vermeden, tek bir dosyaya
erişimi seçici olarak bazı sunucu işlemlerine geçirmesine izin verir. Örneğin, bir
yazdırma sunucusunun yeni bir yazdırma işi gönderen bir kullanıcının tüm dosyalarını
okuyabilmesi artık gerekli değildir. Yazdırma istemcisi, yazdırılacak herhangi bir dosya
için sunucu dosya tanımlayıcılarını iletebilir ve sunucunun kullanıcının diğer
dosyalarından herhangi birine erişimini engelleyebilir.
20.12 Özet
• Linux, UNIX standartlarına dayalı modern, özgür bir işletim sistemidir . Yaygın PC
donanımında verimli ve güvenilir bir şekilde çalışacak şekilde tasarlanmıştır ;
ayrıca cep telefonları gibi çeşitli başka platformlarda da çalışır. Standart UNIX
sistemleriyle uyumlu bir programlama arabirimi ve kullanıcı arabirimi sağlar ve
artan sayıda ticari olarak desteklenen uygulamalar dahil olmak üzere çok sayıda
UNIX uygulamasını çalıştırabilir. • Linux bir boşlukta gelişmedi. Eksiksiz bir Linux
sistemi, Linux'tan bağımsız olarak geliştirilmiş birçok bileşen içerir. Çekirdek Linux
işletim sistemi çekirdeği tamamen orijinaldir, ancak mevcut birçok ücretsiz UNIX
yazılımının çalışmasına izin vererek, UNIX uyumlu bir işletim sisteminin tamamının
tescilli koddan arınmış olmasını sağlar.
• Kullanıcıya dosya sistemi, UNIX semantiğine uyan hiyerarşik bir dizin ağacı olarak
görünür . Dahili olarak, Linux birden çok dosya sistemini yönetmek için bir
soyutlama katmanı kullanır. Cihaz odaklı, ağ bağlantılı ve sanal dosya sistemleri
desteklenir. Aygıt yönelimli dosya sistemleri, sanal bellek sistemiyle birleştirilmiş
bir sayfa önbelleği aracılığıyla disk depolamasına erişir.
20.2 Çoklu okuma, yaygın olarak kullanılan bir programlama tekniğidir. Konuları
uygulamanın üç farklı yolunu tanımlayın ve bu üç yöntemi Linux klon()
mekanizmasıyla karşılaştırın. Her alternatif mekanizmayı kullanmak ne
zaman klon kullanmaktan daha iyi veya daha kötü olabilir?
20.3 Linux çekirdeği, çekirdek belleğinin disk belleğinin dışına çıkarılmasına izin
vermez. Bu kısıtlamanın çekirdeğin tasarımı üzerinde nasıl bir etkisi var? Bu
tasarım kararının iki avantajı ve iki dezavantajı nelerdir?
20.4 Kütüphanelerin dinamik (paylaşılan) bağlantısının statik bağlantıya kıyasla üç
avantajını tartışın. Statik bağlantının tercih edildiği iki durumu açıklayın.
20.5 Ağ soketlerinin kullanımını, tek bir bilgisayardaki işlemler arasında veri iletişimi
için bir mekanizma olarak paylaşılan belleğin kullanımıyla karşılaştırın. Her
yöntemin avantajları nelerdir? Her biri ne zaman tercih edilebilir?
20.6 Bir zamanlar, UNIX sistemleri, disk verilerinin dönüş konumuna dayalı disk
düzeni optimizasyonları kullanıyordu, ancak Linux dahil olmak üzere modern
uygulamalar, yalnızca sıralı veri erişimi için optimize edildi. Neden böyle
yapıyorlar? Sıralı erişim hangi donanım özelliklerinden yararlanır? Dönel
optimizasyon neden artık bu kadar kullanışlı değil?
Linux sistemi İnternet'in bir ürünüdür; sonuç olarak, Linux ile ilgili mevcut belgelerin
çoğu İnternet'te bir şekilde mevcuttur. Aşağıdaki önemli siteler, mevcut yararlı
bilgilerin çoğuna atıfta bulunur:
Machine Translated by Google
820
Bölüm 20 Linux Sistemi
• Linux Haftalık Haberleri (LWN) (http://lwn.net) , Linux çekirdeği hakkında çok iyi
araştırılmış bir alt bölüm de dahil olmak üzere haftalık Linux ile ilgili haberler sağlar .
haberler.
bibliyografya
20.8 Sistem çağrısı dizisi fork() exec() en çok hangi durumlarda kullanılır?
uygun? vfork() ne zaman tercih edilir?
20.9 Bilgisayarlar arası dosya aktarım programını uygulamak için hangi soket tipi
kullanılmalıdır? Ağda başka bir bilgisayarın açık olup olmadığını görmek için
periyodik olarak test eden bir program için ne tür kullanılmalıdır?
Cevabını açıkla.
20.10 Linux, çeşitli donanım platformlarında çalışır. Hangi adımlar Linux olmalıdır
geliştiriciler, sistemin farklı işlemcilere ve bellek yönetimi mimarilerine taşınabilir
olmasını ve
mimariye özgü çekirdek kodu miktarı?
20.13 Linux tarafından desteklenen klon() işleminin hem süreçleri hem de iş parçacıklarını
desteklemek için nasıl kullanıldığını tartışın.
20.14 Linux dizilerini kullanıcı düzeyinde diziler olarak mı yoksa çekirdek düzeyinde diziler
olarak mı sınıflandırırsınız? Cevabınızı uygun argümanlarla destekleyin.
20.17 Tamamen Adil Programlamanın (CFS) iki yapılandırılabilir değişkeni nelerdir ? Her
birini çok fazla ayarlamanın artıları ve eksileri nelerdir?
küçük ve çok büyük değerler?
20.18 Linux zamanlayıcı, "yumuşak" gerçek zamanlı zamanlamayı uygular. Belirli gerçek
zamanlı programlama görevleri için gerekli olan hangi özellikler eksik?
Çekirdeğe nasıl eklenebilirler? Maliyetleri nelerdir (olumsuz yanları)
gibi özelliklerden?
20.19 Bir kullanıcı işlemi hangi koşullar altında bir işlem talep eder?
Bu, talep-sıfır bellek bölgesinin tahsisi ile sonuçlanır?
20.21 Linux'ta, paylaşımlı kitaplıklar birçok işlemi işletim sisteminin merkezinde gerçekleştirir.
Bu işlevi dışarıda tutmanın avantajı nedir?
çekirdekten mi? Dezavantajları var mı? Cevabını açıkla.
EX-59
Machine Translated by Google
20.22 Linux'un ext3'ü gibi bir günlük kaydı dosya sisteminin faydaları nelerdir?
Maliyetler nelerdir? ext3 neden yalnızca meta verileri günlüğe kaydetme
seçeneği sunuyor?
20.23 Bir Linux işletim sisteminin dizin yapısı, Linux /proc dosya sistemi de dahil olmak
üzere birkaç farklı dosya sistemine karşılık gelen dosyaları içerebilir. Farklı
dosya sistemi türlerini destekleme ihtiyacı Linux çekirdeğinin yapısını nasıl
etkileyebilir?
21 BÖLÜM
Windows 10
BÖLÜM HEDEFLERİ
21.1 Tarihçe
821
822 Bölüm 21 Windows 10
Machine Translated by Google
hem OS/2 hem de POSIX uygulama programlama arabirimlerini (API'ler) destekler. Ekim
1988'de DEC VAX/VMS işletim sisteminin mimarı Dave Cutler işe alındı ve Microsoft'un
yeni işletim sistemini kurma tüzüğü verildi.
Başlangıçta ekip, NT'nin yerel ortamı olarak OS/2 API'yi kullanmayı planlıyordu ,
ancak geliştirme sırasında NT , Windows'ta kullanılan popüler 16-bit API'yi temel alan
yeni bir 32-bit Windows API'sini ( Win32 olarak adlandırılır) kullanacak şekilde değiştirildi.
3.0. NT'nin ilk sürümleri Windows NT 3.1 ve Windows NT 3.1 Advanced Server idi. (O
zaman, 16-bit Windows Sürüm 3.1'deydi.) Windows NT Sürüm 4.0, Windows 95 kullanıcı
arabirimini benimsedi ve İnternet web sunucusu ve web tarayıcı yazılımını birleştirdi. Ek
olarak, performansı artırmak için kullanıcı arayüzü rutinleri ve tüm grafik kodları
çekirdeğe taşındı (sistem güvenilirliğinin azalması ve önemli güvenlik kaybının yan etkisi
ile).
NT'nin önceki sürümleri diğer mikroişlemci mimarilerine taşınmış olsa da (Alpha AXP
64'e kısa bir 64-bit bağlantı noktası dahil), Şubat 2000'de piyasaya sürülen Windows
2000 sürümü, pazar faktörleri nedeniyle yalnızca IA-32 uyumlu işlemcileri destekledi.
Windows 2000, önemli değişiklikler içeriyordu. Active Directory (X.500 tabanlı bir dizin
hizmeti), daha iyi ağ ve dizüstü bilgisayar desteği, tak ve çalıştır aygıtları için destek,
dağıtılmış bir dosya sistemi ve daha fazla işlemci ve daha fazla bellek için destek ekledi.
Yeni mobil dünyayı desteklemek için Windows 8, ilk kez 32-bit ARM ISA'ya taşındı
ve çekirdeğin güç yönetimi ve donanım genişletilebilirlik özelliklerinde (bu bölümün
ilerleyen kısımlarında ele alınacaktır) birçok değişiklik içeriyordu. Microsoft, bu
bağlantı noktasının iki sürümünü pazarladı. Windows RT adlı bir sürüm, hem
Windows Mağazası paketli uygulamaları hem de Notepad, Internet Explorer ve en
önemlisi Office gibi bazı Microsoft markalı "klasik" uygulamaları çalıştırıyordu.
Windows Phone adı verilen diğer sürüm ise yalnızca Windows Store paketli
uygulamaları çalıştırabiliyordu.
Microsoft, ilk kez , yalnızca Windows RT işletim sistemini çalıştıran bir tablet
cihaz olan Surface RT'yi içeren “Surface” markası altında kendi markalı mobil
donanımını piyasaya sürdü . Biraz sonra Microsoft, Nokia'yı satın aldı ve Windows
Phone çalıştıran Microsoft markalı telefonları da piyasaya sürmeye başladı.
Ne yazık ki, Windows 8 birkaç nedenden dolayı bir piyasa başarısızlığıydı. Bir
yandan Metro, eski Windows işletim sistemlerine alışmış kullanıcıları masaüstü
bilgisayarlarında çalışma şeklini tamamen değiştirmeye zorlayan tablet odaklı bir
arayüze odaklandı. Örneğin Windows 8, başlat menüsünü dokunmatik ekran
özellikleriyle değiştirdi, kısayolları animasyonlu "döşemelerle" değiştirdi ve çok az
klavye girişi desteği sundu veya hiç destek vermedi. Öte yandan, Microsoft'un
telefonu ve tableti için uygulama edinmenin tek yolu olan Windows Mağazası'ndaki
uygulamaların kıtlığı, bu cihazların da piyasada başarısız olmasına neden oldu ve
şirketin sonunda Surface RT cihazını aşamalı olarak devre dışı bırakmasına neden
oldu. ve Nokia satın alma işlemini iptal edin.
Microsoft, Ekim 2013'te Windows 8.1'in piyasaya sürülmesiyle bu sorunların
çoğunu hızla çözmeye çalıştı. Bu sürüm, Windows 8'in mobil olmayan cihazlarda
kullanılabilirlik kusurlarının çoğunu gidererek, geleneksel bir klavye ve fare
aracılığıyla daha fazla kullanılabilirlik getirdi ve bunun için yollar sağladı. karo tabanlı
Metro arayüzünden kaçının. Ayrıca, Windows 8'de sunulan birçok güvenlik,
performans ve güvenilirlik değişikliğini geliştirmeye devam etti. Bu sürüm daha iyi
karşılansa da, Windows Mağazası'nda devam eden uygulama eksikliği, işletim
sisteminin mobil pazara girişi için bir sorundu. sunucu uygulama programcıları,
alanlarındaki iyileştirme eksikliğinden dolayı kendilerini terk edilmiş hissettiler.
21.1.3 Windows 10
Temmuz 2015'te Windows 10'un piyasaya sürülmesi ve sunucu arkadaşı ile,
Windows Server 2016, Ekim 2016'da Microsoft bir “Windows-
824 Bölüm
Machine Translated by Google 21 Windows 10
Hizmet olarak” (WaaS) modeli (periyodik işlevsellik iyileştirmeleri dahil). Windows 10,
"özellik toplamaları" adı verilen aylık artımlı iyileştirmelerin yanı sıra "güncellemeler"
adı verilen sekiz aylık özellik yayınlarını alır. Ek olarak, gelecek her sürüm, aşağıdakiler
aracılığıyla halka sunulur:
Neredeyse sürümler yayınlayan Windows Insider Programı veya WIP,
haftalık olarak. Bulut hizmetleri ve Facebook ve Google gibi web siteleri gibi,
yeni işletim sistemi canlı telemetri kullanır (hata ayıklama bilgilerini geri gönderir)
Microsoft'a) ve belirli özellikleri dinamik olarak etkinleştirmek ve devre dışı bırakmak için izleme
A/B testi için (“A” sürümünün nasıl yürütüldüğünü benzerlerine kıyasla
sürüm “B”), uyumluluk sorunlarını izlerken yeni özellikleri dener,
ve agresif bir şekilde modern veya eski donanım desteği ekler veya kaldırır.
Bu dinamik yapılandırma ve test özellikleri, bu sürümü bu sürüm yapan şeydir.
"hizmet olarak" bir uygulama.
Windows 10, başlat menüsünü, geri yüklenen klavye desteğini ve
vurgulanan tam ekran uygulamaları ve canlı döşemeler. Kullanıcı açısından
bakıldığında, bu değişiklikler kullanıcıların beklediği kullanım kolaylığını geri getirdi.
Windows tabanlı masaüstü işletim sistemleri. Ek olarak, Metro (ki
Yeniden adlandırılan Modern) , Windows Mağazası paketli uygulamaların normal
masaüstünde eski uygulamalarla yan yana çalıştırılabilmesi için yeniden tasarlandı.
Son olarak, Windows Masaüstü Köprüsü adı verilen yeni bir mekanizma, Win32
uygulamalarının Windows Mağazası'na yerleştirilmesini mümkün kıldı ve
özellikle yeni sistemler için yazılmış uygulamalar. Bu arada, Microsoft'un
Visual Studio ürününde C++11, C++14 ve C++17 desteği eklendi,
ve geleneksel Win32 programlama API'sine birçok yeni API eklendi . A
Windows 10'daki ilgili değişiklik, Birleşik Windows Platformunun piyasaya sürülmesiydi
(UWP) mimarisi, uygulamaların şu şekilde yazılmasına izin verir:
Masaüstü için Windows, IoT için Windows, XBOX One, Windows Phone ve Windows
10 Karışık Gerçeklik (önceden Windows olarak biliniyordu) üzerinde çalışabilirler.
Holografik).
Windows 10 ayrıca çoklu alt sistem kavramının yerini aldı.
Windows 8'de (daha önce belirtildiği gibi) yeni bir mekanizma ile kaldırıldı
Pico Sağlayıcıları denir . Bu mekanizma, değiştirilmemiş ikili dosyaların ait olduğu
Windows 10'da yerel olarak çalıştırmak için farklı bir işletim sistemine. Ağustos
2016'da yayınlanan “Yıldönümü Güncellemesi”nde bu işlev,
Linux ELF ikili dosyalarını çalıştırmak için kullanılabilen Linux için Windows Alt Sistemi
tamamen değiştirilmemiş bir Ubuntu kullanıcı alanı ortamında.
Mobil ve bulut bilişim dünyalarında artan rekabet baskılarına yanıt olarak
Microsoft ayrıca güç, performans ve ölçeklenebilirlik de yaptı.
Windows 10'daki iyileştirmeler, daha fazla sayıda cihazda çalışmasını sağlar.
Aslında, Windows 10 IoT Edition adlı bir sürüm özel olarak tasarlanmıştır.
Raspberry Pi gibi ortamlar, bulut bilgi işlem desteği
kapsayıcılaştırma gibi teknolojiler, Windows için Docker aracılığıyla yerleşiktir.
Windows 10'da Microsoft Hyper-V sanallaştırma teknolojisi de
yerleşik, sanal çalıştırma için ek güvenlik ve yerel destek sağlar
makineler. Windows Server Nano adlı özel bir Windows Server sürümü,
da serbest bırakıldı. Bu son derece düşük ek yükü olan sunucu işletim sistemi,
kapsayıcılı uygulamalar ve diğer bulut bilişim kullanımları için uygundur.
Windows 10, eşzamanlı çalışmayı destekleyen çok kullanıcılı bir işletim sistemidir.
dağıtılmış hizmetler veya GUI'nin birden çok örneği aracılığıyla erişim
21.1 Tarihçe 825
Machine Translated by Google
Windows XP , 64 bitlik bir sürüm sunan ilk Windows sürümüydü ( 2003'te IA64 ve
2005'te AMD64 için). Dahili olarak, yerel NT dosya sistemi (NTFS) ve Win32 API'lerinin
çoğu, uygun olan yerlerde her zaman 64-bit tamsayılar kullanmıştır. Windows XP'de
64-bit'in ana uzantısı, büyük sanal adresler için destek anlamına geliyordu. Ek olarak,
Windows'un 64 bit sürümleri, 24 TB'a kadar RAM'i destekleyen en son Windows Server
2016 sürümüyle çok daha büyük fiziksel belleği destekler. Windows 7 piyasaya
sürüldüğünde, AMD64 ISA hem Intel hem de AMD'nin neredeyse tüm CPU'larında
kullanılabilir hale gelmişti . Ayrıca, o zamana kadar, istemci sistemlerindeki fiziksel
bellek , IA-32'nin 4 GB sınırını sıklıkla aştı. Sonuç olarak, Windows 10'un 64 bit sürümü
artık neredeyse yalnızca IoT ve mobil sistemler dışında istemci sistemlere yükleniyor.
AMD64 mimarisi , bireysel işlemler düzeyinde yüksek kaliteli IA-32 uyumluluğunu
desteklediğinden, 32 ve 64 bit uygulamalar tek bir sistemde serbestçe karıştırılabilir.
İlginç bir şekilde, benzer bir model şimdi mobil sistemlerde ortaya çıkıyor. Apple iOS ,
ARM'nin 64-bit ISA uzantısı olan ( AArch64 olarak da adlandırılır ) ARM64 mimarisini
destekleyen ilk mobil işletim sistemidir . Gelecekteki bir Windows 10 sürümü, öykünme
ve dinamik JIT yeniden derleme yoluyla elde edilen IA-32 mimarisi uygulamaları için
uyumluluk ile yeni bir donanım sınıfı için tasarlanmış bir ARM64 bağlantı noktasıyla
resmi olarak gönderilecek .
Vista ve sonraki güvenlik hedefleri, Windows NT 4.0'ın ABD hükümetinden bir C2 güvenlik
sınıflandırması almasını sağlayan tasarım standartlarına bağlı kalmaktan fazlasını
gerektiriyordu . (C2 sınıflandırması, kusurlu yazılımlara ve kötü niyetli saldırılara karşı orta
düzeyde koruma anlamına gelir.
Sınıflandırmalar, Turuncu Kitap olarak da bilinen Savunma Bakanlığı Güvenilir Bilgisayar
Sistemi Değerlendirme Kriterleri tarafından tanımlandı .) Güvenlik açıklarını temsil edebilecek
potansiyel kusurları belirlemek ve araştırmak için kapsamlı kod incelemesi ve testi, gelişmiş
otomatik analiz araçlarıyla birleştirildi. Ek olarak, hata ödül katılım programları, harici
araştırmacıların ve güvenlik uzmanlarının Windows'ta önceden bilinmeyen güvenlik
sorunlarını tanımlamasına ve göndermesine olanak tanır. Karşılığında, Windows 10'u
olabildiğince güvenli tutmak için Microsoft tarafından yayımlanan aylık güvenlik özetlerinde
kredinin yanı sıra parasal ödeme de alıyorlar.
Windows 10, öznitelik tabanlı erişim denetimi (ABAC) ve talep tabanlı erişim denetimi
(CABC) kombinasyonunu sunarak güvenlik modelini daha da güçlendirdi. Her iki özellik de
sunucu sürümlerinde dinamik erişim denetimi (DAC) uygulamak ve Windows Mağazası
uygulamaları ile Modern ve paketlenmiş uygulamalar tarafından kullanılan yetenek tabanlı
sistemi desteklemek için kullanılır.
Öznitelikler ve taleplerle, sistem yöneticilerinin, güvenlik sisteminin dosyalar gibi nesnelere
erişimi filtrelemek için kullanabileceği tek yol olarak bir kullanıcının adına (veya kullanıcının
ait olduğu gruba) güvenmeleri gerekmez. Kullanıcının özellikleri - örneğin kuruluştaki kıdem,
maaş vb. - de dikkate alınabilir. Bu özellikler, "Kıdem >= 10 Yıl" gibi ACL'deki koşullu erişim
kontrol girişleriyle eşleştirilen nitelikler olarak kodlanmıştır .
Windows, web siteleriyle güvenli bir şekilde iletişim kurmak için kullanılanlar gibi yaygın
protokollerin bir parçası olarak şifreleme kullanır. Şifreleme, ikincil depolamada depolanan
kullanıcı dosyalarını korumak için de kullanılır. Windows 7 ve sonraki sürümleri, kullanıcıların
Machine Translated by Google 21.2 Tasarım İlkeleri 827
BitLocker adlı bir özellikle, tüm birimleri ve USB flash sürücüler gibi çıkarılabilir depolama
aygıtlarını kolayca şifreleyin . Şifrelenmiş bir hacme sahip bir bilgisayar çalınırsa, hırsızlar
bilgisayarın herhangi bir dosyasına erişmek için çok karmaşık bir teknolojiye (elektron
mikroskobu gibi) ihtiyaç duyacaktır ve kullanıcı ayrıca yapılandırılmışsa, hırsızların bunu
yapmaları imkansız olacaktır. harici bir USB tabanlı belirteç ( USB belirteci de çalınmadıysa).
2001'den beri hem Intel hem de AMD'den gelen çipler, bellek sayfalarının
çalıştırılabilir talimat kodu içermemeleri için işaretlenmesine izin verdi. Windows DEP
özelliği, kod yürütmek için kullanılamayacak şekilde yığınları ve bellek yığınlarını (ve
yalnızca diğer tüm veri ayırmalarını) işaretler. Bu, bir program hatasının bir arabelleğin
taşmasına izin verdiği ve ardından arabelleğin içeriğini yürütmesi için kandırıldığı
saldırıları önler. Ek olarak, Windows 8.1'den başlayarak, tüm yalnızca çekirdek veri bellek
ayırmaları benzer şekilde işaretlenmiştir.
DEP , saldırgan tarafından kontrol edilen verilerin kod olarak yürütülmesini
engellediğinden, kötü niyetli geliştiriciler , program içindeki mevcut yürütülebilir kodun
beklenmedik şekillerde yeniden kullanıldığı kodu yeniden kullanma saldırılarına geçti.
(Yalnızca kodun belirli kısımları yürütülür ve akış bir talimat akışından diğerine
yönlendirilir.) ASLR , yürütülebilir (ve veri) bellek bölgelerinin konumunu rastgele hale
getirerek bu tür saldırıların birçok biçimini engeller ve kod- mevcut kodun nerede
olduğunu bilmek için saldırıları yeniden kullanın. Bu koruma, uzaktaki bir saldırganın
saldırısına uğrayan bir sistemin başarısız olmasını veya çökmesini olası kılar.
Bununla birlikte, hiçbir azaltma mükemmel değildir ve ASLR bir istisna değildir.
Örneğin, yerel saldırılara (örneğin, bazı uygulamaların ikincil depolamadan içerik
yüklemesi için kandırıldığı) ve sözde bilgi sızıntısı saldırılarına (bir programın adresinin
bir bölümünü ifşa etmesi için kandırıldığı ) karşı etkisiz olabilir. Uzay). Bu tür sorunları
gidermek için Windows 8.1 , Windows 10'da çok geliştirilmiş olan CFG adlı bir teknoloji
sundu. CFG , herhangi bir dolaylı dalın (örneğin bir çağırma veya atlama) geçerli fonksiyon
önsözlerinin bir listesiyle karşılaştırın. Bir program, böyle bir talimat yoluyla kontrol
akışını başka bir yere yönlendirmek üzere kandırılırsa, çöker.
Saldırganlar, bir saldırıya yürütülebilir verileri getiremez veya mevcut kodu yeniden
kullanamazlarsa, bir programın kendi başına, daha sonra saldırgan tarafından
doldurulabilecek yürütülebilir ve yazılabilir kod tahsis etmesine neden olmaya
çalışabilirler. Alternatif olarak, saldırganlar mevcut yazılabilir verileri değiştirebilir ve
yürütülebilir veriler olarak işaretleyebilir. Windows 10'un ACG azaltması, bu işlemlerden
herhangi birini yasaklar. Yürütülebilir kod bir kez yüklendikten sonra bir daha asla
değiştirilemez ve veriler yüklendikten sonra asla yürütülebilir olarak işaretlenemez.
Windows 10'da burada açıklananlara ek olarak otuzdan fazla güvenlik azaltması
vardır. Bu güvenlik özellikleri seti, geleneksel saldırıları daha
828 Bölüm
Machine Translated by Google 21 Windows 10
zor, belki de kısmen reklam yazılımı, kredi kartı sahtekarlığı ve fidye yazılımı gibi suç
yazılımı uygulamalarının neden bu kadar yaygın hale geldiğini açıklamak.
Bu tür saldırılar, kullanıcıların kendi bilgisayarlarına isteyerek ve manuel olarak zarar
vermelerine dayanır (örneğin, uyarılara karşı uygulamalara çift tıklamak veya sahte
bir bankacılık sayfasına kredi kartı numaralarını girmek gibi). Hiçbir işletim sistemi,
insanın saflığına ve merakına karşı koyacak şekilde tasarlanamaz. Son zamanlarda
Microsoft, güvenlik azaltmalarını doğrudan ISA'ya eklemek için Intel gibi yonga
üreticileriyle doğrudan çalışmaya başladı .
Örneğin, bu tür bir azaltma, donanım gölge yığınlarını kullanarak geri dönüş odaklı
programlama (ROP) saldırılarına karşı koruma sağlayan bir CFG donanım uygulaması
olan Control-flo Enforcement Technology'dir (CET) .
Gölge yığını, bir rutin çağrıldığında depolanan dönüş adresleri kümesini içerir. İade
yapılmadan önce adresler bir uyumsuzluk için kontrol edilir. Uyumsuzluk, yığının
güvenliğinin ihlal edildiği ve önlem alınması gerektiği anlamına gelir.
21.2.2 Güvenilirlik
Windows, ilk on yılında bir işletim sistemi olarak büyük ölçüde olgunlaştı ve Windows
2000'e yol açtı. Aynı zamanda, kaynak kodundaki olgunluk, sistemin kapsamlı stres
testi, geliştirilmiş CPU mimarileri ve otomatik gibi faktörler nedeniyle güvenilirliği
arttı. hem Microsoft'tan hem de üçüncü şahıslardan gelen sürücülerde birçok ciddi
hatanın tespiti. Windows daha sonra, hatalar için kaynak kodun otomatik analizini,
doğrulama hatalarını saptamaya yönelik testleri ve yazılımın bir uygulama sürümünü
içerecek şekilde güvenilirlik elde etmek için araçları genişletti.
Machine Translated by Google 21.2 Tasarım İlkeleri 829
Birçok yaygın kullanıcı modu programlama hatası için dinamik kontrol uygulayan sürücü
doğrulayıcı. Güvenilirlikteki diğer iyileştirmeler, daha fazla kodun çekirdekten kullanıcı
modu hizmetlerine taşınmasından kaynaklanmıştır. Windows, kullanıcı modunda sürücü
yazmak için kapsamlı destek sağlar. Bir zamanlar çekirdekte olan ve şimdi kullanıcı
modunda olan sistem olanakları, üçüncü taraf yazı tipleri için oluşturucuyu ve ses için
yazılım yığınının çoğunu içerir.
Windows deneyimindeki en önemli iyileştirmelerden biri, önyükleme sırasında bir
seçenek olarak bellek tanılaması eklenmesinden geldi. Bu ekleme özellikle değerlidir
çünkü çok az sayıda tüketici bilgisayarında hata düzeltme belleği vardır. Hata düzeltme
ve algılama özelliği olmayan bozuk RAM , depoladığı verileri değiştirebilir; bu, donanım
tarafından algılanmayan bir değişikliktir. Sonuç, sistemde sinir bozucu derecede düzensiz
davranıştır. Bellek teşhisinin kullanılabilirliği, kullanıcıları bir RAM sorunu konusunda
uyarabilir . Windows 10, çalışma zamanı belleği tanılama özelliğini sunarak bunu daha da
ileri götürdü. Bir makine arka arkaya beş defadan fazla bir çekirdek modu çökmesiyle
karşılaşırsa ve çökmeler belirli bir nedene veya bileşene bağlı olarak belirlenemezse,
çekirdek bellek içeriğini taşımak, sistem önbelleklerini temizlemek ve tekrarlanan bellek
yazmak için boşta kalma dönemlerini kullanır. tüm bellekteki kalıpları test etme - tümü,
RAM'in hasar görüp görmediğini önceden keşfetmek için. Kullanıcılar daha sonra,
önyükleme sırasında bellek tanılama aracını yeniden başlatmaya gerek kalmadan herhangi
bir sorun hakkında bilgilendirilebilir.
Windows 7 ayrıca hataya dayanıklı bir bellek yığını da tanıttı. Yığın, uygulama
çökmelerinden öğrenir ve çöken bir uygulama tarafından gerçekleştirilen bellek işlemlerini
otomatik olarak ayarlar. Bu, belleği boşalttıktan sonra kullanmak veya ayırmanın sonunu
geçtikten sonra erişmek gibi yaygın hatalar içeriyor olsa bile uygulamayı daha güvenilir
hale getirir. Bu tür hatalardan saldırganlar yararlanabileceğinden, Windows 7 ayrıca
geliştiricilerin bu özelliği engellemesi ve yığın bozulmasıyla herhangi bir uygulamayı
hemen çökmesi için bir azaltma içerir. Bu, güvenlik ihtiyaçları ile kullanıcı deneyimi
ihtiyaçları arasında var olan ikiliğin çok pratik bir temsilidir.
Windows'ta yüksek güvenilirlik elde etmek özellikle zordur çünkü neredeyse iki milyar
sistem Windows çalıştırır. Bu sistemlerin yalnızca küçük bir yüzdesini etkileyen güvenilirlik
sorunları bile muazzam sayıda kullanıcıyı etkilemeye devam ediyor. Windows ekosisteminin
karmaşıklığı da zorluklara katkıda bulunuyor.
Milyonlarca uygulama, sürücü ve diğer yazılım örneği sürekli olarak Windows sistemlerinde
indirilmekte ve çalıştırılmaktadır. Tabii ki, sürekli bir kötü amaçlı yazılım saldırısı akışı da
var. Windows'un kendisine doğrudan saldırmak zorlaştıkça, açıklardan yararlanmalar
giderek popüler uygulamaları hedef alıyor.
Bu zorluklarla başa çıkmak için Microsoft, ekosistemden veri toplamak için müşteri
makinelerinden gelen iletişime giderek daha fazla güveniyor.
Makineler, nasıl performans gösterdiklerini, hangi yazılımı çalıştırdıklarını ve hangi
sorunlarla karşılaştıklarını görmek için örneklenir. Yazılımları, sürücüleri veya çekirdeğin
kendisi çöktüğünde veya kilitlendiğinde, verileri otomatik olarak Microsoft'a gönderirler.
Özellikler, ne sıklıkta kullanıldıklarını belirtmek için ölçülür.
Eski davranış (Microsoft tarafından artık kullanılması önerilmeyen yöntemler) bazen devre
dışı bırakılır ve yeniden kullanılmaya çalışılırsa uyarılar gönderilir.
Sonuç olarak, Microsoft, Windows ekosisteminde olup bitenlere ilişkin, yazılım
güncellemeleri yoluyla sürekli iyileştirmelere izin veren ve ayrıca Windows'un gelecekteki
sürümlerine rehberlik edecek veriler sağlayan, sürekli gelişen bir resim oluşturuyor.
830 Bölüm 21 Windows 10
Machine Translated by Google
21.2.3 Windows ve Uygulama Uyumluluğu
önceki bir API'nin hataları. Görev Yöneticisinin "İşletim Sistemi Bağlamı" sütunu, her
uygulamanın SwitchBranch işletim sistemi sürümünün ne olduğunu gösterir.
altında koşuyor.
Windows 10, önceki NT sürümleri gibi, birçok
Windows on-32 (WoW32) adı verilen ve 16 bit API çağrılarını eşdeğer 32-
biraz çağrı. Benzer şekilde, Windows 10'un 64 bit sürümü bir thunking katmanı sağlar,
32 bit API çağrılarını yerel 64 bit çağrılara çeviren WoW64. Son olarak,
Windows 10'un ARM64 sürümü, dinamik bir JIT yeniden derleyicisi sağlar,
WoWA64 adı verilen IA-32 kodu.
Orijinal Windows alt sistem modeli, birden çok işletim sistemine izin verir.
uygulamalar Taşınabilir olarak yeniden oluşturulduğu sürece desteklenecek kişilikler
Visual Studio ve kaynak kodu gibi bir Microsoft derleyicisi ile yürütülebilir (PE)
uygulamalar mevcuttur. Daha önce belirtildiği gibi, API tasarlanmış olmasına rağmen
Windows için Win32API'dir, Windows'un bazı önceki sürümleri bir
POSIX alt sistemi. POSIX , UNIX uyumlu yazılımın yeniden derlenmesine ve herhangi bir
değişiklik yapılmadan çalıştırılmasına izin veren standart bir UNIX belirtimidir.
POSIX uyumlu işletim sistemi. Ne yazık ki, Linux olgunlaştıkça,
POSIX uyumluluğundan gitgide uzaklaştı ve birçok modern Linux uygulaması artık
Linux'a özgü sistem çağrılarına ve standartlaştırılmamış glibc iyileştirmelerine
güveniyor. Ek olarak, pratik olmaz
kullanıcılardan (hatta işletmelerden) her seferinde Visual Studio ile yeniden derlemelerini istemek
Kullanmak istedikleri Linux uygulaması. Gerçekten de, aralarında derleyici farklılıkları
GCC, CLang ve Microsoft'un C/C++ derleyicisi genellikle bunu imkansız hale getirir. Bu nedenle,
bir mimaride alt sistem modeli hala mevcut olsa da
Düzeyde, Windows'ta ileriye dönük tek alt sistem Win32 alt sisteminin kendisi olacaktır
ve diğer işletim sistemleriyle uyumluluk aşağıdakiler aracılığıyla sağlanır:
bunun yerine Pico Sağlayıcıları kullanan yeni bir model.
Machine Translated by Google
21.2.4 Performans
Windows, masaüstü sistemlerde yüksek performans sağlamak üzere tasarlanmıştır
( G/Ç performansı tarafından büyük ölçüde sınırlandırılır ), sunucu sistemleri (burada
CPU genellikle darboğazdır) ve büyük çok iş parçacıklı ve çok işlemcili ortamlar (kilitleme
performansının ve önbellek hattı yönetiminin anahtar olduğu yerlerde)
ölçeklenebilirlik). Performans gereksinimlerini karşılamak için NT , asenkron G/Ç, ağlar için
optimize edilmiş protokoller, çekirdek tabanlı grafik işleme ve dosya sistemi verilerinin
karmaşık önbelleğe alınması gibi çeşitli teknikler kullandı . bu
bellek yönetimi ve senkronizasyon algoritmaları bir
önbellek hatları ve çoklu işlemcilerle ilgili performans değerlendirmeleri hakkında farkındalık.
eşzamanlı çoklu iş parçacığı oluşturma (SMT) desteğinin yanı sıra Intel'in Hyper
Threading pazarlama adı altında ticarileştirdiği büyük ölçüde paralel bir boru hattı
teknolojisi ekledi. Bu yeni teknoloji nedeniyle, ortalama ev makinelerinde iki işlemci
varmış gibi görünebilir. Birkaç yıl sonra, çok çekirdekli sistemlerin tanıtılması, çok
işlemcili sistemleri norm haline getirdi.
Daha sonra, çok işlemcili büyük sunucuları hedefleyen Windows Server 2003
piyasaya sürüldü, daha da iyi algoritmalar kullanıldı ve işlemci başına veri yapılarına,
kilitlere ve önbelleklere geçiş yapıldı, ayrıca sayfa renklendirme ve NUMA makinelerini
destekledi. (Sayfa renklendirme, sanal bellekteki bitişik sayfalara erişimin işlemci
önbelleğinin kullanımını optimize etmesini sağlamak için bir performans
iyileştirmesidir.) Windows XP 64-bit Edition, Windows Server 2003 çekirdeğini temel
alır, böylece 64-bit'i ilk benimseyenlerin yararlanabilmesi için bu iyileştirmeler.
Microsoft'un Eşzamanlılık Çalışma Zamanı (ConcRT) ve Par allel İşleme Kitaplığı (PPL)
ve Intel'in İş Parçacığı Yapı Taşları (TBB) gibi lel yürütme, C++ programlarında
paralelliği ifade etmek için kullanılıyor. Ek olarak, OpenMP adlı satıcıdan bağımsız bir
standart neredeyse tüm derleyiciler tarafından desteklenir.
Moore Yasası kırk yıldır hesaplamayı yönetiyor olsa da, şimdi paralel hesaplamayı
yöneten Amdahl Yasası'nın (bkz. Bölüm 4.2) geleceği yöneteceği görülüyor.
21.2.5 Genişletilebilirlik
Genişletilebilirlik , bir işletim sisteminin bilgi işlem teknolojisindeki gelişmelere ayak
uydurabilme yeteneğini ifade eder. Zaman içinde değişimi kolaylaştırmak için
geliştiriciler, Windows'u katmanlı bir mimari kullanarak uyguladılar. En düşük seviyeli
çekirdek "yönetici", çekirdek modunda çalışır ve sistemin ortak kullanımını
destekleyen temel sistem hizmetlerini ve soyutlamaları sağlar. Yöneticinin yanı sıra,
kullanıcı modunda çeşitli hizmetler çalışır. Bunların arasında, bugün kullanımdan
kaldırılan farklı işletim sistemlerini taklit eden ortam alt sistemleri vardı. Çekirdekte
bile Windows, G/Ç sisteminde yüklenebilir sürücülerle katmanlı bir mimari kullanır,
böylece sistem çalışırken yeni dosya sistemleri, yeni G/Ç aygıtları ve yeni ağ türleri
eklenebilir. sürücüler
Machine Translated by Google
oturum kullanıcı
csrss SCM wininit winlogon biriktirici svchost
müdür süreçler
ntdll.dll
Kullanıcı modu
çekirdek modu
yönetici pencere
G/Ç yöneticisi
yöneticisi
güvenlik yapılandırmak tak ve
dosya sistemi nesne süreç güç yöneticisi hafızada oynatma
referansı rasyon ALPC yöneticisi yöneticisi grafik
yöneticisi yöneticisi
monitör müdür aygıt
önbellek
sürücüleri
yöneticisi
aygıt
sürücüleri
ağ sürücüleri çekirdek
donanım
bununla birlikte, G/Ç işlevselliği sağlamakla sınırlı değildir . Gördüğümüz gibi, bir Pico Sağlayıcı
aynı zamanda bir tür yüklenebilir sürücüdür (çoğu kötü amaçlı yazılımdan koruma sürücüsü gibi).
Pico Sağlayıcılar ve sistemin modüler yapısı sayesinde yürütmeyi etkilemeden
ek işletim sistemi desteği eklenebilmektedir. Şekil Şekil 21.1, Windows 10
çekirdek ve alt sistemlerinin mimarisini göstermektedir.
Windows ayrıca Mach işletim sistemi gibi bir istemci-sunucu modeli kullanır
ve Open Software Foundation tarafından tanımlandığı gibi uzaktan yordam
çağrıları (RPC'ler) aracılığıyla dağıtılmış işlemeyi destekler. Bu RPC'ler , yerel bir
makinede ayrı süreçler arasında yüksek düzeyde ölçeklenebilir iletişim
uygulayan , gelişmiş yerel prosedür çağrısı (ALPC) adı verilen bir yürütme
bileşeninden yararlanır . Bir ağ üzerindeki işlemler arasındaki iletişim için , SMB
protokolü üzerinden TCP/IP paketleri ve adlandırılmış yöneltmelerin bir kombinasyonu kullanılır.
RPC'nin yanı sıra Windows , Dağıtılmış Ortak Nesne Modeli (DCOM) altyapısının
yanı sıra Windows Yönetim Araçları (WMI) ve Windows Uzaktan Yönetim
(WinRM) mekanizmasını uygular ve bunların tümü sistemi yeni hizmetlerle hızla
genişletmek için kullanılabilir ve yönetim yetenekleri.
21.2.6 Taşınabilirlik
Yıllar içinde Windows bir dizi farklı CPU mimarisine taşındı: Intel IA-32 uyumlu
32 bit CPU'lar, AMD64 uyumlu ve IA64 64 bit CPU'lar ve DEC Alpha, DEC Alpha AXP64,
MIPS ve PowerPC CPU'lar .
Bu CPU mimarilerinin çoğu , tüketici masaüstü pazarında başarısız oldu. Windows 7
sevk edildiğinde , sunucularda AMD64 ile birlikte istemci bilgisayarlarda yalnızca
IA-32 ve AMD64 mimarileri destekleniyordu. Windows 8 ile 32-bit ARM eklendi ve
Windows 10 artık ARM64'ü de destekliyor.
Sistem metin dizeleri, sistemi farklı diller için yerelleştirmek üzere değiştirilebilen
dosyaların içindeki kaynak tablolarında tutulur. Windows Vista'dan önce Microsoft, bu
kaynak tablolarını DLL'lerin içinde gönderiyordu ; bu, Windows'un her farklı sürümü
için farklı yürütülebilir ikili dosyaların var olduğu ve aynı anda yalnızca bir dilin mevcut
olduğu anlamına geliyordu. Windows Vista'nın çoklu kullanıcı arabirimi (MUI) desteğiyle,
çok dilli bireyler ve işletmeler için önemli olan birden çok yerel ayar aynı anda
kullanılabilir.
Bu, tüm kaynak tablolarını, .dll dosyasının yanında uygun dil dizininde yaşayan ayrı .mui
dosyalarına taşıyarak ve yükleyicide mevcut seçili dile dayalı olarak uygun dosyayı
seçme desteğiyle sağlandı.
hangi CPU0 artık saat sahibi değildir ve son aktif CPU bu sorumluluğu üstlenir.
Windows mimarisi, Şekil 21.1'de daha önce gösterildiği gibi, belirli ayrıcalık seviyelerinde
çalışan katmanlı bir modüller sistemidir. Varsayılan olarak, bu ayrıcalık seviyeleri ilk önce
işlemci tarafından uygulanır (kullanıcı modu ile çekirdek modu arasında "dikey" bir ayrıcalık
yalıtımı sağlar). Windows 10, Sanal Güven Düzeyleri (VTL'ler) aracılığıyla dikey (mantıksal
olarak bağımsız) bir güvenlik modeli sağlamak için Hyper-V hiper yöneticisini de
kullanabilir . Kullanıcılar bu özelliği etkinleştirdiğinde, sistem Sanal Güvenli Modda (VSM)
çalışır. Bu modda, katmanlı ayrıcalıklı sistem artık biri Normal Dünya veya VTL 0 ve diğeri
Güvenli Dünya veya VTL 1 olarak adlandırılan iki uygulamaya sahiptir. Bu dünyaların her
birinde bir kullanıcı modu ve bir çekirdek modu buluruz.
• Normal Dünyada, çekirdek modunda (1) HAL ve uzantıları ve (2) sürücüleri ve DLL
bağımlılıklarını yükleyen çekirdek ve yöneticisi bulunur .
Kullanıcı modunda, sistem süreçleri, Win32 ortam alt sistemi ve çeşitli hizmetler
topluluğu bulunur. • Secure World'de, VSM etkinleştirilmişse, güvenli bir çekirdek ve
yönetici vardır (içine güvenli bir mikro-HAL gömülüdür). Bir izole Trustlet koleksiyonu
(daha sonra tartışılacaktır) güvenli kullanıcı modunda çalışır.
Hiper yönetici, VSM'nin etkin olduğu bir sistemde başlatılan ilk bileşendir ve bu,
kullanıcı Hyper-V bileşenini etkinleştirir etkinleştirmez gerçekleşir. Hem ayrı sanal
makineleri çalıştırmak için donanım sanallaştırma özellikleri sağlamak hem de
donanımın İkinci Düzey Adres Çevirisi (SLAT) işlevine VTL sınırı ve ilgili erişimi
sağlamak için kullanılır (kısaca tartışılacaktır). Hiper yönetici , seçtiği ve reddettiği,
değiştirdiği herhangi bir kesme, istisna, bellek erişimi, talimat, bağlantı noktası veya
kayıt erişimini engellemek için AMD'nin Pacifica (SVMX) veya Intel'in Vanderpool (VT-
x) gibi CPU'ya özgü bir sanallaştırma uzantısı kullanır. veya işlemin etkisini, kaynağını
veya hedefini yeniden yönlendirin.
Ayrıca , VTL 0'daki çekirdekle, VTL 1'deki güvenli çekirdekle ve çalışan diğer tüm sanal
makine çekirdekleri ve güvenli çekirdeklerle iletişim kurmasını sağlayan bir hiper
çağrı arabirimi sağlar.
(gömülü veya yüksek riskli sistemlerde olduğu gibi), kullanıcı modu sayfaları için de
bu düzeyde imza doğrulaması gerektirebilir.
Ek olarak, USB web kameraları ve akıllı kart okuyucuları gibi özel donanım aygıt
sınıflarının doğrudan VTL 1'de çalışan kullanıcı modu sürücüleri tarafından ( daha
sonra açıklanan UMDF çerçevesi kullanılarak) yönetilmesine ve biyometrik verilerin
güvenli bir şekilde kullanılmasına izin vermek için çalışmalar yapılmaktadır. VTL 1'de,
Normal Dünya'daki herhangi bir bileşenin araya girmeden yakalanır . Şu anda, izin
verilen tek Trustlet, Microsoft imzalı Credential Guard ve sanal TPM desteği
uygulamasını sağlayanlardır. Windows 10'un daha yeni sürümleri, bunu yapmak için
kendi kriptografik hesaplamalarını yapmak isteyen, geçerli bir şekilde imzalanmış
(ancak Microsoft imzalı olması gerekmeyen) üçüncü taraf koduna izin verecek olan
VSM Enclaves'i de destekleyecektir. Yazılım yerleşim birimleri, normal VTL 0
uygulamalarının, giriş verilerinin üzerinde yürütülebilir kod çalıştıracak ve muhtemelen
şifrelenmiş çıktı verilerini döndürecek bir yerleşim bölgesini "çağırmasına" izin verecektir.
Güvenli çekirdek hakkında daha fazla bilgi için bkz. https://blogs.technet.micro soft.com/
ash/2016/03/02/windows-10-device-guard-and-credential-guard-d emystified/.
21.3.4 Çekirdek
21.3.4.1 Sevkiyat
Programcının geleneksel Windows'ta bir iş parçacığı olarak düşündüğü şey aslında iki
yürütme moduna sahip bir iş parçacığıdır: bir kullanıcı modu iş parçacığı (UT) ve bir çekirdek
modu iş parçacığı (KT) . İş parçacığının, biri UT yürütme ve diğeri KT için olmak üzere iki
yığını vardır. Bir UT , çekirdek moduna bir tuzağa neden olan bir talimatı yürüterek bir
sistem hizmeti ister. Çekirdek katmanı, UT yığınını KT kız kardeşine geçiren ve CPU modunu
çekirdeğe değiştiren bir tuzak işleyicisi çalıştırır. KT modundaki iş parçacığı çekirdek
yürütmesini tamamladığında ve karşılık gelen UT'ye geri dönmeye hazır olduğunda ,
kullanıcı modunda yürütmesini sürdüren UT'ye geçiş yapmak için çekirdek katmanı çağrılır .
KT anahtarı , bir kesinti meydana geldiğinde de gerçekleşir.
21.3.4.3 Dişler
Dağıtıcı, iş parçacığı yürütme sırasını belirlemek için 32 düzeyli bir öncelik şeması
kullanır. Öncelikler iki sınıfa ayrılır: değişken sınıf ve statik sınıf. Değişken sınıf, 1'den 15'e
kadar öncelikleri olan iş parçacıkları içerir ve statik sınıf, 16'dan 31'e kadar olan önceliğe
sahip iş parçacıklarını içerir. Gönderici, her bir zamanlama önceliği için bağlantılı bir liste
kullanır; bu listeler dizisine dağıtımcı veritabanı adı verilir. Veritabanı, bit konumunun önceliği
ile ilişkili listede en az bir girişin varlığını belirtmek için bir bit eşlem kullanır.
Bu nedenle, çalışmaya hazır bir iş parçacığı bulana kadar listeler kümesini en yüksekten en
düşüğe geçmek yerine, gönderici en yüksek bit kümesiyle ilişkili listeyi kolayca bulabilir.
Tek işlemcili bir sistemde, hazır bir iş parçacığı bulunmazsa, dağıtıcı , rolü CPU'nun ilk
uyku durumlarından birine geçişi başlatmak olan boş iş parçacığı adı verilen özel bir iş
parçacığı yürütür. Öncelik sınıfı 0, boşta olan iş parçacığı için ayrılmıştır. Çok işlemcili bir
sistemde, atıl iş parçacığını yürütmeden önce, gönderici, önbelleğe alma topolojilerini ve
NUMA düğüm mesafelerini dikkate alarak yakındaki diğer işlemcilerin gönderici
veritabanlarına bakar . Bu işlem, listelerini güvenli bir şekilde incelemek için diğer işlemci
çekirdeklerinin kilitlerinin alınmasını gerektirir. Yakındaki bir çekirdekten herhangi bir iş
parçacığı çalınamıyorsa, gönderici bir sonraki en yakın çekirdeğe bakar ve bu böyle devam
eder. Hiçbir iş parçacığı çalınamıyorsa, işlemci boşta olan iş parçacığını yürütür. Bu nedenle,
çok işlemcili bir sistemde, her CPU'nun kendi boş iş parçacığı olacaktır.
Her bir iş parçacığını yalnızca ideal işlemcisinin gönderici veritabanına koymak, bir
yerellik sorununa neden olur. Bir CPU'nun öncelik 2'de bir iş parçacığını CPU'ya bağlı bir
şekilde yürüttüğünü, başka bir CPU'nun ise önceliği 18'de bir iş parçacığını yürüttüğünü ve
yine CPU'ya bağlı olduğunu hayal edin . Ardından, öncelik 17'deki bir iş parçacığı hazır hale
gelir. Bu iş parçacığının ideal işlemcisi ilk CPU ise , iş parçacığı mevcut çalışan iş parçacığına öncelik
Ancak ideal işlemci ikinci CPU ise, bunun yerine hazır kuyruğa girer ve sırasının çalışmasını
bekler (bu, öncelik 17 iş parçacığı bir bekleme durumunu sonlandırarak veya girerek CPU'dan
vazgeçmedikçe gerçekleşmeyecektir).
Windows 7, bu durumu ele almak için bir yük dengeleyici algoritması sundu, ancak bu,
yerellik sorununa ağır ve yıkıcı bir yaklaşımdı. Windows 8 ve sonraki sürümleri, sorunu daha
ayrıntılı bir şekilde çözdü. Windows XP ve önceki sürümlerde olduğu gibi global bir veritabanı
veya işlemci başına bir veritabanı yerine
21.3 Sistem Bileşenleri 843
Machine Translated by Google
veritabanı, Windows Server 2003 ve sonraki sürümlerde olduğu gibi, daha yeni Windows
sürümleri bu yaklaşımları bir araya getirerek bazı işlemcilerden oluşan bir grup arasında
paylaşılan bir hazır kuyruk oluşturur. Paylaşılan bir grup oluşturan CPU'ların sayısı ,
sistemin topolojisine ve bunun bir sunucu mu yoksa istemci sistem mi olduğuna bağlıdır.
Sayı, daha küçük istemci sistemlerinde yerellik (ve dolayısıyla gecikme ve çekişme)
sorunlarından kaçınırken, çok büyük işlemci sistemlerinde çekişmeyi düşük tutmak için
seçilir. Ek olarak, işlemci benzerliklerine hala saygı duyulur, böylece belirli bir gruptaki bir
işlemcinin paylaşılan hazır kuyruğundaki tüm iş parçacıklarının uygun olduğu garanti
edilir - algoritmayı sabit süre tutarak hiçbir zaman bir iş parçacığı üzerinde "atlamaya"
ihtiyaç duymaz.
Windows'un sistem durumlarını incelemek, zamanı güncellemek ve diğer temizlik
işlemlerini yapmak için bir saat "tik işareti" oluşturmak için her 15 milisaniyede bir
zamanlayıcının süresi dolar. Bu onay, boşta olmayan her çekirdekteki iş parçacığı
tarafından alınır. Kesme işleyicisi (iş parçacığı tarafından çalıştırılıyor, şimdi KT modunda),
iş parçacığı kuantumunun süresinin dolup dolmadığını belirler. Bir iş parçacığının zaman
kuantumu bittiğinde, saat kesintisi , işlemciye bir kuantum uçlu DPC'yi sıraya koyar.
DPC'nin kuyruğa alınması , işlemci normal kesme önceliğine döndüğünde bir yazılım
kesintisine neden olur. Yazılım kesintisi, iş parçacığının KT modunda gönderici kodunu
çalıştırmasına neden olur ve işlemciyi bir sonraki hazır iş parçacığını önceden belirlenmiş
iş parçacığının öncelik düzeyinde bir döngüsel deneme biçiminde yürütmek üzere
yeniden programlamak için. Bu seviyede başka bir iş parçacığı hazır değilse , daha düşük
öncelikli bir hazır iş parçacığı seçilmez , çünkü daha yüksek öncelikli bir hazır iş parçacığı
zaten vardır - ilk etapta kuantumunu tüketen. Bu durumda, kuantum basitçe varsayılan
değerine geri yüklenir ve aynı iş parçacığı bir kez daha yürütülür. Bu nedenle, Windows
her zaman en yüksek öncelikli hazır iş parçacığını yürütür.
Değişken öncelikli bir iş parçacığı bir bekleme işleminden uyandırıldığında, gönderici
önceliğini artırabilir. Yükseltme miktarı, iş parçacığıyla ilişkili bekleme türüne bağlıdır.
Bekleme G/Ç nedeniyleyse , destek iş parçacığının beklediği aygıta bağlıdır. Örneğin, ses
G/Ç için bekleyen bir iş parçacığı büyük bir öncelik artışı elde ederken, disk işlemi için
bekleyen bir iş parçacığı orta düzeyde bir öncelik artışı elde eder. Bu strateji, G/Ç'ye bağlı
iş parçacıklarının G/Ç aygıtlarını meşgul etmesini sağlarken, hesaplamaya bağlı iş
parçacıklarının arka planda yedek CPU döngülerini kullanmasına izin verir .
Son olarak, Windows Server 2003, kritik bölümler gibi belirli kilit sınıfları için bir
kilitleme devri artırması ekledi. Bu artırma, sahipliği izlemesi dışında muteks, semafor ve
olay artırmaya benzer. Uyanan iş parçacığını bir öncelik düzeyinde sabit kodlanmış bir
değerle artırmak yerine, bir önceliğe yükseltir
844 Bölüm
Machine Translated by Google 21 Windows 10
mevcut sahibinin (kilidi serbest bırakan) seviyesinin üzerindedir. Bu, örneğin öncelik 12'deki
bir iş parçacığının bir muteks yayınladığı, ancak bekleyen iş parçacığının önceliği 8 olduğu
durumlarda yardımcı olur. Ancak 13'e yükseltme alırsa, kritik bölümü önleyebilir ve anında
alabilir.
Zamanlama, bir iş parçacığı hazır veya bekleme durumuna girdiğinde, bir iş parçacığı sona
erdiğinde veya bir uygulama iş parçacığının işlemci benzeşimini değiştirdiğinde oluşur.
Metin boyunca gördüğümüz gibi, bir konu her an hazır hale gelebilir. Düşük öncelikli bir iş
parçacığı çalışırken daha yüksek öncelikli bir iş parçacığı hazır hale gelirse, düşük öncelikli
iş parçacığı hemen önlenir. Bu öncelik, yüksek öncelikli iş parçacığının , düşük öncelikli iş
parçacığının kuantumunun tamamlanmasını beklemeden CPU'ya anında erişmesini sağlar.
Ancak Windows zor gerçek zamanlı bir işletim sistemi değildir, çünkü herhangi bir iş
parçacığının, hatta en yüksek öncelikli olanın bile belirli bir zaman sınırı içinde çalışmaya
başlayacağını veya garantili bir yürütme süresine sahip olacağını garanti etmez.
DPC'ler ve kesinti hizmeti rutinleri (ISR'ler) çalışırken (aşağıda daha ayrıntılı olarak
tartışıldığı gibi) iş parçacıkları süresiz olarak engellenir ve herhangi bir zamanda daha
yüksek öncelikli bir iş parçacığı tarafından engellenebilir veya eşit önceliğe sahip başka bir
iş parçacığı ile tekrar denemeye zorlanabilir. kuantum sonu.
Geleneksel olarak, Windows zamanlayıcı, iş parçacıklarına göre CPU kullanımını
ölçmek için örnekleme kullanır . Sistem zamanlayıcısı periyodik olarak çalışır ve zamanlayıcı
kesme işleyicisi, o anda hangi iş parçacığının programlandığını ve kesme gerçekleştiğinde
kullanıcı veya çekirdek modunda yürütülüp yürütülmediğini not alır. Bu örnekleme tekniği,
başlangıçta ya CPU'nun yüksek çözünürlüklü bir saatine sahip olmaması ya da saatin çok
pahalı olması ya da erişilemeyecek kadar güvenilir olmaması nedeniyle ortaya çıktı.
21.3 Sistem Bileşenleri 845
Machine Translated by Google
sık sık. Verimli olmasına rağmen, örnekleme yanlıştır ve saatin tüm süresinin (15 milisaniye) o
anda çalışan iş parçacığına (veya DPC veya ISR) yüklenmesi gibi anormalliklere yol açar. Bu
nedenle, sistem, boşta, diğer iş parçacıklarını çalıştırarak, diğer DPC'leri ve ISR'leri çalıştırarak
veya tüm bu işlemlerin bir kombinasyonunu çalıştırarak harcanabilecek bazı milisaniye sayısını
(örneğin 14.999) tamamen görmezden gelir. Ek olarak, kuantum, saat tiklerine dayalı olarak
ölçüldüğü için, bu, mevcut iş parçacığı kuantumun yalnızca bir kısmı için çalışmış olsa bile, yeni
bir iş parçacığının erken yuvarlak-robin seçimine neden olur.
sistemdeki gönderimi ve senkronizasyonu kontrol etmek için bir dizi gönderici nesnesi
kullanır. Bu nesnelerin örnekleri aşağıdakileri içerir:
• Mutex , sahiplik kavramıyla ilişkili çekirdek modu veya kullanıcı modu karşılıklı
dışlama sağlar .
• Semafor , bir kaynağa erişen iş parçacıklarının sayısını kontrol etmek için bir sayaç
veya geçit görevi görür .
Dağıtıcı nesnelerinin tümüne, bir tanıtıcı döndüren açık bir işlem aracılığıyla kullanıcı
modundan erişilebilir . Kullanıcı modu kodu, tutamaçlarda bekler.
Machine Translated by Google
işletim sisteminin yanı sıra diğer iş parçacıklarıyla da senkronize edin (bkz. Bölüm 21.7.1).
Hem donanım hem de yazılım kesintilerine öncelik verilir ve öncelik sırasına göre hizmet
verilir. 32 kullanan eski IA-32 dışındaki tüm Windows ISA'larında 16 kesme istek düzeyi
(IRQL) vardır. En düşük düzey olan IRQL 0, PASİF DÜZEY olarak adlandırılır ve çekirdekte
olsun, tüm iş parçacıklarının yürütüldüğü varsayılan düzeydir. veya kullanıcı modu.
Sonraki seviyeler, APC'ler ve DPC'ler için yazılım kesinti seviyeleridir . Seviye 3 ila 10, HAL
ve PCI/ACPI veri yolu sürücülerinin yardımıyla PnP yöneticisi tarafından yapılan seçimlere
dayalı olarak donanım kesintilerini temsil etmek için kullanılır . Son olarak, en üst
düzeyler saat kesmesi (kuantum yönetimi için kullanılır) ve IPI teslimi için ayrılmıştır.
Son seviye olan HIGH LEVEL, tüm maskelenebilir kesintileri engeller ve genellikle sistem
kontrollü bir şekilde çökerken kullanılır.
21.3.4.7 Yazılım Kesintileri: Asenkron ve Ertelenmiş Prosedür Çağrıları Dağıtıcı iki tür
30 güç
29 kesintisi işlemciler arası bildirim (başka bir işlemcinin
harekete geçmesini isteme; örneğin, bir işlemi gönderme
28 veya TLB'yi güncelleme) saat (zamanı izlemek için kullanılır)
27 profil geleneksel PC IRQ donanımı kesintileri gönderme ve
3-26 ertelenmiş prosedür çağrısı (DPC) (çekirdek) asenkron
2 prosedür çağrısı (APC) pasif
1
0
DPC'ler , kesme işlemini ertelemek için kullanılır. Tüm acil cihaz kesintisi işlemlerini
gerçekleştirdikten sonra, ISR , bir DPC'yi kuyruğa alarak kalan işlemi programlar . İlişkili yazılım
kesintisi, diğer tüm donanım/G/Ç kesinti düzeylerinden daha düşük olan IRQL 2'de (DPC LEVEL)
çalışır. Bu nedenle, DPC'ler diğer cihaz ISR'lerini engellemez . Gönderici , cihaz kesme işlemini
ertelemeye ek olarak, zamanlayıcı sona ermelerini işlemek ve zamanlama kuantumunun sonunda
geçerli iş parçacığı yürütmesini kesmek için DPC'leri kullanır.
IRQL 2, 0'dan (PASİF) ve 1'den (APC) daha yüksek olduğu için, DPC'lerin yürütülmesi, standart
iş parçacıklarının mevcut işlemcide çalışmasını engeller ve ayrıca APC'lerin G/Ç'nin tamamlandığını
bildirmesini engeller . Bu nedenle, DPC rutinlerinin uzun süre almaması önemlidir . Alternatif olarak,
yönetici bir çalışan iş parçacığı havuzunu tutar. DPC'ler , iş öğelerini, IRQL 0'da normal iş parçacığı
planlaması kullanılarak yürütülecekleri çalışan iş parçacıklarına kuyruğa alabilir. Dağıtıcının kendisi
IRQL 2'de çalıştığından ve sayfalama işlemleri G/ Ç'de beklemeyi gerektirdiğinden (ve bu, dağıtıcıyı
içerir) , DPC rutinleri, sayfa hatalarını alamamaları, sayfalandırılabilir sistem hizmetlerini
arayamamaları veya bir gönderici nesnesinin sinyallenmesini bekleme girişimiyle sonuçlanabilecek
başka herhangi bir eylemde bulunmamaları bakımından kısıtlanmıştır. Bir iş parçacığına hedeflenen
APC'lerin aksine , DPC rutinleri, kesintiye uğrayan o anda yürütülmekte olan iş parçacığıyla aynı
bağlamda yürüttüklerinden, işlemcinin hangi işlem bağlamını yürüttüğü hakkında hiçbir varsayımda
bulunmaz.
gönderici ayrıca donanım veya yazılım tarafından oluşturulan istisnalar ve kesintiler için tuzak
işleme sağlar. Windows, aşağıdakiler de dahil olmak üzere, mimariden bağımsız birkaç özel durum
tanımlar:
• Erişim ihlali
Tuzak işleyicileri, donanım düzeyindeki istisnalarla ( tuzaklar olarak adlandırılır) ilgilenir ve çekirdeğin
istisna göndericisi tarafından gerçekleştirilen ayrıntılı istisna işleme kodunu çağırır. İstisna
gönderici , istisnanın nedenini içeren bir istisna kaydı oluşturur ve bununla ilgilenecek bir istisna
işleyicisi bulur.
Çekirdek modunda bir istisna oluştuğunda, istisna gönderici istisna işleyicisini bulmak için
sadece bir rutini çağırır. Hiçbir işleyici bulunamazsa, ölümcül bir sistem hatası oluşur ve kullanıcı,
sistem arızasını belirten kötü şöhretli “mavi ölüm ekranı” ile kalır. Windows 10'da, bu artık QR
koduyla daha dostane bir "hüzün üzgün yüzü"dür , ancak mavi renk kalır.
Machine Translated by Google
848
Bölüm 21 Windows 10
Windows hata raporlama (WER) hizmeti, oluşturduğu her işlem için bir ALPC
istisna bağlantı noktası ayarlayan Win32 ortam alt sisteminin üzerine her işlem için
bir ALPC hata bağlantı noktası ayarladığından, özel durum işleme, kullanıcı modu
işlemleri için daha karmaşıktır. . (Bağlantı noktalarıyla ilgili ayrıntılar için, bkz. Bölüm
21.3.5.4.) Ayrıca, bir işlem hata ayıklanıyorsa, bir hata ayıklayıcı bağlantı noktası alır.
Bir hata ayıklayıcı bağlantı noktası kayıtlıysa, özel durum işleyicisi özel durumu
bağlantı noktasına gönderir. Hata ayıklayıcı bağlantı noktası bulunamazsa veya bu
özel durumu işlemezse, dağıtım programı uygun bir özel durum işleyicisi bulmaya
çalışır. Hiçbiri yoksa, bir kilitlenme dökümü oluşturulup Microsoft'a gönderilebilmesi
için WER'ye işlem çökmesini bildirecek olan varsayılan işlenmeyen özel durum
işleyicisiyle bağlantı kurar . Bir işleyici varsa, ancak istisnayı işlemeyi reddediyorsa,
hata ayıklama için hatayı yakalamak için hata ayıklayıcı yeniden çağrılır. Hiçbir hata
ayıklayıcı çalışmıyorsa, ortam alt sistemine özel duruma tepki verme şansı vermek
için işlemin istisna bağlantı noktasına bir mesaj gönderilir. Son olarak, işlenmeyen
istisna işleyicisinin bunu yapma şansının olmaması durumunda, hata bağlantı noktası
aracılığıyla WER'e bir mesaj gönderilir ve ardından çekirdek, istisnaya neden olan iş
parçacığını içeren işlemi sonlandırır.
WER , kullanıcı devre dışı bırakmadıkça veya yerel bir hata raporlama sunucusu
kullanmadıkça, bilgileri daha fazla analiz için Microsoft'a geri gönderir. Bazı durumlarda,
Microsoft'un otomatik analizi hatayı hemen algılayabilir ve bir düzeltme veya geçici çözüm
önerebilir.
Çekirdekteki kesme dağıtıcısı, bir aygıt sürücüsü tarafından sağlanan bir kesme
hizmeti yordamını (ISR) veya bir çekirdek tuzağı işleyici yordamını çağırarak kesmeleri
işler. Kesme, kesmeyi işlemek için gereken tüm bilgileri içeren bir kesme nesnesi
tarafından temsil edilir . Bir kesme nesnesi kullanmak, kesme donanımına doğrudan
erişmek zorunda kalmadan kesme hizmeti rutinlerini bir kesmeyle ilişkilendirmeyi
kolaylaştırır.
Farklı işlemci mimarileri, farklı türde ve sayıda kesintiye sahiptir. Taşınabilirlik
için, kesme dağıtıcısı, donanım kesmelerini standart bir kümeye eşler.
Çekirdek, her kesme düzeyini bir hizmet rutinine bağlamak için bir kesme-
gönderme tablosu kullanır. Çok işlemcili bir bilgisayarda Windows, her işlemci
çekirdeği için ayrı bir kesme-gönderme tablosu (IDT) tutar ve her işlemcinin IRQL'si ,
kesintileri maskelemek için bağımsız olarak ayarlanabilir. Bir işlemcinin IRQL'sine eşit
veya bundan daha düşük bir düzeyde meydana gelen tüm kesmeler, IRQL , bir
çekirdek düzeyinde iş parçacığı veya kesme işleminden dönen bir ISR tarafından
düşürülene kadar engellenir . Windows bu özellikten yararlanır ve APC'leri ve DPC'leri
teslim etmek, iş parçacıklarını G/Ç tamamlama ile senkronize etmek, iş parçacığı
yürütmesini başlatmak ve zamanlayıcıları işlemek gibi sistem işlevlerini gerçekleştirmek
için yazılım kesintilerini kullanır.
21.3.5 Yönetici
Windows yöneticisi, tüm ortam alt sistemlerinin kullandığı bir dizi hizmet sağlar. Size
iyi bir temel genel bakış sağlamak için burada şu hizmetleri tartışıyoruz: nesne
yöneticisi, sanal bellek yöneticisi, süreç yöneticisi, gelişmiş yerel prosedür çağrı tesisi,
G/Ç yöneticisi, önbellek yöneticisi, güvenlik referans monitörü, tak ve çalıştır ve güç
yöneticiler, kayıt defteri ve başlangıç.
Ancak, Windows yöneticisinin toplamda iki düzineden fazla hizmet içerdiğini
unutmayın.
Machine Translated by Google
bir "yazma" tutamacı. Tersine, bir tanıtıcı "okunmuş" bir tanıtıcıysa, dosyaya yazma
girişimleri bir güvenlik denetimi gerektirmeden anında başarısız olur.
Nesne yöneticisi ayrıca, bir işlemi tüm başvurulan nesneler tarafından işgal
edilen bellek için ücretlendirerek ve birikmiş ücretler işlemin kotasını aştığında daha
fazla bellek ayırmayı reddederek, bir işlemin kullanabileceği maksimum bellek miktarı
gibi kotaları dayatır.
Nesnelere kullanıcı ve çekirdek modundan tutamaçlar aracılığıyla ve çekirdek
modundan işaretçiler aracılığıyla başvurulabileceğinden, nesne yöneticisinin her
nesne için iki sayıyı izlemesi gerekir: nesne için tutamaç sayısı ve başvuru sayısı.
Tutamaç sayısı, tüm tutamaç tablolarındaki (sistem tanıtıcı tablosu dahil) nesneye
başvuran tanıtıcıların sayısıdır. Başvuru sayısı, tüm tanıtıcıların (referans olarak
sayılır) ve çekirdek modu bileşenleri tarafından yapılan tüm işaretçi başvurularının
toplamıdır. Sayı, çekirdek veya sürücü tarafından yeni bir işaretçiye ihtiyaç
duyulduğunda artırılır ve bileşen işaretçiyle bittiğinde azaltılır. Bu başvuru sayımlarının
amacı, bir nesnenin hala bir referansı varken serbest bırakılmamasını sağlamaktır,
ancak tüm tutamaçlar kapatıldığında (çekirdek modu bileşenlerinden beri) bazı
verilerini (ad ve güvenlik tanımlayıcısı gibi) yine de serbest bırakabilir. bu bilgiye
gerek yok).
Her nesne, daha önce belirtildiği gibi, bir nesne türünün bir örneğidir. Nesne
türü, örneklerin nasıl tahsis edileceğini, veri alanlarının nasıl tanımlanacağını ve tüm
nesneler için kullanılan standart sanal işlevler kümesinin nasıl uygulanacağını belirtir.
Standart işlevler, nesnelere ad eşleştirme, kapatma ve silme ve güvenlik kontrolleri
uygulama gibi işlemleri gerçekleştirir.
Belirli bir nesne türüne özgü işlevler, nesne türünde belirtilen yöntemlerle değil, o
belirli nesne türü üzerinde çalışmak üzere tasarlanmış sistem hizmetleri tarafından
uygulanır.
parse() işlevi, standart nesne işlevlerinin en ilginçidir. Bir nesnenin
uygulanmasının, nesne yöneticisinin (sanal nesne dizinlerini kullanmak olan)
varsayılan adlandırma davranışını geçersiz kılmasına izin verir. Bu yetenek, özellikle
ad alanının önyüklemeler arasında tutulması gerekebileceğinde, kendi dahili ad
alanına sahip nesneler için kullanışlıdır. bu
21.3 Sistem Bileşenleri 851
Machine Translated by Google
G/Ç yöneticisi (dosya nesneleri için) ve yapılandırma yöneticisi (kayıt defteri anahtarı
nesneleri için), ayrıştırma işlevlerinin en dikkate değer kullanıcılarıdır.
Windows adlandırma örneğimize dönersek, dosya sistemi birimlerini yeniden
temsil etmek için kullanılan aygıt nesneleri bir ayrıştırma işlevi sağlar. Bu, Global??
C: foo bar.doc gibi bir adın, HarddiskVolume2 aygıt nesnesi tarafından temsil
edilen birimde foo bar.doc dosyası olarak yorumlanmasına izin verir. Dosyayı
Windows'ta açma adımlarına bakarak adlandırma, ayrıştırma işlevleri, nesneler ve
tutamaçların birlikte nasıl çalıştığını gösterebiliriz:
IA-32 ve ARM gibi 32 bit işlemcilerde her bir işlemin 4 GB sanal adres alanı
vardır. Varsayılan olarak, üst 2 GB tüm işlemler için çoğunlukla aynıdır ve işletim
sistemi koduna ve veri yapılarına erişmek için Windows tarafından çekirdek modunda
kullanılır. AMD64 mimarisi gibi 64 bit mimariler için Windows, kullanıcı modu ve
çekirdek modu için iki 128 TB bölgeye bölünmüş, işlem başına 256 TB sanal adres
alanı sağlar. (Bu kısıtlamalar, yakında kaldırılacak olan donanım sınırlamalarına
dayanmaktadır. Intel, geleceğini duyurdu.
852 Bölüm
Machine Translated by Google 21 Windows 10
işlemciler, teorik olarak mevcut olan 16 EB'den 128 PB'ye kadar sanal adres alanını
destekleyecektir.)
Her işlemin adres alanında çekirdek kodunun bulunması önemlidir ve diğer
birçok işletim sisteminde de yaygın olarak bulunur.
Genellikle sanal bellek, çekirdek kodunu her işlemin adres alanına eşlemek için
kullanılır. Ardından, bir sistem çağrısı yürütüldüğünde veya bir kesinti alındığında,
mevcut çekirdeğin bu kodu çalıştırmasına izin veren bağlam anahtarı, aksi takdirde
bu eşleme olmadan olacağından daha hafiftir. Spesifik olarak, hiçbir bellek yönetimi
kaydının kaydedilmesine ve geri yüklenmesine gerek yoktur ve önbellek geçersiz
kılınmaz. Net sonuç, çekirdek belleği ayrı tutan ve işlem adres alanında bulunmayan
eski mimarilere kıyasla, kullanıcı ve çekirdek kodu arasında çok daha hızlı harekettir.
Windows MM , sanal bellek ayırmak için iki adımlı bir işlem kullanır. İlk adım ,
işlemin sanal adres alanında bir veya daha fazla sanal adres sayfası ayırır . İkinci
adım , sanal bellek alanı (fiziksel bellek veya disk belleği dosyalarındaki alan) atayarak
tahsisi gerçekleştirir. Windows, taahhüt edilen belleğe bir kota uygulayarak bir
işlemin tükettiği sanal bellek alanı miktarını sınırlar. Aprocess, diğer işlemler
tarafından kullanılmak üzere sanal bellek alanını boşaltmak için artık kullanmadığı
belleği devreden çıkarır. Sanal adresleri ayırmak ve sanal belleği işlemek için
kullanılan API'ler, bir işlem nesnesini parametre olarak ele alır . Bu, bir işlemin
diğerinin sanal belleğini kontrol etmesine izin verir.
Windows, bir bölüm nesnesi tanımlayarak paylaşılan belleği uygular . Bir bölüm
nesnesine bir tanıtıcı aldıktan sonra, bir işlem bölümün belleğini görünüm adı verilen
bir dizi adrese eşler. Bir süreç, tüm bölümün veya yalnızca ihtiyaç duyduğu bölümün
bir görünümünü oluşturabilir. Windows, bölümlerin yalnızca geçerli işlemle değil,
arayanın bir tanıtıcısı olan herhangi bir işlemle eşlenmesine izin verir.
• Erişimsiz bir sayfa , erişilirse bir istisna oluşturur . İstisna, örneğin, hatalı bir
programın bir dizinin sonunun ötesinde yinelenip yinelenmediğini kontrol
etmek veya sadece programın belleğe kaydedilmemiş sanal adreslere erişmeye
çalıştığını algılamak için kullanılabilir. Kullanıcı ve çekirdek modu yığınları , yığın
taşmalarını algılamak için erişimsiz sayfaları koruma sayfaları olarak kullanır.
Başka bir kullanım, yığın arabellek taşmalarını aramaktır. Hem kullanıcı modu
bellek ayırıcısı hem de aygıt doğrulayıcı tarafından kullanılan özel çekirdek
ayırıcısı, her ayırmayı bir sayfanın sonuna eşlemek için yapılandırılabilir, ardından
bir ayırmanın sonunun ötesine erişen programlama hatalarını algılamak için
erişimsiz bir sayfa takip edilebilir.
Machine Translated by Google
Çoğu modern işlemcideki sanal adres çevirisi, çok düzeyli bir sayfa tablosu
kullanır. IA-32 (Fiziksel Adres Uzantısı veya PAE modunda çalışan) ve AMD64 işlemciler
için her işlemin , her biri 8 bayt boyutunda 512 sayfa dizini girişi (PDE'ler) içeren bir
sayfa dizini vardır. Her PDE , her biri 8 bayt boyutunda 512 sayfalık tablo girişi
(PTE'ler) içeren bir PTE tablosuna işaret eder. Her PTE , fiziksel bellekte 4 KB'lık bir
sayfa çerçevesine işaret eder . Çeşitli nedenlerle donanım, çok düzeyli bir sayfa
tablosunun her düzeyindeki sayfa dizinlerinin veya PTE tablolarının tek bir sayfayı
kaplamasını gerektirir. Bu nedenle, bir sayfaya sığan PDE'lerin veya PTE'lerin sayısı,
o sayfa tarafından kaç sanal adresin çevrildiğini belirler. Bu yapının bir diyagramı için
Şekil 21.3'e bakın.
Şimdiye kadar açıklanan yapı, yalnızca 1 GB sanal adres çevirisini temsil etmek
için kullanılabilir. IA-32 için , şemada gösterildiği gibi, yalnızca dört giriş içeren ikinci
bir sayfa dizini düzeyi gereklidir. 64 bit işlemcilerde daha fazla giriş gerekir. AMD64
için , işlemci ikinci sayfa dizini düzeyinde kalan tüm girişleri doldurabilir ve böylece
512 GB sanal adres alanı elde edebilir. Bu nedenle, gereken 256 TB'yi desteklemek
için işlemcinin , her biri alt düzey dizine işaret eden 512 girişe sahip üçüncü bir sayfa
dizini düzeyine (PML4 adı verilir) ihtiyacı vardır. Daha önce belirtildiği gibi, Intel
tarafından duyurulan gelecekteki işlemciler, dördüncü bir sayfa dizini düzeyi (PML5)
gerektiren 128 PB'yi destekleyecektir. Bu hiyerarşik mekanizma sayesinde, bir işlem
için 32 bitlik bir sanal adres alanını tam olarak temsil etmek için gereken tüm sayfa
tablosu sayfalarının toplam boyutu,
sayfa tablosu sayfa sayfa tablosu sayfa tablosu sayfa sayfa tablosu
girişi 0 tablosu 0 girişi 511 girişi 0 tablosu 511 girişi 511
4 KB 4 KB 4 KB 4 KB
sayfa sayfa sayfa sayfa
Daha sonra sanal adreslerin IA-32 uyumlu işlemcilerde fiziksel adreslere nasıl
çevrildiğini ele alacağız. 2 bitlik bir değer 0, 1, 2, 3 değerlerini temsil edebilir. 9 bitlik
bir değer 0 ile 511 arasındaki değerleri temsil edebilir; 12 bitlik bir değer, 0 - 4.095
arası değerler. Böylece, 12 bitlik bir değer, 4 KB'lık bir bellek sayfası içindeki herhangi
bir baytı seçebilir . 9 bitlik bir değer, bir sayfa dizini veya PTE tablosu sayfasındaki
512 PDE veya PTE'den herhangi birini temsil edebilir. Şekil 21.4'te gösterildiği gibi,
bir sanal adres işaretçisini fiziksel bellekte bir bayt adresine çevirmek, en önemli
bitlerden başlayarak 32 bitlik işaretçiyi dört değere ayırmayı içerir:
• Sayfa tablosunun en üst seviyesindeki dört PDE'ye indekslemek için iki bit
kullanılır . Seçilen PDE , adres alanının 1 GB'ını eşleyen dört sayfa dizini sayfasının
her biri için fiziksel sayfa numarasını içerecektir . • Başka bir PDE seçmek için
dokuz bit kullanılır , bu sefer ikinci seviye bir sayfa dizininden. Bu PDE , 512 adede
kadar PTE tablosu sayfasının fiziksel sayfa numaralarını içerecektir .
• Seçilen PTE tablosu sayfasından 512 PTE'den birini seçmek için dokuz bit
kullanılır . Seçilen PTE , eriştiğimiz bayt için fiziksel sayfa numarasını içerecektir.
• Sayfada bayt ofseti olarak on iki bit kullanılır. Erişmekte olduğumuz baytın
fiziksel adresi, seçilen PTE'de bulduğumuz fiziksel sayfa numarasının sonuna
sanal adresin en düşük 12 bitini ekleyerek oluşturulur .
Fiziksel bir adresteki bit sayısının sanal bir adresteki bit sayısından farklı
olabileceğini unutmayın. Örneğin, PAE etkinleştirildiğinde (Windows 8 ve sonraki
sürümleri tarafından desteklenen tek mod), IA-32 MMU daha büyük 64-bit PTE
boyutuna genişletilirken , donanım 36-bit fiziksel adresleri destekleyerek yukarı
erişim izni verir. 64 GB RAM'e kadar, tek bir işlem yalnızca 4 GB boyutuna kadar bir
adres alanını eşleyebilir. Bugün, AMD64 mimarisinde, Windows'un sunucu sürümleri
çok, çok büyük fiziksel adresleri desteklemektedir; bu, kullanabileceğimizden ve
hatta satın alabileceğimizden daha fazla ( en son sürüm itibariyle 24 TB ). (Elbette,
bir zamanlar 4 GB , fiziksel bellek için iyimser bir şekilde büyük görünüyordu.)
21.3 Sistem Bileşenleri 855
Machine Translated by Google
Performansı artırmak için MM , sayfa dizini ve PTE tablosu sayfalarını her işlemde
aynı bitişik sanal adres bölgesine eşler.
Bu kendi kendine harita, MM'nin , hangi işlem çalışıyor olursa olsun, belirli bir sanal
adrese karşılık gelen mevcut PDE veya PTE'ye erişmek için aynı işaretçiyi kullanmasına
izin verir. IA-32'nin kendi kendine eşlemesi , çekirdek sanal adres alanının bitişik 8
MB'lik bir bölgesini alır; AMD64 kendi kendine harita 512 GB yer kaplar. Kendi
kendine eşleme önemli bir adres alanı kaplasa da, herhangi bir ek sanal bellek sayfası
gerektirmez. Ayrıca, sayfa tablosunun sayfalarının otomatik olarak fiziksel belleğe
girip çıkmasını sağlar.
Kendi kendine haritanın oluşturulmasında, üst düzey sayfa dizinindeki PDE'lerden
biri sayfa dizini sayfasının kendisine atıfta bulunur ve sayfa tablosu çevirilerinde bir
"döngü" oluşturur. Döngü alınmadıysa sanal sayfalara erişilir, döngü bir kez alınırsa
PTE tablosu sayfalarına erişilir, döngü iki kez alınırsa en alt düzey sayfa dizini
sayfalarına erişilir vb.
64 bit sanal bellek için kullanılan ek sayfa dizinleri düzeyleri, sanal adres
işaretçisinin daha da fazla değere bölünmesi dışında aynı şekilde çevrilir. AMD64 için
Windows, her biri 512 sayfa veya 9 + 9 + 9 + 9 + 12 = 48 bit sanal adresi eşleyen dört
tam düzey kullanır.
PDE ve PTE'ye bakarak her sanal adresi çevirmenin ek yükünü önlemek için ,
işlemciler sanal sayfaları PTE'lere eşlemek için bir ilişkisel bellek önbelleği içeren
çeviri görünümlü arabellek (TLB) donanımını kullanır .
TLB , her işlemci içindeki bellek yönetim biriminin (MMU) bir parçasıdır .
MMU'nun , yalnızca TLB'de gerekli bir çeviri eksik olduğunda bellekteki sayfa tablosunda
"yürümesi" (veri yapılarında gezinmesi) gerekir .
PDE'ler ve PTE'ler , yalnızca fiziksel sayfa numaralarından fazlasını içerir. Ayrıca,
işletim sistemi kullanımı için ayrılmış bitleri ve her sayfa için donanım önbelleğe
almanın kullanılıp kullanılmaması gibi donanımın belleği nasıl kullandığını denetleyen
bitleri vardır. Ayrıca girişler, hem kullanıcı hem de çekirdek modları için ne tür
erişimlere izin verildiğini belirtir.
APDE , PDE yerine PTE olarak işlev görmesi gerektiğini söylemek için de
işaretlenebilir . Bir IA-32'de, sanal adres işaretçisinin ilk 11 biti , ilk iki çeviri düzeyinde
bir PDE seçer. Seçilen PDE , bir PTE olarak hareket edecek şekilde işaretlenirse ,
işaretçinin kalan 21 biti, bayt ofseti olarak kullanılır. Bu, sayfa için 2 MB boyutunda
sonuçlanır . 4 KB ve 2 MB sayfa boyutlarını sayfa tablosunda karıştırmak ve
eşleştirmek işletim sistemi için kolaydır ve bazı programların performansını önemli
ölçüde artırabilir. İyileştirme, MMU'nun TLB'deki girişleri ne sıklıkta yeniden yüklemesi
gerektiğinin azaltılmasından kaynaklanır , çünkü bir PDE eşlemesi 2 MB , her biri 4
KB eşleyen 512 PTE'nin yerini alır. Daha yeni AMD64 donanımı , benzer şekilde çalışan
1 GB'lık sayfaları bile destekler.
Sürekli olarak 4 KB'lık sayfalara bölünerek harici bellek parçalanmasına neden
olabileceğinden, gerektiğinde 2 MB'lık sayfaların kullanılabilir olması için fiziksel
belleği yönetmek zordur. Ayrıca, büyük sayfalar çok önemli dahili parçalanmalara
neden olabilir. Bu sorunlar nedeniyle, TLB'nin performansını artırmak için büyük
sayfaları kullanan, genellikle büyük sunucu uygulamalarıyla birlikte yalnızca
Windows'un kendisidir . Bunu yapmak için daha uygundurlar, çünkü işletim sistemi
ve sunucu uygulamaları, sistem önyüklendiğinde, bellek parçalanmadan önce
çalışmaya başlar.
Windows, her bir fiziksel sayfayı yedi durumdan biriyle ilişkilendirerek fiziksel
belleği yönetir: boş, sıfırlanmış, değiştirilmiş, bekleme, bozuk, geçiş veya geçerli.
Machine Translated by Google
• Ücretsiz sayfa, eski veya başlatılmamış içeriğe sahip kullanılabilir bir sayfadır .
• Sıfırlanmış bir sayfa, sıfırlanmış ve isteğe bağlı sıfır hatalarını karşılamak için hemen
kullanıma hazır olan ücretsiz bir sayfadır . • Değiştirilmiş bir sayfa bir işlem
İkincil depolamadan fiziksel belleğe tahsis edilen bir sayfa çerçevesine geçiş sayfası
yolda.
• Geçerli bir sayfa , ya bir veya daha fazla sürecin çalışma kümesinin bir parçasıdır ve
bu süreçlerin sayfa tablolarında bulunur ya da sistem tarafından doğrudan
kullanılıyordur (örneğin, disk belleği olmayan havuzu depolamak için).
Bir PTE'deki geçerli bit sıfır olduğunda, donanım diğer tüm bitleri yok sayar ve MM
bunları kendi kullanımı için tanımlayabilir. Geçersiz sayfalar, PTE'de bitlerle temsil edilen
birkaç duruma sahip olabilir . Hiç hata yapılmamış sayfa dosyası sayfaları, talep üzerine
sıfır olarak işaretlenir. Bölüm nesneleri aracılığıyla eşlenen sayfalar, uygun bölüm
nesnesine bir işaretçi kodlar. Sayfa dosyasına yazılan sayfaların PTE'leri , sayfayı ikincil
depolama vb. üzerinde konumlandırmak için yeterli bilgiyi içerir. Sayfa dosyası PTE'nin
yapısı Şekil 21.5'te gösterilmektedir. Bu tip PTE için T, P ve V bitlerinin tümü sıfırdır. PTE ,
sayfa koruması için 5 bit, sayfa dosyası ofseti için 32 bit ve disk belleği dosyasını seçmek
için 4 bit içerir. Ayrıca ek muhasebe için ayrılmış 20 bit vardır.
Windows , işlemlerden uygun şekilde sayfa almak için çalışma kümesi başına, en az
kullanılan (LRU) değiştirme ilkesini kullanır. Bir süreç başlatıldığında, varsayılan bir
minimum çalışma grubu boyutu atanır ve bu noktada MM her çalışma grubundaki
sayfaların yaşını izlemeye başlar. Her işlemin çalışma kümesinin, kalan fiziksel bellek
miktarı azalmaya başlayana kadar büyümesine izin verilir. Sonunda, kullanılabilir bellek
kritik düzeyde azaldığında, MM , eski sayfaları kaldırmak için çalışma grubunu keser.
Bir sayfanın yaşı, hafızada ne kadar kaldığına değil, en son ne zaman referans
alındığına bağlıdır. MM bu belirlemeyi , her işlemin çalışma kümesinden periyodik olarak
geçerek ve son geçişten bu yana PTE'de referans olarak işaretlenmemiş sayfaların yaşını
artırarak yapar.
Çalışma kümelerini kırpmak gerektiğinde, MM buluşsal yöntemleri kullanır.
21.3 Sistem Bileşenleri 857
Machine Translated by Google
63 32
sayfa-dosya ofseti
31 0
sayfa
TP koruma V
dosyası
Şekil 21.5 Sayfa dosyası sayfa tablosu girişi. Geçerli bit sıfırdır.
her işlemden ne kadar kırpılacağına karar verir ve ardından en eski sayfaları önce kaldırır.
Bir işlem, ne kadar fiziksel bellek kullanabileceği konusunda kesin bir sınır verilmişse,
bol miktarda bellek mevcut olduğunda bile çalışma setini kırpabilir . Windows 7 ve sonraki
sürümlerde, MM ayrıca bellek bol olsa bile hızla büyüyen işlemleri keser. Bu politika
değişikliği, sistemin diğer süreçlere yanıt verme yeteneğini önemli ölçüde iyileştirdi.
Windows, yalnızca kullanıcı modu işlemleri için değil, aynı zamanda dosya önbelleğini
ve sayfalanabilir çekirdek yığınını içeren çeşitli çekirdek modu bölgeleri için çalışma
kümelerini izler. Sayfalandırılabilir çekirdek ve sürücü kodu ve verileri, her TS oturumunda
olduğu gibi kendi çalışma kümelerine sahiptir . Farklı çalışma kümeleri, MM'nin farklı
çekirdek belleği kategorilerini kırpmak için farklı ilkeler kullanmasına izin verir.
MM , yalnızca hemen ihtiyaç duyulan sayfada hata yapmaz . Araştırmalar, bir iş
parçacığının bellek referansının bir yerellik özelliğine sahip olma eğiliminde olduğunu
gösteriyor . Yani bir sayfa kullanıldığında, yakın gelecekte bitişik sayfalara atıfta bulunulması
muhtemeldir. (Bir dizi üzerinde yineleme yapmayı veya bir iş parçacığı için yürütülebilir
kodu oluşturan sıralı talimatları getirmeyi düşünün.) Yerellik nedeniyle, MM bir sayfada
hata verdiğinde, birkaç bitişik sayfada da hata verir.
Bu önceden getirme, toplam sayfa hatası sayısını azaltma eğilimindedir ve G/Ç
performansını iyileştirmek için okumaların kümelenmesine izin verir .
MM , ayrılmış belleği yönetmeye ek olarak, her işlemin ayrılmış belleğini veya sanal
adres alanını yönetir. Her işlemin, kullanımdaki sanal adreslerin aralıklarını ve kullanımların
ne olduğunu açıklayan ilişkili bir ağacı vardır. Bu, MM'nin gerektiğinde sayfa tablosu
sayfalarında hata yapmasına izin verir. Hatalı bir adres için PTE başlatılmamışsa, MM
işlemin sanal adres tanımlayıcıları (VAD'ler) ağacında adresi arar ve bu bilgiyi PTE'yi
doldurmak ve sayfayı almak için kullanır. Bazı durumlarda, bir PTE tablosu sayfası
bulunmayabilir; böyle bir sayfa şeffaf bir şekilde MM tarafından tahsis edilmeli ve
başlatılmalıdır . Diğer durumlarda, sayfa bir bölüm nesnesinin parçası olarak paylaşılabilir
ve VAD , o bölüm nesnesine bir işaretçi içerecektir. Bölüm nesnesi, paylaşılan sanal
sayfanın nasıl bulunacağına ilişkin bilgileri içerir, böylece PTE doğrudan ona işaret edecek
şekilde başlatılabilir.
Vista'dan başlayarak, Windows MM , Super Fetch adlı bir bileşen içerir. Bu bileşen,
kullanıcı modu hizmetini özel çekirdek ile birleştirir.
858
Bölüm
Machine Translated by Google 21 Windows 10
sistemdeki tüm sayfalama işlemlerini izlemek için bir dosya sistemi filtresi dahil mod
kodu. Hizmet her saniye bu tür tüm işlemlerin bir izini sorgular ve sistemin kullanım
modellerini anlamanın bir yolu olarak uygulama başlatmalarını, hızlı kullanıcı
geçişlerini, bekleme/uyku/hazırda bekletme işlemlerini ve daha fazlasını izlemek için
çeşitli aracılar kullanır. Bu bilgilerle, Markov zincirlerini kullanarak, kullanıcının diğer
hangi uygulamalarla birlikte hangi uygulamaları ne zaman başlatacağını ve bu
uygulamaların hangi bölümlerinin kullanılacağını gösteren istatistiksel bir model
oluşturur. Örneğin, SuperFetch, kullanıcının Microsoft Outlook'u sabahları çoğunlukla
e-posta okumak için başlattığını, ancak e-postaları daha sonra, öğle yemeğinden
sonra oluşturduğunu anlamak için kendini eğitebilir. Ayrıca, Outlook arka planda
olduğunda, bir sonraki adımda Visual Studio'nun başlatılacağını ve metin
düzenleyicinin yüksek talep göreceğini, derleyicinin biraz daha az, bağlayıcının daha
az sıklıkta talep edileceğini ve dokümantasyon kodu neredeyse hiç. Bu verilerle,
SuperFetch bekleme listesini önceden doldurur ve kullanıcının bir sonraki yapacağını
düşündüğü şeyi (veya hızlı bir kullanıcı geçişinin olduğunu biliyorsa başka bir
kullanıcıyı) yüklemek için boş zamanlarda ikincil depolamadan düşük öncelikli G/Ç
okumaları yapar. büyük ihtimalle). Ek olarak, Windows'un sunduğu sekiz öncelikli
bekleme listesi kullanılarak, bu tür önceden getirilen her disk belleği, ihtiyaç
duyulacağı istatistiksel olasılığa uygun bir düzeyde önbelleğe alınabilir. Böylece,
beklenmeyen talep edilen sayfalar, beklenmedik bir fiziksel bellek ihtiyacı nedeniyle
ucuz ve hızlı bir şekilde tahliye edilebilirken, yakında talep edilmesi muhtemel
sayfalar daha uzun süre yerinde tutulabilir. Aslında SuperFetch, sistemi bu tür
önbelleğe alınmış sayfalara dokunmadan önce diğer işlemlerin çalışma kümelerini kırpma
SuperFetch'in izlemesi, kayda değer bir sistem yükü yaratır. Arama süreleri
milisaniye cinsinden olan mekanik (dönme) sürücülerde, bu maliyet, uygulama
başlatma sürelerinde gecikmeleri ve çok saniyeli gecikmeleri önleme avantajıyla
dengelenir. Bununla birlikte, sunucu sistemlerinde, rastgele çok kullanıcılı iş yükleri
ve verimin gecikmeden daha önemli olduğu gerçeği göz önüne alındığında, bu tür
izleme yararlı değildir. Ayrıca, SSD'ler gibi hızlı, verimli kalıcı belleğe sahip
sistemlerdeki birleşik gecikme iyileştirmeleri ve bant genişliği, izlemeyi bu sistemler
için de daha az faydalı hale getirir. Bu gibi durumlarda, SuperFetch kendini devre
dışı bırakarak birkaç yedek CPU döngüsünü serbest bırakır.
Windows 10 , sıkıştırma deposu yöneticisi adı verilen bir bileşen sunarak MM'ye
başka bir büyük iyileştirme getiriyor . Bu bileşen, bir sistem işlemi türü olan bellek
sıkıştırma işleminin çalışma kümesinde sıkıştırılmış bir sayfa deposu oluşturur .
Paylaşılabilir sayfalar bekleme listesine alındığında ve kullanılabilir bellek azaldığında
(veya belirli diğer dahili algoritma kararları alındığında), listedeki sayfalar çıkarılmak
yerine sıkıştırılır.
Bu, ikincil depolamaya çıkarılması hedeflenen değiştirilmiş sayfalara da olabilir -
hem bellek basıncını azaltarak, belki de ilk etapta yazmadan kaçınarak hem de yazılı
sayfaların sıkıştırılmasına neden olarak, böylece daha az sayfa dosyası alanı
tüketerek ve daha az I. /O sayfa çıkışı. Günümüzün hızlı çok işlemcili sistemlerinde,
genellikle yerleşik donanım sıkıştırma algoritmaları ile, küçük CPU cezası, potansiyel
ikincil depolamaya göre oldukça tercih edilir.
G/Ç maliyeti.
4. İşlem yöneticisi, bir işlem nesnesi oluşturmak için nesne yöneticisini çağırır ve
nesne tanıtıcısını Win32'ye döndürür. Ardından, yeni sürecin adres alanını,
tutamaç tablosunu ve süreç ortamı bloğu (PEBL) (dahili süreç yönetimi verilerini
içeren) gibi diğer önemli veri yapılarını başlatmak için bellek yöneticisini çağırır.
860 Bölüm
Machine Translated by Google 21 Windows 10
birçok modern işletim sistemi gibi, Windows da baştan sona bir istemci-sunucu
modelini kullanır; bu model, ortak işlevselliği bir "hizmet"e (UNIX terimlerinde bir
arka plan programı eşdeğeri) yerleştirmeye izin veren bir katmanlama mekanizması
olarak kullanır. ), ayrıca içerik ayrıştırma kodunu (bir PDF okuyucu veya Web tarayıcısı
gibi) sistem eylemi özellikli koddan (Web tarayıcısının ikincil depolamaya dosya
kaydetme yeteneği veya PDF okuyucunun çıktı alma yeteneği gibi) ayırmanın yanı
sıra bir belge). Örneğin, yeni bir Windows 10 işletim sisteminde, New York Times
web sitesini Microsoft Edge tarayıcısıyla açmak, karmaşık bir "broker", "renderer/
parser", "JITTer, "hizmetler ve müşteriler.
RPC , sistemler arasında RPC'leri uygulamak için kullanılabilen birden çok aktarım
(örneğin, adlandırılmış kanallar ve TCP/IP) kullanır. Bir RPC yalnızca yerel sistemdeki
bir istemci ve bir sunucu arasında gerçekleştiğinde, aktarım olarak ALPC kullanılabilir.
Ayrıca, RPC ağır olduğundan ve birden çok sistem düzeyinde bağımlılığa sahip
olduğundan ( WINXXIII ortam alt sisteminin kendisi dahil), birçok yerel Windows
hizmeti ve ayrıca çekirdek, üçüncü taraf programcılar için mevcut olmayan (veya
uygun olmayan) ALPC'yi doğrudan kullanır.
ALPC , UNIX etki alanı soketlerine ve Mach IPC'ye benzer bir mesaj iletme
mekanizmasıdır . Sunucu işlemi, genel olarak görünür bir bağlantı noktası nesnesi yayınlar.
Bir istemci sunucudan hizmet istediğinde, sunucunun bağlantı noktası nesnesine bir tanıtıcı
açar ve bağlantı noktasına bir bağlantı isteği gönderir. Sunucu bağlantıyı kabul ederse,
ALPC bir çift iletişim bağlantı noktası nesnesi oluşturarak istemcinin bağlantı API'sini çifte
tutamacıyla birlikte sağlar ve ardından sunucunun kabul API'sini diğer tutamaçla çifte sağlar.
mekanizma, bir iletiyi engellemek için bir iş parçacığına gerek kalmadan, bir istek
veya yanıt alındığında iş yapmak için kullanılabilir. Çekirdek modunda bulunan
sunucular için, iletişim portları ayrıca , sunucunun işleyici rutinini hemen yürüten,
kullanıcı modu iş parçacığının (UT) çekirdek tarafına (KT) anında geçişe izin veren bir
geri arama mekanizmasını da destekler .
Bir ALPC mesajı gönderildiğinde, iki mesaj iletme tekniğinden biri seçilebilir.
1. İlk teknik, küçük ve orta boyutlu mesajlar için uygundur (64 KB'nin altında). Bu
durumda, bağlantı noktasının çekirdek mesaj kuyruğu ara depolama olarak
kullanılır ve mesajlar bir süreçten çekirdeğe, diğer işleme kopyalanır. Bu
tekniğin dezavantajı, çift ara belleğe almanın yanı sıra mesajların, hedeflenen
alıcı tarafından tüketilene kadar çekirdek belleğinde kalmasıdır. Alıcı yüksek
düzeyde çekişmeliyse veya şu anda kullanılamıyorsa, bu, megabaytlarca
çekirdek modu belleğinin kilitlenmesine neden olabilir.
2. İkinci teknik daha büyük mesajlar içindir. Bu durumda, bağlantı noktası için
paylaşılan bir bellek bölümü nesnesi oluşturulur. Bağlantı noktasının ileti
kuyruğu aracılığıyla gönderilen iletiler , bölüm nesnesine atıfta bulunan , veri
görünümü özniteliği adı verilen bir "mesaj özniteliği" içerir . Alıcı taraf bu
özniteliği "açığa çıkarır", bu da bölüm nesnesinin sanal adres eşlemesi ve
fiziksel bellek paylaşımı ile sonuçlanır. Bu, büyük iletileri kopyalama veya
çekirdek modu belleğinde ara belleğe alma ihtiyacını ortadan kaldırır. Gönderici,
verileri paylaşılan bölüme yerleştirir ve alıcı, bir mesajı tüketir tüketmez bunları
doğrudan görür.
Windows için aygıt sürücüleri, Windows Sürücü Modeli (WDM) belirtimine göre
yazılmıştır. Bu model, filtre sürücülerinin nasıl katmanlanacağı, han- için ortak kodun nasıl
paylaşılacağı da dahil olmak üzere aygıt sürücüleri için tüm gereksinimleri ortaya koymaktadı
864 Bölüm
Machine Translated by Google 21 Windows 10
dling gücü ve tak ve çalıştır istekleri, doğru iptal mantığı oluşturma vb.
WDM'nin zenginliği nedeniyle, her yeni donanım aygıtı için tam bir WDM aygıt
sürücüsü yazmak çok fazla iş gerektirebilir. Bazı durumlarda, bağlantı noktası/miniport
modeli, belirli donanım aygıtları için bunu yapmayı gereksiz kılar.Ses sürücüleri,
depolama denetleyicileri veya Ethernet denetleyicileri gibi benzer işleme gerektiren bir
dizi aygıt içinde, aygıtın her bir örneği ortak bir noktayı paylaşır. bağlantı noktası
sürücüsü olarak adlandırılan bu sınıf için sürücü. Bağlantı noktası sürücüsü, sınıf için
standart işlemleri uygular ve ardından aygıta özgü işlevi uygulamak için aygıtın mini
bağlantı noktası sürücüsündeki aygıta özgü rutinleri çağırır . Ağ yığınının fiziksel bağlantı
katmanı bu şekilde uygulanır; ndis.sys bağlantı noktası sürücüsü, genel ağ işleme
işlevlerinin çoğunu uygular ve ağ çerçevelerinin gönderilmesi ve alınmasıyla ilgili belirli
donanım komutları için ağ miniport sürücülerini çağırır ( Ethernet gibi).
Benzer şekilde, WDM bir sınıf/minisınıf modeli içerir. Burada, belirli bir aygıt sınıfı,
belirli donanım işlevleri için bir mini sınıfa yönelik açıklamalarla birlikte, tek bir sınıf
sürücüsü tarafından genel bir şekilde uygulanabilir. Örneğin, Windows disk sürücüsü,
CD/DVD'ler ve teyp sürücüleri için olduğu gibi bir sınıf sürücüsüdür. Klavye ve fare
sürücüsü de sınıf sürücüleridir. Bu tür aygıtların bir mini sınıfa ihtiyacı yoktur, ancak
örneğin pil sınıfı sürücüsü, satıcılar tarafından satılan çeşitli harici kesintisiz güç
kaynaklarının (UPS'ler) her biri için bir mini sınıf gerektirir.
Birçok işletim sisteminde önbelleğe alma, genellikle fiziksel/blok düzeyinde blok cihaz
sistemi tarafından yapılır. Bunun yerine Windows, mantıksal/sanal dosya düzeyinde
çalışan merkezi bir önbelleğe alma olanağı sağlar. Önbellek yöneticisi , G/Ç yöneticisinin
kontrolü altındaki tüm bileşenler için önbellek hizmetleri sağlamak üzere MM ile yakın
bir şekilde çalışır . Bu, önbelleğin bir ağ paylaşımındaki uzak dosyalardan özel bir dosya
sistemindeki mantıksal dosyalara kadar her şey üzerinde çalışabileceği anlamına gelir.
Önbelleğin boyutu, sistemde ne kadar boş bellek bulunduğuna göre dinamik olarak
değişir; 64 bit sistemde 2 TB'a kadar büyüyebilir.
Machine Translated by Google
Önbellek yöneticisi, sistem işleminin çalışma kümesini paylaşmak yerine özel bir çalışma
kümesini korur, bu da kırpmanın önbelleğe alınmış dosyaların sayfalarını daha etkin bir
şekilde çıkarmasına olanak tanır. Önbelleği oluşturmak için, önbellek yöneticisi bellek-
dosyaları çekirdek belleğine eşler ve ardından sayfaları bu özel çalışma kümesine yerleştirmek
veya bu kümeden kırpmak için MM'ye özel arabirimler kullanır ; bu, bellek yöneticisi tarafından
sağlanan ek önbelleğe alma olanaklarından yararlanmasına olanak tanır. .
Önbellek 256 KB'lik bloklara bölünmüştür . Her önbellek bloğu, bir dosyanın bir
görünümünü (yani, bellek eşlemeli bir bölgeyi) tutabilir. Her önbellek bloğu, görünüm için
sanal adresi ve dosya ofsetini ve ayrıca görünümü kullanan işlemlerin sayısını depolayan bir
sanal adres kontrol bloğu (VACB) tarafından tanımlanır.
VACB'ler , önbellek yöneticisi tarafından tutulan dizilerde bulunur ve bellek baskısı
durumlarında performansı artırmak için düşük öncelikli önbelleğe alınan verilerin yanı sıra
kritik veriler için diziler vardır.
G/Ç yöneticisi bir dosyanın kullanıcı düzeyinde okuma talebini aldığında, G /Ç yöneticisi
dosyanın bulunduğu birim için G/Ç yığınına bir IRP gönderir .
Önbelleğe alınabilir olarak işaretlenen dosyalar için, dosya sistemi, önbelleğe alınmış dosya
görünümlerinde istenen verileri aramak için önbellek yöneticisini çağırır. Önbellek yöneticisi,
o dosyanın VACB dizin dizisinin hangi girişinin, isteğin bayt ofsetine karşılık geldiğini hesaplar.
Giriş, önbellekteki görünüme işaret ediyor veya geçersiz. Geçersizse, önbellek yöneticisi bir
önbellek bloğu (ve VACB dizisindeki ilgili girişi) tahsis eder ve görünümü önbellek bloğuna
eşler.
Önbellek yöneticisi daha sonra eşlenen dosyadan arayanın arabelleğine veri kopyalamaya
çalışır. Kopyalama başarılı olursa işlem tamamlanır.
Kopyalama başarısız olursa, MM'nin G/Ç yöneticisine önbelleğe alınmamış bir okuma
isteği göndermesine neden olan bir sayfa hatası nedeniyle bunu yapar . G /Ç yöneticisi sürücü
yığınından başka bir istek gönderir, bu sefer önbellek yöneticisini atlayan ve dosyadaki
verileri doğrudan önbellek yöneticisi için ayrılan sayfaya okuyan bir sayfalama işlemi talep
eder. Tamamlandığında, VACB sayfayı gösterecek şekilde ayarlanır. Şimdi önbellekte bulunan
veriler, arayanın arabelleğine kopyalanır ve orijinal G/Ç isteği tamamlanır. Şekil 21.6, bu
işlemlere genel bir bakış gösterir.
Mümkün olduğunda, önbelleğe alınmış dosyalar üzerindeki eşzamanlı işlemler için G/Ç ,
hızlı G/Ç mekanizması tarafından işlenir . Bu mekanizma, normal IRP tabanlı G/Ç ile paraleldir
işlem
G/Ç
G/Ç yöneticisi
sayfa hatası
sanal makine yöneticisi disk sürücüsü
ancak bellekten ve zamandan tasarruf sağlayan bir IRP'yi iletmek yerine doğrudan sürücü
yığınını çağırır . IRP dahil olmadığı için, işlem uzun bir süre boyunca bloke edilmemeli ve
bir çalışan iş parçacığında sıraya alınmamalıdır. Bu nedenle, işlem dosya sistemine
ulaştığında ve önbellek yöneticisini aradığında, bilgi zaten önbellekte değilse işlem başarısız
olur.
G /Ç yöneticisi daha sonra normal IRP yolunu kullanarak işlemi dener .
Çekirdek düzeyinde bir okuma işlemi, verilere kullanıcı alanındaki bir arabelleğe
kopyalanmak yerine doğrudan önbellekten erişilebilmesi dışında benzerdir.
Dosya sistemi meta verilerini (dosya sistemini tanımlayan veri yapıları) kullanmak için
çekirdek, meta verileri okumak için önbellek yöneticisinin eşleme arabirimini kullanır.
Dosya sistemi, meta verileri değiştirmek için önbellek yöneticisinin sabitleme arabirimini
kullanır. Bir sayfayı sabitlemek, sayfayı fiziksel bellekli bir sayfa çerçevesine kilitler, böylece
MM yöneticisi sayfayı taşıyamaz veya dışarı çıkaramaz. Meta verileri güncelledikten sonra,
dosya sistemi önbellek yöneticisinden sayfanın sabitlemesini kaldırmasını ister. Değiştirilmiş
sayfa kirli olarak işaretlenmiştir ve bu nedenle MM , sayfayı ikincil depolamaya boşaltır.
Performansı artırmak için, önbellek yöneticisi küçük bir okuma istekleri geçmişi tutar
ve bu geçmişten gelecek istekleri tahmin etmeye çalışır. Önbellek yöneticisi, ileri veya geri
sıralı erişim gibi önceki üç istekte bir kalıp bulursa, uygulama tarafından bir sonraki istek
gönderilmeden önce verileri önbelleğe önceden getirir. Bu şekilde, uygulama verilerini
zaten önbelleğe alınmış bulabilir ve ikincil depolama G/Ç'sini beklemesi gerekmez .
Bir ağ dosya sisteminin verileri ikincil depolama ile ağ arabirimi arasında taşıması
gerektiğinden, önbellek yöneticisi ayrıca verileri doğrudan taşımak için bir DMA arabirimi
sağlar. Verileri doğrudan taşımak, verileri bir ara arabellek yoluyla kopyalama ihtiyacını
ortadan kaldırır.
(SRM) , işlemin gerekli erişim haklarına sahip olup olmadığını görmek için etkin güvenlik
belirtecini ve iki erişim kontrol listesi (isteğe bağlı erişim kontrol listesi (DACL) ve sistem
erişim kontrol listesi (SACL)) içeren nesnenin güvenlik tanımlayıcısını kontrol eder. .
Etkili güvenlik belirteci tipik olarak iş parçacığı sürecinin belirtecidir, ancak aşağıda
açıklandığı gibi iş parçacığının kendisinin belirteci de olabilir.
Her işlemin ilişkili bir güvenlik belirteci vardır. Oturum açma işlemi (lsass.exe) bir
kullanıcının kimliğini doğruladığında, güvenlik belirteci kullanıcının ilk işlemine
(userinit.exe) eklenir ve her alt işlemi için kopyalanır. Belirteç, kullanıcının güvenlik
kimliğini (SID) , kullanıcının ait olduğu grupların SID'lerini , kullanıcının sahip olduğu
ayrıcalıkları, işlemin bütünlük düzeyini, kullanıcıyla ilişkili öznitelikleri ve talepleri ve
ilgili tüm yetenekleri içerir. Varsayılan olarak, iş parçacıklarının kendi açık belirteçleri
yoktur, bu da onların işlemin ortak belirtecini paylaşmalarına neden olur. Ancak,
kimliğe bürünme adı verilen bir mekanizma kullanarak , bir kullanıcıya ait bir güvenlik
belirtecine sahip bir süreçte çalışan bir iş parçacığı, o kullanıcının kimliğine bürünmek
için başka bir kullanıcıya ait iş parçacığına özgü bir belirteci ayarlayabilir. Bu noktada,
etkin simge iş parçacığının simgesi olur ve tüm işlemler, kotalar ve sınırlamalar o
kullanıcının belirtecine tabidir. İplik daha sonra iş parçacığına özgü belirteci kaldırarak
eski kimliğine "geri dönmeyi" seçebilir, böylece etkin belirteç bir kez daha sürecinki
olur.
Bu kimliğe bürünme olanağı, hizmetlerin farklı güvenlik kimliklerine sahip çeşitli
istemciler adına hareket etmesi gereken istemci-sunucu modeli için temeldir . Bir
kullanıcının kimliğine bürünme hakkı, çoğunlukla bir istemci sürecinden bir sunucu
sürecine bağlantının bir parçası olarak sağlanır. Kimliğe bürünme, istemci adına
nesnelere ve dosyalara erişmek veya bunları oluşturmak için sunucunun sistem
hizmetlerine istemciymiş gibi erişmesine izin verir. Sunucu işlemi güvenilir olmalı ve
saldırılara karşı sağlam olması için dikkatlice yazılmalıdır. Aksi takdirde, bir istemci bir
sunucu işlemini devralabilir ve ardından daha sonraki bir istemci isteğinde bulunan
herhangi bir kullanıcının kimliğine bürünebilir. Windows , ALPC (ve dolayısıyla RPC ve
DCOM) katmanında, adlandırılmış kanal katmanında ve Winsock katmanında kimliğe
bürünmeyi desteklemek için API'ler sağlar.
SRM , güvenlik belirteçlerindeki ayrıcalıkları manipüle etmekten de sorumludur.
Kullanıcıların sistem saatini değiştirmesi, bir sürücü yüklemesi veya bellenim ortam
değişkenlerini değiştirmesi için özel ayrıcalıklar gereklidir. Ayrıca, belirli kullanıcılar,
varsayılan erişim denetimi kurallarını geçersiz kılan güçlü ayrıcalıklara sahip olabilir.
Bunlar, dosya sistemlerinde (okuma/yazma kısıtlamalarını atlamasına izin vererek),
hata ayıklama süreçlerinde (güvenlik özelliklerini atlamalarına izin vererek) vb.
yedekleme veya geri yükleme işlemleri yapması gereken kullanıcıları içerir.
Bir işlemde yürütülen kodun bütünlük düzeyi de bir belirteçle temsil edilir. Bütünlük
seviyeleri, daha önce bahsedildiği gibi, bir tür zorunlu etiketleme mekanizmasıdır. Varsayılan
olarak, bir işlem, görev başına başka ne verilmiş olursa olsun, süreçte yürütülen kodun
bütünlük seviyesinden daha yüksek bir bütünlük düzeyine sahip bir nesneyi değiştiremez.
Ayrıca, daha yüksek bir bütünlük düzeyinde başka bir işlem nesnesinden okuyamaz. Nesneler
ayrıca güvenlik tanımlayıcılarıyla ilişkili zorunlu ilkeyi manuel olarak değiştirerek kendilerini
okuma erişiminden koruyabilirler. Bir nesnenin (bir dosya veya işlem gibi) içinde, bütünlük
düzeyi SACL'de depolanır ve bu, onu DACL'de depolanan tipik isteğe bağlı kullanıcı ve grup
izinlerinden ayırır .
Tarayıcı veya tarayıcı gibi harici içerik ayrıştırma yazılımlarına saldırarak kodun bir
sistemi ele geçirmesini zorlaştırmak için bütünlük seviyeleri getirildi.
868 Bölüm 21 Windows 10
Machine Translated by Google
PDF okuyucu, çünkü böyle bir yazılımın düşük bir bütünlük seviyesinde çalışması bekleniyor.
Örneğin, Microsoft Edge, Adobe Reader ve Google Chrome gibi "düşük bütünlükte" çalışır.
Microsoft Word gibi normal bir uygulama "orta düzeyde bütünlük" ile çalışır. Son olarak, bir
yönetici veya bir kurulum programı tarafından çalıştırılan bir uygulamanın "yüksek bütünlükte"
çalışmasını bekleyebilirsiniz.
Daha düşük bütünlük seviyelerinde çalışacak uygulamalar oluşturmak, geliştiricilere bu
güvenlik özelliğini uygulamak için bir yük getirir, çünkü daha önce belirtildiği gibi bir aracıyı ve
ayrıştırıcıyı veya oluşturucuyu desteklemek için bir istemci-sunucu modeli oluşturmaları gerekir.
Bu güvenlik modelini düzene sokmak için Windows 8 , token nesnesinin özel bir uzantısı olan
ve genellikle "AppContainer" olarak adlandırılan Uygulama Kapsayıcısını tanıttı. Bir
AppContainer altında çalışırken, bir uygulama otomatik olarak işlem belirtecini aşağıdaki
şekillerde ayarlar:
1. Simgenin bütünlük düzeyi düşük olarak ayarlanmıştır. Bu, uygulamanın sistemdeki çoğu
nesneye (dosyalar, anahtarlar, işlemler) yazamayacağı veya bunları değiştiremeyeceği
veya sistemdeki başka herhangi bir işlemden okuyamayacağı anlamına gelir.
2. Belirteçte tüm gruplar ve kullanıcı SID'si devre dışı bırakılır (yoksayılır). Diyelim ki
uygulama, World grubuna ait olan Anne kullanıcısı tarafından başlatıldı. Anne veya
World tarafından erişilebilen hiçbir dosya bu uygulamaya erişilemez.
3. Bir avuç hariç tüm ayrıcalıklar belirteçten kaldırılır. Bu, güçlü sistem çağrılarına veya
sistem genelindeki işlemlere izin verilmesini önler.
4. Simgeye , uygulamanın paket tanımlayıcısının SHA-256 karma değerine karşılık gelen özel
bir AppContainer SID eklenir . Bu, belirteçteki tek geçerli güvenlik tanımlayıcısıdır, bu
nedenle bu uygulamaya doğrudan erişmek isteyen herhangi bir nesnenin AppContainer
SID'ye açıkça okuma veya yazma erişimi vermesi gerekir .
5. Uygulamanın bildirim dosyasına dayalı olarak simgeye bir dizi yetenek SID'si eklenir.
Uygulama ilk yüklendiğinde, bu yetenekler, uygulama dağıtılmadan önce bunları kabul
etmesi gereken kullanıcıya gösterilir.
Son olarak, PnP yöneticisi bir durdurma talebi gönderir ve ardından cihazı yeni bir
başlatma cihazı talebiyle yeniden yapılandırabilir.
PnP yöneticisi ayrıca diğer istekleri de destekler. Örneğin, sorgu-durdur işlevine
benzer şekilde çalışan sorgu kaldırma, bir kullanıcı USB depolama aygıtı gibi çıkarılabilir
bir aygıtı çıkarmaya hazırlanırken kullanılır . Sürpriz kaldırma isteği , bir cihaz
arızalandığında veya daha sık olarak, bir kullanıcı sisteme önce onu durdurmasını
söylemeden bir cihazı çıkardığında kullanılır. Son olarak, kaldırma isteği sürücüye bir
aygıtı kalıcı olarak kullanmayı bırakmasını söyler.
Sistemdeki birçok program, cihazların eklenmesi veya çıkarılması ile ilgilenir, bu
nedenle PnP yöneticisi bildirimleri destekler. Örneğin böyle bir bildirim, dosya
yöneticisine, yeni bir depolama aygıtı takıldığında veya çıkarıldığında ikincil depolama
birimleri listesini güncellemesi için ihtiyaç duyduğu bilgileri verir.
Cihazların yüklenmesi, sistemde yeni hizmetlerin başlatılmasına da neden olabilir.
Daha önce, bu tür hizmetler genellikle sistem başlatıldığında çalışacak ve ilişkili aygıt
sisteme hiç takılmamış olsa bile çalışmaya devam edecek şekilde kendilerini ayarladılar,
çünkü bilgileri almak için çalışıyor olmaları gerekiyordu.
Machine Translated by Google
Uykunun birincil avantajı, sistemin bu duruma oldukça hızlı bir şekilde, belki
de bir dizüstü bilgisayarın kapağı kapandıktan sadece birkaç saniye sonra
girebilmesidir. Uykudan dönüş de oldukça hızlıdır. CPU'larda ve G/Ç aygıtlarında
güç düşük bir düzeye düşürülür , ancak içeriğin kaybolmaması için belleğe
yeterince güç verilmeye devam edilir. Ancak daha önce belirtildiği gibi, mobil
cihazlarda bu birkaç saniye yine de makul olmayan bir kullanıcı deneyimine yol
açar, bu nedenle güç yöneticisi, ekran kapanır kapanmaz Bağlı Bekleme durumunu
başlatmak için Masaüstü Etkinliği Moderatörü ile birlikte çalışır. Bağlı Bekleme,
bilgisayarı neredeyse dondurur ancak bilgisayarı gerçekten uyku moduna geçirmez.
Hazırda bekletme moduna girmek uykuya göre çok daha uzun sürer çünkü
sistem kapatılmadan önce belleğin tüm içeriği ikincil depolamaya aktarılmalıdır.
Ancak sistemin aslında kapalı olması önemli bir avantaj. Bir dizüstü bilgisayarda
pil değiştirildiğinde veya bir masaüstü sistemi fişten çekildiğinde olduğu gibi
sistemde güç kaybı olursa, kaydedilen sistem verileri kaybolmaz. Kapatmanın
aksine, hazırda bekletme modu, kullanıcının kaldığı yerden devam edebilmesi için
çalışmakta olan sistemi kaydeder. Ayrıca, hazırda bekletme modu güç
gerektirmediğinden, bir sistem süresiz olarak hazırda bekletme modunda kalabilir.
Bu nedenle, bu özellik masaüstü ve sunucu sistemlerinde son derece kullanışlıdır
ve pil kritik bir düzeye geldiğinde dizüstü bilgisayarlarda da kullanılır (çünkü pil
zayıfken sistemi uyku moduna almak, pilin şarj olması durumunda tüm verilerin
kaybolmasına neden olabilir). uyku durumundayken gücü tükenir).
Windows 7'de, güç yöneticisi ayrıca, çekirdek park etme, CPU kısma ve
artırma ve daha fazlası gibi stratejileri özel olarak uygulayan bir işlemci güç
yöneticisi (PPM) içerir. Ayrıca Windows 8, belirli işlevsel güç durumlarını uygulamak
için işlev sürücüleriyle birlikte çalışan güç çerçevesini (PoFX) tanıttı. Bu, cihazların
dahili güç yönetimini (saat hızları, akım/güç çekişleri vb.) sisteme gösterebilecekleri
ve daha sonra bilgileri cihazların hassas kontrolü için kullanabilecekleri anlamına
gelir. Böylece, örneğin, bir cihazı basitçe açıp kapatmak yerine, sistem belirli
bileşenleri açıp kapatabilir.
PnP yöneticisi gibi, güç yöneticisi de sistemin geri kalanına güç durumundaki
değişiklikler hakkında bildirimler sağlar. Bazı uygulamalar, sistem bilgilerini
kaydetmeye başlayabilmek için sistemin ne zaman kapatılacağını bilmek isterler.
21.3 Sistem Bileşenleri 871
Machine Translated by Google
ikincil depolamayı belirtir ve daha önce belirtildiği gibi DAM'nin ekranın ne zaman
kapatılıp tekrar açıldığını bilmesi gerekir.
21.3.5.11 Önyükleme
Ürün yazılımı, açılışta kendi kendini sınama (POST) tanılamalarını çalıştırır, sisteme
bağlı aygıtların çoğunu tanımlar ve bunları temiz bir açılış durumuna başlatır ve ardından
ACPI tarafından kullanılan açıklamayı oluşturur. Ardından, bellenim sistem önyükleme
aygıtını bulur, Windows önyükleme yöneticisi programını yükler ( UEFI sistemlerinde
boot mgfw.efi ) ve onu çalıştırmaya başlar.
Hazırda bekletme modundaki bir makinede, daha sonra winresume.efi programı
yüklenir. Çalışan sistemi ikincil depolamadan geri yükler ve sistem hazırda bekletme
modundan hemen önce ulaştığı noktada yürütmeye devam eder. Kapatılmış bir
makinede, bootmgfw.efi , sistemin yeniden başlatılmasını gerçekleştirir ve ardından
winload.efi'yi yükler. Bu program hal.dll'yi, çekirdeği (ntoskrnl.exe) ve bağımlılıklarını ve
önyükleme için gereken tüm sürücüleri ve sistem kovanını yükler. winload daha sonra
yürütmeyi çekirdeğe aktarır.
Prosedür, Sanal Güvenli Modun etkinleştirildiği (ve hiper yöneticinin açık olduğu)
Windows 10 sistemlerinde biraz farklıdır. Burada win load.efi bunun yerine önce
hipervizörü başlatan hvloader.exe veya hvloader.dll'yi yükleyecektir . Intel sistemlerinde
bu hvix64.exe'dir, AMD sistemleri ise hvax64.exe'yi kullanır . Hiper yönetici daha sonra
VTL 1'i (Güvenli Dünya) ve VTL 0'ı (Normal Dünya) kurar ve şimdi güvenli çekirdeği
(securekernel.exe) ve bağımlılıklarını yükleyen winload.efi'ye döner. Ardından, VTL 1'i
başlatan güvenli çekirdeğin giriş noktası çağrılır, ardından VTL 0'da yükleyiciye geri
döner ve yukarıda açıklanan adımlarla devam eder.
Çekirdek kendini başlatırken, birkaç işlem oluşturur. Boşta kalma süreci , sistem
genelinde CPU boşta kalma süresinin kolayca hesaplanabilmesi için tüm boşta kalan iş
parçacıklarının kapsayıcı görevi görür . Sistem süreci , yoklama, ev tutma ve diğer arka
plan çalışmaları için sürücüler tarafından oluşturulan tüm dahili çekirdek çalışan iş
parçacıklarını ve diğer sistem iş parçacıklarını içerir. Windows 10'da yeni olan bellek
sıkıştırma işlemi, mağaza yöneticisi tarafından sistem basıncını azaltmak ve sayfalamayı
optimize etmek için kullanılan sıkıştırılmış bekleme sayfalarından oluşan bir çalışma
grubuna sahiptir. Son olarak, VSM etkinleştirilirse, güvenli sistem işlemi , güvenli
çekirdeğin yüklendiği gerçeğini temsil eder.
Yine çekirdek tarafından oluşturulan ilk kullanıcı modu işlemi, init'e (başlatma)
benzer olan oturum yöneticisi alt sistemidir (SMSS) .
21.3 Sistem Bileşenleri 873
Machine Translated by Google
• SMSS sistem başlatmayı tamamlar ve ardından oturum 0 için bir SMSS ve ilk oturum açma
oturumu için bir SMSS başlatır (1) .
• wininit , kullanıcı modunu başlatmak ve lsass'ı başlatmak için 0 oturumunda çalışır ve
Hizmetler.
• Güvenlik alt sistemi olan lsass, kullanıcıların kimlik doğrulaması gibi kolaylıklar
uygular. Kullanıcı kimlik bilgileri, Credential Guard aracılığıyla VSM tarafından
korunuyorsa, lsaiso ve bioiso da lsass tarafından VTL 1 Trustlet'leri olarak başlatılır .
• hizmetler , kullanıcı modu hizmetleri de dahil olmak üzere sistemdeki tüm arka plan
etkinliklerini denetleyen hizmet kontrol yöneticisini veya SCM'yi içerir. Sistem
önyüklendiğinde başlamak için bir dizi hizmet kaydedilmiş olacaktır.
Diğerleri yalnızca talep üzerine veya bir cihazın gelmesi gibi bir olay tarafından
tetiklendiğinde başlatılacaktır.
• csrss , Win32 ortam alt sistemi işlemidir. Her oturumda başlatılır; bunun başlıca
nedeni, kullanıcı başına ayrılması gereken fare ve klavye girişini işlemesidir. •
winlogon , oturum açma kullanıcı arabirimini sunan logonui'yi başlatarak bir
kullanıcıda oturum açmak için oturum 0 dışındaki her Windows oturumunda çalıştırılır .
sürücülere cihazları yeniden başlatma şansı verir ve iş devam ederken tam önyükleme
görünümü verir.
Windows , kullanıcıyla klavye, fare ve ekran aracılığıyla arabirim oluşturan GUI tabanlı
bir konsolu destekler. Çoğu sistem ses ve videoyu da destekler. Örneğin, ses girişi,
Windows'un makine öğrenimi tarafından desteklenen ses tanıma ve sanal yardımcı
yazılımı Cortana tarafından kullanılır. Cortana, sistemi daha kullanışlı hale getirir ve
ayrıca motor engelli kullanıcılar için erişilebilirliğini artırabilir. Windows 7, kullanıcıların
bir veya daha fazla parmakla ekrana dokunarak veri girmesine olanak tanıyan çoklu
dokunmatik donanım desteği ekledi .
Video girişi özelliği hem erişilebilirlik hem de güvenlik için kullanılır: Windows Hello,
geleneksel kimlik bilgileri gerektirmeden kullanıcıyı benzersiz bir şekilde tanımlamak
için gelişmiş 3B ısı algılama, yüz haritalama kameraları ve sensörlerinin kullanılabileceği
bir güvenlik özelliğidir. Windows 10'un daha yeni sürümlerinde, erişilebilirlik için fare
girişinin yerini göz kürelerinin konumu ve bakışına ilişkin bilgilerin aldığı göz hareketi
algılama donanımı kullanılabilir. Gelecekteki diğer girdi deneyimleri, muhtemelen
Microsoft'un HoloLens artırılmış gerçeklik ürününden gelişecektir.
PC , elbette, kişisel bir bilgisayar olarak tasavvur edildi - doğası gereği tek
kullanıcılı bir makine. Ancak bir süredir Windows, bir PC'nin birden çok kullanıcı
arasında paylaşılmasını desteklemektedir. GUI'yi kullanarak oturum açan her kullanıcı,
kullanacağı GUI ortamını temsil etmek ve uygulamalarını çalıştırmak için gerekli tüm
işlemleri içermek için oluşturulmuş bir oturuma sahiptir. Windows, tek bir makinede
aynı anda birden fazla oturumun bulunmasına izin verir. Ancak, Windows'un istemci
sürümleri, bilgisayara bağlı tüm monitörlerden, klavyelerden ve farelerden oluşan
yalnızca tek bir konsolu destekler . Konsola aynı anda yalnızca bir oturum bağlanabilir.
Kullanıcılar konsolda görüntülenen oturum açma ekranından yeni oturumlar
oluşturabilir veya mevcut bir oturuma ekleyebilirler. Bu, birden fazla kullanıcının,
kullanıcılar arasında oturumu kapatıp açmak zorunda kalmadan tek bir bilgisayarı
paylaşmasına olanak tanır . Microsoft, bu oturum kullanımını hızlı kullanıcı değiştirme
olarak adlandırır. macOS da benzer bir özelliğe sahiptir.
Bir PC'deki bir kullanıcı, yeni bir oturum oluşturabilir veya uzak masaüstü haline
gelen başka bir bilgisayardaki mevcut bir oturuma bağlanabilir. Terminal hizmetleri
özelliği (TS) , bağlantıyı Uzak Masaüstü Protokolü (RDP) adı verilen bir protokol
aracılığıyla yapar. Kullanıcılar genellikle bir ev bilgisayarından bir iş bilgisayarındaki
bir oturuma bağlanmak için bu özelliği kullanır . Uzak masaüstleri, uzaktan sorun
giderme senaryoları için de kullanılabilir: uzak bir kullanıcı, konsoldaki oturumda
oturum açmış olan kullanıcıyla bir oturumu paylaşmaya davet edilebilir. Uzak kullanıcı,
kullanıcının eylemlerini izleyebilir ve hatta bilgisayar sorunlarının çözülmesine yardımcı
olması için masaüstünün kontrolüne bile verilebilir. Terminal hizmetlerinin bu son
kullanımı, alternatif kullanıcının ayrı bir oturum oluşturmak yerine aynı oturumu
paylaştığı “yansıtma” özelliğini kullanır.
Birçok şirket, kullanıcıların bu kaynaklara bilgisayarlarından erişmesine izin
vermek yerine , bu makineleri yalnızca terminal sunucuları olarak tahsis etmek yerine,
kurumsal kaynaklara erişen tüm kullanıcı oturumlarını çalıştırmak için veri
merkezlerinde tutulan kurumsal sistemleri kullanır. Her sunucu bilgisayar, yüzlerce
uzak masaüstü oturumunu işleyebilir. Bu, bir ince istemci hesaplama biçimidir .
875
Machine Translated by Google 21.5 Dosya Sistemi
bireysel bilgisayarlar birçok işlev için bir sunucuya güvenir. Veri merkezi terminal
sunucularına güvenmek, kurumsal bilgi işlem kaynaklarının güvenilirliğini, yönetilebilirliğini
ve güvenliğini artırır.
Windows'taki yerel dosya sistemi NTFS'dir. Tüm yerel hacimler için kullanılır.
Ancak, ilişkili USB flash sürücüler, kameralardaki flash bellekler ve harici depolama
aygıtları, taşınabilirlik için 32 bit FAT dosya sistemiyle biçimlendirilebilir.
FAT , kameralarda çalışan yazılımlar gibi Windows dışında birçok sistem tarafından
anlaşılan çok daha eski bir dosya sistemi formatıdır. Bir dezavantajı, FAT dosya sisteminin
yetkili kullanıcılarla dosya erişimini kısıtlamamasıdır. FAT ile verilerin güvenliğini
sağlamanın tek çözümü , verileri dosya sisteminde depolamadan önce şifrelemek için bir
uygulama çalıştırmaktır.
Buna karşılık, NTFS , tek tek dosyalara erişimi kontrol etmek için ACL'leri kullanır ve
tek tek dosyaların veya tüm birimlerin (Windows BitLocker özelliğini kullanarak) örtük
şifrelemeyi destekleyen bağlantı noktalarını destekler. NTFS , veri kurtarma, hata
toleransı, çok büyük dosyalar ve dosya sistemleri, çoklu veri akışları, UNICODE adları,
seyrek dosyalar, günlük kaydı, birim gölge kopyaları ve dosya sıkıştırma dahil olmak üzere
birçok başka özelliği de uygular .
NTFS , bir depolama aygıtının ayrı sektörleriyle ilgilenmez, bunun yerine depolama
ayırma birimleri olarak kümeleri kullanır. 2'nin gücü olan küme boyutu, bir NTFS dosya
sistemi biçimlendirildiğinde yapılandırılır. Varsayılan küme boyutu, 2 GB'den büyük
birimler için 4 KB olan birim boyutunu temel alır .
Günümüzün depolama cihazlarının boyutu göz önüne alındığında, daha iyi performans
elde etmek için Windows varsayılanlarından daha büyük küme boyutlarını kullanmak
mantıklı olabilir, ancak bu performans kazanımları daha fazla dahili parçalanma pahasına
olacaktır.
NTFS , depolama adresleri olarak mantıksal küme numaralarını (LCN'ler) kullanır .
Cihazın başından sonuna kadar kümeleri numaralandırarak bunları atar. Bu şemayı
kullanarak sistem, LCN'yi küme boyutuyla çarparak fiziksel bir depolama ofseti (bayt
cinsinden) hesaplayabilir .
NTFS'deki bir dosya, UNIX'teki gibi basit bir bayt akışı değildir ; daha ziyade, yazılan
niteliklerden oluşan yapılandırılmış bir nesnedir . Bir dosyanın her özelliği, oluşturulabilen,
silinebilen, okunabilen ve yazılabilen bağımsız bir bayt akışıdır. Bazı öznitelik türleri, dosya
adı (veya dosyanın MS-DOS kısa adı gibi takma adları varsa adları ), oluşturma zamanı ve
erişim kontrol listesini belirten güvenlik tanımlayıcısı dahil olmak üzere tüm dosyalar için
standarttır. Kullanıcı verileri, veri özniteliklerinde saklanır .
Çoğu geleneksel veri dosyası , dosyanın tüm verilerini içeren adsız bir veri özniteliğine
sahiptir. Ancak, açık adlarla ek veri akışları oluşturulabilir. Bileşen Nesne Modelinin IProp
arayüzleri (daha sonra tartışılacaktır)
876 Bölüm
Machine Translated by Google 21 Windows 10
NTFS birimindeki her dosyanın, dosya referansı adı verilen benzersiz bir kimliği vardır.
Dosya başvurusu, 48 bit dosya numarası ve 16 bit sıra numarasından oluşan 64 bitlik bir
miktardır. Dosya numarası, MFT'de dosyayı tanımlayan kayıt numarasıdır (yani dizi
yuvası) . Sıra numarası, bir MFT girişi her yeniden kullanıldığında artırılır. Sıra numarası,
NTFS'nin , MFT girişi yeni bir dosya için yeniden kullanıldıktan sonra silinen bir dosyaya
eski bir referansı yakalamak gibi dahili tutarlılık kontrolleri gerçekleştirmesini sağlar.
UNIX'te olduğu gibi , NTFS ad alanı bir dizinler hiyerarşisi olarak düzenlenir. Her dizin , o
dizindeki dosya adlarının bir dizinini depolamak için B+ ağacı adı verilen bir veri yapısı
kullanır . B+ ağacında, ağacın kökünden yaprağa kadar olan her yolun uzunluğu aynıdır
ve ağacı yeniden düzenleme maliyeti ortadan kalkar. Bir dizinin dizin kökü , B+ ağacının
en üst düzeyini içerir. Büyük bir dizin için, bu üst düzey, ağacın geri kalanını tutan disk
uzantılarına yönelik işaretçiler içerir. Dizindeki her girdi, dosyanın adını ve dosya
referansını, ayrıca dosyanın MFT'deki yerleşik özniteliklerinden alınan güncelleme zaman
damgasının ve dosya boyutunun bir kopyasını içerir . Bu bilgilerin kopyaları, bir dizin
listesinin verimli bir şekilde oluşturulabilmesi için dizinde saklanır. Tüm dosya adları,
boyutları ve güncelleme süreleri dizinin kendisinden mevcut olduğundan, bu öznitelikleri
her bir dosya için MFT girdilerinden toplamaya gerek yoktur .
NTFS biriminin meta verilerinin tümü dosyalarda depolanır . İlk dosya MFT'dir. MFT'nin
hasar görmesi durumunda kurtarma sırasında kullanılan ikinci dosya, MFT'nin ilk 16
girişinin bir kopyasını içerir . Sonraki birkaç dosya da amaca özeldir. Aşağıdaki dosyaları
içerirler:
dosya sistemi hiyerarşisindeki en üst düzey dizindir. • Bitmap dosyası , bir birimdeki
• Önyükleme dosyası , Windows için başlatma kodunu içerir ve basit bir ROM önyükleme
yükleyicisi tarafından kolayca bulunabilmesi için belirli bir ikincil depolama aygıtı
adresinde bulunmalıdır . Önyükleme dosyası ayrıca MFT'nin fiziksel adresini de içerir.
• Bozuk küme dosyası , birimdeki tüm bozuk alanların kaydını tutar; NTFS kullanır
hata kurtarma için bu kayıt.
Tüm NTFS meta verilerini gerçek dosyalarda tutmak yararlı bir özelliğe sahiptir. Bölüm
21.3.5.6'da tartışıldığı gibi, önbellek yöneticisi dosya verilerini önbelleğe alır. Tüm NTFS
meta verileri dosyalarda bulunduğundan, bu veriler sıradan veriler için kullanılan aynı
mekanizmalar kullanılarak önbelleğe alınabilir.
21.5.2 Kurtarma
Birçok basit dosya sisteminde, yanlış zamanda bir elektrik kesintisi, dosya sistemi veri
yapılarına o kadar ciddi şekilde zarar verebilir ki, tüm birim karışır.
UFS dahil ancak ZFS olmayan birçok UNIX dosya sistemi, depolama aygıtında fazlalık meta
verileri depolar ve tüm dosya sistemi veri yapılarını kontrol etmek ve bunları zorla tutarlı
bir duruma geri yüklemek için fsck programını kullanarak çökmelerden kurtarır. Bunları
geri yüklemek genellikle hasarlı dosyaların silinmesini ve kullanıcı verileriyle yazılmış ancak
dosya sisteminin meta veri yapılarına düzgün şekilde kaydedilmemiş veri kümelerinin
serbest bırakılmasını içerir. Bu kontrol, yavaş bir süreç olabilir ve önemli miktarda veri
kaybına neden olabilir.
NTFS , dosya sistemi sağlamlığına farklı bir yaklaşım getiriyor. NTFS'de, tüm dosya
sistemi veri yapısı güncellemeleri işlemler içinde gerçekleştirilir. Bir veri yapısı
değiştirilmeden önce işlem, yineleme ve geri alma bilgilerini içeren bir günlük kaydı yazar.
Veri yapısı değiştirildikten sonra, işlem, işlemin başarılı olduğunu belirtmek için günlüğe
bir taahhüt kaydı yazar.
Bir kilitlenmeden sonra sistem, günlük kayıtlarını işleyerek, önce taahhüt edilen
işlemler için işlemleri yeniden yaparak (değişikliklerinin dosya sistemi veri yapılarına
ulaştığından emin olmak için) ve ardından işlemleri geri alarak dosya sistemi veri yapılarını
tutarlı bir duruma geri yükleyebilir. çökmeden önce başarıyla tamamlanmayan işlemler.
Periyodik olarak (genellikle her 5 saniyede bir), günlüğe bir kontrol noktası kaydı yazılır.
Sistemin bir çökmeden kurtulmak için kontrol noktasından önce günlük kayıtlarına ihtiyacı
yoktur. Atılabilirler, böylece günlük dosyası sınırsız büyümez. Sistem başlatıldıktan sonra
bir NTFS birimine ilk erişildiğinde, NTFS otomatik olarak dosya sistemi kurtarma işlemini
gerçekleştirir.
Bu şema, bir çökmeden sonra tüm kullanıcı dosyası içeriğinin doğru olduğunu garanti
etmez. Yalnızca dosya sistemi veri yapılarının (meta veri dosyaları) hasarsız olmasını ve
önceki sürümlerde var olan bazı tutarlı durumları yansıtmasını sağlar.
878 Bölüm 21 Windows 10
Machine Translated by Google
kaza. İşlem şemasını kullanıcı dosyalarını kapsayacak şekilde genişletmek mümkün olacaktı
ve Microsoft bunu Windows Vista'da yapmak için bazı adımlar attı.
Günlük, birimin başındaki üçüncü meta veri dosyasında depolanır.
Dosya sistemi biçimlendirildiğinde sabit bir maksimum boyutta oluşturulur. İki bölümü
vardır: döngüsel bir günlük kayıtları kuyruğu olan günlük alanı ve bir kurtarma sırasında
NTFS'nin okumaya başlaması gereken günlük kaydı alanındaki konum gibi bağlam bilgilerini
tutan yeniden başlatma alanı . Aslında, yeniden başlatma alanı bilgilerinin iki kopyasını tutar,
bu nedenle çökme sırasında bir kopyanın zarar görmesi durumunda kurtarma hala
mümkündür.
Günlüğe kaydetme işlevi, günlük dosyası hizmeti tarafından sağlanır. Günlük dosyası
hizmeti, günlük kayıtlarını yazmaya ve kurtarma eylemlerini gerçekleştirmeye ek olarak,
günlük dosyasındaki boş alanı takip eder. Boş alan çok azalırsa, günlük dosyası hizmeti
bekleyen işlemleri sıraya alır ve NTFS tüm yeni G/Ç işlemlerini durdurur .
Devam eden işlemler tamamlandıktan sonra NTFS , tüm verileri temizlemek için önbellek
yöneticisini çağırır ve ardından günlük dosyasını sıfırlar ve sıraya alınmış işlemleri gerçekleştirir.
21.5.3 Güvenlik
Bir NTFS biriminin güvenliği, Windows nesne modelinden türetilmiştir.
Her NTFS dosyası, dosyanın sahibini belirten bir güvenlik tanımlayıcısına ve listelenen her
kullanıcıya veya gruba verilen veya reddedilen erişim izinlerini içeren bir erişim kontrol
listesine başvurur. NTFS'nin önceki sürümleri, her dosyanın bir özniteliği olarak ayrı bir
güvenlik tanımlayıcısı kullanırdı. Windows 2000'den başlayarak, güvenlik tanımlayıcısı
özniteliği, depolama alanında ve önbelleğe alma alanında önemli bir tasarruf sağlayan
paylaşılan bir kopyaya işaret eder; pek çok dosyanın aynı güvenlik tanımlayıcıları vardır.
Normal çalışmada NTFS , dosya yolu adlarındaki dizinlerin geçişi için izinleri zorlamaz.
Ancak, POSIX ile uyumluluk için bu kontroller etkinleştirilebilir. Dosya yolu adlarının modern
ayrıştırılması, yol adlarının dizinlere göre ayrıştırılması yerine önek eşleştirmesini
kullandığından, ikinci seçenek doğası gereği daha pahalıdır. Ön ek eşleştirme, bir önbellekte
dizeleri arayan ve en uzun eşleşmeye sahip girişi bulan bir algoritmadır; örneğin,
foo bar dir girişi foo bar dir2 dir3 dosyam ile eşleşir.
Ön ek eşleştirme önbelleği, yol adı geçişinin ağaçta çok daha derinlere başlamasını
sağlayarak birçok adımdan tasarruf sağlar. Geçiş kontrollerini zorlamak, kullanıcının
erişiminin her dizin düzeyinde kontrol edilmesi gerektiği anlamına gelir. Örneğin, bir
kullanıcının foo bar'da gezinme izni olmayabilir, bu nedenle foo bar dir için
erişimden başlamak bir hata olur.
21.5.4 Sıkıştırma
NTFS , tek tek dosyalarda veya bir dizindeki tüm veri dosyalarında veri sıkıştırması
gerçekleştirebilir. Bir dosyayı sıkıştırmak için NTFS , dosyanın verilerini 16 bitişik kümeden
oluşan bloklar olan sıkıştırma birimlerine böler . Bir sıkıştırma birimi yazıldığında, bir veri
sıkıştırma algoritması uygulanır. Sonuç 16'dan daha az kümeye sığarsa, sıkıştırılmış sürüm
saklanır. Okurken, NTFS verilerin sıkıştırılıp sıkıştırılmadığını belirleyebilir: sıkıştırılmışlarsa,
saklanan sıkıştırma biriminin uzunluğu 16 kümeden azdır. Bitişik sıkıştırma birimlerini
okurken performansı iyileştirmek için NTFS , uygulama isteklerinden önce önceden getirir
ve sıkıştırır.
21.5 Dosya Sistemi 879
Machine Translated by Google
Seyrek dosyalar veya çoğunlukla sıfır içeren dosyalar için NTFS , yerden tasarruf etmek
için başka bir teknik kullanır. Hiç yazılmadıkları için yalnızca sıfır içeren kümeler, gerçekte
depolama aygıtlarına atanmaz veya depolanmaz. Bunun yerine, dosya için MFT girişinde
depolanan sanal küme numaraları dizisinde boşluklar bırakılır . Bir dosyayı okurken, NTFS sanal
küme numaralarında bir boşluk bulursa, arayanın arabelleğinin o kısmını sıfır doldurur. Bu
teknik UNIX tarafından da kullanılmaktadır .
Windows 2000'de tanıtılan NTFS'deki dizinlere özgü bir sembolik bağlantı biçimidir. Genel
adların kullanımından daha esnek olan depolama birimlerini düzenlemek için bir mekanizma
sağlarlar. (sürücü harfleri gibi). Bir bağlama noktası, gerçek birim adını içeren ilişkili verilerle
sembolik bir bağlantı olarak uygulanır. Sonuç olarak, bağlama noktaları sürücü harflerini
tamamen değiştirecektir, ancak birçok uygulamanın sürücü harfi şemasına bağımlılığı nedeniyle
uzun bir geçiş olacaktır.
Windows Vista, UNIX'te bulunanlara benzer daha genel bir sembolik bağlantı biçimi için
destek sundu . Bağlantılar mutlak veya göreli olabilir, var olmayan nesnelere işaret edebilir ve
birimler arasında bile hem dosyalara hem de dizinlere işaret edebilir. NTFS ayrıca, tek bir
dosyanın aynı birimin birden fazla dizininde girişe sahip olduğu sabit bağlantıları da destekler .
NTFS , dosya sisteminde yapılan tüm değişiklikleri açıklayan bir günlük tutar. Kullanıcı modu
hizmetleri, günlükteki değişikliklerle ilgili bildirimleri alabilir ve ardından günlükten okuyarak
hangi dosyaların değiştiğini belirleyebilir. Arama dizin oluşturucu hizmeti, yeniden dizine
eklenmesi gereken dosyaları belirlemek için değişiklik günlüğünü kullanır. Dosya çoğaltma
hizmeti, ağ üzerinden çoğaltılması gereken dosyaları belirlemek için bunu kullanır.
Windows, hem eşler arası hem de istemci-sunucu ağını destekler. Ayrıca ağ yönetimi için
olanaklara sahiptir. Windows'taki ağ bileşenleri, veri aktarımı, işlemler arası iletişim, ağ
üzerinden dosya paylaşımı ve uzak yazıcılara yazdırma işleri gönderme yeteneği sağlar.
21.6.1 Ağ Arayüzleri
21.6.2 Protokoller
Windows, aktarım protokollerini sürücü olarak uygular. Bu sürücüler dinamik olarak sisteme
yüklenebilir ve sistemden kaldırılabilir, ancak pratikte sistemin tipik olarak bir değişiklikten
sonra yeniden başlatılması gerekir. Windows birkaç ağ protokolüyle birlikte gelir. Daha
sonra, bu protokollerin bir kısmını tartışacağız.
İleti Bloğu (SMB) protokolü ilk olarak MS-DOS 3.1'de tanıtıldı. Sistem , ağ üzerinden G/Ç
istekleri göndermek için protokolü kullanır .
SMB protokolünün dört mesaj türü vardır . Oturum kontrol mesajları, sunucuda paylaşılan
bir kaynağa bir yeniden yönlendirici bağlantısını başlatan ve sonlandıran komutlardır.
Yeniden yönlendirici , sunucudaki dosyalara erişmek için Dosya iletilerini kullanır. Yazıcı
mesajları, uzak bir yazdırma kuyruğuna veri göndermek ve kuyruktan durum bilgisi almak
için kullanılır ve Mesaj mesajları, başka bir iş istasyonu ile iletişim kurmak için kullanılır. SMB
protokolünün bir sürümü Ortak İnternet Dosya Sistemi (CIFS) olarak yayınlandı ve bir dizi
işletim sisteminde destekleniyor.
İnternette kullanılan iletim kontrol protokolü/İnternet protokolü (TCP/IP) paketi fiili standart
ağ altyapısı haline geldi.
Windows, çok çeşitli işletim sistemlerine ve donanım platformlarına bağlanmak için TCP/IP
kullanır. Windows TCP/IP paketi, basit ağ yönetimi protokolünü (SNMP), dinamik ana
bilgisayar yapılandırma protokolünü (DHCP) ve daha eski Windows Internet ad hizmetini
(WINS) içerir. Windows Vista , aynı ağ yığınında hem IPv4 hem de IPv6'yı destekleyen yeni
bir TCP/IP uygulamasını tanıttı. Bu yeni uygulama aynı zamanda
21.6 Ağ 881
Machine Translated by Google
sunucular için çok yüksek performans elde etmek için ağ yığınının gelişmiş donanıma
boşaltılması.
Windows, ağ iletişimi için programlar tarafından kullanılabilen TCP bağlantı noktalarını
sınırlayan bir yazılım güvenlik duvarı sağlar . Ağ güvenlik duvarları, yönlendiricilerde yaygın
olarak uygulanır ve çok önemli bir güvenlik önlemidir.
İşletim sisteminde yerleşik bir güvenlik duvarı olması, donanım yönlendiricisini gereksiz kılar
ve ayrıca daha entegre yönetim ve daha kolay kullanım sağlar.
Noktaya Tünel Protokolü (PPTP) , Windows sunucu makinelerinde çalışan uzaktan erişim
sunucu modülleri ile birbirine bağlı diğer istemci sistemleri arasında iletişim kurmak için
Windows tarafından sağlanan bir protokoldür. internet. Uzaktan erişim sunucuları, bağlantı
üzerinden gönderilen verileri şifreleyebilir ve İnternet üzerinde çok protokollü sanal özel
ağları (VPN'ler) destekler .
HTTP protokolü, World Wide Web'i kullanarak bilgi almak/koymak için kullanılır.
Windows, HTTP'yi bir çekirdek modu sürücüsü kullanarak uygular , böylece web sunucuları
ağ yığınına düşük maliyetli bir bağlantıyla çalışabilir. HTTP , Windows'un RPC'yi uygulamak
için bir aktarım seçeneği olarak sunduğu oldukça genel bir protokoldür .
Dağıtılmış Yazma ve Sürüm Oluşturma (WebDAV) , bir ağ üzerinde işbirliğine dayalı yazarlık
için HTTP tabanlı bir protokoldür. Windows , dosya sistemine bir WebDAV yeniden
yönlendiricisi oluşturur. Doğrudan dosya sistemine yerleşik olması, WebDAV'ın şifreleme gibi
diğer dosya sistemi özellikleriyle çalışmasına olanak tanır. Kişisel dosyalar daha sonra halka
açık bir yerde güvenli bir şekilde saklanabilir. WebDAV , bir alma /koyma protokolü olan
HTTP'yi kullandığından , programların dosyaların bölümlerinde okuma ve yazma işlemlerini
kullanabilmesi için Windows'un dosyaları yerel olarak önbelleğe alması gerekir.
21.6.2.6 Adlandırılmış
Kanallar Adlandırılmış borular , bağlantı yönelimli bir mesajlaşma mekanizmasıdır. Bir işlem,
aynı makinedeki diğer işlemlerle iletişim kurmak için adlandırılmış boruları kullanabilir.
Adlandırılmış yöneltmelere dosya sistemi arabirimi aracılığıyla erişildiğinden, dosya nesneleri
için kullanılan güvenlik mekanizmaları, adlandırılmış yöneltmeler için de geçerlidir. SMB
protokolü, adlandırılmış kanalları destekler, bu nedenle adlandırılmış kanallar, farklı
sistemlerdeki işlemler arasında iletişim için de kullanılabilir.
Kanal adlarının biçimi, Tekdüzen Adlandırma Kuralına (UNC) uygundur. UNC adı, tipik
bir uzak dosya adına benzer. Biçim sunucu adı paylaşım adı x y z şeklindedir;
burada sunucu adı ağdaki bir sunucuyu tanımlar; paylaşım adı , dizinler, dosyalar,
adlandırılmış kanallar ve yazıcılar gibi ağ kullanıcılarına sunulan tüm kaynakları tanımlar; ve
x y z normal bir dosya yolu adıdır.
Machine Translated by Google
Daha önce bahsedilen uzaktan yordam çağrıları (RPC'ler), bir makinedeki bir uygulamanın başka
bir makinede koda yordam çağrısı yapmasını sağlayan istemci-sunucu mekanizmalarıdır. İstemci,
argümanlarını bir mesajda toplayan ve bunları ağ üzerinden belirli bir sunucu işlemine gönderen
yerel bir prosedürü (bir saplama rutini) çağırır. İstemci tarafı saplama rutini daha sonra engeller.
Bu arada, sunucu mesajı paketinden çıkarır, prosedürü çağırır, geri dönüş sonuçlarını bir mesaja
paketler ve bunları istemci saplamasına geri gönderir. İstemci saplaması engellemeyi kaldırır,
mesajı alır, RPC'nin sonuçlarını açar ve bunları arayana geri gönderir. Bu argüman paketine bazen
sıralama denir.
İstemci saplama kodu ve bir RPC için argümanları paketlemek ve paketini açmak için gerekli
tanımlayıcılar , Microsoft Interface Definitio Language'de yazılmış bir belirtimden derlenir .
Windows RPC mekanizması, RPC mesajları için yaygın olarak kullanılan dağıtılmış bilgi işlem
ortamı standardını takip eder , bu nedenle Windows RPC'lerini kullanmak için yazılan programlar
oldukça taşınabilirdir. RPC standardı ayrıntılı olarak açıklanmıştır . RPC mesajları için standart veri
formatlarını belirleyerek, ikili sayıların boyutları ve bilgisayar sözcüklerindeki bayt ve bitlerin sırası
gibi bilgisayarlar arasındaki mimari farklılıkların çoğunu gizler .
Modeli (COM) , Windows için geliştirilmiş süreçler arası iletişim için bir mekanizmadır. Bir COM
nesnesi, nesnedeki verileri işlemek için iyi tanımlanmış bir arabirim sağlar. Örneğin COM ,
Microsoft Word belgelerine elektronik tablo eklemek için Microsoft'un Nesne Bağlama ve Gömme
(OLE) teknolojisi tarafından kullanılan altyapıdır . Birçok Windows hizmeti COM arabirimleri sağlar.
Ek olarak, dağıtılmış uygulamalar geliştirmek için şeffaf bir yöntem sağlamak için RPC kullanan bir
ağ üzerinden DCOM adlı dağıtılmış bir uzantı kullanılabilir.
2. G/Ç yöneticisi, Bölüm'de açıklandığı gibi bir G/Ç istek paketi oluşturur .
21.3.5.5.
3. G /Ç yöneticisi, erişimin uzak bir dosya için olduğunu anlar ve Çoklu UNC Sağlayıcı (MUP) adlı
bir sürücüyü çağırır.
Machine Translated by Google
21.6 Ağ 883
4. MUP , I/O istek paketini tüm kayıtlı kullanıcılara eşzamansız olarak gönderir .
yönlendiriciler.
5. İsteği karşılayabilen bir yeniden yönlendirici, MUP'a yanıt verir. Gelecekte tüm yeniden
yönlendiricilere aynı soruyu sormaktan kaçınmak için MUP , hangi yeniden
yönlendiricinin bu dosyayı işleyebileceğini hatırlamak için bir önbellek kullanır.
10. Sonuçlar, verileri istekte bulunan yeniden yönlendiriciye geri gönderen sunucu
sürücüsüne döndürülür. Yönlendirici daha sonra verileri G/Ç yöneticisi aracılığıyla
çağıran uygulamaya döndürür .
Benzer bir süreç , UNC hizmetleri yerine Win32 ağ API'sini kullanan uygulamalar için
gerçekleşir, ancak bunun dışında, MUP yerine çok sağlayıcılı yönlendirici adı verilen bir modül
kullanılır.
Taşınabilirlik için, yeniden yönlendiriciler ve sunucular ağ aktarımı için TDI API'sini
kullanır. İsteklerin kendileri, varsayılan olarak Bölüm 21.6.2'de açıklanan SMB protokolü olan
daha yüksek seviyeli bir protokolde ifade edilir . Yeniden yönlendiricilerin listesi, kayıt
defterinin sistem kovanında tutulur.
adları her zaman uygun değildir, çünkü aynı içeriği sunmak için birden fazla dosya sunucusu
mevcut olabilir ve UNC adları sunucunun adını açıkça içerir. Windows, bir ağ yöneticisinin
tek bir dağıtılmış ad alanı kullanarak birden çok sunucudan dosya sunmasına izin veren bir
dağıtılmış dosya sistemi (DFS) protokolünü destekler.
Alma Bilgisayarlar arasında sık geçiş yapan kullanıcılar için bilgisayar deneyimini geliştirmek için
Windows, yöneticilerin kullanıcılara , kullanıcıların tercihlerini ve sunuculardaki diğer ayarlarını
koruyan
dolaşım profili vermelerine izin verir. Klasör yeniden yönlendirme daha sonra bir kullanıcının
belgelerini ve diğer dosyalarını bir sunucuda otomatik olarak depolamak için kullanılır.
Bu, bir kullanıcı bir dizüstü bilgisayarı uçağa bindirdiğinde olduğu gibi, bilgisayarlardan
biri artık ağa bağlı olmayana kadar iyi çalışır. Kullanıcılara yeniden yönlendirilen dosyalarına
çevrimdışı erişim sağlamak için Windows, istemci tarafında önbelleğe almayı (CSC) kullanır.
CSC ayrıca bilgisayar çevrimiçi olduğunda daha iyi performans için sunucu dosyalarının
kopyalarını yerel makinede tutmak için kullanılır. Dosyalar değiştikçe sunucuya gönderilir.
Bilgisayarın bağlantısı kesilirse dosyalar hala kullanılabilir durumda olur ve sunucunun
güncellenmesi bilgisayarın bir sonraki çevrimiçi olduğu zamana kadar ertelenir.
884 Bölüm 21 Windows 10
Machine Translated by Google
21.6.4 Etki Alanları
Spesifik olarak, bir Windows etki alanı, ortak bir güvenlik ilkesini ve kullanıcı
veritabanını paylaşan bir grup Windows iş istasyonu ve sunucusudur. Windows,
güven ve kimlik doğrulama için Kerberos protokolünü kullandığından, Windows etki
alanı Kerberos bölgesiyle aynı şeydir. Windows, ilgili etki alanları arasında güven
ilişkileri kurmak için hiyerarşik bir yaklaşım kullanır. Güven ilişkileri DNS'ye dayanır
ve hiyerarşide yukarı ve aşağı akabilen geçişli güvenlere izin verir. Bu yaklaşım, n etki
alanı için gereken güven sayısını n (n 1)'den O(n)'ye düşürür. Etki alanındaki iş
istasyonları, her kullanıcının erişim hakları hakkında doğru bilgi vermek için etki alanı
denetleyicisine güvenir (kullanıcının erişim belirtecine lsaas tarafından yüklenir).
Bununla birlikte, herhangi bir etki alanı denetleyicisi ne derse desin, tüm kullanıcılar
kendi iş istasyonlarına erişimi kısıtlama olanağına sahiptir.
Şekil 21.7 Çocuğun bir tutamacı devralarak bir nesneyi paylaşmasını sağlayan kod.
Windows, işlemler arasında nesneleri paylaşmak için üç yol sağlar. İlk yol, bir alt
sürecin nesneye bir tanıtıcı devralmasıdır. Üst öğe CreateXXX işlevini çağırdığında,
üst öğe, bInheritHandle alanı TRUE olarak ayarlanmış bir GÜVENLİK ÖZELLİKLERİ
yapısı sağlar. Bu alan, devralınabilen bir tanıtıcı oluşturur. Daha sonra, CreateProcess()
işlevinin bInheritHandle bağımsız değişkenine bir TRUE değeri geçirilerek alt süreç
oluşturulur . Şekil 21.7, bir alt süreç tarafından devralınan bir semafor tanıtıcısı
oluşturan bir kod örneğini gösterir.
// İşlem A
...
HANDLE hSemaphore = CreateSemaphore(NULL, 1, 1, L"MySEM1");
...
// İşlem B
...
HANDLE hSemaphore = OpenSemaphore(TÜM ERİŞİM SEMAPHORE,
YANLIŞ, L"MySEM1");
...
// İşlem A
// İşlem B
HANDLE hSemaphore = // mesajdaki semaforun değeri // semafora
erişmek için hSemaphore kullanın
...
Win32 ortamındaki öncelikler, yerel çekirdek (NT) zamanlama modelini temel alır, ancak tüm
öncelik değerleri seçilemez. Win32 API , altı öncelik sınıfı kullanır:
Bir kullanıcı etkileşimli süreçler ve iş yükleri arasında geçiş yaptığında, sistemin iyi yanıt
verme sağlamak için uygun iş parçacıklarını programlaması gerekir, bu da daha kısa yürütme
kuantumlarına yol açar. Yine de, kullanıcı belirli bir süreci seçtikten sonra, bu belirli süreçten
de iyi miktarda verim beklenir. Bu nedenle, Windows'un GERÇEK ZAMAN ÖNCELİKLİ SINIF'ta
olmayan işlemler için özel bir zamanlama kuralı vardır. Windows, ekrandaki ön plan
penceresiyle ilişkili süreç ile diğer (arka plan) süreçler arasında ayrım yapar. Bir işlem ön
plana geçtiğinde, Windows tüm iş parçacıkları için zamanlama kuantumunu 3 kat artırır; Ön
plan sürecindeki CPU'ya bağlı iş parçacıkları, arka plan işlemlerindeki benzer iş
parçacıklarından üç kat daha uzun süre çalışacaktır. Sunucu sistemleri her zaman istemci
sistemlerinden çok daha büyük bir kuantumla çalıştığından (bir faktör 6), bu davranış sunucu
sistemleri için etkinleştirilmez. Ancak her iki sistem türü için de zamanlama parametreleri
uygun sistem iletişim kutusu veya kayıt defteri anahtarı aracılığıyla özelleştirilebilir.
Bir iş parçacığı, sınıfı tarafından belirlenen bir ilk öncelikle başlar. Öncelik, SetThreadPriority()
işlevi tarafından değiştirilebilir . Bu işlev, sınıfının temel önceliğine göre bir öncelik belirten
bir argüman alır:
Önceliği ayarlamak için diğer iki gösterim de kullanılır. Çekirdeğin iki öncelik sınıfı
olduğunu Bölüm 21.3.4.3'ten hatırlayın: statik sınıf için 16– 31 ve değişken sınıf için 1– 15.
THREAD PRIORITY IDLE, önceliği statik öncelikli iş parçacıkları için 16'ya ve değişken öncelikli
iş parçacıkları için 1'e ayarlar.
THREAD PRIORITY TIME CRITİK, gerçek zamanlı iş parçacıkları için önceliği 31'e ve değişken
öncelikli iş parçacıkları için önceliği 15'e ayarlar.
Çekirdek, iş parçacığının G/Ç'ye bağlı veya CPU'ya bağlı olmasına bağlı olarak, değişken
sınıf iş parçacığının önceliğini dinamik olarak ayarlar. Win32 API , SetProcessPriority Boost()
ve SetThreadPriorityBoost() işlevleri aracılığıyla bu ayarı devre dışı bırakmak için bir yöntem
sağlar .
iş parçacığı askıya alınmış durumda oluşturulabilir veya daha sonra SuspendThread() işlevi
kullanılarak askıya alınmış bir duruma yerleştirilebilir. Askıya alınmış bir iş parçacığı çekirdek
gönderici tarafından programlanmadan önce, ResumeThread() işlevi kullanılarak askıya
alınmış durumdan çıkarılmalıdır. Her iki işlev de bir sayaç ayarlar, böylece bir iş parçacığı iki
kez askıya alınırsa, çalışabilmesi için iki kez devam ettirilmesi gerekir.
parçacıkları tarafından paylaşılan nesnelere eşzamanlı erişimi senkronize etmek için çekirdek,
semaforlar ve muteksler gibi senkronizasyon nesneleri sağlar. Bunlar Bölüm 21.3.4.3'te
tartışıldığı gibi dağıtım nesneleridir. İş parçacıkları ayrıca, iş parçacıkları, işlemler ve dosyalar
gibi çekirdek nesneleri üzerinde çalışan çekirdek hizmetleriyle de senkronize edilebilir çünkü
bunlar aynı zamanda gönderici nesnelerdir. Çekirdek gönderici nesneleri ile senkronizasyon,
WaitForSingleObject() ve WaitForMultipleObjects() işlevleri kullanılarak gerçekleştirilebilir; bu
işlevler, bir veya daha fazla gönderici nesnesinin sinyallenmesini bekler.
Aynı işlem içinde özel olarak kod yürütmek isteyen iş parçacıkları için başka bir eşitleme
yöntemi kullanılabilir. Win32 kritik bölüm nesnesi , genellikle çekirdeğe girmeden alınabilen
ve serbest bırakılabilen bir kullanıcı modu muteks nesnesidir. Çok işlemcili bir bilgisayarda,
bir Win32 kritik bölümü, başka bir iş parçacığı tarafından tutulan kritik bir bölümün serbest
bırakılmasını beklerken dönmeye çalışır.
Döndürme çok uzun sürerse, edinen iş parçacığı bir çekirdek muteks tahsis edecek ve
CPU'sunu verecektir. Kritik bölümler özellikle verimlidir, çünkü çekirdek muteksi yalnızca
çekişme olduğunda tahsis edilir ve daha sonra yalnızca döndürme girişiminde bulunulduktan
sonra kullanılır. Programlardaki çoğu muteks, hiçbir zaman fiilen çekiştirilmez, bu nedenle
tasarruf önemlidir.
Kritik bir bölümü kullanmadan önce, işlemdeki bazı iş parçacıklarının
InitializeCriticalSection()'ı çağırması gerekir. Muteksi almak isteyen her iş parçacığı
EnterCriticalSection()'ı çağırır ve ardından mutex'i serbest bırakmak için LeaveCritical Section()
'ı çağırır. Muteksi engellemeden almaya çalışan bir TryEnterCriticalSection() işlevi de vardır.
21.7 Programcı Arayüzü 889
Machine Translated by Google
Her bir örneklemede küçük miktarlarda iş yapan uygulamalar ve hizmetler için tekrar
tekrar iş parçacığı oluşturmak ve silmek pahalı olabilir. Win32 iş parçacığı havuzu,
kullanıcı modu programlarına üç hizmet sağlar: iş isteklerinin gönderilebileceği bir
sıra ( SubmitThreadpoolWork() işlevi aracılığıyla), geri çağrıları beklenebilir tanıtıcılara
bağlamak için kullanılabilen bir API (Regis terWaitForSingleObject()), ve
zamanlayıcılarla çalışacak (CreateThread poolTimer() ve WaitForThreadpoolTimerCallbac
()) ve geri aramaları G/Ç tamamlama kuyruklarına (BindIoCompletionCallback())
bağlamak için API'ler.
Bir iş parçacığı havuzu kullanmanın amacı, performansı artırmak ve bellek ayak
izini azaltmaktır. İş parçacıkları nispeten pahalıdır ve her işlemci, kaç tane iş parçacığı
olursa olsun aynı anda yalnızca bir iş parçacığı yürütebilir.
İş parçacığı havuzu, makinenin CPU'larını etkin bir şekilde kullanmak için yeterli iş
parçacığı sağlarken iş isteklerini biraz geciktirerek (her iş parçacığını birçok istek için
yeniden kullanarak) çalıştırılabilir iş parçacıklarının sayısını azaltmaya çalışır . Bekleme
ve G/Ç ve zamanlayıcı geri arama API'leri , iş parçacığı havuzunun bir işlemdeki iş
parçacığı sayısını daha da azaltmasına, bir işlemin her bir beklenebilir tanıtıcıya,
zamanlayıcıya, veya tamamlama limanı.
21.7.3.6 Lifler
890
Bölüm 21 Windows 10
farklı bir fiber tarafından üzerine yazılır. Fiberler, Pthreads gibi bir kullanıcı modu iş parçacığı modeli
için yazılmış eski UNIX uygulamalarının taşınmasını kolaylaştırmak için Win32 API'sine dahil
edilmiştir.
yeni bir mekanizma olan kullanıcı modu zamanlama (UMS), fiberlerin çeşitli sınırlamalarını ele aldı.
Az önce belirtildiği gibi, fiberler, kendi TEB'leri olmadığı için Win32 API'lerini yürütmek için
güvenilmezdir . Bir fiber çalıştıran bir iş parçacığı çekirdekte bloke ettiğinde , çekirdek dağıtıcısı
zamanlamayı devraldıkça, kullanıcı zamanlayıcı bir süreliğine CPU'nun kontrolünü kaybeder.
Fiberler, öncelik veya kimliğe bürünme belirteci gibi bir iş parçacığının çekirdek durumunu
değiştirdiğinde veya zaman uyumsuz G/Ç'yi başlattığında sorunlar ortaya çıkabilir.
UMS , her Windows iş parçacığının aslında iki iş parçacığı olduğunu kabul ederek alternatif bir model sağlar:
bir çekirdek iş parçacığı (KT) ve bir kullanıcı iş parçacığı (UT).
Her iş parçacığı türünün kendi yığını ve kendi kaydedilmiş kayıt kümesi vardır. KT ve UT , programcıya
tek bir iş parçacığı olarak görünür, çünkü UT'ler hiçbir zaman engelleyemezler, ancak her zaman,
karşılık gelen KT'ye örtük bir geçişin gerçekleştiği çekirdeğe girmelidir . UMS , UT'yi benzersiz bir
şekilde tanımlamak için her UT'nin TEB'sini kullanır . Bir UT çekirdeğe girdiğinde, mevcut TEB
tarafından tanımlanan UT'ye karşılık gelen KT'ye açık bir geçiş yapılır. Çekirdeğin hangi UT'nin
çalıştığını bilmemesinin nedeni, UT'lerin fiberlerin yaptığı gibi bir kullanıcı modu zamanlayıcısını
çağırabilmesidir. Ancak UMS'de , zamanlayıcı UT'leri değiştirir;
TEB'ler.
KT0 blokları
NTOS yöneticisi
UT tamamlama listesi
kullanıcı modu
UT0 zamanlayıcı
21.7.3.8 Winsock
Winsock , Windows soket API'sidir. Winsock, BSD soketleriyle büyük ölçüde uyumlu,
ancak bazı Windows uzantıları eklenmiş bir oturum katmanı arabirimidir.
Herhangi bir Winsock uygulamasının herhangi bir Winsock uyumlu protokol
yığınında çalışabilmesi için, farklı adresleme şemalarına sahip olabilen birçok aktarım
protokolüne standartlaştırılmış bir arabirim sağlar. Winsock, izleme, IPv6 desteği,
kimliğe bürünme, yeni güvenlik API'leri ve diğer birçok özelliği eklemek için Windows
Vista'da büyük bir güncellemeden geçti .
Winsock, uygulamalar ve ağ protokolleri arasında standart bir hizmet sağlayıcı
arabirimi (SPI) sağlayan Windows Açık Sistem Mimarisi (WOSA) modelini izler .
Uygulamalar , taşıma protokolü katmanlarının üzerine ek güvenlik gibi ek işlevler
oluşturan katmanlı protokolleri yükleyebilir ve kaldırabilir . Winsock, eşzamansız
işlemleri ve bildirimleri, güvenilir çok noktaya yayını, güvenli yuvaları ve çekirdek
modu yuvalarını destekler. Ayrıca, hedefi sunucunun adını veya IP adresini ve hedef
bağlantı noktasının hizmet veya bağlantı noktası numarasını belirten dizeler olarak
kabul eden WSAConnectByName() işlevi gibi daha basit kullanım modellerini de
destekler .
hemen geri döner ve arayan iş parçacığı mesajın gerçekten ne zaman teslim edildiğini
bilmez. Gönderme rutinleri senkronizedir; mesaj teslim edilene ve işlenene kadar
arayanı engeller.
Bir mesaj göndermeye ek olarak, bir iş parçacığı mesajla veri gönderebilir.
İşlemler ayrı adres alanlarına sahip olduğundan, verilerin kopyalanması gerekir.
Sistem , aktarılacak verilerin uzunluğunu ve adresini içeren bir COPYDATASTRUCT
veri yapısıyla WM COPYDATA türünde bir mesaj göndermek için SendMessage() 'ı
çağırarak verileri kopyalar . Mesaj gönderildiğinde, Windows verileri yeni bir bellek
bloğuna kopyalar ve yeni bloğun sanal adresini alma işlemine verir.
Her Win32 GUI iş parçacığı, iletileri aldığı kendi girdi kuyruğuna sahiptir. Bir
Win32 uygulaması , giriş kuyruğundaki olayları işlemek için GetMessage() 'ı
çağırmazsa , sıra dolar; ve yaklaşık beş saniye sonra görev yöneticisi uygulamayı
"Yanıt Vermiyor" olarak işaretler. Mesaj geçişinin daha önce tanıtılan bütünlük düzeyi
mekanizmasına tabi olduğunu unutmayın. Bu nedenle, korumayı kaldırmak için özel
bir Windows API'si (ChangeWindowMessageFilterEx) kullanılmadığı sürece, bir işlem
daha yüksek bütünlük düzeyine sahip bir işleme WM COPYDATA gibi bir mesaj
gönderemez .
uygulama, sanal belleği ayırmak veya kaydetmek için VirtualAlloc() 'u ve belleğin
bağlantısını kaldırmak veya serbest bırakmak için VirtualFree() 'yi çağırır. Bu işlevler,
uygulamanın belleğin tahsis edildiği sanal adresi belirlemesini sağlar. (Aksi takdirde,
güvenlik nedeniyle önerilen rastgele bir adres seçilir.) İşlevler, bellek sayfa boyutunun
katları üzerinde çalışır, ancak tarihsel nedenlerle, her zaman 64 KB sınırında ayrılmış
belleği döndürür. Bu işlevlerin örnekleri Şekil 21.11'de görülmektedir. Virtu alAllocEx()
ve VirtualFreeEx () işlevleri, ayrı bir işlemde belleği ayırmak ve boşaltmak için
kullanılabilirken, VirtualAllocExNuma() , NUMA sistemlerinde bellek yerinden
yararlanmak için kullanılabilir .
uygulamanın belleği kullanmasının başka bir yolu, bir dosyayı adres alanına bellek
eşlemektir. Bellek eşleme aynı zamanda iki işlemin belleği paylaşması için uygun bir
yoldur: her iki işlem de aynı dosyayı kendi sanal belleklerine eşler. Bellek eşleme,
Şekil 21.12'deki örnekte görebileceğiniz gibi çok aşamalı bir işlemdir.
Bir işlem, yalnızca bir bellek bölgesini başka bir işlemle paylaşmak için bir adres
alanını eşlemek isterse, dosyaya gerek yoktur. İşlem , 0xffffffff dosya tanıtıcısı, belirli
bir boyut ve (isteğe bağlı olarak) bir adla CreateFileMap ping() öğesini çağırır. Ortaya
çıkan dosya eşleme nesnesi, kalıtım yoluyla, ad araması (adlandırılmışsa) veya tanıtıcı
çoğaltma yoluyla paylaşılabilir.
21.7 Programcı Arayüzü 893
Machine Translated by Google
21.7.5.3 Yığınlar
Yığınlar , standart C'de mal loc() ve free() veya C++' da new() ve delete() ile
olduğu gibi, uygulamaların belleği kullanması için üçüncü bir yol sağlar . Win32
ortamındaki bir yığın, önceden taahhüt edilmiş bir adres alanı bölgesidir. Bir
Win32 işlemi başlatıldığında, varsayılan bir yığınla oluşturulur. Çoğu Win32'den be
uygulamalar çok iş parçacıklıdır, yığının alan tahsisi veri yapılarının birden çok iş
parçacığı tarafından eşzamanlı güncellemelerden zarar görmesini önlemek için
yığına erişim senkronize edilir. Yığının avantajı, 1 bayt kadar küçük ayırmalar yapmak
için kullanılabilmesidir, çünkü temeldeki bellek sayfaları zaten taahhüt edilmiştir. Ne
yazık ki, yığın bellek paylaşılamaz veya salt okunur olarak işaretlenemez, çünkü tüm
yığın ayırmaları aynı sayfaları paylaşır.
Bununla birlikte, bir programcı HeapCreate() kullanarak, HeapProtect( ) ile salt
okunur olarak işaretlenebilen, yürütülebilir bir yığın olarak yaratılabilen veya hatta
belirli bir NUMA düğümüne tahsis edilebilen kendi yığınını oluşturabilir .
Win32 , bir işlemin özel bir yığın tahsis edebilmesi ve yönetebilmesi
için birkaç yığın yönetimi işlevi sağlar. Bu işlevler HeapCreate(), Hea
pAlloc(), HeapRealloc(), HeapSize(), HeapFree() ve HeapDestroy()'dur.
Win32 API ayrıca, bir iş parçacığının bir yığına özel erişim elde etmesini sağlamak
için HeapLock() ve HeapUnlock() işlevlerini de sağlar. Bu işlevlerin yalnızca
senkronizasyon gerçekleştirdiğini unutmayın; yığın katmanını atlayan kötü amaçlı
veya hatalı koda karşı sayfaları gerçekten "kilitlemezler".
Orijinal Win32 yığını, alanın verimli kullanımı için optimize edilmiştir. Bu, uzun
süreler boyunca çalışan daha büyük sunucu programları için adres alanının
parçalanmasıyla ilgili önemli sorunlara yol açtı. Windows XP'de tanıtılan yeni bir
düşük parçalanma yığını (LFH) tasarımı , parçalanma sorununu büyük ölçüde azalttı.
Windows 7 ve sonraki sürümlerdeki yığın yöneticisi, uygun şekilde LFH'yi otomatik
olarak açar . Ek olarak, yığın, çift serbest, ücretsiz kullanım sonrası ve diğer bellek
bozulmasıyla ilgili saldırılar gibi güvenlik açıklarını kullanan saldırganların birincil
hedefidir. Windows 10 da dahil olmak üzere Windows'un her sürümü, saldırganların
yığın tahsislerinin sırasını, boyutunu, konumunu ve içeriğini tahmin etmelerini
önlemek için daha fazla rastgelelik, entropi ve güvenlik azaltmaları ekledi.
21.7.5.4 İş Parçacığı-Yerel
Depolama Uygulamaların belleği kullanması için dördüncü bir yol, iş parçacığı yerel
depolama (TLS) mekanizmasıdır. Genel veya statik verilere dayanan işlevler, genellikle
çok iş parçacıklı bir ortamda düzgün şekilde çalışmaz. Örneğin, C çalışma zamanı
işlevi strtok() , bir dizeyi ayrıştırırken mevcut konumunu takip etmek için statik bir
değişken kullanır. İki eşzamanlı iş parçacığının strtok() işlevini doğru bir şekilde
yürütmesi için ayrı geçerli konum değişkenlerine ihtiyaçları vardır. TLS , yürütülen
işlev için genel olan ancak başka herhangi bir iş parçacığıyla paylaşılmayan değişken
örneklerini korumanın bir yolunu sağlar.
TLS , iş parçacığı yerel depolama oluşturmak için hem dinamik hem de statik
yöntemler sağlar. Dinamik yöntem Şekil 21.13'te gösterilmektedir. TLS mekanizması ,
genel yığın depolaması tahsis eder ve bunu Windows'un her kullanıcı modu iş
parçacığına ayırdığı iş parçacığı ortam bloğuna (TEB) ekler. TEB'e her iş parçacığı
tarafından kolayca erişilebilir ve yalnızca TLS için değil, kullanıcı modundaki tüm iş
parçacığı başına durum bilgileri için kullanılır.
21.8 Özet
• Microsoft, Windows'u genişletilebilir, taşınabilir bir işletim sistemi olarak
tasarladı; yeni tekniklerden ve donanımlardan yararlanabilen bir sistem.
• Windows, hem 32 bit hem de 64 bit işlemciler ve NUMA bilgisayarları dahil
olmak üzere birden çok işletim ortamını ve simetrik çoklu işlemeyi destekler .
Alıştırmalar
21.1 Windows ne tür bir işletim sistemidir? Başlıca iki tanesini tanımlayın
özellikleri.
21.2 Windows'un tasarım hedeflerini listeleyin. İki tanesini ayrıntılı olarak açıklayın.
21.9 Windows ne tür ağları destekler? Windows taşıma protokollerini nasıl uygular?
İki ağ iletişim protokolünü tanımlayın.
21.13 Bir uygulamanın Win32 API aracılığıyla belleği kullanabileceği bazı yolları
tanımlayın .
Machine Translated by Google
[Russinovich et al. (2017)], Windows 10'a derinlemesine bir genel bakış sunar ve sistem iç
bileşenleri ve bileşenleri hakkında olası teknik ayrıntıları göz önünde bulundurur.
bibliyografya
21.14 Hangi koşullar altında Windows'ta ertelenmiş prosedür çağrıları olanağı kullanılır?
21.15 Tutamaç nedir ve bir süreç nasıl bir tutamaç elde eder?
21.17 Bölümde sağlanan erişime kapalı sayfa olanağının yararlı bir uygulamasını tanımlayın.
Pencereler.
21.18 Bir yerel prosedür çağrısında veri iletmek için kullanılan üç tekniği tanımlayın. Farklı
mesaj iletme tekniklerinin uygulanmasına en elverişli ayarlar nelerdir?
21.22 Windows tarafından sağlanan fiber soyutlaması nedir? nasıl farklılık gösterir
iplik soyutlamasından?
21.23 Windows 7'de kullanıcı modu zamanlaması (UMS) aşağıdakilerden nasıl farklıdır?
lifler? Lifler ve UMS arasındaki bazı ödünleşimler nelerdir ?
21.24 UMS , bir ipliğin UT ve KT olmak üzere iki parçası olduğunu düşünür. UT'lerin KT'lerine
paralel olarak yürütmeye devam etmelerine izin vermek nasıl faydalı olabilir ?
21.25 KT'lerin ve UT'lerin farklı işlemcilerde yürütülmesine izin vermenin performans dengesi
nedir?
21.26 Kendi kendine harita neden büyük miktarda sanal adres alanı kaplıyor?
ama ek sanal bellek yok mu?
21.27 Kendi kendine eşleme, VM yöneticisinin sayfa tablosu sayfalarını diske ve diskten
taşımasını nasıl kolaylaştırır? Diskte sayfa tablosu sayfaları nerede tutulur?
21.28 Bir Windows sistemi hazırda bekletme moduna geçtiğinde, sistem kapatılır. Hazırda
bekletme sistemindeki CPU'yu veya RAM miktarını değiştirdiğinizi varsayalım .
Bunun işe yarayacağını düşünüyor musunuz? Neden veya neden olmasın?
21.29 Askıya alma sayımı kullanımının Windows'ta iş parçacıklarının askıya alınmasında ve devam
ettirilmesinde nasıl yardımcı olduğunu gösteren bir örnek verin.
Machine Translated by Google
Machine Translated by Google
Onuncu Bölüm
Ekler Linux, macOS ve Windows 10 gibi modern işletim sistemleri önceki sistemlerden
etkilenmiştir ve burada bazı eski ve oldukça etkili işletim sistemlerinden
bahsedeceğiz.
Bu sistemlerden bazıları ( XDS-940 ve THE sistemi gibi) türünün tek örneği
sistemlerdi; diğerleri ( OS/360 gibi) yaygın olarak kullanılmaktadır.
Artık kullanılmayan bazı eski sistemleri kısaca ele alıyoruz.
Ayrıca üç ek sistemin kapsamlı kapsamını sunuyoruz: Windows 7, FreeBSD ve Mach.
Windows 7, birçok kullanıcı için popüler bir işletim sistemi olmaya devam ediyor.
FreeBSD sistemi başka bir UNIX sistemidir .
Ancak, Linux birkaç UNIX sisteminin özelliklerini birleştirirken, FreeBSD BSD
modelini temel alır . FreeBSD kaynak kodu, Linux kaynak kodu gibi serbestçe
kullanılabilir. Mach ayrıca BSD UNIX ile uyumluluk sağlar. BSD ve Mach hakkında
özellikle ilginç olan şey, çok popüler iki modern işletim sistemi olan hem iOS hem
de macOS'un mimarisini oluşturmalarıdır .
Machine Translated by Google
Etkili AEk
İşletme
Sistemler
• İşletim sistemi özelliklerinin zaman içinde büyük bilgisayar sistemlerinden daha küçük
sistemlere nasıl geçtiğini açıklayın.
• Tarihsel olarak önemli birkaç işletim sisteminin özelliklerini tartışın.
1
2 Ek A Influentia İşletim Sistemleri
Machine Translated by Google
1950 1960 1970 1980 1990 2000 2010
ÇOKLUKLAR
ana bilgisayarlar
hayır derleyiciler paylaşılan dağıtılmış
yazılım zaman çok kullanıcılı sistemler
yerleşik ağ bağlantılı
hata müsaması
monitörler
UNIX
mini bilgisayarlar
hayır derleyiciler
yazılım
çok kullanıcılı çok işlemcili hataya
paylaşılan zaman
yerleşik dayanıklı
ağ bağlantılı
monitörler
kümelenmiş
UNIX
masaüstü bilgisayarlar
hayır derleyiciler
yazılım etkileşimli çok işlemcili
çok kullanıcılı
ağ bağlantılı
UNIX
Avuçiçi bilgisayarlar
derleyiciler
yazılım yok
etkileşimli
ağ bağlantılı LINUX
LINUX
akıllı telefonlar
çok işlemcili
ağ bağlantılı
etkileşimli
1965'ten 1970'e kadar Massachusetts Teknoloji Enstitüsü'nde (MIT) bir bilgi işlem aracı
olarak faaliyet gösterdi. Büyük, karmaşık bir ana bilgisayar ( GE-645) üzerinde çalışıyordu.
MULTICS için geliştirilen fikirlerin çoğu daha sonra UNIX'in tasarımında Bell Laboratuvarlarında
( MULTICS'in geliştirilmesindeki orijinal ortaklardan biri) kullanıldı . UNIX işletim sistemi ,
1970 civarında bir PDP-11 mini bilgisayar için tasarlandı. 1980 civarında, UNIX'in özellikleri ,
mikrobilgisayarlardaki UNIX benzeri işletim sistemlerinin temeli haline geldi ve bu özellikler,
Microsoft Windows, Windows XP ve macOS işletim sistemi gibi mikrobilgisayarlar için daha
yeni olan birkaç işletim sistemine dahil edildi . Linux, bu aynı özelliklerden bazılarını içerir
ve bunlar artık PDA'larda bulunabilir.
1940'lardan önce, bilgi işlem cihazları belirli, sabit görevleri gerçekleştirmek için
tasarlandı ve uygulandı. Bu görevlerden birini değiştirmek çok fazla çaba ve el emeği
gerektiriyordu. 1940'larda Alan Turing ve John von Neumann (ve meslektaşları) hem ayrı
ayrı hem de birlikte, daha genel amaçlı depolanmış bir program bilgisayarı fikri üzerinde
çalıştıklarında tüm bunlar değişti. Böyle bir makine
3
Machine Translated by Google
hem bir program deposuna hem de bir veri deposuna sahiptir; burada program deposu,
verilere ne yapılacağına ilişkin yönergeler sağlar.
Bu temel bilgisayar konsepti, hızla bir dizi genel amaçlı bilgisayar üretti, ancak bu
makinelerin tarihinin çoğu, II. Dünya Savaşı sırasındaki gelişimlerinin gizliliği ve zamanla
bulanıklaşıyor. İlk çalışan, depolanmış programlı genel amaçlı bilgisayarın, 1949'da
başarıyla çalışan Manchester Mark 1 olması muhtemeldir. İlk ticari bilgisayar, 1951'de
satışa çıkan Ferranti Mark 1, onun ürünüydü.
G/Ç gerçekleştiren rutinler özellikle önemliydi. Her yeni I/O cihazının dikkatli bir
programlama gerektiren kendine has özellikleri vardı. Her G/Ç aygıtı için aygıt sürücüsü
adı verilen özel bir alt program yazılmıştır. Bir aygıt sürücüsü, belirli bir aygıt için
arabelleklerin, bayrakların, kayıtların, kontrol bitlerinin ve durum bitlerinin nasıl
kullanılması gerektiğini bilir. Her aygıt türünün kendi sürücüsü vardır.
Kağıt şerit okuyucudan bir karakter okumak gibi basit bir görev, aygıta özgü karmaşık
işlem dizilerini içerebilir. Her seferinde gerekli kodu yazmak yerine, aygıt sürücüsü basitçe
kitaplıktan kullanıldı.
Daha sonra, FORTRAN, COBOL ve diğer diller için derleyiciler ortaya çıktı, bu da
programlama görevini çok daha kolay hale getirdi, ancak bilgisayarın çalışmasını daha
karmaşık hale getirdi. Örneğin, bir FORTRAN programını çalıştırılmak üzere hazırlamak
için, programcının önce FORTRAN derleyicisini bilgisayara yüklemesi gerekir.
Derleyici normalde manyetik bantta tutulurdu, bu nedenle uygun bandın bir manyetik
bant sürücüsüne takılması gerekirdi. Program kart okuyucudan okunur ve başka bir teybe
yazılır. FORTRAN derleyicisi, daha sonra birleştirilmesi gereken derleme dili çıktısı üretti.
Bu prosedür, montajcı ile başka bir bant monte edilmesini gerektiriyordu. Birleştiricinin
çıktısının, destekleyici kütüphane rutinlerine bağlanması gerekir. Son olarak, programın
ikili nesne formu yürütülmeye hazır olacaktır. Daha önce olduğu gibi belleğe yüklenebilir
ve konsoldan hata ayıklanabilir.
4 Ek A Influentia İşletim Sistemleri
Machine Translated by Google
Bir işin yürütülmesinde önemli miktarda kurulum süresi gerekebilir. Her iş birçok
ayrı adımdan oluşuyordu:
programının çalıştırılması
İkinci olarak, benzer ihtiyaçları olan işler bir araya toplandı ve kurulum süresini
azaltmak için bir grup olarak bilgisayarda çalıştırıldı. Örneğin, operatörün bir FORTRAN
işi, bir COBOL işi ve başka bir FORTRAN işi aldığını varsayalım . Bunları bu sırayla
çalıştırırsa, FORTRAN için ayarlaması (derleyici bantlarını yüklemesi vb.), ardından
COBOL için ayarlaması ve ardından tekrar FORTRAN için ayarlaması gerekir. Ancak iki
FORTRAN programını toplu olarak çalıştırırsa, FORTRAN için yalnızca bir kez kurulum
yapabilir ve bu da operatör zamanından tasarruf sağlar.
Machine Translated by Google
yükleyici
monitör iş sıralaması
kontrol kartı
tercümanı
kullanıcı
program
alanı
$END
$YÜK
derlenecek program
$FTN
$İŞ
sonraki kontrol kartını okuyan monitöre geri döner, uygun programı yükler
vb. Bu döngü, tüm kontrol kartları iş için yorumlanana kadar tekrarlanır.
Ardından monitör otomatik olarak bir sonraki işle devam eder.
Performansı artırmak için otomatik iş sıralamalı toplu sistemlere geçiş
yapıldı. Sorun, oldukça basit, insanların bilgisayarlardan önemli ölçüde daha
yavaş olmasıdır. Sonuç olarak, insan çalışmasının işletim sistemi yazılımıyla
değiştirilmesi arzu edilir. Otomatik iş sıralama, insan kurulum süresi ve iş
sıralaması ihtiyacını ortadan kaldırır.
Bununla birlikte, bu düzenlemeyle bile, CPU genellikle boştadır. Sorun,
elektronik cihazlardan daha yavaş olan mekanik I/O cihazlarının hızıdır.
Yavaş bir CPU bile mikrosaniye aralığında çalışır ve saniyede binlerce talimat
yürütülür. Buna karşılık hızlı bir kart okuyucu, dakikada 1.200 kart (veya
saniyede 20 kart) okuyabilir. Bu nedenle, CPU ve I/O cihazları arasındaki hız
farkı üç veya daha fazla büyüklük sırası olabilir. Zaman içinde elbette
teknolojideki gelişmeler daha hızlı I/O cihazlarıyla sonuçlandı. Ne yazık ki,
CPU hızları daha da hızlı arttı, bu yüzden sorun sadece çözülmedi, aynı
zamanda daha da arttı.
G/Ç sorununa yönelik yaygın bir çözüm, yavaş kart okuyucuları (giriş aygıtları)
ve satır yazıcılarını (çıkış aygıtları) manyetik bant birimleriyle değiştirmekti.
1950'lerin sonlarında ve 1960'ların başlarında çoğu bilgisayar sistemi, kart
okuyuculardan okuyan ve satır yazıcılarına veya kart delgeçlerine yazan
toplu sistemlerdi. Ancak CPU doğrudan kartlardan okumadı; bunun yerine
kartlar önce ayrı bir cihaz aracılığıyla manyetik bir bant üzerine kopyalandı.
Bant yeterince dolduğunda, alındı ve bilgisayara taşındı. Bir programa giriş
için bir karta ihtiyaç duyulduğunda, banttan eşdeğer kayıt okunurdu. Benzer
şekilde, çıktı kasete yazıldı ve kasetin içeriği daha sonra yazdırıldı.
Kart okuyucular ve satır yazıcıları , ana bilgisayar yerine çevrimdışı çalıştırıldı
(Şekil A.4) .
Çevrimdışı çalışmanın bariz bir avantajı, ana bilgisayarın artık kart
okuyucularının ve satır yazıcılarının hızıyla kısıtlanmaması, yalnızca çok daha
hızlı manyetik bant birimlerinin hızıyla sınırlı olmasıydı.
Tüm G/Ç için manyetik bant kullanma tekniği, herhangi bir
internet üzerinden
İşlemci
(a)
internet üzerinden
İşlemci
(b)
Şekil A.4 I/O cihazlarının (a) çevrim içi ve (b) çevrim dışı çalışması.
Machine Translated by Google
benzer ekipmanlar (kart okuyucular, kart delgeçleri, çiziciler, kağıt bantlar ve yazıcılar
gibi).
Çevrimdışı operasyondaki gerçek kazanç, tek bir CPU için birden çok okuyucudan
teybe ve banttan yazıcıya sistemlerinin kullanılması olasılığından gelir . CPU girişi
okuyucunun kartları okuyabildiğinden iki kat daha hızlı işleyebilirse, aynı anda çalışan
iki okuyucu CPU'yu meşgul edecek kadar bant üretebilir . Bununla birlikte, bir
dezavantaj da vardır - belirli bir işin yürütülmesinde daha uzun bir gecikme.
İş önce teybe okunmalıdır. Ardından, kaseti “doldurmak” için yeterli ek iş okunana
kadar beklemesi gerekir. Bant daha sonra yeniden sarılmalı, boşaltılmalı, CPU'ya elle
taşınmalı ve boş bir bant sürücüsüne monte edilmelidir. Bu süreç elbette toplu
sistemler için mantıksız değildir. Pek çok benzer iş, bilgisayara alınmadan önce bir
teyp üzerinde toplanabilir.
İşlerin çevrimdışı olarak hazırlanması bir süre devam etmesine rağmen, çoğu
sistemde hızla değiştirildi. Disk sistemleri yaygın olarak kullanılabilir hale geldi ve
çevrim dışı işlemlerde büyük ölçüde geliştirildi. Bant sistemlerindeki sorunlardan
biri, CPU diğer ucundan okurken kart okuyucunun bandın bir ucuna yazamamasıydı .
Bantların doğası gereği sıralı erişim aygıtları olduğu için, geri sarılmadan ve
okunmadan önce tüm bandın yazılması gerekiyordu . Disk sistemleri rastgele erişimli
cihazlar olarak bu sorunu ortadan kaldırdı . Kafa diskin bir alanından diğerine hareket
ettiğinden, yeni kartları depolamak için kart okuyucu tarafından kullanılan diskteki
alandan CPU'nun “sonraki” kartı okumak için ihtiyaç duyduğu konuma hızla geçebilir.
disk
G/Ç
internet üzerinden
İşlemci
Biriktirme, uzak sitelerde veri işlemek için de kullanılır. CPU , verileri iletişim
yolları aracılığıyla uzak bir yazıcıya gönderir (veya uzak bir kart okuyucudan tüm bir
giriş işini kabul eder). Uzaktan işleme, CPU müdahalesi olmadan kendi hızında
yapılır . Bir sonraki veri grubunu biriktirebilmesi için, işlem tamamlandığında CPU'nun
bilgilendirilmesi yeterlidir.
Biriktirme , bir işin G/ Ç'sini diğer işlerin hesaplanmasıyla çakıştırır.
Basit bir sistemde bile, biriktirici farklı bir işin çıktısını yazdırırken bir işin girdisini
okuyor olabilir. Bu süre boyunca, "kartlarını" diskten okuyarak ve çıkış satırlarını
diske "yazdırarak" başka bir iş (veya başka işler) yürütülebilir.
A.3 Atlası
Atlas sistemi, 48 bitlik kelimelere sahip bir İngiliz bilgisayarı kullandı. Adresler 24
bitti ancak ondalık olarak kodlandı, bu da 1 milyon kelimenin adreslenmesine izin
verdi. O zaman, bu son derece büyük bir adres alanıydı. Atlas'ın fiziksel hafızası 98
KB kelimelik bir davul ve 16 KB kelimelik çekirdek kelimeydi.
Bellek 512 kelimelik sayfalara bölünerek fiziksel bellekte 32 çerçeve sağlandı. 32
kayıttan oluşan bir ilişkisel bellek, eşlemeyi sanal bir adresten fiziksel bir adrese
uyguladı.
Bir sayfa hatası meydana gelirse, bir sayfa değiştirme algoritması çağrılır. Bir
bellek çerçevesi her zaman boş tutuldu, böylece bir tambur aktarımı hemen
başlayabildi. Sayfa değiştirme algoritması, geçmiş davranışa dayalı olarak gelecekteki
belleğe erişim davranışını tahmin etmeye çalıştı. Çerçeveye her erişildiğinde, her
çerçeve için bir referans biti ayarlandı. Referans bitleri her 1.024 komutta bir belleğe
okundu ve bu bitlerin son 32 değeri tutuldu. Bu geçmiş, en son başvurudan bu yana
geçen süreyi tanımlamak için kullanıldı.
10 Ek A Influentia İşletim Sistemleri
Machine Translated by Google
erence (t1) ve son iki referans arasındaki aralık (t2). Sayfalar aşağıdaki sırayla
değiştirilmek üzere seçildi:
1. t1 > t2 + 1 olan herhangi bir sayfa artık kullanımda değil olarak kabul edilir ve
değiştirildi.
A.4 XDS-940
Kullanıcı modu komut setine bir sistem çağrısı talimatı eklendi. Bu talimat,
dosyalar gibi yeni kaynaklar yaratmak için kullanıldı ve işletim sisteminin fiziksel
kaynakları yönetmesine izin verdi. Örneğin dosyalar, tamburda 256 kelimelik bloklar
halinde tahsis edildi. Serbest davul bloklarını yönetmek için bir bitmap kullanıldı. Her
dosyanın, gerçek veri bloklarına işaret eden bir indeks bloğu vardı.
İndeks blokları birbirine zincirlenmiştir.
XDS-940 sistemi ayrıca süreçlerin alt süreçleri oluşturmasına, başlatmasına,
askıya almasına ve yok etmesine izin vermek için sistem çağrıları da sağladı . Bir
programcı bir süreçler sistemi kurabilir. Ayrı süreçler, iletişim ve senkronizasyon için
belleği paylaşabilir. İşlem oluşturma, bir işlemin kök olduğu ve alt işlemlerinin
ağaçtaki onun altındaki düğümler olduğu bir ağaç yapısını tanımladı. Alt süreçlerin
her biri sırayla daha fazla alt süreç oluşturabilir.
A.6 RC 4000 11
Machine Translated by Google
A.5 _
A.6 RC 4000
RC 4000 sistemi, THE sistemi gibi, öncelikle tasarım konseptleriyle dikkat çekiyordu .
1960'ların sonlarında Danimarka 4000 bilgisayarı için Regnecentralen, özellikle Brinch-
Hansen tarafından tasarlandı. Amaç, bir toplu sistem veya zaman paylaşımlı bir
sistem veya herhangi bir başka özel sistem tasarlamak değildi.
Bunun yerine amaç, üzerine eksiksiz bir işletim sisteminin kurulabileceği bir işletim
sistemi çekirdeği veya çekirdeği oluşturmaktı. Böylece sistem yapısı katmanlı hale
getirildi ve yalnızca çekirdeği içeren alt seviyeler sağlandı.
Çekirdek, eşzamanlı işlemlerin bir koleksiyonunu destekledi. Bir döngüsel CPU
zamanlayıcı kullanıldı. İşlemler belleği paylaşabilse de, birincil iletişim ve
senkronizasyon mekanizması, çekirdek tarafından sağlanan mesaj sistemiydi .
Süreçler, sekiz kelime uzunluğundaki sabit boyutlu mesajları değiş tokuş ederek
birbirleriyle iletişim kurabilirler. Tüm mesajlar, ortak bir arabellek havuzundan
arabelleklerde saklandı. Bir mesaj arabelleği artık gerekli olmadığında, ortak havuza
döndürüldü.
12 Ek A Influentia İşletim Sistemleri
Machine Translated by Google
Her işlemle bir mesaj kuyruğu ilişkilendirildi. Bu sürece gönderilen ancak henüz
alınmamış tüm mesajları içeriyordu.
FIFO sırasına göre mesajlar kuyruktan kaldırıldı . Sistem, atomik olarak yürütülen dört
ilkel işlemi destekledi:
arabellekte)
Son iki işlem, süreçlerin aynı anda birkaç mesaj alışverişinde bulunmasına izin verdi.
Bu ilkeller, bir işlemin mesaj kuyruğuna FIFO sırasına göre hizmet vermesini ve
diğer işlemler mesajlarını işlerken kendisini engellemesini gerektiriyordu.
Bu kısıtlamaları kaldırmak için geliştiriciler, bir işlemin bir sonraki mesajın gelmesini
beklemesine veya kuyruğunu herhangi bir sırayla yanıtlamasına ve hizmet vermesine
izin veren iki ek iletişim ilkesi sağladı:
G/Ç aygıtları da süreç olarak ele alındı. Aygıt sürücüleri, aygıt kesintilerini ve kayıtlarını
mesajlara dönüştüren kodlardı. Böylece, bir işlem, o terminale bir mesaj göndererek bir
terminale yazacaktır. Aygıt sürücüsü mesajı alır ve karakteri terminale gönderir. Bir giriş
karakteri sistemi kesintiye uğratır ve bir aygıt sürücüsüne aktarır. Aygıt sürücüsü, giriş
karakterinden bir mesaj oluşturacak ve onu bekleyen bir işleme gönderecektir.
A.7 CTSS
Uyumlu Zaman Paylaşım Sistemi (CTSS) , MIT'de deneysel bir zaman paylaşım sistemi
olarak tasarlandı ve ilk olarak 1961'de ortaya çıktı. Bir IBM 7090'da uygulandı ve
sonunda 32'ye kadar etkileşimli kullanıcıyı destekledi. Kullanıcılara, dosyaları
işlemelerine ve bir terminal aracılığıyla programları derlemelerine ve çalıştırmalarına
izin veren bir dizi etkileşimli komut sağlandı.
7090 , 36 bitlik kelimelerden oluşan 32 KB'lık bir belleğe sahipti . Monitör ,
kullanıcılara 27 KB bırakarak 5 KB kelimeler kullandı . Kullanıcı belleği görüntüleri,
bellek ve hızlı bir tambur arasında değiş tokuş edildi. CPU zamanlaması, çok seviyeli
bir geri besleme kuyruğu algoritması kullandı. Seviye i için zaman kuantumu 2 i zaman bir
Bir program CPU patlamasını bir zaman kuantumunda bitirmediyse , kuyruğun bir
sonraki düzeyine indirilerek ona iki kat daha fazla zaman verilirdi. En yüksek seviyedeki
program (en kısa kuantum ile) önce çalıştırıldı. Bir programın başlangıç düzeyi,
boyutuna göre belirlenir, böylece zaman kuantumu en azından takas zamanı kadar
uzun olur.
CTSS son derece başarılıydı ve 1972 gibi geç bir tarihte kullanılmaya başlandı. Sınırlı
olmasına rağmen, zaman paylaşımının bir çelişki olduğunu göstermeyi başardı.
A.9 IBM OS/360 13
Machine Translated by Google
Venüent ve pratik bilgi işlem modu. CTSS'nin bir sonucu , zaman paylaşımlı sistemlerin
geliştirilmesiydi. Diğer bir sonuç ise,
ÇOKLUKLAR.
A.8 ÇOKLUKLAR
MULTICS işletim sistemi, 1965'ten 1970'e kadar MIT'de CTSS'nin doğal bir uzantısı olarak
tasarlandı . CTSS ve diğer erken zaman paylaşım sistemleri o kadar başarılıydı ki, daha büyük ve
daha iyi sistemlere hızla ilerlemek için hemen bir istek yarattılar. Daha büyük bilgisayarlar
kullanıma sunulduğunda, CTSS tasarımcıları bir zaman paylaşımlı yardımcı program oluşturmaya
başladılar. Elektrik enerjisi gibi bilgi işlem hizmeti de sağlanacaktır. Büyük bilgisayar sistemleri,
bir şehirdeki ofis ve evlerdeki terminallere telefon kablolarıyla bağlanacaktır. İşletim sistemi,
paylaşılan programlar ve verilerden oluşan geniş bir dosya sistemiyle sürekli olarak çalışan
zaman paylaşımlı bir sistem olacaktır.
MULTICS'te bir sanal adres , 18 bitlik bir segment numarasından ve 16 bitlik bir
kelime ofsetinden oluşuyordu. Segmentler daha sonra 1-KB-kelime sayfalarında sayfalandı.
İkinci şans sayfa değiştirme algoritması kullanıldı.
Bölümlere ayrılmış sanal adres alanı dosya sistemiyle birleştirildi; her bölüm bir
dosyaydı. Segmentler dosya adına göre adreslendi. Dosya sisteminin kendisi çok seviyeli
bir ağaç yapısıydı ve kullanıcıların kendi alt dizin yapılarını oluşturmalarına izin veriyordu.
CTSS gibi , MULTICS de CPU zamanlaması için çok düzeyli bir geri bildirim kuyruğu kullandı .
Koruma, her dosyayla ilişkili bir erişim listesi ve işlemlerin yürütülmesi için bir dizi
koruma halkası aracılığıyla gerçekleştirildi. Neredeyse tamamı PL/1 ile yazılan sistem,
yaklaşık 300.000 satır kod içeriyordu. Çok işlemcili bir sisteme genişletildi ve sistem
çalışmaya devam ederken bir CPU'nun bakım için hizmet dışı bırakılmasına izin verdi.
İşletim sistemi geliştirmenin en uzun hattı şüphesiz IBM bilgisayarlarıdır. IBM 7090 ve
IBM 7094 gibi ilk IBM bilgisayarları, yerleşik bir monitör, ayrıcalıklı yönergeler, bellek
koruması ve basit toplu işlemenin geliştirilmesinin ardından ortak G/Ç alt rutinlerinin
geliştirilmesinin başlıca örnekleridir . Bu sistemler, genellikle bağımsız sitelerde ayrı
ayrı geliştirildi. Sonuç olarak IBM , farklı dillere ve farklı sistem yazılımlarına sahip birçok
farklı bilgisayarla karşı karşıya kaldı.
İlk olarak 1960'ların ortalarında ortaya çıkan IBM/360 , bu durumu değiştirmek için
tasarlandı. IBM/360 , küçük işletme makinelerinden büyük bilimsel makinelere kadar
eksiksiz bir ürün yelpazesini kapsayan bir bilgisayar ailesi olarak tasarlanmıştır. Hepsi
aynı işletim sistemini kullanan bu sistemler için yalnızca bir yazılım seti gerekliydi: OS/
360. Bu düzenleme amaçlandı
14 Ek A Influentia İşletim Sistemleri
Machine Translated by Google
IBM için bakım sorunlarını azaltmak ve kullanıcıların programları ve uygulamaları bir IBM
sisteminden diğerine özgürce taşımasına izin vermek .
Ne yazık ki, OS/360 tüm insanlar için her şey olmaya çalıştı. Sonuç olarak, görevlerinin
hiçbirini özellikle iyi yapmadı. Dosya sistemi, her dosyanın türünü tanımlayan bir tür alanı
içeriyordu ve sabit uzunluklu ve değişken uzunluklu kayıtlar ile engellenen ve engellenmemiş
dosyalar için farklı dosya türleri tanımlandı.
Bitişik ayırma kullanıldı, bu nedenle kullanıcının her bir çıktı dosyasının boyutunu tahmin
etmesi gerekiyordu. İş Kontrol Dili (JCL) , olası her seçenek için parametreler ekleyerek
ortalama bir kullanıcı için anlaşılmaz hale getirdi.
Bellek yönetimi rutinleri mimari tarafından engellendi.
Bir temel kayıt adresleme modu kullanılmasına rağmen, program temel kayıt defterine
erişebilir ve bunları değiştirebilir, böylece CPU tarafından mutlak adresler oluşturulur. Bu
düzenleme, dinamik yer değiştirmeyi engelledi; program yükleme sırasında fiziksel belleğe
bağlıydı. İşletim sisteminin iki ayrı versiyonu üretildi: OS/MFT kullanılan sabit bölgeler ve OS/
MVT kullanılan değişken bölgeler.
Sistem, binlerce programcı tarafından montaj dilinde yazıldı ve milyonlarca kod satırıyla
sonuçlandı. İşletim sisteminin kendisi, kodu ve tabloları için büyük miktarda belleğe ihtiyaç
duyuyordu. İşletim sistemi ek yükü genellikle toplam CPU döngülerinin yarısını tüketiyordu .
Yıllar içinde, yeni özellikler eklemek ve hataları düzeltmek için yeni sürümler yayınlandı.
Bununla birlikte, bir hatayı düzeltmek genellikle sistemin uzak bir bölümünde başka bir
hataya neden oldu, böylece sistemdeki bilinen hataların sayısı oldukça sabit kaldı.
IBM/370 mimarisinde yapılan değişiklikle OS/360'a sanal bellek eklendi . Temel donanım,
bölümlere ayrılmış bir sanal bellek sağladı. İşletim sisteminin yeni sürümleri bu donanımı
farklı şekillerde kullandı. OS/VS1 , büyük bir sanal adres alanı yarattı ve OS/MFT'yi bu sanal
bellekte çalıştırdı.
Böylece, işletim sisteminin kendisi ve kullanıcı programları disk belleğine alındı. OS/VS2
Sürüm 1, OS/MVT'yi sanal bellekte çalıştırdı. Son olarak, şimdi MVS olarak adlandırılan OS/
VS2 Sürüm 2, her kullanıcıya kendi sanal belleğini sağladı.
MVS hala temelde bir toplu işletim sistemidir. CTSS sistemi bir IBM 7094 üzerinde
çalıştırıldı , ancak MIT'deki geliştiriciler, IBM'in 7094'ün halefi olan 360'ın adres alanının
MULTICS için çok küçük olduğuna karar verdiler ve bu nedenle sağlayıcıları değiştirdiler. IBM
daha sonra kendi zaman paylaşımlı sistemi TSS/360'ı yaratmaya karar verdi. MULTICS gibi ,
TSS/360'ın da büyük, zaman paylaşımlı bir yardımcı program olması gerekiyordu. Temel 360
mimarisi, sanal bellek sağlamak için model 67'de değiştirildi. Birkaç site, 360/67'yi TSS/360
beklentisiyle satın aldı .
Ancak TSS/360 ertelendi, bu nedenle TSS/360 kullanılabilir olana kadar diğer zaman
paylaşımlı sistemler geçici sistemler olarak geliştirildi. OS/360'a bir zaman paylaşım seçeneği
(TSO) eklendi . IBM'in Cambridge Bilimsel Merkezi, CMS'yi tek kullanıcılı bir sistem olarak ve
CP/67'yi çalıştıracak sanal bir makine sağlamak için geliştirdi.
TSS/360 sonunda teslim edildiğinde, bir başarısızlıktı . Çok büyüktü ve çok yavaştı.
Sonuç olarak, hiçbir site geçici sisteminden TSS/360'a geçiş yapmaz. Bugün, IBM
sistemlerinde zaman paylaşımı büyük ölçüde ya MVS kapsamındaki TSO tarafından ya da CP/
67 (yeniden adlandırılan VM) kapsamında CMS tarafından sağlanmaktadır.
Ne TSS/360 ne de MULTICS ticari başarı elde etmedi. Ne yanlış gitti? Sorunun bir kısmı,
bu gelişmiş sistemlerin anlaşılamayacak kadar büyük ve karmaşık olmasıydı. Diğer bir sorun,
bilgi işlem gücünün büyük, uzak bir kaynaktan elde edilebileceği varsayımıydı. minicom-
A.11 CP/M ve MS/DOS 15
Machine Translated by Google
A.10 ÜÇ-20
DEC , tarihi boyunca birçok etkili bilgisayar sistemi yarattı. Muhtemelen DEC ile ilişkili
en ünlü işletim sistemi , Hewlett-Packard'ın bir ürünü olan OpenVMS olarak bugün
hala kullanılan popüler bir iş odaklı sistem olan VMS'dir . Ama belki de DEC'in işletim
sistemlerinden en etkilisi TOPS-20 idi.
İlk hobi bilgisayarları tipik olarak kitlerden yapıldı ve bir seferde tek bir program
çalıştırdı. Bilgisayar bileşenleri geliştikçe sistemler daha gelişmiş sistemlere dönüştü.
1970'lerin bu bilgisayarları için erken bir "standart" işletim sistemi , Digital Research,
Inc.'den Gary Kindall tarafından yazılan Control Program/Monitor'un kısaltması olan
CP/M idi . CP/M öncelikle ilk "kişisel bilgisayar" CPU'sunda çalışıyordu , 8-bit Intel
8080. CP/M başlangıçta yalnızca 64 KB belleği destekliyordu ve aynı anda yalnızca bir
program çalıştırıyordu. Tabii ki, bir komut yorumlayıcı ile metin tabanlıydı. Komut
yorumlayıcı , DEC'den TOPS-10 gibi zamanın diğer işletim sistemlerindekilere
benziyordu .
IBM , kişisel bilgisayar işine girdiğinde , Bill Gates'e ve şirketin tercih ettiği 16-bit
CPU için yeni bir işletim sistemi yazmasına karar verdi - Intel 8086. Bu işletim sistemi,
MS-DOS, CP/M'ye benziyordu, ancak yine çoğunlukla TOPS-10'dan sonra modellenen
daha zengin yerleşik komutlar seti . MS-DOS , 1981'den başlayarak ve 2000 yılına
kadar gelişimini sürdürerek, zamanının en popüler kişisel bilgisayar işletim sistemi
haline geldi. 640 KB belleği destekledi, bunun biraz ötesine geçmek için "genişletilmiş"
ve "genişletilmiş" belleği adresleme yeteneği ile. sınır. Temel mevcut işletim sistemi
özelliklerinden yoksundu, ancak özellikle korumalı bellekten yoksundu.
Machine Translated by Google
16 bit CPU'ların ortaya çıkmasıyla, kişisel bilgisayarlar için işletim sistemleri daha gelişmiş,
zengin özelliklere sahip ve kullanılabilir hale gelebilir. Apple Macintosh bilgisayarı ,
muhtemelen ev kullanıcıları için tasarlanmış bir GUI'ye sahip ilk bilgisayardı.
1984'teki lansmanından başlayarak bir süre için kesinlikle en başarılısıydı.
Ekranı işaretlemek ve seçmek için bir fare kullandı ve yeni kullanıcı arayüzünden yararlanan
birçok yardımcı programla birlikte geldi. Sabit disk sürücüleri 1984'te nispeten pahalıydı, bu
nedenle varsayılan olarak yalnızca 400 KB kapasiteli bir disket sürücüsü ile geldi.
Orijinal Mac OS yalnızca Apple bilgisayarlarında çalışıyordu ve çok sayıda şirketten birçok
farklı bilgisayarda çalışmak üzere lisanslanan Microsoft Windows (1985'te Sürüm 1.0'dan
başlayarak) tarafından yavaş yavaş gölgede bırakıldı. Mikro işlemcili CPU'lar , korumalı bellek
ve bağlam değiştirme gibi gelişmiş özelliklere sahip 32 bit yongalara evrildikçe, bu işletim
sistemleri daha önce yalnızca ana bilgisayarlarda ve mini bilgisayarlarda bulunan özellikleri
ekledi. Zamanla kişisel bilgisayarlar da bu sistemler kadar güçlü ve birçok amaç için daha
kullanışlı hale geldi. Mini bilgisayarlar öldü, yerini genel ve özel amaçlı “sunucular” aldı.
Kişisel bilgisayarların kapasitesi ve performansı artmaya devam etse de, sunucular bellek
miktarı, disk alanı ve mevcut CPU'ların sayısı ve hızı açısından onların önünde olma
eğilimindedir . Bugün, sunucular tipik olarak veri merkezlerinde veya makine odalarında
çalışırken, kişisel bilgisayarlar masaların üzerinde veya yanında oturup birbirleriyle ve ağdaki
sunucularla konuşurlar.
A.13 Mak
Mach işletim sistemi, atalarının izini Carnegie Mellon Üniversitesi'nde (CMU) geliştirilen
Accent işletim sistemine kadar takip eder. Mach'ın iletişim sistemi ve felsefesi Accent'ten
türetilmiştir, ancak sistemin diğer birçok önemli kısmı (örneğin, sanal bellek sistemi ve görev
ve iş parçacığı yönetimi) sıfırdan geliştirilmiştir.
3. 4.3 BSD'den daha basit ve değiştirilmesi daha kolay bir çekirdeğe sahip olun .
A.13 Mak 17
Machine Translated by Google
Mach'ın gelişimi, BSD UNIX sistemlerinden evrimsel bir yol izledi . Mach
kodu ilk olarak 4.2 BSD çekirdeği içinde geliştirildi, Mach bileşenleri
tamamlandığında BSD çekirdek bileşenleri Mach bileşenleriyle değiştirildi.
BSD bileşenleri, kullanıma sunulduğunda 4.3 BSD'ye güncellendi. 1986'ya
gelindiğinde, sanal bellek ve iletişim alt sistemleri, VAX'in çok işlemcili
sürümleri de dahil olmak üzere DEC VAX bilgisayar ailesi üzerinde çalışıyordu .
IBM RT/PC ve SUN 3 iş istasyonları için sürümler kısa süre sonra geldi.
Ardından 1987, görev ve iş parçacığı desteği de dahil olmak üzere Encore
Multimax ve Sequent Balance çok işlemcili sürümlerinin yanı sıra sistemin ilk
resmi sürümleri olan Sürüm 0 ve Sürüm 1'in tamamlandığını gördü.
Sürüm 2 aracılığıyla Mach , BSD kodunun çoğunu çekirdeğe dahil ederek
ilgili BSD sistemleriyle uyumluluk sağladı. Mach'ın yeni özellikleri ve
yetenekleri, bu sürümlerdeki çekirdekleri, temel yanıt veren BSD
çekirdeklerinden daha büyük hale getirdi. Mach 3, BSD kodunu çekirdeğin
dışına taşıyarak çok daha küçük bir mikro çekirdek bıraktı. Bu sistem,
çekirdekte yalnızca temel Mach özelliklerini uygular; UNIX'e özgü tüm kodlar,
kullanıcı modu sunucularında çalıştırılmak üzere çıkarıldı. UNIX'e özgü kodun
çekirdekten çıkarılması, BSD'nin başka bir işletim sistemiyle değiştirilmesine
veya mikro çekirdeğin üzerinde birden çok işletim sistemi arabiriminin aynı
anda yürütülmesine olanak tanır. BSD'ye ek olarak, DOS, Macintosh işletim
sistemi ve OSF/1 için kullanıcı modu uygulamaları geliştirilmiştir . Bu
yaklaşımın sanal makine konseptiyle benzerlikleri vardır, ancak burada sanal
makine donanımdan ziyade yazılımla (Mach çekirdek arayüzü) tanımlanır.
Sürüm 3.0 ile Mach, tek işlemcili SUN, Intel, IBM ve DEC makineleri ve çok
işlemcili DEC, Sequent ve Encore sistemleri dahil olmak üzere çok çeşitli sistemle
Açık Yazılım Vakfı (OSF) 1989'da yeni işletim sistemi OSF/1'in temeli olarak Mach 2.5'i
kullanacağını duyurduğunda, Mach endüstrinin dikkatini çekti . (Mach 2.5 aynı zamanda
Apple Computer ününden Steve Jobs'un buluşu olan NeXT iş istasyonundaki işletim
sisteminin temeliydi.) OSF/1'in ilk sürümü bir yıl sonra gerçekleşti ve bu sistem UNIX System
V, Sürüm 4 ile rekabet etti. , UNIX International (UI) üyeleri arasında o sırada tercih edilen
işletim sistemi . OSF üyeleri arasında IBM, DEC ve HP gibi önemli teknolojik şirketler vardı .
OSF o zamandan beri yönünü değiştirdi ve yalnızca DEC UNIX , Mach çekirdeğine dayanıyor.
Bugün, geriye kalan tek saf Mach uygulaması, az kullanılan bir işletim sistemi
olan GNU HURD'dadır . Ancak Mach, macOS ve iOS varyantlarını çalıştıran çekirdek
olan XNU'da hala yaşıyor . Apple'ın NeXT ve onun NeXTSTEP işletim sistemini satın
almasıyla elde ettiği kod tabanı olan XNU, en üst BSD API katmanına sahip bir Mach
çekirdeğidir . Apple, Mach API'lerini desteklemeye ve sürdürmeye devam ediyor (hala
tuzaklar olarak bilinen özel sistem çağrıları ve Mach Mesajları aracılığıyla erişilebilir)
ve çekirdek bugüne kadar yeni özelliklerle gelişmeye devam ediyor.
İşletim Sistemi Kavramlarının önceki bazı sürümleri , Mach ile ilgili tüm bir
bölümü içeriyordu. Dördüncü baskıda göründüğü şekliyle bu bölüm, web'de
mevcuttur (http://www.os-book.com).
A.14.1 Hidra
Hydra, önemli ölçüde esneklik sağlayan yetenek tabanlı bir koruma sistemidir.
Sistem, bir bellek bölümünü okuma, yazma veya yürütme hakkı gibi temel erişim
biçimleri dahil olmak üzere sabit bir olası erişim hakları kümesi uygular. Ayrıca bir
kullanıcı (koruma sisteminin) diğer haklarını beyan edebilir. Kullanıcı tanımlı hakların
yorumlanması yalnızca kullanıcının programı tarafından gerçekleştirilir, ancak sistem,
sistem tanımlı hakların yanı sıra bu hakların kullanımı için erişim koruması sağlar. Bu
tesisler, koruma teknolojisinde önemli bir gelişme oluşturmaktadır.
Bir kullanıcı bir nesneyi bir prosedüre argüman olarak ilettiğinde, prosedürün
nesneyi değiştiremeyeceğinden emin olmamız gerekebilir. Bu kısıtlamayı, değiştirme
(yazma) hakkına sahip olmayan bir erişim hakkını geçerek kolayca uygulayabiliriz.
Ancak, amplifikasyon meydana gelebilirse, değişiklik hakkı eski haline getirilebilir.
Böylece, kullanıcı koruma gereksinimi ortadan kaldırılabilir.
Genel olarak, elbette, bir kullanıcı, bir prosedürün görevini doğru bir şekilde yerine
getirdiğine güvenebilir. Ancak bu varsayım, donanım veya yazılım hataları nedeniyle
her zaman doğru değildir. Hydra, amplifikasyonları kısıtlayarak bu sorunu çözer.
Hydra'nın prosedür çağrı mekanizması , karşılıklı şüpheli alt sistemler sorununa
doğrudan bir çözüm olarak tasarlandı . Bu problem şu şekilde tanımlanmıştır. Bir
programın birkaç farklı kullanıcı tarafından bir hizmet olarak çağrılabileceğini
varsayalım (örneğin, bir sıralama rutini, bir derleyici, bir oyun). Kullanıcılar bu hizmet
programını çalıştırdıklarında, programın arızalanması ve verilen verilere zarar verme
veya daha sonra (yetki olmadan) kullanılacak verilere bazı erişim haklarını elinde
tutma riskini alırlar. Benzer şekilde, hizmet programı, arayan kullanıcı programı
tarafından doğrudan erişilmemesi gereken bazı özel dosyalara (örneğin muhasebe
amaçları için) sahip olabilir. Hydra, bu sorunla doğrudan ilgilenmek için mekanizmalar
sağlar.
Bir Hydra alt sistemi, koruma çekirdeğinin üzerine kuruludur ve kendi
bileşenlerinin korunmasını gerektirebilir. Bir alt sistem, alt sistem tarafından
tanımlanan kaynaklara erişim haklarını tanımlayan bir dizi çekirdek tanımlı ilkel
üzerindeki çağrılar yoluyla çekirdekle etkileşime girer. Alt sistem tasarımcısı, bu
kaynakların kullanıcı süreçleri tarafından kullanımı için politikalar tanımlayabilir,
ancak politikalar, yetenek sistemi tarafından sağlanan standart erişim koruması kullanıla
Programcılar, ilgili referans kılavuzundaki özellikleri hakkında bilgi sahibi
olduktan sonra koruma sistemini doğrudan kullanabilirler. Hydra, kullanıcı programları
tarafından çağrılabilen geniş bir sistem tanımlı prosedür kitaplığı sağlar. Programcılar,
bu sistem prosedürlerine ilişkin çağrıları program kodlarına açıkça dahil edebilir veya
Hydra'ya arayüzlenmiş bir program çevirmeni kullanabilir.
20 Ek A Influentia İşletim Sistemleri
Machine Translated by Google
A.14.2 Cambridge CAP Sistemi
Cambridge CAP sisteminin tasarımında yetenek temelli korumaya farklı bir yaklaşım
benimsenmiştir . CAP'nin yetenek sistemi, Hydra'nınkinden daha basit ve yüzeysel
olarak daha az güçlüdür. Bununla birlikte, daha yakından inceleme, kullanıcı tanımlı
nesnelerin güvenli bir şekilde korunmasını sağlamak için de kullanılabileceğini
göstermektedir. CAP'ın iki tür yeteneği vardır. Sıradan türe veri yeteneği denir .
Nesnelere erişim sağlamak için kullanılabilir, ancak sağlanan haklar yalnızca nesneyle
ilişkili bireysel depolama bölümlerinin standart okuma, yazma ve yürütme haklarıdır.
Veri yetenekleri, CAP makinesinde mikro kod ile yorumlanır .
Elbette başka işletim sistemleri de var ve bunların çoğu ilginç özelliklere sahip.
Burroughs bilgisayar ailesi için MCP işletim sistemi, bir sistem programlama dilinde
yazılan ilk sistemdi. Segmentasyonu ve çoklu CPU'ları destekledi. CDC 6600 için
SCOPE işletim sistemi de bir çoklu CPU sistemiydi. Çoklu süreçlerin koordinasyonu
ve senkronizasyonu şaşırtıcı derecede iyi tasarlanmıştı.
Machine Translated by Google
bibliyografya 21
Tarih, belirli bir amaca uygun (uzun veya kısa süreli) işletim sistemleriyle doludur ve
daha sonra söndüğünde, daha fazla özelliğe sahip, daha yeni donanımları destekleyen,
kullanımı daha kolay olan veya daha yeni olan işletim sistemleriyle değiştirilir. daha iyi
pazarlanır. Bu eğilimin gelecekte de devam edeceğinden eminiz.
THE işletim sistemi [Dijkstra (1968)] ve [McKeag ve Wilson (1976)] tarafından ele
alınmıştır .
Venüs sistemi [Liskov (1972)] tarafından tanımlanmıştır.
[Brinch-Hansen (1970)] ve [Brinch-Hansen (1973)] RC 4000 sistemini tartışıyor .
Mach işletim sistemi ve onun atası olan Accent işletim sistemi [Rashid
ve Robertson (1981)] tarafından tanımlanmıştır. Mach'ın iletişim sistemi
[Rashid (1986)], [Tevanian et al. (1989)] ve [Accetta et al. (1986)]. Mach
programlayıcı ayrıntılı olarak [Tevanian et al. (1987a)] ve [Black (1990)].
Mach paylaşımlı hafıza ve hafıza haritalama sisteminin erken bir versiyonu
[Tevanian et al. (1987b)]. Mach projesini anlatan iyi bir kaynak http://
www.cs.cmu.edu/afs/cs/project/mach/public/www/mach.html adresinde
bulunabilir.
[McKeag ve Wilson (1976)] MCP işletim sistemini tartışıyor .
Burroughs bilgisayar ailesi ve CDC için SCOPE işletim sistemi
6600.
Hydra sistemi [Wulf et al. (1981)]. CAP sistemi [Needham ve Walker (1977)] tarafından
tanımlanmıştır . [Organick (1972)] MULTICS halka koruma sistemini tartıştı.
Machine Translated by Google
bibliyografya
[Black (1990)] DL Black, “Mach İşletim Sisteminde Eşzamanlılık ve Paralellik için Zamanlama
Desteği”, IEEE Computer, Cilt 23, Sayı 5 (1990), sayfa 35– 43.
[Frah (2001)] G. Frah, Bilgi İşlemin Evrensel Tarihi, John Wiley and Sons
(2001).
bibliyografya 23
[Organick (1972)] EI Organick, Multics Sistemi: Yapısının İncelenmesi, MIT Press (1972).
[Tevanyan et al. (1989)] A. Tevanian, Jr. ve B. Smith, “Mach: The Model for for
Gelecek Unix”, Byte (1989).
Machine Translated by Google
BEk
Windows 7
Microsoft Windows 7 işletim sistemi, Intel IA-32 ve AMD64 komut seti mimarilerini
( ISA'lar) uygulayan mikroişlemciler için 32-/64-bit önleyici çoklu görev istemci işletim
sistemidir . Microsoft'un ilgili sunucu işletim sistemi Windows Server 2008 R2,
Windows 7 ile aynı kodu temel alır ancak yalnızca 64-bit AMD64 ve IA64 (Itanium)
ISA'ları destekler.
Windows 7, Windows 95/98 tabanlı önceki sistemlerin yerini alan NT koduna dayalı
bir dizi Microsoft işletim sisteminin en yenisidir. Bu ekte, Windows 7'nin temel
hedeflerini, kullanımı bu kadar kolaylaştıran sistemin katmanlı mimarisini, dosya
sistemini, ağ özelliklerini ve programlama arayüzünü tartışıyoruz.
BÖLÜM HEDEFLERİ
B.1 Tarihçe
1980'lerin ortalarında, Microsoft ve IBM , tek işlemcili Intel 80286 sistemleri için
montaj dilinde yazılmış OS/2 işletim sistemini geliştirmek için işbirliği yaptı . 1988'de
Microsoft, IBM ile ortak çabalarına son vermeye ve hem OS/2 hem de POSIX
uygulama programlama arabirimlerini (API'ler) desteklemek için kendi "yeni
teknoloji" (veya NT) taşınabilir işletim sistemini geliştirmeye karar verdi. İçinde
1
2 Ek B
Machine Translated by Google Windows 7
Ekim 1988, DEC VAX/VMS işletim sisteminin mimarı Dave Cutler,
işe alındı ve Microsoft'un yeni işletim sistemini kurma tüzüğü verildi.
Başlangıçta ekip, NT'nin yerel ortamı olarak OS/2 API'yi kullanmayı planlıyordu , ancak
geliştirme sırasında NT , yeni bir 32-bit Windows kullanacak şekilde değiştirildi.
API ( Win32 olarak adlandırılır), Windows 3.0'da kullanılan popüler 16 bit API'yi temel alır. bu
NT'nin ilk sürümleri Windows NT 3.1 ve Windows NT 3.1 Advanced idi.
Sunucu. (O zaman, 16-bit Windows Sürüm 3.1'deydi.) Windows NT Sürüm 4.0, Windows 95
kullanıcı arabirimini benimsedi ve İnternet'i birleştirdi.
web sunucusu ve web tarayıcı yazılımı. Ayrıca, kullanıcı arayüzü rutinleri ve
performansı artırmak için tüm grafik kodları çekirdeğe taşındı.
azalan sistem güvenilirliğinin yan etkisi. Her ne kadar önceki sürümleri
NT , diğer mikroişlemci mimarilerine, Windows 2000'e taşınmıştı.
Şubat 2000'de yayınlanan sürüm, yalnızca Intel'i (ve uyumlu) destekler
Pazar faktörleri nedeniyle işlemciler. Windows 2000 önemli değişiklikler içeriyor. Active
Directory'yi (X.500 tabanlı bir dizin hizmeti) ekledi,
daha iyi ağ ve dizüstü bilgisayar desteği, tak ve çalıştır cihazları için destek,
dağıtılmış dosya sistemi ve daha fazla işlemci ve daha fazla bellek için destek.
Ekim 2001'de Windows XP , hem Windows 2000 masaüstü işletim sisteminin bir
güncellemesi hem de Windows 95/98'in yerini alacak şekilde piyasaya sürüldü.
2002'de Windows XP'nin sunucu sürümü kullanıma sunuldu (Windows
.Net Sunucusu). Windows XP , grafik kullanıcı arabirimini (GUI) aşağıdakilerle güncelledi :
daha yeni donanım gelişmelerinden yararlanan görsel bir tasarım ve
birçok yeni kullanım kolaylığı özelliği. Uygulamalardaki ve işletim sisteminin kendisindeki
sorunları otomatik olarak onarmak için çok sayıda özellik eklendi. Olarak
Bu değişikliklerin sonucu olarak, Windows XP daha iyi ağ ve aygıt sağladı
deneyim (sıfır yapılandırmalı kablosuz iletişim, anında mesajlaşma, medya akışı ve dijital
fotoğrafçılık/video dahil), hem masaüstü hem de büyük çok işlemciler için çarpıcı
performans iyileştirmeleri ve daha iyi güvenilirlik ve
önceki Windows işletim sistemlerinden daha fazla güvenlik.
Uzun zamandır beklenen Windows XP güncellemesi, Windows Vista olarak adlandırıldı.
Kasım 2006'da piyasaya sürüldü, ancak iyi karşılanmadı. Windows Vista, daha sonra
Windows'ta ortaya çıkan birçok iyileştirme içeriyor olsa da
7, bu iyileştirmeler Windows Vista'nın algılanan
yavaşlık ve uyumluluk sorunları. Microsoft eleştirilere yanıt verdi
mühendislik süreçlerini geliştirerek ve daha fazla çalışarak Windows Vista'nın
Windows donanım ve uygulamalarının üreticileri ile yakın ilişki içindedir. Sonuç
Ekim 2009'da piyasaya sürülen Windows 7, ilgili
Windows'un sunucu sürümleri. Önemli mühendislik değişiklikleri arasında,
analiz için sayaçlar veya profil oluşturma yerine yürütme izlemenin artan kullanımı
sistem davranışı. İzleme, sistemde sürekli olarak çalışır, yüzlerce
senaryolar yürütülür. Bu senaryolardan biri başarısız olduğunda veya başarılı olduğunda ancak
iyi performans göstermiyorsa, nedenini belirlemek için izler analiz edilebilir.
Windows 7, iki uygulama gerçekleştirmek için bir istemci-sunucu mimarisi (Mach gibi) kullanır.
kullanıcı düzeyinde süreçlerle işletim sistemi kişilikleri, Win32 ve POSIX
alt sistemler denir. (Bir zamanlar Windows ayrıca bir OS/2 alt sistemini de destekledi,
ancak OS/2'nin çöküşü nedeniyle Windows XP'de kaldırılmıştır.) Alt sistem
mimari, diğerinin uygulama uyumluluğunu etkilemeden bir işletim sistemi kişisinde
iyileştirmeler yapılmasına izin verir. rağmen
POSIX alt sistemi, Windows 7 için kullanılabilir olmaya devam ediyor, Win32 API ,
çok popüler hale geldi ve POSIX API'leri yalnızca birkaç site tarafından kullanılıyor. Alt
sistem yaklaşımı, bir işletim sisteminden çalışmak için ilginç olmaya devam ediyor
B.2 Tasarım İlkeleri 3
Machine Translated by Google
Ancak makine sanallaştırma teknolojileri artık tek bir makinede birden çok işletim
sistemini çalıştırmanın baskın yolu haline geliyor.
Windows 7, dağıtılmış hizmetler aracılığıyla veya Windows terminal hizmetleri
aracılığıyla GUI'nin birden çok örneği aracılığıyla eşzamanlı erişimi destekleyen çok
kullanıcılı bir işletim sistemidir . Windows 7'nin sunucu sürümleri, Windows
masaüstü sistemlerinden eşzamanlı terminal sunucusu oturumlarını destekler.
Terminal sunucusunun masaüstü sürümleri, oturum açmış her kullanıcı için klavye,
fare ve monitörü sanal terminal oturumları arasında çoğaltır. Hızlı kullanıcı
değiştirme adı verilen bu özellik, kullanıcıların bir PC konsolunda oturumu kapatıp
açmaya gerek kalmadan birbirlerini engellemelerine olanak tanır .
Daha önce bazı GUI uygulamalarının Windows NT 4.0'da çekirdek moduna
geçtiğini belirtmiştik. Bir kullanıcı modu işlemi olarak masaüstü pencere yöneticisini
(DWM) içeren Windows Vista ile tekrar kullanıcı moduna geçmeye başladı . DWM ,
Windows DirectX grafik yazılımının üzerinde Windows Aero arabirimi görünümü
sağlayarak, Windows'un masaüstü birleştirmesini uygular .
DirectX, Windows'un önceki pencereleme ve grafik modellerini (Win32k ve GDI)
uygulayan kod gibi çekirdekte çalışmaya devam eder. Windows 7, DWM'de önemli
değişiklikler yaparak bellek ayak izini önemli ölçüde azalttı ve performansını artırdı.
B.2.1 Güvenlik
Windows 7 güvenlik hedefleri, Windows NT 4.0'ın bir C2 güvenlik sınıflandırması
almasını sağlayan tasarım standartlarına uymaktan daha fazlasını gerektiriyordu.
Machine Translated by Google
4 Ek B Windows 7
ABD hükümetinden. (C2 sınıflandırması, kusurlu yazılımlara ve kötü niyetli saldırılara
karşı orta düzeyde koruma anlamına gelir. Sınıflandırmalar, Turuncu Kitap olarak da
bilinen Savunma Bakanlığı Güvenilir Bilgisayar Sistemi Değerlendirme Kriterleri tarafından
tanımlandı .) Kapsamlı kod incelemesi ve testi, gelişmiş otomatik analizle birleştirildi.
güvenlik açıklarını temsil edebilecek olası kusurları belirlemek ve araştırmak için araçlar.
Windows, web siteleriyle güvenli bir şekilde iletişim kurmak için kullanılanlar gibi
yaygın protokollerin bir parçası olarak şifreleme kullanır. Şifreleme, diskte depolanan
kullanıcı dosyalarını meraklı gözlerden korumak için de kullanılır. Windows 7, kullanıcıların
BitLocker adlı bir özellikle USB flash sürücüler gibi çıkarılabilir depolama aygıtlarının yanı
sıra neredeyse tüm diski kolayca şifrelemesine olanak tanır . Şifreli diski olan bir bilgisayar
çalınırsa, hırsızların bilgisayar dosyalarından herhangi birine erişmek için çok karmaşık
bir teknolojiye (elektron mikroskobu gibi) ihtiyacı olacaktır. Windows , dosyaların
Microsoft veya bilinen başka bir şirket tarafından üretildiğini doğrulayabilmesi için işletim
sistemi ikili dosyalarını imzalamak için dijital imzalar kullanır . Windows'un bazı
sürümlerinde, çekirdekteki yüklü tüm modüllerin geçerli imzalara sahip olduğundan
emin olmak için önyükleme sırasında bir kod bütünlüğü modülü etkinleştirilir ve bu
modüllerin çevrimdışı bir saldırı tarafından tahrif edilmediğinden emin olunur.
B.2.2 Güvenilirlik
Windows, ilk on yılında bir işletim sistemi olarak büyük ölçüde olgunlaştı ve Windows
2000'e yol açtı. Aynı zamanda, kaynak kodundaki olgunluk, sistemin kapsamlı stres testi,
geliştirilmiş CPU mimarileri ve otomatik gibi faktörler nedeniyle güvenilirliği arttı. hem
Microsoft'tan hem de üçüncü şahıslardan gelen sürücülerde birçok ciddi hatanın tespiti.
Windows sonradan genişletildi
B.2 Tasarım İlkeleri 5
Machine Translated by Google
Hatalar için kaynak kodunun otomatik analizini içeren güvenilirlik elde etmeye
yönelik araçlar, doğrulama hatalarını tespit etmek için geçersiz veya beklenmeyen
giriş parametreleri ( fuzzing olarak bilinir) sağlamayı içeren testler ve kapsamlı bir
set için dinamik kontrol uygulayan sürücü doğrulayıcının bir uygulama sürümü
ortak kullanıcı modu programlama hataları. Güvenilirlikteki diğer iyileştirmeler,
daha fazla kodun çekirdekten kullanıcı modu hizmetlerine taşınmasından kaynaklanm
Windows, kullanıcı modunda sürücü yazmak için kapsamlı destek sağlar. Bir
zamanlar çekirdekte olan ve şimdi kullanıcı modunda olan sistem olanakları,
Masaüstü Pencere Yöneticisini ve ses için yazılım yığınının çoğunu içerir.
Windows deneyimindeki en önemli iyileştirmelerden biri, önyükleme sırasında bir
seçenek olarak bellek tanılaması eklenmesinden geldi. Bu ekleme özellikle değerlidir çünkü
çok az sayıda tüketici bilgisayarında hata düzeltme belleği vardır. Kötü RAM , burada ve
orada bit bırakmaya başladığında, sonuç sistemde sinir bozucu derecede düzensiz
davranıştır. Bellek teşhisinin kullanılabilirliği, kötü RAM'e sahip kullanıcıların stres düzeylerini
büyük ölçüde azaltmıştır.
Windows 7, hataya dayanıklı bir bellek yığını sundu. Yığın, uygulama
çökmelerinden öğrenir ve çöken bir uygulamanın gelecekteki yürütülmesine
azaltıcı etkenleri otomatik olarak ekler. Bu, belleği boşalttıktan sonra kullanmak
veya ayırmanın sonunu geçtikten sonra erişmek gibi yaygın hatalar içeriyor olsa
bile uygulamayı daha güvenilir hale getirir.
Windows'ta yüksek güvenilirlik elde etmek özellikle zordur çünkü neredeyse
bir milyar bilgisayar Windows çalıştırır. Kullanıcıların yalnızca küçük bir yüzdesini
etkileyen güvenilirlik sorunları bile muazzam sayıda insanı etkiliyor. Windows
ekosisteminin karmaşıklığı da zorluklara katkıda bulunuyor. Milyonlarca uygulama,
sürücü ve diğer yazılım örneği sürekli olarak indirilmekte ve Windows sistemlerinde
çalıştırılmaktadır. Tabii ki, sürekli bir kötü amaçlı yazılım saldırısı akışı da var.
Windows'un kendisine doğrudan saldırmak zorlaştıkça, açıklardan yararlanmalar
giderek popüler uygulamaları hedef alıyor.
Bu zorluklarla başa çıkmak için Microsoft, ekosistemden büyük miktarda veri
toplamak için müşteri makinelerinden gelen iletişimlere giderek daha fazla
güveniyor. Makineler, nasıl performans gösterdiklerini, hangi yazılımı çalıştırdıklarını
ve hangi sorunlarla karşılaştıklarını görmek için örneklenebilir. Müşteriler, sistemler
veya yazılımlar çöktüğünde veya kilitlendiğinde Microsoft'a veri gönderebilir.
Müşteri makinelerinden gelen bu sürekli veri akışı, kullanıcıların izniyle ve gizliliği
ihlal etmeden çok dikkatli bir şekilde toplanır. Sonuç olarak, Microsoft, Windows
ekosisteminde olup bitenlere ilişkin, yazılım güncellemeleri aracılığıyla sürekli
iyileştirmelere izin veren ve ayrıca Windows'un gelecekteki sürümlerine rehberlik
edecek veriler sağlayan, sürekli gelişen bir resim oluşturuyor.
6
Ek B Windows 7
ayrıca farklı bir komut seti için derlenmiştir. Windows 7, uyumsuzluklara rağmen
uygulamaları çalıştırmak için çeşitli stratejiler uygular.
Windows XP gibi, Windows 7 de uygulamalar ve Win32 API'leri arasında yer
alan bir uyumluluk katmanına sahiptir. Bu katman, Windows 7'nin önceki
Windows sürümleriyle (neredeyse) hata için hata uyumlu görünmesini sağlar.
Windows 7, önceki NT sürümleri gibi, 16-bit API çağrılarını eşdeğer 32-bit çağrılara
çeviren bir thunking veya dönüştürme katmanı kullanarak birçok 16-bit
uygulamayı çalıştırma desteğini sürdürür . Benzer şekilde, Windows 7'nin 64-bit
sürümü, 32-bit API çağrılarını yerel 64-bit çağrılara çeviren bir thunking katmanı sağlar.
Windows alt sistem modeli, birden çok işletim sistemi kişisinin
desteklenmesine izin verir. Daha önce belirtildiği gibi, Windows ile en yaygın
olarak kullanılan API Win32 API olsa da, Windows 7'nin bazı sürümleri bir POSIX
alt sistemini destekler. POSIX , UNIX için mevcut çoğu UNIX uyumlu yazılımın
değişiklik yapılmadan derlenmesine ve çalıştırılmasına izin veren standart bir özelliktir .
Son bir uyumluluk önlemi olarak, Windows 7'nin çeşitli sürümleri, Windows 7 içinde
Windows XP çalıştıran bir sanal makine sağlar. Bu, uygulamaların Windows XP ile hata-hata
uyumluluğu elde etmesine olanak tanır .
Görev tabanlı paralelliği desteklemek için Windows 7, yeni bir kullanıcı modu
zamanlama (UMS) biçimi sağlar. UMS , programların görevlere ayrıştırılmasına izin
verir ve daha sonra görevler, çekirdek yerine kullanıcı modunda çalışan bir
zamanlayıcı tarafından mevcut CPU'larda zamanlanır.
En küçük bilgisayarlarda birden fazla CPU'nun ortaya çıkması, paralel
hesaplamaya geçişin yalnızca bir parçasıdır. Grafik işleme birimleri (GPU'lar) , aynı
anda birden fazla veri için tek bir talimat yürütmek üzere SIMD mimarilerini
kullanarak grafikler için gereken hesaplama algoritmalarını hızlandırır . Bu, GPU'ların
yalnızca grafikler için değil, genel bilgi işlem için kullanılmasına yol açmıştır . OpenCL
ve CUDA gibi yazılımlar için işletim sistemi desteği , programların GPU'lardan
yararlanmasına izin veriyor . Windows , DirectX grafik desteğindeki yazılım aracılığıyla
GPU'ların kullanımını destekler. DirectCompute adı verilen bu yazılım, programların,
grafik gölgelendiriciler için SIMD donanımını programlamak için kullanılan aynı HLSL
(yüksek seviye gölgelendirici dili) programlama modelini kullanarak hesaplamalı
çekirdekleri belirlemesine izin verir. Hesaplamalı çekirdekler çok çalışır
8
Ek B Windows 7
Machine Translated by Google
GPU'da hızlı bir şekilde ve sonuçlarını CPU'da çalışan ana hesaplamaya döndürün.
B.2.5 Genişletilebilirlik
Genişletilebilirlik , bir işletim sisteminin bilgi işlem teknolojisindeki gelişmelere ayak
uydurma kapasitesini ifade eder. Zaman içinde değişimi kolaylaştırmak için
geliştiriciler, Windows'u katmanlı bir mimari kullanarak uyguladılar. Windows
yöneticisi çekirdek modunda çalışır ve sistemin ortak kullanımını destekleyen temel
sistem hizmetlerini ve özetleri sağlar. Yöneticiye ek olarak, birkaç sunucu alt sistemi
kullanıcı modunda çalışır. Bunlar arasında farklı işletim sistemlerini taklit eden
çevresel alt sistemler vardır. Böylece Win32 API'leri ve POSIX için yazılan programların
tümü Windows üzerinde uygun ortamda çalışır.
Modüler yapı nedeniyle, yürütmeyi etkilemeden ek çevresel alt sistemler eklenebilir.
Ayrıca Windows, G/Ç sisteminde yüklenebilir sürücüler kullanır , böylece sistem
çalışırken yeni dosya sistemleri, yeni G/Ç aygıtları ve yeni ağ türleri eklenebilir.
Windows, Mach işletim sistemi gibi bir istemci-sunucu modeli kullanır ve Open
Software Foundation tarafından tanımlandığı gibi uzaktan yordam çağrıları (RPC'ler)
yoluyla dağıtılmış işlemeyi destekler.
B.2.6 Taşınabilirlik
Bir işletim sistemi, birkaç değişiklikle bir CPU mimarisinden diğerine taşınabiliyorsa
taşınabilirdir . Windows taşınabilir olacak şekilde tasarlanmıştır. UNIX işletim sistemi
gibi , Windows da öncelikle C ve C++ ile yazılmıştır. Mimariye özgü kaynak kodu
nispeten küçüktür ve montaj kodunun kullanımı çok azdır. Windows'u yeni bir
mimariye taşımak, çoğunlukla Windows çekirdeğini etkiler, çünkü Windows'taki
kullanıcı modu kodu neredeyse tamamen mimariden bağımsız olacak şekilde
yazılmıştır. Windows'u taşımak için, çekirdeğin mimarisine özgü kodunun taşınması
gerekir ve bazen, sayfa tablosu biçimi gibi büyük veri yapılarındaki değişiklikler
nedeniyle çekirdeğin diğer bölümlerinde koşullu derleme gerekir. Tüm Windows
sistemi daha sonra yeni CPU komut seti için yeniden derlenmelidir .
İşletim sistemleri yalnızca CPU mimarisine değil, aynı zamanda CPU destek
yongalarına ve donanım önyükleme programlarına da duyarlıdır. CPU ve destek
yongaları topluca yonga seti olarak bilinir . Bu yonga setleri ve ilgili önyükleme kodu,
kesintilerin nasıl sağlanacağını belirler, her sistemin fiziksel özelliklerini tanımlar ve
CPU mimarisinin hata kurtarma ve güç yönetimi gibi daha derin yönlerine arabirimler
sağlar. Windows'u her bir destek yongasının yanı sıra her bir CPU mimarisine taşımak
zorunda olmak külfetli olurdu. Bunun yerine Windows, yonga setine bağlı kodun
çoğunu , çekirdekle birlikte yüklenen donanım soyutlama katmanı (HAL) adı verilen
dinamik bağlantı kitaplığında (DLL) yalıtır. Windows çekirdeği , temeldeki yonga seti
ayrıntılarından ziyade HAL arabirimlerine bağlıdır . Bu, belirli bir CPU için tek bir
çekirdek ve sürücü ikili kümesinin, yalnızca HAL'ın farklı bir sürümünü yükleyerek
farklı yonga kümeleriyle kullanılmasına olanak tanır .
Yıllar içinde Windows bir dizi farklı CPU mimarisine taşındı: Intel IA-32 uyumlu
32 bit CPU'lar, AMD64 uyumlu ve IA64 64 bit CPU'lar, DEC Alpha ve MIPS ve PowerPC
CPU'lar. Bu CPU mimarilerinin çoğu piyasada başarısız oldu. Windows 7 sevk
edildiğinde, yalnızca IA-
B.2 Tasarım İlkeleri 9
Machine Translated by Google
Sunucularda AMD64 ve IA64 ile birlikte istemci bilgisayarlarda 32 ve AMD64 mimarileri
desteklendi.
10
Ek B Windows 7
kimlik doğrulama
paketi
güvenlik hesap
Win32
yöneticisi veritabanı
alt sistemi
Kullanıcı modu
yönetici
G/Ç yöneticisi
sanal yerel
güvenlik tak ve
nesne süreç prosedür
dosya sistemi referans çalıştır bellek pencere
yöneticisi monitörü yöneticisi çağrı
önbellek yöneticisi yöneticisi yöneticisi
tesisi
yöneticisi
aygıt
sürücüleri
çekirdek grafik
ağ
aygıt
sürücüleri
sürücüleri
donanım
Windows mimarisi, Şekil B.1'de gösterildiği gibi katmanlı bir modüller sistemidir.
Ana katmanlar , tümü çekirdek modunda çalışan HAL, çekirdek ve yönetici ve
kullanıcı modunda çalışan bir dizi alt sistem ve hizmettir. Kullanıcı modu alt sistemleri
iki kategoriye ayrılır: farklı işletim sistemlerini taklit eden çevresel alt sistemler ve
güvenlik işlevleri sağlayan koruma alt sistemleri . Bu tür mimarinin başlıca
avantajlarından biri, modüller arasındaki etkileşimlerin basit tutulmasıdır.
Hangi destek yongaları mevcut olursa olsun, her bir CPU mimarisi. Aygıt sürücüleri
aygıtları eşler ve onlara doğrudan erişir, ancak bellek eşleme, G/Ç veriyollarını
yapılandırma, DMA kurma ve ana karta özgü olanaklarla başa çıkma gibi yonga setine
özgü ayrıntıların tümü HAL arabirimleri tarafından sağlanır.
B.3.2 Çekirdek
Çekirdek gönderici, yürütme ve alt sistemler için temel sağlar. Göndericinin çoğuna
hiçbir zaman bellekten çağrı yapılmaz ve yürütmesi hiçbir zaman engellenmez. Başlıca
sorumlulukları, iş parçacığı zamanlama ve bağlam değiştirme, senkronizasyon ilkelerinin
uygulanması, zamanlayıcı yönetimi, yazılım kesintileri (eşzamansız ve ertelenmiş
prosedür çağrıları) ve istisna gönderimidir.
Diğer birçok modern işletim sistemi gibi, Windows da yürütülebilir kod için süreçleri ve
iş parçacıklarını kullanır. Her işlemin bir veya daha fazla iş parçacığı vardır ve her iş
parçacığının gerçek öncelik, işlemci benzeşimi ve CPU kullanım bilgileri dahil olmak
üzere kendi zamanlama durumu vardır .
Altı olası iş parçacığı durumu vardır: hazır, bekleme, çalışıyor, bekliyor, geçiş ve
sonlandırıldı. Hazır , iş parçacığının çalışmayı beklediğini gösterir. En yüksek
öncelikli hazır iş parçacığı bekleme durumuna taşınır, bu da çalıştırılacak bir sonraki
iş parçacığı olduğu anlamına gelir. Çok işlemcili bir sistemde, her işlemci bir iş
parçacığını bekleme durumunda tutar. Bir işlemci üzerinde yürütülürken bir iş
parçacığı çalışıyor . Daha yüksek öncelikli bir iş parçacığı tarafından öncelenene
kadar, sona erene kadar, tahsis edilen yürütme süresi (kuantum) bitene kadar veya
G/Ç'nin tamamlandığını bildiren bir olay gibi bir gönderici nesnesinde bekleyene
kadar çalışır. Bir iş parçacığı, gönderici nesnesinin sinyallenmesini beklerken bekleme d
Yürütme için gerekli kaynakları beklerken bir iş parçacığı geçiş durumundadır; örneğin,
çekirdek yığınının diskten değiştirilmesini bekliyor olabilir. Bir iş parçacığı yürütmeyi
bitirdiğinde sonlandırılmış duruma girer .
Dağıtıcı, iş parçacığı yürütme sırasını belirlemek için 32 düzeyli bir öncelik şeması
kullanır. Öncelikler iki sınıfa ayrılır: değişken sınıf ve gerçek zamanlı sınıf. Değişken sınıf,
1'den 15'e kadar öncelikleri olan dizileri içerir ve gerçek zamanlı sınıf, 16'dan 31'e kadar
olan öncelikleri olan dizileri içerir.
12 Ek B
Machine Translated by Google Windows 7
Dağıtıcı, her zamanlama önceliği için bir kuyruk kullanır ve çalışmaya hazır bir iş parçacığı
bulana kadar kuyruk kümesini en yüksekten en düşüğe doğru hareket ettirir. Bir iş
parçacığının belirli bir işlemci benzeşimi varsa ancak bu işlemci mevcut değilse, sevk
programı bunu atlar ve mevcut işlemci üzerinde çalışmaya istekli hazır bir iş parçacığı
aramaya devam eder. Hazır iş parçacığı bulunamazsa, gönderici boş iş parçacığı adı
verilen özel bir iş parçacığı yürütür. Öncelik sınıfı 0, boşta olan iş parçacığı için ayrılmıştır.
Bir iş parçacığının kuantum zamanı bittiğinde, saat kesmesi işlemciye bir kuantum
sonu ertelenmiş prosedür çağrısını (DPC) sıralar . DPC'nin kuyruğa alınması , işlemci
normal kesme önceliğine döndüğünde bir yazılım kesintisine neden olur. Yazılım kesintisi,
göndericinin işlemciyi, önceden belirlenen iş parçacığının öncelik düzeyinde bir sonraki
kullanılabilir iş parçacığını yürütmesi için yeniden planlamasına neden olur.
Zamanlama, bir iş parçacığı hazır veya bekleme durumuna girdiğinde, bir iş parçacığı
sona erdiğinde veya bir uygulama bir iş parçacığının önceliğini veya işlemci benzeşimini
değiştirdiğinde gerçekleşir. Düşük öncelikli bir iş parçacığı çalışırken daha yüksek öncelikli
bir iş parçacığı hazır hale gelirse, düşük öncelikli iş parçacığı önlenir. Bu öncelik, daha
yüksek öncelikli iş parçacığına CPU'ya tercihli erişim sağlar. Ancak Windows zor bir gerçek
zamanlı işletim sistemi değildir, çünkü gerçek zamanlı bir iş parçacığının belirli bir zaman
sınırı içinde çalışmaya başlayacağını garanti etmez; DPC'ler ve kesme hizmeti rutinleri
(ISR'ler) çalışırken (aşağıda daha ayrıntılı tartışıldığı gibi ) iş parçacıkları süresiz olarak
engellenir .
Geleneksel olarak, işletim sistemi zamanlayıcıları, iş parçacıklarına göre CPU
kullanımını ölçmek için örnekleme kullanırdı . Sistem zamanlayıcısı periyodik olarak
tetiklenir ve zamanlayıcı kesme işleyicisi, o anda hangi iş parçacığının programlandığını
ve kesme meydana geldiğinde kullanıcı modunda mı yoksa çekirdek modunda mı yürütüldüğün
Bu örnekleme tekniği gerekliydi çünkü ya CPU'nun yüksek çözünürlüklü bir saati yoktu ya
da saat çok pahalıydı ya da sık sık erişilemeyecek kadar güvenilir değildi. Verimli olmasına
rağmen, örnekleme yanlıştı ve kesinti hizmet süresinin iş parçacığı süresi olarak dahil
edilmesi ve kuantumun yalnızca bir kısmı için çalışan iş parçacıklarının gönderilmesi gibi
anormalliklere yol açtı. Windows Vista'dan başlayarak, Windows'taki CPU zamanı, son
işlemcilerde bulunan donanım zaman damgası sayacı (TSC) kullanılarak izlendi. TSC'nin
kullanılması , CPU kullanımının daha doğru bir şekilde hesaplanmasını sağlar ve
zamanlayıcı, tam bir kuantum için çalıştırılmadan önce iş parçacıklarını engellemez.
Machine Translated by Google
sistemi veri yapıları, tahsis, referans sayımı ve güvenlik için ortak tesisler kullanan nesneler
olarak yönetilir. Gönderici nesneleri , sistemdeki gönderimi ve senkronizasyonu kontrol
eder. Bu nesnelerin örnekleri aşağıdakileri içerir:
• Mutant , sahiplik kavramıyla ilişkili çekirdek modu veya kullanıcı modu karşılıklı
dışlama sağlar.
• Semafor nesnesi , bir kaynağa erişen iş parçacıklarının sayısını kontrol etmek için bir
sayaç veya geçit görevi görür.
Dağıtıcı nesnelerinin çoğuna, bir tanıtıcı döndüren açık bir işlem aracılığıyla kullanıcı
modundan erişilir. Kullanıcı modu kodu, işletim sisteminin yanı sıra diğer iş parçacıklarıyla
da senkronize olmak için tanıtıcıları yoklar veya bekler (bkz. Bölüm B.7.1).
B.3.2.4 Yazılım Kesintileri: Asenkron ve Ertelenmiş Prosedür Çağrıları Dağıtıcı iki tür
gönderici ayrıca donanım veya yazılım tarafından oluşturulan istisnalar ve kesintiler için tuzak
işleme sağlar. Windows, aşağıdakiler de dahil olmak üzere, mimariden bağımsız birkaç özel durum
tanımlar:
okuma hatası
• Erişim ihlali
Tuzak işleyicileri basit istisnalarla ilgilenir. Ayrıntılı istisna işleme, çekirdeğin istisna göndericisi
tarafından gerçekleştirilir. İstisna gönderici , istisnanın nedenini içeren bir istisna kaydı oluşturur
ve bununla ilgilenecek bir istisna işleyicisi bulur.
Çekirdek modunda bir istisna oluştuğunda, istisna gönderici istisna işleyicisini bulmak için
sadece bir rutini çağırır. Hiçbir işleyici bulunamazsa, ölümcül bir sistem hatası oluşur ve kullanıcı,
sistem arızasını belirten kötü şöhretli "mavi ölüm ekranı" ile kalır.
Özel durum işleme, kullanıcı modu süreçleri için daha karmaşıktır, çünkü bir çevresel alt sistem
( POSIX sistemi gibi) oluşturduğu her işlem için bir hata ayıklayıcı bağlantı noktası ve bir istisna
bağlantı noktası ayarlar. (Limanlarla ilgili ayrıntılar için,
Machine Translated by Google
Bölüm B.3.3.4'e bakın.) Bir hata ayıklayıcı bağlantı noktası kayıtlıysa, kural dışı durum
işleyici özel durumu bağlantı noktasına gönderir. Hata ayıklayıcı bağlantı noktası
bulunamazsa veya bu özel durumu işlemezse, dağıtım programı uygun bir özel
durum işleyicisi bulmaya çalışır. İşleyici bulunamazsa, hata ayıklama için hatayı
yakalamak için hata ayıklayıcı yeniden çağrılır. Hiçbir hata ayıklayıcı çalışmıyorsa,
çevresel alt sisteme istisnayı çevirme şansı vermek için sürecin istisna bağlantı
noktasına bir mesaj gönderilir. Örneğin, POSIX ortamı , özel duruma neden olan iş
parçacığına göndermeden önce Windows özel durum mesajlarını POSIX sinyallerine
çevirir . Son olarak, başka hiçbir şey işe yaramazsa, çekirdek istisnaya neden olan iş
parçacığını içeren işlemi sonlandırır.
Windows bir istisnayı işleyemediğinde, meydana gelen hatanın bir tanımını
oluşturabilir ve daha fazla analiz için bilgileri Microsoft'a geri göndermek için
kullanıcıdan izin isteyebilir. Bazı durumlarda, Microsoft'un otomatik analizi hatayı
hemen algılayabilir ve bir düzeltme veya geçici çözüm önerebilir.
Çekirdekteki kesme dağıtıcısı, bir aygıt sürücüsü tarafından sağlanan bir kesme
hizmeti yordamını (ISR) veya bir çekirdek tuzağı işleyici yordamını çağırarak kesmeleri
işler. Kesme, kesmeyi işlemek için gereken tüm bilgileri içeren bir kesme nesnesi
tarafından temsil edilir . Bir kesme nesnesi kullanmak, kesme donanımına doğrudan
erişmek zorunda kalmadan kesme hizmeti rutinlerini bir kesmeyle ilişkilendirmeyi
kolaylaştırır.
Farklı işlemci mimarileri, farklı türde ve sayıda kesintiye sahiptir. Taşınabilirlik
için, kesme dağıtıcısı, donanım kesmelerini standart bir kümeye eşler. Kesintilere
öncelik verilir ve öncelik sırasına göre hizmet verilir. Windows'ta 32 kesme istek
düzeyi (IRQL) vardır. Sekiz tanesi çekirdek tarafından kullanılmak üzere ayrılmıştır;
kalan 24'ü, HAL aracılığıyla yapılan donanım kesintilerini temsil eder (ancak çoğu
IA-32 sistemi yalnızca 16'yı kullanır). Windows kesmeleri Şekil B.2'de tanımlanmıştır.
Çekirdek, her kesme düzeyini bir hizmet rutinine bağlamak için bir kesme-
gönderme tablosu kullanır. Çok işlemcili bir bilgisayarda Windows, her işlemci için
ayrı bir kesme-gönderme tablosu (IDT) tutar ve her işlemcinin IRQL'si , kesintileri
maskelemek için bağımsız olarak ayarlanabilir. Bir işlemcinin IRQL'sine eşit veya
daha düşük bir seviyede meydana gelen tüm kesmeler, IRQL düşürülene kadar engellenir .
30 güç
29 kesintisi işlemciler arası bildirim (başka bir işlemcinin
harekete geçmesini isteme; örneğin, bir işlemi gönderme
28 veya TLB'yi güncelleme) saat (zamanı izlemek için kullanılır)
27 profil geleneksel PC IRQ donanımı kesintileri gönderme ve
3-26 ertelenmiş prosedür çağrısı (DPC) (çekirdek) asenkron
2 prosedür çağrısı (APC) pasif
1
0
16 Ek B Windows 7
çekirdek düzeyinde bir iş parçacığı veya kesme işleminden dönen bir ISR tarafından.
Windows bu özellikten yararlanır ve APC'leri ve DPC'leri teslim etmek, iş parçacıklarını
G/Ç tamamlama ile senkronize etmek, iş parçacığı yürütmesini başlatmak ve
zamanlayıcıları işlemek gibi sistem işlevlerini gerçekleştirmek için yazılım kesintilerini kullanır .
Geleneksel Windows'ta programcının bir iş parçacığı olarak düşündüğü şey aslında iki
iş parçacığıdır: bir kullanıcı modu iş parçacığı (UT) ve bir çekirdek modu iş parçacığı
(KT). Her birinin kendi yığını, kayıt değerleri ve yürütme bağlamı vardır. Bir UT ,
çekirdek moduna bir tuzağa neden olan bir talimatı yürüterek bir sistem hizmeti ister.
Çekirdek katmanı, UT ve karşılık gelen KT arasında geçiş yapan bir tuzak işleyicisi
çalıştırır. Bir KT , çekirdek yürütmesini tamamladığında ve karşılık gelen UT'ye geri
dönmeye hazır olduğunda , kullanıcı modunda yürütmesini sürdüren UT'ye geçiş
yapmak için çekirdek katmanı çağrılır .
Windows 7, UT'lerin kullanıcı modu zamanlamasını desteklemek için çekirdek
katmanının davranışını değiştirir . Windows 7'deki kullanıcı modu zamanlayıcıları,
ortak zamanlamayı destekler. Bir UT , kullanıcı modu zamanlayıcısını çağırarak açıkça
başka bir UT'ye dönüşebilir; çekirdeğe girmek gerekli değildir. Kullanıcı modu
programlaması Bölüm B.7.3.7'de daha ayrıntılı olarak açıklanmıştır.
B.3.3 Yönetici
Windows yöneticisi, tüm çevresel alt sistemlerin kullandığı bir dizi hizmet sağlar.
Hizmetler şu şekilde gruplandırılmıştır: nesne yöneticisi, sanal bellek yöneticisi, süreç
yöneticisi, gelişmiş yerel prosedür çağrı tesisi, G/Ç yöneticisi, önbellek yöneticisi,
güvenlik referans monitörü, tak ve çalıştır ve güç yöneticileri, kayıt defteri ve önyükleme.
Bir süreç, bir nesne oluşturarak, var olan bir nesneyi açarak, başka bir süreçten
çoğaltılmış bir tanıtıcı alarak veya üst süreçten bir tanıtıcı devralarak bir tanıtıcı alır.
Bir işlem çıktığında, tüm açık tutamaçları örtük olarak kapatılır. Nesne yöneticisi,
nesne tanıtıcıları oluşturan tek varlık olduğundan, güvenliği kontrol etmek için doğal
yerdir. Nesne yöneticisi, süreç nesneyi açmaya çalıştığında, sürecin bir nesneye
erişim hakkına sahip olup olmadığını kontrol eder. Nesne yöneticisi ayrıca, bir işlemi
tüm başvurulan nesneler tarafından işgal edilen bellek için ücretlendirerek ve
birikmiş ücretler işlemin kotasını aştığında daha fazla bellek ayırmayı reddederek,
bir işlemin kullanabileceği maksimum bellek miktarı gibi kotaları da uygular.
Nesne yöneticisi, her nesne için iki sayının kaydını tutar: nesne için tutamaç
sayısı ve başvurulan işaretçi sayısı. Tutamaç sayısı, çekirdeği içeren sistem süreci de
dahil olmak üzere tüm süreçlerin tanıtıcı tablolarındaki nesneye başvuran tanıtıcıların
sayısıdır. Başvurulan işaretçi sayısı, çekirdek tarafından yeni bir işaretçiye ihtiyaç
duyulduğunda artırılır ve çekirdek işaretçiyle bittiğinde azaltılır. Bu başvuru
sayımlarının amacı, nesneye bir tanıtıcı veya dahili çekirdek işaretçisi tarafından
başvurulurken serbest bırakılmadığından emin olmaktır.
Her nesne, daha önce belirtildiği gibi, bir nesne türünün bir örneğidir. Nesne
türü, örneklerin nasıl tahsis edileceğini, veri alanlarının nasıl tanımlanacağını ve tüm
nesneler için kullanılan standart sanal işlevler kümesinin nasıl uygulanacağını belirtir.
Standart işlevler, nesnelere ad eşleştirme, kapatma ve silme ve güvenlik kontrolleri
uygulama gibi işlemleri gerçekleştirir.
Belirli bir nesne türüne özgü işlevler, nesne türünde belirtilen yöntemlerle değil, o
belirli nesne türü üzerinde çalışmak üzere tasarlanmış sistem hizmetleri tarafından
uygulanır.
parse() işlevi, standart nesne işlevlerinin en ilginçidir. Bir nesnenin uygulanmasına
izin verir. Dosya sistemleri, kayıt yapılandırma deposu ve GUI nesneleri, Windows ad
alanını genişletmek için ayrıştırma işlevlerinin en dikkate değer kullanıcılarıdır.
adres alanını, fiziksel bellek tahsisini ve sayfalamayı yöneten yönetici bileşen, sanal
bellek (VM) yöneticisidir.
VM yöneticisinin tasarımı , temel donanımın sanal-fiziksel eşlemeyi, bir sayfalama
mekanizmasını ve çok işlemcili sistemlerde şeffaf önbellek tutarlılığını desteklediğini
ve ayrıca birden çok sayfa tablosu girdisinin aynı fiziksel sayfa çerçevesine
eşlenmesine izin verdiğini varsayar. Windows'taki VM yöneticisi , AMD64 ve IA-32
uyumlu işlemcilerde 4 KB ve 2 MB ve IA64'te 8 KB sayfa boyutlarına sahip sayfa
tabanlı bir yönetim şeması kullanır . Fiziksel bellekte olmayan bir işleme tahsis edilen
veri sayfaları ya diskteki disk belleği dosyasında depolanır ya da doğrudan yerel ya
da uzak dosya sistemindeki normal bir dosyaya eşlenir. Bir sayfa ayrıca talep üzerine
sıfır doldurularak işaretlenebilir; bu, sayfayı tahsis edilmeden önce sıfırlarla başlatır
ve böylece önceki içeriği siler.
IA-32 işlemcilerde her işlem 4 GB sanal adres alanına sahiptir. Üst 2 GB , tüm
işlemler için çoğunlukla aynıdır ve işletim sistemi koduna ve veri yapılarına erişmek
için Windows tarafından çekirdek modunda kullanılır. AMD64 mimarisi için Windows,
her işlem için mevcut donanım tarafından desteklenen 16 EB'den kullanıcı modu için
8 TB sanal adres alanı sağlar .
Çekirdek modu bölgesinin tüm süreçler için aynı olmayan kilit alanları, kendi
kendine eşleme, hiper uzay ve oturum alanıdır. Donanım, fiziksel sayfa çerçevesi
numaralarını kullanarak bir işlemin sayfa tablosuna başvurur ve sayfa tablosunun
kendi kendine eşlemesi , işlemin sayfa tablosunun içeriğini sanal adresler kullanarak
erişilebilir hale getirir. Hiperuzay , geçerli işlemin çalışma kümesi bilgilerini çekirdek
modu adres alanına eşler. Oturum alanı , aynı terminal sunucusu (TS) oturumundaki
tüm işlemler arasında Win32 ve diğer oturuma özgü sürücülerin bir örneğini
paylaşmak için kullanılır . Farklı TS oturumları, bu sürücülerin farklı örneklerini
paylaşır, ancak bunlar aynı sanal adreslerde eşlenir.
Sanal adres alanının alt, kullanıcı modu bölgesi, her işleme özeldir ve hem kullanıcı
hem de çekirdek modu iş parçacıkları tarafından erişilebilir.
Windows VM yöneticisi, sanal bellek ayırmak için iki adımlı bir işlem kullanır. İlk
adım , işlemin sanal adres alanında bir veya daha fazla sanal adres sayfası ayırır .
İkinci adım , sanal bellek alanı (fiziksel bellek veya disk belleği dosyalarındaki alan)
atayarak tahsisi gerçekleştirir.
Windows, taahhüt edilen belleğe bir kota uygulayarak bir işlemin tükettiği sanal
bellek alanı miktarını sınırlar. Bir işlem, hafızayı devre dışı bırakır.
Machine Translated by Google
artık diğer işlemler tarafından kullanılmak üzere sanal bellek alanını boşaltmak için kullanmıyor.
Sanal adresleri ayırmak ve sanal belleği işlemek için kullanılan API'ler, bir işlem nesnesini
parametre olarak ele alır . Bu, bir işlemin diğerinin sanal belleğini kontrol etmesine izin verir.
Çevresel alt sistemler, müşteri süreçlerinin hafızasını bu şekilde yönetir.
Windows, bir bölüm nesnesi tanımlayarak paylaşılan belleği uygular . Bir bölüm nesnesine
bir tanıtıcı aldıktan sonra, bir işlem bölümün belleğini görünüm adı verilen bir dizi adrese eşler.
Bir süreç, tüm bölümün veya yalnızca ihtiyaç duyduğu bölümün bir görünümünü oluşturabilir.
Windows, bölümlerin yalnızca geçerli işlemle değil, arayanın bir tanıtıcısı olan herhangi bir
işlemle eşlenmesine izin verir.
Bölümler birçok şekilde kullanılabilir. Bir bölüm, sistem sayfalama dosyasında veya normal
bir dosyada ( bellek eşlemeli bir dosya) disk alanı ile yedeklenebilir. Bir bölüm temel alınabilir ,
yani ona erişmeye çalışan tüm işlemler için aynı sanal adreste görünür. Bölümler ayrıca fiziksel
belleği temsil edebilir ve 32 bitlik bir işlemin sanal adres alanına sığabileceğinden daha fazla
fiziksel belleğe erişmesine izin verir. Son olarak, bölümdeki sayfaların bellek koruması salt
okunur, okuma-yazma, okuma-yazma-yürütme, salt yürütme, erişim yok veya yazma üzerine
kopyalama olarak ayarlanabilir.
• Erişimsiz bir sayfa , erişilirse bir istisna oluşturur . İstisna, örneğin, hatalı bir programın bir
dizinin sonunun ötesinde yinelenip yinelenmediğini kontrol etmek veya sadece programın
belleğe kaydedilmemiş sanal adreslere erişmeye çalıştığını algılamak için kullanılabilir.
Kullanıcı ve çekirdek modu yığınları , yığın taşmalarını algılamak için erişimsiz sayfaları
koruma sayfaları olarak kullanır. Başka bir kullanım, yığın arabellek taşmalarını aramaktır.
Hem kullanıcı modu bellek ayırıcısı hem de aygıt doğrulayıcı tarafından kullanılan özel
çekirdek ayırıcısı, her ayırmayı bir sayfanın sonuna eşlemek için yapılandırılabilir, ardından
bir ayırmanın sonunun ötesine erişen programlama hatalarını algılamak için erişimsiz bir
sayfa takip edilebilir. • Yazma üzerine kopyalama mekanizması , VM yöneticisinin fiziksel
belleği daha verimli kullanmasını sağlar . İki işlem aynı bölüm nesnesinden bağımsız veri
kopyaları istediğinde, VM yöneticisi sanal belleğe tek bir paylaşılan kopya yerleştirir ve o bellek
bölgesi için yazma üzerine kopyalama özelliğini etkinleştirir. İşlemlerden biri, yazma
sayfasındaki bir kopyadaki verileri değiştirmeye çalışırsa, VM yöneticisi işlem için sayfanın
özel bir kopyasını oluşturur.
Windows'taki sanal adres çevirisi, çok düzeyli bir sayfa tablosu kullanır.
IA-32 ve AMD64 işlemciler için , her işlemin 8 bayt boyutunda 512 sayfa dizini girişi (PDE'ler)
içeren bir sayfa dizini vardır. Her PDE , 8 bayt boyutunda 512 sayfalık tablo girişi (PTE'ler) içeren
bir PTE tablosuna işaret eder. Her PTE , fiziksel bellekte 4 KB'lık bir sayfa çerçevesine işaret eder .
Çeşitli nedenlerle donanım, çok düzeyli bir sayfa tablosunun her düzeyindeki sayfa dizinlerinin
veya PTE tablolarının tek bir sayfayı kaplamasını gerektirir. Böylece, bir sayfaya sığan PDE'lerin
veya PTE'lerin sayısı, o sayfa tarafından kaç sanal adresin çevrildiğini belirler. Bu yapının bir
diyagramı için Şekil B.3'e bakın.
Şimdiye kadar açıklanan yapı, yalnızca 1 GB sanal adres çevirisini temsil etmek için
kullanılabilir. IA-32 için , ikinci bir sayfa dizini düzeyi gereklidir, buna bağlı olarak
Machine Translated by Google
20
Ek B Windows 7
sayfa tablosu sayfa sayfa tablosu sayfa tablosu sayfa sayfa tablosu
girişi 0 tablosu 0 girişi 511 girişi 0 tablosu 511 girişi 511
şemada gösterildiği gibi sadece dört giriş içerir. 64 bit işlemcilerde daha fazla
seviyeye ihtiyaç vardır. AMD64 için Windows toplam dört tam düzey kullanır. Bir
işlem için 32 bitlik bir sanal adres alanını bile tam olarak temsil etmek için gereken
tüm sayfa tablosu sayfalarının toplam boyutu 8 MB'dir. VM yöneticisi , gerektiğinde
PDE'lerin ve PTE'lerin sayfalarını tahsis eder ve kullanılmadığında sayfa tablosu
sayfalarını diske taşır. Sayfa tablosu sayfaları, başvurulduğunda belleğe geri yüklenir.
Daha sonra sanal adreslerin IA-32 uyumlu işlemcilerde fiziksel adreslere nasıl
çevrildiğini ele alacağız. 2 bitlik bir değer 0, 1, 2, 3 değerlerini temsil edebilir. 9 bitlik
bir değer 0 ile 511 arasındaki değerleri temsil edebilir; 12 bitlik bir değer, 0 - 4.095
arası değerler. Böylece, 12 bitlik bir değer, 4 KB'lık bir bellek sayfası içindeki herhangi
bir baytı seçebilir . 9 bitlik bir değer, bir sayfa dizini veya PTE tablosu sayfasındaki
512 PDE veya PTE'den herhangi birini temsil edebilir. Şekil B.4'te gösterildiği gibi,
bir sanal adres işaretçisini fiziksel bellekte bir bayt adresine çevirmek, en önemli
bitlerden başlayarak 32 bitlik işaretçiyi dört değere ayırmayı içerir:
• Sayfa tablosunun en üst seviyesindeki dört PDE'ye indekslemek için iki bit
kullanılır . Seçilen PDE , adres alanının 1 GB'ını eşleyen dört sayfa dizini
sayfasının her biri için fiziksel sayfa numarasını içerecektir .
31 0
• Seçilen PTE tablosu sayfasından 512 PTE'den birini seçmek için dokuz bit kullanılır .
Seçilen PTE , eriştiğimiz bayt için fiziksel sayfa numarasını içerecektir. • Sayfada bayt
ofseti olarak on iki bit kullanılır. Erişmekte olduğumuz baytın fiziksel adresi, seçilen
PTE'de bulduğumuz fiziksel sayfa numarasının sonuna sanal adresin en düşük 12 bitini
ekleyerek oluşturulur .
Fiziksel bir adresteki bit sayısı, sanal bir adresteki bit sayısından farklı olabilir. Orijinal
IA-32 mimarisinde, PTE ve PDE , yalnızca 20 bitlik fiziksel sayfa numarası için yeri olan 32-bit
yapılardı, bu nedenle fiziksel adres boyutu ve sanal adres boyutu aynıydı. Bu tür sistemler
sadece 4 GB fiziksel belleğe hitap edebilir. Daha sonra, IA-32, bugün kullanılan daha büyük
64-bit PTE boyutuna genişletildi ve donanım, 24 bit fiziksel adresleri destekledi. Bu sistemler
64 GB'ı destekleyebilir ve sunucu sistemlerinde kullanılmıştır. Bugün, tüm Windows
sunucuları ya AMD64 ya da IA64'ü temel alıyor ve çok, çok büyük fiziksel adresleri destekliyor
- bizim kullanabileceğimizden çok daha fazlası. (Elbette, bir zamanlar 4 GB , fiziksel bellek
için iyimser bir şekilde büyük görünüyordu.)
Performansı artırmak için VM yöneticisi, sayfa dizini ve PTE tablosu sayfalarını her
işlemde aynı bitişik sanal adres bölgesine eşler. Bu kendi kendine eşleme, VM yöneticisinin,
hangi işlem çalışıyor olursa olsun, belirli bir sanal adrese karşılık gelen mevcut PDE veya
PTE'ye erişmek için aynı işaretçiyi kullanmasına izin verir. IA-32'nin kendi kendine eşlemesi ,
çekirdek sanal adres alanının bitişik 8 MB'lik bir bölgesini alır; AMD64 kendi kendine harita
512 GB yer kaplar.
Kendi kendine eşleme önemli bir adres alanı kaplasa da, herhangi bir ek sanal bellek sayfası
gerektirmez. Ayrıca, sayfa tablosunun sayfalarının otomatik olarak fiziksel belleğe girip
çıkmasını sağlar.
Kendi kendine haritanın oluşturulmasında, üst düzey sayfa dizinindeki PDE'lerden biri
sayfa dizini sayfasının kendisine atıfta bulunur ve sayfa tablosu çevirilerinde bir "döngü"
oluşturur. Döngü alınmadıysa sanal sayfalara erişilir, döngü bir kez alınırsa PTE-tablo
sayfalarına erişilir, döngü iki kez alınırsa en alt düzey sayfa dizini sayfalarına erişilir, vb.
64 bit sanal bellek için kullanılan ek sayfa dizinleri düzeyleri, sanal adres işaretçisinin
daha da fazla değere bölünmesi dışında aynı şekilde çevrilir. AMD64 için Windows, her biri
512 sayfa veya 9+9+9+9+12 = 48 bit sanal adresi eşleyen dört tam düzey kullanır.
PDE ve PTE'ye bakarak her sanal adresi çevirmenin ek yükünü önlemek için , işlemciler
sanal sayfaları PTE'lere eşlemek için bir ilişkisel bellek önbelleği içeren çeviri görünümlü
arabellek (TLB) donanımını kullanır .
TLB , her işlemci içindeki bellek yönetim biriminin (MMU) bir parçasıdır .
MMU'nun , yalnızca TLB'de gerekli bir çeviri eksik olduğunda bellekteki sayfa tablosunda
"yürümesi" (veri yapılarında gezinmesi) gerekir .
PDE'ler ve PTE'ler , yalnızca fiziksel sayfa numaralarından fazlasını içerir. Ayrıca, işletim
sistemi kullanımı için ayrılmış bitlere ve donanımın belleği nasıl kullandığını kontrol eden
bitlere (örneğin, donanım önbelleğe almanın kullanılıp kullanılmaması gerektiği gibi) sahiptirler.
22 Ek B
Machine Translated by Google Windows 7
her sayfa. Ayrıca girişler, hem kullanıcı hem de çekirdek modları için ne tür erişimlere
izin verildiğini belirtir.
APDE , PDE yerine PTE olarak işlev görmesi gerektiğini söylemek için de
işaretlenebilir . Bir IA-32'de, sanal adres işaretçisinin ilk 11 biti , ilk iki çeviri düzeyinde
bir PDE seçer. Seçilen PDE , bir PTE olarak hareket edecek şekilde işaretlenirse ,
işaretçinin kalan 21 biti, bayt ofseti olarak kullanılır. Bu, sayfa için 2 MB boyutunda
sonuçlanır . Sayfa tablosunda 4 KB ve 2 MB sayfa boyutlarını karıştırmak ve
eşleştirmek işletim sistemi için kolaydır ve bir PDE eşlemesi 2 olduğundan , MMU'nun
TLB'deki girişleri ne sıklıkta yeniden yüklemesi gerektiğini azaltarak bazı programların
performansını önemli ölçüde artırabilir. MB , her biri 4 KB olan 512 PTE'nin yerini alır.
• Geçerli bir sayfa, bir veya daha fazla işlemin çalışma kümesinin bir parçasıdır ve
bu işlemlerin sayfa tablolarında bulunur.
63 32
31 0
sayfa
TP koruma V
dosyası
Şekil B.5 Sayfa dosyası sayfa tablosu girişi. Geçerli bit sıfırdır.
Hatalı olanlar, talep üzerine sıfır olarak işaretlenir. Bölüm nesneleri aracılığıyla
eşlenen sayfalar, uygun bölüm nesnesine bir işaretçi kodlar. Sayfa dosyasına
yazılan sayfaların PTE'leri , diskteki sayfanın yerini belirlemeye yetecek kadar
bilgi içerir, vb. Sayfa dosyası PTE'nin yapısı Şekil B.5'te gösterilmektedir.
Bu tip PTE için T, P ve V bitlerinin tümü sıfırdır. PTE , sayfa koruması için 5 bit,
sayfa dosyası ofseti için 32 bit ve disk belleği dosyasını seçmek için 4 bit içerir.
Ayrıca ek muhasebe için ayrılmış 20 bit vardır.
Windows , işlemlerden uygun şekilde sayfa almak için çalışma grubu başına,
en son kullanılan (LRU) değiştirme ilkesini kullanır. Bir işlem başlatıldığında,
varsayılan bir minimum çalışma kümesi boyutu atanır. Her işlemin çalışma
kümesinin, kalan fiziksel bellek miktarı azalmaya başlayana kadar büyümesine
izin verilir, bu noktada VM yöneticisi her çalışma kümesindeki sayfaların yaşını
izlemeye başlar. Sonunda, kullanılabilir bellek kritik düzeyde azaldığında, VM
yöneticisi eski sayfaları kaldırmak için çalışma kümesini kırpar.
Bir sayfanın ne kadar eski olduğu, ne kadar süredir bellekte olduğuna değil,
en son ne zaman referans alındığına bağlıdır. Bu, her işlemin çalışma
kümesinden periyodik olarak geçiş yapılarak ve son geçişten bu yana PTE'de
referans olarak işaretlenmemiş sayfaların yaşı artırılarak belirlenir. Çalışma
kümelerini kırpmak gerektiğinde, VM yöneticisi her bir işlemden ne kadar
kırpılacağına karar vermek için buluşsal yöntemleri kullanır ve ardından ilk önce
en eski sayfaları kaldırır.
Bir işlem, ne kadar fiziksel bellek kullanabileceği konusunda kesin bir sınır
verilmişse, bol miktarda bellek mevcut olduğunda bile çalışma setini kırpabilir .
Windows 7'de, VM yöneticisi ayrıca bellek bol olsa bile hızla büyüyen süreçleri
kısaltır. Bu politika değişikliği, sistemin diğer süreçlere yanıt verme hızını önemli
ölçüde artırır.
Windows, çalışma kümelerini yalnızca kullanıcı modu işlemleri için değil,
aynı zamanda çekirdek modunda çalışan tüm sayfalanabilir veri yapılarını ve
kodu içeren sistem işlemi için de izler. Windows 7, sistem süreci için ek çalışma
kümeleri oluşturdu ve bunları belirli çekirdek bellek kategorileriyle ilişkilendirdi;
dosya önbelleği, çekirdek yığını ve çekirdek kodunun artık kendi çalışma
kümeleri var. Farklı çalışma kümeleri, VM yöneticisinin farklı çekirdek belleği
kategorilerini kırpmak için farklı ilkeler kullanmasına olanak tanır.
24 Ek B
Machine Translated by Google Windows 7
VM yöneticisi , yalnızca hemen ihtiyaç duyulan sayfada hata yapmaz.
Araştırmalar, bir iş parçacığının bellek referansının bir yerellik özelliğine sahip olma
eğiliminde olduğunu gösteriyor. Yani bir sayfa kullanıldığında, yakın gelecekte bitişik
sayfalara atıfta bulunulması muhtemeldir. (Bir dizi üzerinde yineleme yapmayı veya bir
iş parçacığı için yürütülebilir kodu oluşturan sıralı talimatları getirmeyi düşünün.)
Yerellik nedeniyle, VM yöneticisi bir sayfada hata yaptığında, birkaç bitişik sayfada da
hata verir. Bu önceden getirme, toplam sayfa hatası sayısını azaltma eğilimindedir ve G/
Ç performansını iyileştirmek için okumaların kümelenmesine izin verir .
VM yöneticisi , taahhüt edilen belleği yönetmeye ek olarak, her işlemin ayrılmış
belleğini veya sanal adres alanını yönetir. Her işlemin, kullanımdaki sanal adres
aralıklarını ve kullanımların ne olduğunu açıklayan ilişkili bir ağacı vardır. Bu, VM
yöneticisinin gerektiğinde sayfa tablosu sayfalarında hata yapmasına izin verir.
Hatalı bir adres için PTE başlatılmamışsa, VM yöneticisi işlemin sanal adres tanımlayıcıları
(VAD'ler) ağacında adresi arar ve bu bilgiyi PTE'yi doldurmak ve sayfayı almak için
kullanır. Bazı durumlarda, bir PTE tablo sayfası bulunmayabilir; böyle bir sayfa, VM
yöneticisi tarafından şeffaf bir şekilde tahsis edilmeli ve başlatılmalıdır . Diğer durumlarda,
sayfa bir bölüm nesnesinin parçası olarak paylaşılabilir ve VAD , o bölüm nesnesine bir
işaretçi içerecektir. Bölüm nesnesi, paylaşılan sanal sayfanın nasıl bulunacağına ilişkin
bilgileri içerir, böylece PTE doğrudan onu gösterecek şekilde başlatılabilir.
Her işlem bir veya daha fazla iş parçacığı içerir. Süreçlerin kendileri, iş nesneleri adı
verilen daha büyük birimlerde toplanabilir . İş nesnelerinin kullanımı, aynı anda birden
çok işlemi kontrol eden CPU kullanımına, çalışma kümesi boyutuna ve işlemci
benzerliklerine sınırlar getirilmesine olanak tanır . İş nesneleri, büyük veri merkezi
makinelerini yönetmek için kullanılır.
Win32 ortamında işlem oluşturma örneği aşağıdaki gibidir:
2. Win32 alt sistemine işlemin oluşturulmakta olduğunu bildiren bir mesaj gönderilir .
4. İşlem yöneticisi, bir işlem nesnesi oluşturmak için nesne yöneticisini çağırır
ve nesne tanıtıcısını Win32'ye döndürür.
5. Win32 , işlem için bir iş parçacığı oluşturmak üzere işlem yöneticisini yeniden çağırır
ve tanıtıcıları yeni işleme ve iş parçacığına döndürür.
doğrudan yeni sürecin bağlamında yürütmek zorunda kalmadan yeni bir süreç adına işlemler.
Yeni bir işlem oluşturulduğunda, ilk iş parçacığı oluşturulur ve kullanıcı modu görüntü
yükleyicisinde yürütmenin başlatılmasını istemek için iş parçacığına eşzamansız bir prosedür
çağrısı gönderilir. Yükleyici, her yeni oluşturulan işlemle otomatik olarak eşlenen bir bağlantı
kitaplığı olan ntdll.dll'dedir . Windows ayrıca POSIX çevresel alt sistemini desteklemek için bir
UNIX çatal() süreç oluşturma stilini de destekler. Win32 ortamı, süreç yöneticisini doğrudan
istemci sürecinden çağırsa da, POSIX , yeni süreci alt sistem sürecinden oluşturmak için Windows
API'lerinin çapraz süreç yapısını kullanır .
Yürütmede çalışırken, bir iş parçacığı geçici olarak farklı bir işleme eklenebilir. İş parçacığı
eki , bir iş isteğini oluşturan süreç bağlamında yürütülmesi gereken çekirdek çalışan iş
parçacıkları tarafından kullanılır. Örneğin, VM yöneticisi, bir işlemin çalışma kümesine veya sayfa
tablolarına erişmesi gerektiğinde iş parçacığı eklemeyi kullanabilir ve G/Ç yöneticisi, eşzamansız
G/Ç işlemleri için bir işlemdeki durum değişkenini güncellemek için kullanabilir .
Süreç yöneticisi de kimliğe bürünmeyi destekler. Her iş parçacığının ilişkili bir güvenlik
belirteci vardır. Oturum açma işlemi bir kullanıcının kimliğini doğruladığında, güvenlik belirteci
kullanıcının işlemine eklenir ve alt işlemleri tarafından devralınır. Belirteç, kullanıcının güvenlik
kimliğini (SID) , kullanıcının ait olduğu grupların SID'lerini , kullanıcının sahip olduğu ayrıcalıkları
ve işlemin bütünlük düzeyini içerir. Varsayılan olarak, bir işlem içindeki tüm iş parçacıkları,
kullanıcıyı ve işlemi başlatan uygulamayı temsil eden ortak bir belirteci paylaşır. Ancak, bir
kullanıcıya ait güvenlik belirtecine sahip bir süreçte çalışan bir iş parçacığı, başka bir kullanıcıya
ait iş parçacığına özgü bir belirteci, o kullanıcının kimliğine bürünmek üzere ayarlayabilir.
Kimliğe bürünme olanağı, hizmetlerin farklı güvenlik kimliklerine sahip çeşitli istemciler
adına hareket etmesi gereken istemci-sunucu RPC modeli için temeldir. Bir kullanıcının kimliğine
bürünme hakkı, çoğunlukla , bir istemci sürecinden bir sunucu sürecine bir RPC bağlantısının
parçası olarak sağlanır. Kimliğe bürünme, istemci adına nesnelere ve dosyalara erişmek veya
bunları oluşturmak için sunucunun sistem hizmetlerine istemciymiş gibi erişmesine izin verir.
Sunucu işlemi güvenilir olmalı ve saldırılara karşı sağlam olması için dikkatlice yazılmalıdır. Aksi
takdirde, bir istemci bir sunucu işlemini devralabilir ve ardından daha sonraki bir istemci
isteğinde bulunan herhangi bir kullanıcının kimliğine bürünebilir.
uygulanması baştan sona bir istemci-sunucu modeli kullanır. Çevresel alt sistemler, belirli işletim
sistemi kişiliklerini uygulayan sunuculardır. Kullanıcı kimlik doğrulaması, ağ gibi diğer birçok
hizmet
Machine Translated by Google
26
Ek B Windows 7
iş olanakları, yazıcı biriktirme, web hizmetleri, ağ dosya sistemleri ve tak ve çalıştır
da bu model kullanılarak uygulanmaktadır. Bellek ayak izini azaltmak için, birden
çok hizmet genellikle svchost.exe programını çalıştıran birkaç işlemde toplanır. Her
hizmet bir dinamik bağlantı kitaplığı (DLL) olarak yüklenir; bu, hizmeti, iş parçacıklarını
paylaşmak ve mesajları beklemek için kullanıcı modu iş parçacığı havuzu olanaklarına
güvenerek uygular (bkz. Bölüm B.3.3.3).
İstemci-sunucu bilgi işlemi için normal uygulama paradigması, istekleri iletmek
için RPC'leri kullanmaktır. Win32 API , Bölüm B.6.2.7'de açıklandığı gibi standart bir
RPC protokolünü destekler. RPC , birden çok aktarım kullanır (örneğin, adlandırılmış
kanallar ve TCP/IP) ve sistemler arasında RPC'leri uygulamak için kullanılabilir .
Yerel sistemdeki bir istemci ve sunucu arasında her zaman bir RPC meydana
geldiğinde, aktarım olarak gelişmiş yerel prosedür çağrısı tesisi (ALPC) kullanılabilir.
Sistemin en alt seviyesinde, çevresel sistemlerin uygulanmasında ve önyüklemenin
ilk aşamalarında bulunması gereken hizmetler için RPC mevcut değildir. Bunun
yerine, yerel Windows hizmetleri doğrudan ALPC'yi kullanır .
ALPC bir mesaj iletme mekanizmasıdır. Sunucu işlemi, genel olarak görünür bir bağlantı
noktası nesnesi yayınlar. Bir istemci bir alt sistemden veya hizmetten hizmet istediğinde,
sunucunun bağlantı noktası nesnesine bir tanıtıcı açar ve bağlantı noktasına bir bağlantı isteği
gönderir. Sunucu bir kanal oluşturur ve istemciye bir tanıtıcı döndürür. Kanal, bir çift özel
iletişim bağlantı noktasından oluşur: biri istemciden sunucuya mesajlar için ve diğeri sunucudan
istemciye mesajlar için. İletişim kanalları bir geri arama mekanizmasını destekler, böylece
istemci ve sunucu normalde bir yanıt beklerken istekleri kabul edebilir.
1. İlk teknik, küçük ve orta boy mesajlar için uygundur (63 KB'ye kadar).
Bu durumda, bağlantı noktasının mesaj kuyruğu ara depolama olarak kullanılır
ve mesajlar bir süreçten diğerine kopyalanır.
2. İkinci teknik daha büyük mesajlar içindir. Bu durumda, kanal için paylaşılan bir
bellek bölümü nesnesi oluşturulur. Bağlantı noktasının mesaj kuyruğu
aracılığıyla gönderilen mesajlar, bölüm nesnesine atıfta bulunan bir işaretçi ve
boyut bilgisi içerir. Bu, büyük mesajları kopyalama ihtiyacını ortadan kaldırır.
Gönderici, verileri paylaşılan bölüme yerleştirir ve alıcı bunları doğrudan
görüntüler.
3. Üçüncü teknik, doğrudan bir işlemin adres alanını okuyan ve buraya yazan
API'leri kullanır. ALPC , bir sunucunun bir istemcideki verilere erişebilmesi için
işlevler ve senkronizasyon sağlar. Bu teknik normalde belirli senaryolar için
daha yüksek performans elde etmek için RPC tarafından kullanılır.
Win32 pencere yöneticisi, yönetici ALPC tesislerinden bağımsız olan kendi mesaj
geçiş biçimini kullanır . Bir istemci, pencere yöneticisi mesajlaşmasını kullanan bir
bağlantı istediğinde, sunucu üç nesne kurar: (1) istekleri işlemek için ayrılmış bir
sunucu iş parçacığı, (2) 64 KB'lık bir paylaşılan bölüm nesnesi ve (3) bir olay -çift
nesne. Olay çifti nesnesi , istemci iş parçacığı Win32 sunucusuna bir ileti
kopyaladığında veya bunun tersi olduğunda bildirim sağlamak için Win32 alt sistemi
tarafından kullanılan bir eşitleme nesnesidir . Bölüm nesnesi mesajları iletmek için
kullanılır ve olay çifti nesnesi senkronizasyon sağlar.
B.3 Sistem Bileşenleri 27
Machine Translated by Google
• Bölüm nesnesi, bir bölgeyi temsil ettiği için mesaj kopyalamayı ortadan kaldırır.
paylaşılan hafızanın
• Olay çifti nesnesi, işaretçiler ve uzunluklar içeren iletileri iletmek için bağlantı
noktası nesnesini kullanma ek yükünü ortadan kaldırır. • Özel sunucu iş parçacığı,
Aygıt sürücüleri, her aygıt için bir liste halinde düzenlenir (sürücü veya G/Ç yığını
olarak adlandırılır). Bir sürücü, sistemde bir sürücü nesnesi olarak temsil edilir. Tek bir
sürücü birden çok aygıtta çalışabileceğinden, sürücüler G/Ç yığınında sürücü nesnesine
bir bağlantı içeren bir aygıt nesnesi tarafından temsil edilir.
G /Ç yöneticisi, aldığı istekleri G/Ç istek paketi (IRP) adı verilen standart bir forma
dönüştürür. Ardından, IRP'yi işlenmek üzere hedeflenen G/Ç yığınındaki ilk sürücüye
iletir. Bir sürücü IRP'yi işledikten sonra, IRP'yi yığındaki bir sonraki sürücüye iletmesi
veya tüm işlemler bittiğinde IRP tarafından temsil edilen işlemi tamamlaması için G /Ç
yöneticisini çağırır .
G /Ç isteği, yapıldığı bağlamdan farklı bir bağlamda tamamlanabilir. Örneğin, bir
sürücü bir G/Ç işleminin kendi bölümünü gerçekleştiriyorsa ve uzun bir süre
engellemeye zorlanırsa , sistem bağlamında işlemeye devam etmek için IRP'yi bir
çalışan iş parçacığında sıraya alabilir. Orijinal iş parçacığında, sürücü, iş parçacığının G/
Ç işlemiyle paralel olarak yürütmeye devam edebilmesi için G/Ç isteğinin beklemede
olduğunu belirten bir durum döndürür .
Bir IRP , kesme hizmeti rutinlerinde de işlenebilir ve isteğe bağlı bir süreç bağlamında
tamamlanabilir. Bazı son işlemlerin G/Ç'yi başlatan bağlamda gerçekleşmesi
gerekebileceğinden , G/Ç yöneticisi , kaynak iş parçacığının süreç bağlamında son G/Ç
tamamlama işlemini yapmak için bir APC kullanır.
G /Ç yığın modeli çok esnektir. Bir sürücü yığını oluşturulduğunda, çeşitli sürücüler
kendilerini yığına filtre sürücüleri olarak ekleme fırsatına sahiptir. Filtre sürücüleri, her
G/Ç işlemini inceleyebilir ve potansiyel olarak değiştirebilir.
Montaj yönetimi, bölüm yönetimi ve disk şeritleme ve yansıtma, çalışan filtre sürücüleri
kullanılarak uygulanan işlevsellik örnekleridir.
28 Ek B
Machine Translated by Google Windows 7
yığındaki dosya sisteminin altında. Dosya sistemi filtre sürücüleri dosya sisteminin üzerinde
yürütülür ve hiyerarşik depolama yönetimi, uzaktan önyükleme için dosyaların tek bir örneği
ve dinamik biçim dönüştürme gibi işlevleri uygulamak için kullanılmıştır. Üçüncü taraflar
ayrıca virüs algılamayı uygulamak için dosya sistemi filtre sürücülerini kullanır.
Windows için aygıt sürücüleri, Windows Sürücü Modeli (WDM) belirtimine göre yazılmıştır.
Bu model, filtre sürücülerinin nasıl katmanlanacağı, güç ve tak-çalıştır isteklerinin işlenmesi
için ortak kodun nasıl paylaşılacağı, doğru iptal mantığının nasıl oluşturulacağı vb. dahil olmak
üzere aygıt sürücüleri için tüm gereksinimleri ortaya koymaktadır.
WDM'nin zenginliği nedeniyle, her yeni donanım aygıtı için tam bir WDM aygıt sürücüsü
yazmak çok fazla iş gerektirebilir. Neyse ki port/miniport modeli bunu yapmayı gereksiz
kılıyor. Ses sürücüleri, SATA aygıtları veya Ethernet denetleyicileri gibi benzer aygıtlardan
oluşan bir sınıf içinde, aygıtın her eşgörünümü, o sınıf için bağlantı noktası sürücüsü adı
verilen ortak bir sürücüyü paylaşır. Bağlantı noktası sürücüsü, sınıf için standart işlemleri
uygular ve ardından aygıta özgü işlevselliği uygulamak için aygıtın miniport sürücüsündeki
aygıta özgü rutinleri çağırır . TCP/IP ağ yığını, ndis.sys sınıfı sürücüsünün ağ sürücüsü
işlevlerinin çoğunu uygulayarak ve belirli donanımlar için ağ miniport sürücülerini çağırarak
bu şekilde uygulanır .
Windows 7 de dahil olmak üzere Windows'un son sürümleri, donanım aygıtları için aygıt
sürücüleri yazmak için ek basitleştirmeler sağlar. Çekirdek modu sürücüleri artık , WDM'nin
üzerinde sürücüler için basitleştirilmiş bir programlama modeli sağlayan Çekirdek Modu
Sürücü Çerçevesi (KMDF) kullanılarak yazılabilir . Başka bir seçenek de Kullanıcı Modu Sürücü
Çerçevesidir (UMDF). Çoğu sürücünün çekirdek modunda çalışmasına gerek yoktur ve
sürücüleri kullanıcı modunda geliştirmek ve dağıtmak daha kolaydır. Ayrıca, kullanıcı modu
sürücüsündeki bir hata çekirdek modu çökmesine neden olmadığı için sistemi daha güvenilir
hale getirir.
Birçok işletim sisteminde önbelleğe alma, dosya sistemi tarafından yapılır. Bunun yerine,
Windows, merkezi bir önbelleğe alma olanağı sağlar. Önbellek yöneticisi , G/Ç yöneticisinin
kontrolü altındaki tüm bileşenler için önbellek hizmetleri sağlamak üzere VM yöneticisi ile
yakın bir şekilde çalışır . Windows'ta önbelleğe alma, ham bloklardan ziyade dosyalara dayanır.
Önbelleğin boyutu, sistemde ne kadar boş bellek bulunduğuna göre dinamik olarak değişir.
Önbellek yöneticisi, sistem sürecinin çalışma setini paylaşmak yerine özel bir çalışma setini
korur. Önbellek yöneticisi, dosyaları çekirdek belleğine eşler ve ardından sayfaları bu özel
çalışma kümesine yerleştirmek veya bu özel çalışma kümesinden kırpmak için VM yöneticisine
özel arabirimler kullanır.
Önbellek 256 KB'lik bloklara bölünmüştür . Her önbellek bloğu bir görünüm tutabilir
(yani, bir dosyanın bellek eşlemeli bölgesi). Her önbellek bloğu, görünüm için sanal adresi ve
dosya ofsetini ve ayrıca görünümü kullanan işlemlerin sayısını depolayan bir sanal adres
kontrol bloğu (VACB) tarafından tanımlanır. VACB'ler , önbellek yöneticisi tarafından sağlanan
tek bir dizide bulunur .
G/Ç yöneticisi bir dosyanın kullanıcı düzeyinde okuma talebini aldığında, G /Ç yöneticisi
dosyanın bulunduğu birim için G/Ç yığınına bir IRP gönderir .
Önbelleğe alınabilir olarak işaretlenen dosyalar için dosya sistemi önbellek yöneticisini çağırır.
Machine Translated by Google
işlem
G/Ç
G/Ç yöneticisi
sayfa hatası
sanal makine yöneticisi disk sürücüsü
önbelleğe alınmış dosya görünümlerinde istenen verileri aramak için. Önbellek yöneticisi,
o dosyanın VACB dizin dizisinin hangi girişinin, isteğin bayt ofsetine karşılık geldiğini
hesaplar. Giriş, önbellekteki görünüme işaret ediyor veya geçersiz. Geçersizse, önbellek
yöneticisi bir önbellek bloğu (ve VACB dizisindeki ilgili girişi) tahsis eder ve görünümü
önbellek bloğuna eşler.
Önbellek yöneticisi daha sonra eşlenen dosyadan arayanın arabelleğine veri kopyalamaya
çalışır. Kopyalama başarılı olursa işlem tamamlanır.
Kopyalama başarısız olursa, bunu, VM yöneticisinin G/Ç yöneticisine önbelleğe
alınmamış bir okuma isteği göndermesine neden olan bir sayfa hatası nedeniyle yapar .
G /Ç yöneticisi sürücü yığınından başka bir istek gönderir, bu sefer önbellek yöneticisini
atlayan ve dosyadaki verileri doğrudan önbellek yöneticisi için ayrılan sayfaya okuyan bir
sayfalama işlemi talep eder. Tamamlandığında, VACB sayfayı gösterecek şekilde ayarlanır.
Şimdi önbellekte bulunan veriler, arayanın arabelleğine kopyalanır ve orijinal G/Ç isteği
tamamlanır. Şekil B.6, bu işlemlere genel bir bakış gösterir.
Çekirdek düzeyinde bir okuma işlemi, verilere kullanıcı alanındaki bir arabelleğe
kopyalanmak yerine doğrudan önbellekten erişilebilmesi dışında benzerdir.
Dosya sistemi meta verilerini (dosya sistemini tanımlayan veri yapıları) kullanmak için
çekirdek, meta verileri okumak için önbellek yöneticisinin eşleme arabirimini kullanır.
Dosya sistemi, meta verileri değiştirmek için önbellek yöneticisinin sabitleme arabirimini
kullanır. Bir sayfanın sabitlenmesi , sayfayı fiziksel bellek sayfa çerçevesine kilitler, böylece
VM yöneticisi sayfayı taşıyamaz veya dışarı çıkaramaz. Meta verileri güncelledikten sonra,
dosya sistemi önbellek yöneticisinden sayfanın sabitlemesini kaldırmasını ister. Değiştirilen
sayfa kirli olarak işaretlenir ve bu nedenle VM yöneticisi sayfayı diske boşaltır.
Performansı artırmak için, önbellek yöneticisi küçük bir okuma istekleri geçmişi tutar
ve bu geçmişten gelecek istekleri tahmin etmeye çalışır. Önbellek yöneticisi, ileri veya geri
sıralı erişim gibi önceki üç istekte bir kalıp bulursa, uygulama tarafından bir sonraki istek
gönderilmeden önce verileri önbelleğe önceden getirir. Bu şekilde, uygulama verilerini
zaten önbelleğe alınmış bulabilir ve disk G/Ç'sini beklemesi gerekmez .
çalışır. Yönetici ayrıca bir aygıt tarafından kullanılan donanım kaynaklarının yanı sıra
kullanılabilecek potansiyel kaynakları da takip eder ve uygun sürücülerin
yüklenmesiyle ilgilenir. Donanım kaynaklarının bu yönetimi (öncelikle kesintiler ve G/
Ç bellek aralıkları), tüm cihazların başarılı bir şekilde çalışabileceği bir donanım
yapılandırması belirleme hedefine sahiptir.
PnP yöneticisi dinamik yeniden yapılandırmayı aşağıdaki gibi gerçekleştirir. İlk
olarak, her veri yolu sürücüsünden (örneğin, PCI veya USB) aygıtların bir listesini alır.
Kurulu sürücüyü yükler (gerekirse bir tane bulduktan sonra) ve her aygıt için uygun
sürücüye bir aygıt ekleme isteği gönderir. PnP yöneticisi daha sonra en uygun kaynak
atamalarını belirler ve her sürücüye aygıt için kaynak atamalarını belirten bir
başlangıç aygıtı isteği gönderir. Bir aygıtın yeniden yapılandırılması gerekiyorsa, PnP
yöneticisi , sürücüye aygıtın geçici olarak devre dışı bırakılıp bırakılamayacağını soran
bir sorgu-durdurma isteği gönderir. Sürücü aygıtı devre dışı bırakabilirse, bekleyen
tüm işlemler tamamlanır ve yeni işlemlerin başlaması engellenir. Son olarak, PnP
yöneticisi bir durdurma talebi gönderir ve ardından cihazı yeni bir başlatma cihazı
talebiyle yeniden yapılandırabilir.
PnP yöneticisi ayrıca diğer istekleri de destekler. Örneğin, sorgu-durdur işlevine
benzer şekilde çalışan sorgu kaldırma, bir kullanıcı USB depolama aygıtı gibi
çıkarılabilir bir aygıtı çıkarmaya hazırlanırken kullanılır . Sürpriz kaldırma isteği , bir
cihaz arızalandığında veya daha büyük olasılıkla bir kullanıcı, sisteme önce onu
durdurmasını söylemeden bir cihazı çıkardığında kullanılır. Son olarak, kaldırma
isteği sürücüye bir aygıtı kalıcı olarak kullanmayı bırakmasını söyler.
Sistemdeki birçok program, cihazların eklenmesi veya çıkarılması ile ilgilenir, bu
nedenle PnP yöneticisi bildirimleri destekler. Böyle bir bildirim, örneğin, GUI dosya
menülerine, yeni bir depolama aygıtı takıldığında veya çıkarıldığında disk birimleri
listesini güncellemek için ihtiyaç duydukları bilgileri verir. Cihazların yüklenmesi
genellikle sistemdeki svchost.exe işlemlerine yeni hizmetlerin eklenmesiyle
sonuçlanır . Bu hizmetler, sistem önyüklendiğinde çalışmaya başlar ve orijinal aygıt
sisteme hiç takılı olmasa bile çalışmaya devam eder. Windows 7 , sistem hizmetlerini
yöneten hizmet denetim yöneticisinde (SCM) bir hizmet tetikleme mekanizması
tanıttı. Bu mekanizma ile hizmetler, yalnızca SCM , PnP yöneticisinden ilgilenilen
cihazın sisteme eklendiğine dair bir bildirim aldığında başlamak üzere kendilerini
kaydedebilir.
Windows, Bölüm B.2.8'de açıklandığı gibi enerji verimliliği için karmaşık stratejiler
uygulamak için donanımla birlikte çalışır. Bu stratejileri yönlendiren politikalar, güç
yöneticisi tarafından uygulanır. Güç yöneticisi, CPU'lar veya G/Ç aygıtları üzerindeki
yük gibi mevcut sistem koşullarını algılar ve ihtiyaç düşük olduğunda sistemin
performansını ve yanıt verme hızını azaltarak enerji verimliliğini artırır. Güç yöneticisi
ayrıca tüm sistemi çok verimli bir uyku moduna geçirebilir ve hatta belleğin tüm
içeriğini diske yazabilir ve sistemin hazırda bekletme moduna geçmesine izin vermek
için gücü kapatabilir .
Uykunun birincil avantajı, sistemin oldukça hızlı bir şekilde, belki de bir dizüstü
bilgisayarın kapağı kapandıktan sadece birkaç saniye sonra girebilmesidir. Uykudan
dönüş de oldukça hızlıdır. CPU'larda ve G/Ç aygıtlarında güç azalır, ancak içeriğin
kaybolmaması için belleğe yeterince güç verilmeye devam edilir.
32 Ek B
Machine Translated by Google Windows 7
Hazırda bekletme, sistem kapatılmadan önce tüm bellek içeriğinin diske aktarılması
gerektiğinden oldukça uzun sürer. Ancak sistemin aslında kapalı olması önemli bir avantaj.
Pil bir dizüstü bilgisayarda değiştirildiğinde veya bir masaüstü sistemi fişten çekildiğinde
olduğu gibi sistemde güç kaybı olursa, kaydedilen sistem verileri kaybolmaz.
Kapatmanın aksine, hazırda bekletme modu, kullanıcının kaldığı yerden devam edebilmesi
için çalışmakta olan sistemi kaydeder ve hazırda bekletme modu güç gerektirmediğinden,
sistem süresiz olarak hazırda bekletme modunda kalabilir.
PnP yöneticisi gibi, güç yöneticisi de sistemin geri kalanına güç durumundaki değişiklikler
hakkında bildirimler sağlar. Bazı uygulamalar, durumlarını diske kaydetmeye başlayabilmek
için sistemin ne zaman kapatılacağını bilmek ister.
Windows, yapılandırma bilgilerinin çoğunu , yaygın olarak kayıt defteri olarak bilinen
Windows yapılandırma yöneticisi tarafından yönetilen , kovan adı verilen dahili
veritabanlarında tutar . Sistem bilgileri, varsayılan kullanıcı tercihleri, yazılım yükleme,
güvenlik ve önyükleme seçenekleri için ayrı kovanlar vardır. Sistemi başlatmak için sistem
kovanındaki bilgiler gerektiğinden, kayıt yöneticisi yürütmenin bir bileşeni olarak uygulanır.
Kayıt defteri, her kovandaki yapılandırma durumunu, her biri UNICODE dizesi, ANSI
dizesi, tamsayı veya türlenmemiş ikili veriler gibi bir dizi yazılan değeri içerebilen anahtarların
(dizinlerin) hiyerarşik ad alanı olarak temsil eder . Teoride, yeni yazılım yüklendikçe yeni
anahtarlar ve değerler oluşturulur ve başlatılır; daha sonra bu yazılımın konfigürasyonundaki
değişiklikleri yansıtacak şekilde değiştirilirler.
Uygulamada, kayıt defteri genellikle genel amaçlı bir veri tabanı olarak, süreçler arası bir
iletişim mekanizması olarak ve bu tür diğer birçok yaratıcı amaç için kullanılır.
İşletim sistemi veya sürücülere yönelik güncellemelerin yüklenmesi gibi sistemde önemli
değişiklikler yapıldığında, yapılandırma verilerinin bozulma tehlikesi vardır (örneğin, çalışan
bir sürücünün çalışmayan bir sürücü veya bir uygulama ile değiştirilmesi durumunda). doğru
şekilde yüklenemiyor ve kayıt defterinde kısmi bilgi bırakıyor). Windows, bu tür değişiklikleri
yapmadan önce bir sistem geri yükleme noktası oluşturur. Geri yükleme noktası, değişiklikten
önceki kovanların bir kopyasını içerir ve kovanların bu sürümüne geri dönmek ve böylece
bozuk bir sistemin yeniden çalışmasını sağlamak için kullanılabilir.
Kayıt defteri yapılandırmasının kararlılığını artırmak için Windows, kayıt defterinin ilgili
yapılandırma değişiklikleri koleksiyonuyla kısmen güncellenmesini önlemek için
kullanılabilecek Windows Vista ile başlayan bir işlem mekanizması ekledi. Kayıt işlemleri,
çekirdek işlem yöneticisi (KTM) tarafından yönetilen daha genel işlemlerin bir parçası olabilir.
B.3 Sistem Bileşenleri 33
Machine Translated by Google
dosya sistemi işlemlerini içerir. KTM işlemleri, normal veritabanı işlemlerinde bulunan
tam semantiklere sahip değildir ve yazılım kurulumunun neden olduğu kayıt defteri
yapılandırmasındaki hasarın giderilmesi için sistem geri yükleme olanağının yerini
almamıştır.
B.3.3.11 Önyükleme
Çekirdek kendini başlatır ve iki süreç oluşturur. Sistem süreci , tüm dahili çekirdek
çalışan iş parçacıklarını içerir ve hiçbir zaman kullanıcı modunda yürütülmez.
Oluşturulan ilk kullanıcı modu işlemi, UNIX'teki INIT (başlatma) işlemine benzeyen
oturum yöneticisi alt sistemi için SMSS'dir . SMSS , disk belleği dosyalarının
oluşturulması, daha fazla aygıt sürücüsü yüklenmesi ve Windows oturumlarının
yönetilmesi dahil olmak üzere sistemin daha ileri düzeyde başlatılmasını gerçekleştirir.
Her oturum, LSASS ve SERVICES gibi sistem genelinde arka plan hizmetlerini çalıştırmak
için kullanılan oturum 0 dışında, oturum açmış bir kullanıcıyı temsil etmek için kullanılır.
Bir oturum, CSRSS sürecinin bir örneği tarafından sabitlenir . 0 dışındaki her oturum
başlangıçta WINLOGON işlemini çalıştırır. Bu işlem bir kullanıcıda oturum açar ve
ardından Windows GUI deneyimini uygulayan EXPLORER işlemini başlatır. Aşağıdaki
liste, önyüklemenin bu yönlerinden bazılarını listeler:
• SMSS , sistem başlatmayı tamamlar ve ardından oturum 0'ı ve ilk oturum açma oturumunu
başlatır.
• WINIIT , kullanıcı modunu başlatmak ve LSASS, SERVICES ve yerel oturum yöneticisi LSM'yi
başlatmak için 0 oturumunda çalışır . • Güvenlik alt sistemi olan LSASS, kimlik doğrulama
• HİZMETLER , kullanıcı modu hizmetleri de dahil olmak üzere sistemdeki tüm arka
plan etkinliklerini denetleyen hizmet kontrol yöneticisini veya SCM'yi içerir. Sistem
önyüklendiğinde başlamak için bir dizi hizmet kaydedilmiş olacaktır.
Diğerleri yalnızca talep üzerine veya bir cihazın gelmesi gibi bir olay tarafından
tetiklendiğinde başlatılacaktır.
34 Ek B
Machine Translated by Google Windows 7
• CSRSS , Win32 çevresel alt sistem sürecidir. Yalnızca bir POSIX işlemi
oluşturulduğunda talep üzerine başlatılan POSIX alt sisteminin aksine, her
oturumda başlatılır. • WINLOGON , oturum açmak için oturum 0 dışındaki her
Windows , kullanıcıyla klavye, fare ve ekran aracılığıyla arabirim oluşturan GUI tabanlı
bir konsolu destekler. Çoğu sistem ses ve videoyu da destekler. Ses girişi, Windows
ses tanıma yazılımı tarafından kullanılır; ses tanıma sistemi daha kullanışlı hale getirir
ve engelli kullanıcılar için erişilebilirliğini artırır. Windows 7, çoklu dokunmatik donanım
desteği ekleyerek , kullanıcıların ekrana dokunarak ve bir veya daha fazla parmakla
hareketler yaparak veri girmesine olanak tanır. Sonunda, şu anda iletişim uygulamaları
için kullanılan video giriş özelliği, Microsoft'un Xbox 360 Kinect ürünü için gösterdiği
gibi, hareketleri görsel olarak yorumlamak için kullanılacaktır. Gelecekteki diğer girdi
deneyimleri Microsoft'un yüzey bilgisayarından gelişebilir . Çoğu zaman oteller ve
konferans merkezleri gibi halka açık mekanlarda kurulan yüzey bilgisayarı, altında özel
kameralar bulunan bir masa yüzeyidir. Aynı anda birden fazla kullanıcının eylemlerini
izleyebilir ve üstüne yerleştirilen nesneleri tanıyabilir.
PC , elbette, kişisel bir bilgisayar olarak tasavvur edildi - doğası gereği tek kullanıcılı
bir makine. Ancak Modern Windows, bir PC'nin birden çok kullanıcı arasında paylaşımını
destekler. GUI'yi kullanarak oturum açan her kullanıcı, kullanacağı GUI ortamını temsil
etmek ve uygulamalarını çalıştırmak için oluşturulan tüm süreçleri içermek için
oluşturulmuş bir oturuma sahiptir. Windows, tek bir makinede aynı anda birden fazla
oturumun bulunmasına izin verir. Ancak Windows, bilgisayara bağlı tüm monitörler,
klavyeler ve farelerden oluşan yalnızca tek bir konsolu destekler . Konsola aynı anda
yalnızca bir oturum bağlanabilir. Kullanıcılar konsolda görüntülenen oturum açma
ekranından yeni oturumlar oluşturabilir veya önceden oluşturulmuş mevcut bir
oturuma ekleyebilirler. Bu, birden fazla kullanıcının, kullanıcılar arasında oturumu
kapatıp açmak zorunda kalmadan tek bir bilgisayarı paylaşmasına olanak tanır .
Microsoft, bu oturum kullanımını hızlı kullanıcı değiştirme olarak adlandırır.
Kullanıcılar ayrıca başka bir Windows PC'de çalışan bir oturumdan bir PC'de yeni
oturumlar oluşturabilir veya mevcut oturumlara bağlanabilir . Terminal sunucusu (TS) ,
bir kullanıcının yerel oturumundaki GUI pencerelerinden birini uzak bilgisayardaki
uzak masaüstü adı verilen yeni veya mevcut oturuma bağlar . Uzak masaüstlerinin en
yaygın kullanımı, kullanıcıların ev bilgisayarlarından iş bilgisayarlarındaki bir oturuma
bağlanmasıdır .
Birçok şirket, kurumsal kaynaklara erişen tüm kullanıcı oturumlarını çalıştırmak
için veri merkezlerinde tutulan kurumsal terminal-sunucu sistemlerini kullanır.
B.5 Dosya Sistemi 35
Machine Translated by Google
kullanıcıların bu kaynaklara her kullanıcının ofisindeki bilgisayarlardan erişmesine izin
verir. Her sunucu bilgisayar, onlarca uzak masaüstü oturumunu işleyebilir. Bu, bireysel
bilgisayarların birçok işlev için bir sunucuya güvendiği bir ince istemci bilgi işlem biçimidir.
Veri merkezi terminal sunucularına güvenmek, kurumsal bilgi işlem kaynaklarının
güvenilirliğini, yönetilebilirliğini ve güvenliğini artırır.
TS , Windows tarafından uzaktan yardım uygulamak için de kullanılır . Uzak bir
kullanıcı, konsoldaki oturumda oturum açmış olan kullanıcıyla bir oturumu paylaşmaya
davet edilebilir. Uzak kullanıcı, kullanıcının eylemlerini izleyebilir ve hatta bilgisayar
sorunlarının çözülmesine yardımcı olmak için masaüstünün kontrolüne bile verilebilir.
Windows'taki yerel dosya sistemi NTFS'dir. Tüm yerel hacimler için kullanılır.
Bununla birlikte, ilişkili USB flash sürücüler, kameralardaki flash bellekler ve harici diskler,
taşınabilirlik için 32 bit FAT dosya sistemiyle biçimlendirilebilir. FAT , kameralarda çalışan
yazılımlar gibi Windows dışında birçok sistem tarafından anlaşılan çok daha eski bir dosya
sistemi formatıdır. Bir dezavantajı, FAT dosya sisteminin yetkili kullanıcılarla dosya erişimini
kısıtlamamasıdır. FAT ile verilerin güvenliğini sağlamanın tek çözümü , verileri dosya
sisteminde depolamadan önce şifrelemek için bir uygulama çalıştırmaktır.
Buna karşılık, NTFS , tek tek dosyalara erişimi kontrol etmek için ACL'leri kullanır ve
tek tek dosyaların veya tüm birimlerin (Windows BitLocker özelliğini kullanarak) örtük
şifrelemeyi destekleyen bağlantı noktalarını destekler. NTFS , veri kurtarma, hata toleransı,
çok büyük dosyalar ve dosya sistemleri, çoklu veri akışları, UNICODE adları, seyrek dosyalar,
günlük kaydı, birim gölge kopyaları ve dosya sıkıştırma dahil olmak üzere birçok başka
özelliği de uygular .
NTFS , bir diskin tek tek sektörleriyle ilgilenmez, bunun yerine disk ayırma birimleri olarak
kümeleri kullanır. Bir küme , bir dizi disk sektörüdür.
2'lik bir güç. Küme boyutu, bir NTFS dosya sistemi ted olarak biçimlendirildiğinde
yapılandırılır. Varsayılan küme boyutu, 2 GB'den büyük birimler için 4 KB olan birim
boyutunu temel alır . Günümüz disklerinin boyutu göz önüne alındığında, daha iyi
performans elde etmek için Windows varsayılanlarından daha büyük küme boyutlarını
kullanmak mantıklı olabilir, ancak bu performans kazanımları daha fazla dahili parçalanma
pahasına olacaktır.
NTFS , disk adresleri olarak mantıksal küme numaralarını (LCN'ler) kullanır . Diskin
başından sonuna kadar kümeleri numaralandırarak bunları atar. Bu şemayı kullanarak
sistem, LCN'yi küme boyutuyla çarparak bir fiziksel disk ofsetini (bayt cinsinden)
hesaplayabilir .
NTFS'deki bir dosya, UNIX'teki gibi basit bir bayt akışı değildir ; daha ziyade, yazılan
niteliklerden oluşan yapılandırılmış bir nesnedir . Bir dosyanın her özelliği, oluşturulabilen,
silinebilen, okunabilen ve yazılabilen bağımsız bir bayt akışıdır. Bazı öznitelik türleri, dosya
adı (veya dosyanın MS-DOS kısa adı gibi takma adları varsa adları ), oluşturma zamanı ve
dosya adı da dahil olmak üzere tüm dosyalar için standarttır.
36 Ek B
Machine Translated by Google Windows 7
erişim kontrol listesini belirten güvenlik tanımlayıcısı. Kullanıcı verileri, veri
özniteliklerinde saklanır .
Çoğu geleneksel veri dosyası , dosyanın tüm verilerini içeren adsız bir veri
özniteliğine sahiptir. Ancak, açık adlarla ek veri akışları oluşturulabilir. Örneğin, bir
Windows sunucusunda depolanan Macintosh dosyalarında, kaynak çatalı adlandırılmış
bir veri akışıdır. Bileşen Nesne Modeli'nin (COM) IProp arabirimleri , görüntülerin
küçük resimleri de dahil olmak üzere sıradan dosyalardaki özellikleri depolamak için
adlandırılmış bir veri akışı kullanır. Genel olarak, öznitelikler gerektiğinde eklenebilir
ve bir dosya-adı:öznitelik sözdizimi kullanılarak erişilebilir. NTFS , örneğin dir
komutunu çalıştırırken olduğu gibi dosya sorgulama işlemlerine yanıt olarak yalnızca
adsız özniteliğin boyutunu döndürür .
NTFS'deki her dosya , ana dosya tablosu (MFT) adı verilen özel bir dosyada
saklanan bir dizideki bir veya daha fazla kayıtla tanımlanır . Bir kaydın boyutu, dosya
sistemi oluşturulduğunda belirlenir; 1 ile 4 KB arasında değişir . Küçük öznitelikler
MFT kaydının kendisinde depolanır ve yerleşik öznitelikler olarak adlandırılır. Adsız
toplu veriler gibi büyük öznitelikler, yerleşik olmayan öznitelikler olarak adlandırılır
ve diskte bir veya daha fazla bitişik uzantıda depolanır . Her bir kapsam için bir
işaretçi MFT kaydında depolanır. Küçük bir dosya için, veri özniteliği bile MFT kaydının
içine sığabilir. Bir dosyanın çok sayıda özniteliği varsa veya tüm parçalara işaret
etmek için çok sayıda işaretçiye ihtiyaç duyulacak şekilde çok parçalıysa, MFT'deki bir
kayıt yeterince büyük olmayabilir. Bu durumda, dosya, ek işaretçileri ve öznitelikleri
tutan taşma kayıtlarına yönelik işaretçileri içeren temel fil kaydı adı verilen bir kayıtla
tanımlanır .
NTFS birimindeki her dosyanın, dosya referansı adı verilen benzersiz bir kimliği
vardır. Dosya başvurusu, 48 bit dosya numarası ve 16 bit sıra numarasından oluşan
64 bitlik bir miktardır. Dosya numarası, MFT'de dosyayı tanımlayan kayıt numarasıdır
(yani dizi yuvası) . Sıra numarası, bir MFT girişi her yeniden kullanıldığında artırılır.
Sıra numarası, NTFS'nin , MFT girişi yeni bir dosya için yeniden kullanıldıktan sonra
silinen bir dosyaya eski bir referansı yakalamak gibi dahili tutarlılık kontrolleri
gerçekleştirmesini sağlar.
UNIX'te olduğu gibi , NTFS ad alanı bir dizinler hiyerarşisi olarak düzenlenir. Her
dizin , o dizindeki dosya adlarının bir dizinini depolamak için B+ ağacı adı verilen bir
veri yapısı kullanır . B+ ağacında, ağacın kökünden yaprağa kadar olan her yolun
uzunluğu aynıdır ve ağacı yeniden düzenleme maliyeti ortadan kalkar. Bir dizinin
dizin kökü , B+ ağacının en üst düzeyini içerir. Büyük bir dizin için, bu üst düzey,
ağacın geri kalanını tutan disk uzantılarına yönelik işaretçiler içerir. Dizindeki her
girdi, dosyanın adını ve dosya referansını, ayrıca dosyanın MFT'deki yerleşik
özniteliklerinden alınan güncelleme zaman damgasının ve dosya boyutunun bir
kopyasını içerir . Bu bilgilerin kopyaları, bir dizin listesinin verimli bir şekilde
oluşturulabilmesi için dizinde saklanır. Tüm dosya adları, boyutları ve güncelleme
süreleri dizinin kendisinden mevcut olduğundan, bu öznitelikleri her bir dosya için
MFT girdilerinden toplamaya gerek yoktur .
MFT'nin ilk 16 girişinin kopyası . Sonraki birkaç dosya da amaca özeldir. Aşağıda açıklanan
dosyaları içerirler.
kaydeder. • Birim dosyası birimin adını, birimi biçimlendiren NTFS sürümünü ve birimin
bozulmuş olup olmadığını ve chkdsk programı kullanılarak tutarlılık açısından kontrol
edilmesi gerekip gerekmediğini söyleyen bir bit içerir .
• Öznitelik tanımı tablosu , birimde hangi öznitelik türlerinin kullanıldığını ve bunların her
biri üzerinde hangi işlemlerin gerçekleştirilebileceğini gösterir.
• Kök dizin , dosya sistemi hiyerarşisindeki en üst düzey dizindir. • Bitmap dosyası , bir
• Önyükleme dosyası , Windows için başlatma kodunu içerir ve basit bir ROM önyükleme
yükleyicisi tarafından kolayca bulunabilmesi için belirli bir disk adresine yerleştirilmelidir .
Önyükleme dosyası aynı zamanda dosyanın fiziksel adresini de içerir.
MFT.
• Bozuk küme dosyası , birimdeki tüm bozuk alanların kaydını tutar; NTFS kullanır
hata kurtarma için bu kayıt.
Tüm NTFS meta verilerini gerçek dosyalarda tutmak yararlı bir özelliğe sahiptir. Bölüm
B.3.3.6'da tartışıldığı gibi, önbellek yöneticisi dosya verilerini önbelleğe alır. Tüm NTFS meta
verileri dosyalarda bulunduğundan, bu veriler sıradan veriler için kullanılan aynı mekanizmalar
kullanılarak önbelleğe alınabilir.
B.5.2 Kurtarma
Birçok basit dosya sisteminde, yanlış zamanda bir elektrik kesintisi, dosya sistemi veri yapılarına
o kadar ciddi şekilde zarar verebilir ki, tüm birim karışır.
UFS dahil, ancak ZFS olmayan birçok UNIX dosya sistemi, diskte fazlalık meta verileri depolar
ve tüm dosya sistemi veri yapılarını kontrol etmek ve bunları zorla tutarlı bir duruma geri
yüklemek için fsck programını kullanarak çökmelerden kurtarır. Bunları geri yüklemek
genellikle hasarlı dosyaların silinmesini ve kullanıcı verileriyle yazılmış ancak dosya sisteminin
meta veri yapılarına düzgün şekilde kaydedilmemiş veri kümelerinin serbest bırakılmasını
içerir. Bu kontrol yavaş bir süreç olabilir ve önemli miktarda veri kaybına neden olabilir.
NTFS , dosya sistemi sağlamlığına farklı bir yaklaşım getiriyor. NTFS'de, tüm dosya sistemi
veri yapısı güncellemeleri işlemler içinde gerçekleştirilir. Bir veri yapısı değiştirilmeden önce
işlem, yineleme ve geri alma bilgilerini içeren bir günlük kaydı yazar. Veri yapısı değiştirildikten
sonra, işlem, işlemin başarılı olduğunu belirtmek için günlüğe bir taahhüt kaydı yazar.
Bir kilitlenmeden sonra sistem, günlük kayıtlarını işleyerek, önce taahhüt edilen işlemler
için işlemleri yeniden yaparak ve ardından çökmeden önce başarıyla tamamlanmayan işlemler
için işlemleri geri alarak dosya sistemi veri yapılarını tutarlı bir duruma geri yükleyebilir.
Periyodik olarak (genellikle her 5 saniyede bir), günlüğe bir kontrol noktası kaydı yazılır.
Sistemin bir çökmeden kurtulmak için kontrol noktasından önce günlük kayıtlarına ihtiyacı
yoktur. Onlar yapabilir
38 Ek B
Machine Translated by Google Windows 7
atılır, bu nedenle günlük dosyası sınırsız büyümez. Sistem başlatıldıktan sonra bir NTFS
birimine ilk erişildiğinde, NTFS otomatik olarak dosya sistemi kurtarma işlemini gerçekleştirir.
Bu şema, bir çökmeden sonra tüm kullanıcı dosyası içeriğinin doğru olduğunu garanti
etmez. Yalnızca dosya sistemi veri yapılarının (meta veri dosyaları) hasarsız olmasını ve
çökmeden önce var olan bazı tutarlı durumları yansıtmasını sağlar. İşlem şemasını kullanıcı
dosyalarını kapsayacak şekilde genişletmek mümkün olacaktı ve Microsoft bunu Windows
Vista'da yapmak için bazı adımlar attı.
Günlük, birimin başındaki üçüncü meta veri dosyasında depolanır.
Dosya sistemi biçimlendirildiğinde sabit bir maksimum boyutta oluşturulur. İki bölümü
vardır: döngüsel bir günlük kayıtları kuyruğu olan günlük alanı ve bir kurtarma sırasında
NTFS'nin okumaya başlaması gereken günlük kaydı alanındaki konum gibi bağlam bilgilerini
tutan yeniden başlatma alanı . Aslında, yeniden başlatma alanı bilgilerinin iki kopyasını tutar,
bu nedenle çökme sırasında bir kopyanın zarar görmesi durumunda kurtarma hala
mümkündür.
Günlüğe kaydetme işlevi, günlük dosyası hizmeti tarafından sağlanır. Günlük dosyası
hizmeti, günlük kayıtlarını yazmaya ve kurtarma eylemlerini gerçekleştirmeye ek olarak,
günlük dosyasındaki boş alanı takip eder. Boş alan çok azalırsa, günlük dosyası hizmeti
bekleyen işlemleri sıraya alır ve NTFS tüm yeni G/Ç işlemlerini durdurur .
Devam eden işlemler tamamlandıktan sonra NTFS , tüm verileri temizlemek için önbellek
yöneticisini çağırır ve ardından günlük dosyasını sıfırlar ve sıraya alınmış işlemleri gerçekleştirir.
B.5.3 Güvenlik
Bir NTFS biriminin güvenliği, Windows nesne modelinden türetilmiştir.
Her NTFS dosyası, dosyanın sahibini belirten bir güvenlik tanımlayıcısına ve listelenen her
kullanıcıya veya gruba verilen veya reddedilen erişim izinlerini içeren bir erişim kontrol
listesine başvurur. NTFS'nin önceki sürümleri, her dosyanın bir özniteliği olarak ayrı bir
güvenlik tanımlayıcısı kullanırdı. Windows 2000'den başlayarak, güvenlik tanımlayıcıları
özniteliği, disk ve önbellek alanında önemli bir tasarruf sağlayan paylaşılan bir kopyaya
işaret eder; pek çok dosyanın aynı güvenlik tanımlayıcıları vardır.
Normal çalışmada NTFS , dosya yolu adlarındaki dizinlerin geçişi için izinleri zorlamaz.
Ancak, POSIX ile uyumluluk için bu kontroller etkinleştirilebilir. Dosya yolu adlarının modern
ayrıştırılması, yol adlarının dizine göre ayrıştırılması yerine önek eşleştirmesini kullandığından,
geçiş kontrolleri doğal olarak daha pahalıdır. Ön ek eşleştirme, bir önbellekte dizeleri arayan
ve en uzun eşleşmeye sahip girişi bulan bir algoritmadır; örneğin, foo bar dir girişi
foo bar dir2 dir3 dosyam ile eşleşir.
Ön ek eşleştirme önbelleği, yol adı geçişinin ağaçta çok daha derinlere başlamasını
sağlayarak birçok adımdan tasarruf sağlar. Geçiş kontrollerini zorlamak, kullanıcının
erişiminin her dizin düzeyinde kontrol edilmesi gerektiği anlamına gelir. Örneğin, bir
kullanıcının foo bar'da gezinme izni olmayabilir, bu nedenle foo bar dir için
erişimden başlamak bir hata olur.
disk C: (FAT) 2 GB
Birden çok diski birleştirmenin bir yolu, Şekil B.7'de gösterildiği gibi, büyük bir mantıksal birim
oluşturmak için onları mantıksal olarak birleştirmektir. Windows'ta, birim kümesi adı verilen bu
mantıksal birim, 32 adede kadar fiziksel bölümden oluşabilir. Bir NTFS birimi içeren bir birim
kümesi , dosya sisteminde zaten depolanmış olan verileri bozmadan genişletilebilir. NTFS
birimindeki bitmap meta verileri , yeni eklenen alanı kapsayacak şekilde genişletilir. NTFS , tek
bir fiziksel disk için kullandığı LCN mekanizmasının aynısını kullanmaya devam eder ve FtDisk
sürücüsü, eşlemeyi mantıksal birim uzaklığından belirli bir diskteki uzaklığa sağlar.
Birden çok fiziksel bölmeyi birleştirmenin başka bir yolu, bir şerit kümesi oluşturmak için
bloklarını sıralı sıralı biçimde serpiştirmektir . Bu şema aynı zamanda RAID seviye 0 veya disk
şeritleme olarak da adlandırılır. ( RAID (ucuz disklerin yedekli dizileri) hakkında daha fazla bilgi
için, Bölüm 11.8'e bakın.) FtDisk , 64 KB'lık bir şerit boyutu kullanır . Mantıksal birimin ilk 64 KB'si
birinci fiziksel bölümde, ikinci 64 KB'lık ikinci fiziksel bölümde saklanır ve bu, her bölüm 64 KB'lık
alana katkıda bulunana kadar devam eder. Ardından, ayırma, ikinci 64 KB bloğunu tahsis ederek
ilk diske sarılır . Bir şerit kümesi, büyük bir mantıksal birim oluşturur, ancak fiziksel düzen, G/Ç
bant genişliğini iyileştirebilir , çünkü büyük bir G/Ç için tüm diskler verileri paralel olarak
aktarabilir. Windows ayrıca RAID düzey 5'i, eşlikli şerit kümesini ve RAID düzey 1 yansıtmayı
destekler.
giden disk sektörleriyle başa çıkmak için FtDisk , sektör yedekleme adı verilen bir donanım
tekniği kullanır ve NTFS , küme yeniden eşleme adı verilen bir yazılım tekniği kullanır.
Sektör yedekleme , birçok disk sürücüsü tarafından sağlanan bir donanım özelliğidir. Bir disk
sürücüsü biçimlendirildiğinde, mantıksal blok numaralarından diskteki iyi sektörlere kadar bir
harita oluşturur. Ayrıca fazladan sektörleri yedek olarak eşlenmemiş halde bırakır. Bir sektör
başarısız olursa, FtDisk disk sürücüsüne bir yedeği değiştirmesi talimatını verir. Küme yeniden eşleme
40
Ek B Windows 7
Machine Translated by Google
dosya sistemi tarafından gerçekleştirilen bir yazılım tekniğidir. Bir disk bloğu bozulursa, NTFS ,
MFT'deki etkilenen işaretçileri değiştirerek farklı, ayrılmamış bir bloğu değiştirir . NTFS ayrıca
bozuk bloğun hiçbir zaman herhangi bir dosyaya tahsis edilmemesi gerektiğini de not eder.
Bir disk bloğu bozulduğunda, olağan sonuç veri kaybıdır. Ancak sektör yedekleme
veya küme yeniden eşleme, bir disk bloğunun arızasını maskelemek için hataya dayanıklı
birimlerle birleştirilebilir. Bir okuma başarısız olursa, sistem aynayı okuyarak veya eşlikli
bir şerit kümesinde dışlayıcı veya eşlik değerini hesaplayarak eksik verileri yeniden
oluşturur. Yeniden oluşturulan veriler, sektör yedekleme veya küme yeniden eşleme ile
elde edilen yeni bir konumda depolanır.
B.5.5 Sıkıştırma
NTFS , tek tek dosyalarda veya bir dizindeki tüm veri dosyalarında veri sıkıştırması
gerçekleştirebilir. Bir dosyayı sıkıştırmak için NTFS , dosyanın verilerini 16 bitişik kümeden
oluşan bloklar olan sıkıştırma birimlerine böler . Bir sıkıştırma birimi yazıldığında, bir veri
sıkıştırma algoritması uygulanır. Sonuç 16'dan daha az kümeye sığarsa, sıkıştırılmış sürüm
saklanır. Okurken, NTFS verilerin sıkıştırılıp sıkıştırılmadığını belirleyebilir: sıkıştırılmışlarsa,
saklanan sıkıştırma biriminin uzunluğu 16 kümeden azdır. Bitişik sıkıştırma birimlerini
okurken performansı iyileştirmek için NTFS , uygulama isteklerinden önce önceden getirir
ve sıkıştırır.
Seyrek dosyalar veya çoğunlukla sıfır içeren dosyalar için NTFS , yerden tasarruf
etmek için başka bir teknik kullanır. Hiç yazılmadığı için yalnızca sıfır içeren kümeler,
gerçekte diskte ayrılmaz veya depolanmaz. Bunun yerine, dosya için MFT girişinde
depolanan sanal küme numaraları dizisinde boşluklar bırakılır .
Bir dosyayı okurken, NTFS sanal küme numaralarında bir boşluk bulursa, arayanın
arabelleğinin bu bölümünü yalnızca sıfır doldurur. Bu teknik UNIX tarafından da kullanılmaktadır
Windows Vista, UNIX'te bulunanlara benzer daha genel bir sembolik bağlantı biçimi
için destek sundu . Bağlantılar mutlak veya göreli olabilir, var olmayan nesnelere işaret
edebilir ve birimler arasında bile hem dosyalara hem de dizinlere işaret edebilir. NTFS
ayrıca, tek bir dosyanın aynı birimin birden fazla dizininde girişe sahip olduğu sabit
bağlantıları da destekler .
Windows, bir birimi bilinen bir duruma getirme ve ardından birimin tutarlı bir
görünümünü yedeklemek için kullanılabilecek bir gölge kopya oluşturma yeteneğini
uygular. Bu teknik, diğer bazı dosya sistemlerinde anlık görüntüler olarak bilinir . Bir
birimin gölge kopyasını oluşturmak, gölge kopya oluşturulduktan sonra değiştirilen
blokların kopyadaki orijinal formlarında saklandığı bir yazma üzerine kopyalama biçimidir.
Birim için tutarlı bir durum elde etmek, uygulamaların işbirliğini gerektirir, çünkü sistem,
uygulama tarafından kullanılan verilerin, uygulamanın güvenli bir şekilde yeniden
başlatılabileceği kararlı bir durumda olduğunu bilemez.
B.6 Ağ Oluşturma
Windows, hem eşler arası hem de istemci-sunucu ağını destekler. Ayrıca ağ yönetimi için
olanaklara sahiptir. Windows'taki ağ bileşenleri, veri aktarımı, işlemler arası iletişim, ağ
üzerinden dosya paylaşımı ve uzak yazıcılara yazdırma işleri gönderme yeteneği sağlar.
B.6.1 Ağ Arayüzleri
B.6.2 Protokoller
İnternette kullanılan iletim kontrol protokolü/İnternet protokolü (TCP/IP) paketi fiili standart
ağ altyapısı haline geldi.
Windows, çok çeşitli işletim sistemlerine ve donanım platformlarına bağlanmak için TCP/IP
kullanır. Windows TCP/IP paketi, basit ağ yönetimi protokolünü (SNM), dinamik ana bilgisayar
yapılandırma protokolü sütununu (DHCP) ve daha eski Windows Internet ad hizmetini (WINS)
içerir. Windows Vista , aynı ağ yığınında hem IPv4 hem de IPv6'yı destekleyen yeni bir TCP/
IP uygulamasını tanıttı. Bu yeni uygulama, sunucular için çok yüksek performans elde etmek
için ağ yığınının gelişmiş donanıma yüklenmesini de destekler.
noktaya tünel protokolü (PPTP) , Windows sunucu makinelerinde çalışan uzaktan erişim
sunucu modülleri ile diğer istemci sistemleri arasında iletişim kurmak için Windows
tarafından sağlanan bir protokoldür. İnternet üzerinden bağlı. Uzaktan erişim sunucuları,
bağlantı üzerinden gönderilen verileri şifreleyebilir ve İnternet üzerinden çok protokollü
sanal özel ağları (VPN'ler) destekler .
HTTP protokolü, World Wide Web'i kullanarak bilgi almak/koymak için kullanılır.
Windows, HTTP'yi bir çekirdek modu sürücüsü kullanarak uygular , böylece web sunucuları ağ
yığınına düşük maliyetli bir bağlantıyla çalışabilir. HTTP , Windows'un RPC'yi uygulamak için bir
aktarım seçeneği olarak sunduğu oldukça genel bir protokoldür .
Dağıtılmış Yazma ve Sürüm Oluşturma (WebDAV) , bir ağ üzerinde işbirliğine dayalı yazarlık
için HTTP tabanlı bir protokoldür. Windows bir WebDAV oluşturur
B.6 Ağ Oluşturma 43
Machine Translated by Google
dosya sistemine yeniden yönlendirici. Doğrudan dosya sistemine yerleşik olması, WebDAV'ın
şifreleme gibi diğer dosya sistemi özellikleriyle çalışmasına olanak tanır. Kişisel dosyalar daha
sonra halka açık bir yerde güvenli bir şekilde saklanabilir. WebDAV , bir alma /koyma protokolü
olan HTTP'yi kullandığından , programların dosyaların bölümlerinde okuma ve yazma işlemlerini
kullanabilmesi için Windows'un dosyaları yerel olarak önbelleğe alması gerekir.
B.6.2.6 Adlandırılmış
Uzaktan prosedür çağrısı (RPC) , bir makinedeki bir uygulamanın başka bir makinede kod için
prosedür çağrısı yapmasını sağlayan bir istemci-sunucu mekanizmasıdır. İstemci, argümanlarını
bir mesajda toplayan ve bunları ağ üzerinden belirli bir sunucu işlemine gönderen yerel bir
prosedürü (bir saplama rutini) çağırır. İstemci tarafı saplama rutini daha sonra engeller. Bu
arada, sunucu mesajı paketinden çıkarır, prosedürü çağırır, geri dönüş sonuçlarını bir mesaja
paketler ve bunları istemci saplamasına geri gönderir. İstemci saplaması engellemeyi kaldırır,
mesajı alır, RPC'nin sonuçlarını açar ve bunları arayana geri gönderir. Bu argüman paketine
bazen sıralama denir. İstemci saplama kodu ve bir RPC için bağımsız değişkenleri paketlemek
ve paketini açmak için gerekli tanımlayıcılar , Microsoft Arabirim Tanımlama Dili'nde yazılmış bir
belirtimden derlenir .
Windows RPC mekanizması, RPC mesajları için yaygın olarak kullanılan dağıtılmış bilgi
işlem ortamı standardını takip eder , bu nedenle Windows RPC'lerini kullanmak için yazılan
programlar oldukça taşınabilirdir. RPC standardı ayrıntılı olarak açıklanmıştır . RPC mesajları için
standart veri formatlarını belirleyerek, ikili sayıların boyutları ve bilgisayar sözcüklerindeki bayt
ve bitlerin sırası gibi bilgisayarlar arasındaki mimari farklılıkların çoğunu gizler .
modeli (COM) , Windows için geliştirilmiş süreçler arası iletişim için bir mekanizmadır. COM
nesneleri, nesnedeki verileri işlemek için iyi tanımlanmış bir arabirim sağlar. Örneğin COM ,
Microsoft'un Microsoft Word belgelerine elektronik tablolar eklemek için nesne bağlama ve
gömme (OLE) teknolojisi tarafından kullanılan altyapıdır . Birçok Windows hizmeti COM
arabirimleri sağlar. Windows'un adı verilen dağıtılmış bir uzantısı vardır.
Machine Translated by Google
44
Ek B Windows 7
Dağıtılmış uygulamalar geliştirmek için şeffaf bir yöntem sağlamak için RPC kullanan bir ağ
üzerinden kullanılabilen DCOM .
2. G/Ç yöneticisi, Bölüm'de açıklandığı gibi bir G/Ç istek paketi oluşturur .
B.3.3.5.
3. G /Ç yöneticisi, erişimin uzak bir dosya için olduğunu anlar ve çoklu evrensel adlandırma
kuralı sağlayıcısı (MUP) adı verilen bir sürücüyü arar.
4. MUP , I/O istek paketini tüm kayıtlı kullanıcılara eşzamansız olarak gönderir .
yönlendiriciler.
5. İsteği karşılayabilen bir yeniden yönlendirici, MUP'a yanıt verir. Gelecekte tüm yeniden
yönlendiricilere aynı soruyu sormaktan kaçınmak için MUP , hangi yeniden yönlendiricinin
bu dosyayı işleyebileceğini hatırlamak için bir önbellek kullanır.
10. Sonuçlar, verileri istekte bulunan yeniden yönlendiriciye geri gönderen sunucu sürücüsüne
döndürülür. Yönlendirici daha sonra verileri G/Ç yöneticisi aracılığıyla çağıran uygulamaya
döndürür .
Benzer bir süreç , UNC hizmetleri yerine Win32 ağ API'sini kullanan uygulamalar için gerçekleşir,
ancak bunun dışında, MUP yerine çok sağlayıcılı yönlendirici adı verilen bir modül kullanılır.
adları her zaman uygun değildir, çünkü aynı içeriği sunmak için birden fazla dosya sunucusu
mevcut olabilir ve UNC adları açıkça adı içerir
B.6 Ağ Oluşturma 45
Machine Translated by Google
sunucunun. Windows, bir ağ yöneticisinin tek bir dağıtılmış ad alanı kullanarak birden çok
sunucudan dosya sunmasına izin veren bir dağıtılmış dosya sistemi (DFS) protokolünü destekler.
Alma Bilgisayarlar arasında sık geçiş yapan kullanıcılar için bilgisayar deneyimini geliştirmek için
Windows, yöneticilerin kullanıcılara , kullanıcıların tercihlerini ve sunuculardaki diğer ayarlarını
koruyan
dolaşım profili vermelerine izin verir. Klasör yeniden yönlendirme daha sonra bir kullanıcının
belgelerini ve diğer dosyalarını bir sunucuda otomatik olarak depolamak için kullanılır.
Bu, bir kullanıcı bir dizüstü bilgisayarı uçağa bindirdiğinde olduğu gibi, bilgisayarlardan biri
artık ağa bağlı olmayana kadar iyi çalışır. Kullanıcılara yeniden yönlendirilen dosyalarına
çevrimdışı erişim sağlamak için Windows, istemci tarafında önbelleğe almayı (CSC) kullanır. CSC
ayrıca bilgisayar çevrimiçi olduğunda daha iyi performans için sunucu dosyalarının kopyalarını
yerel makinede tutmak için kullanılır. Dosyalar değiştikçe sunucuya gönderilir. Bilgisayarın
bağlantısı kesilirse dosyalar hala kullanılabilir durumda olur ve sunucunun güncellenmesi
bilgisayarın bir sonraki çevrimiçi olduğu zamana kadar ertelenir.
Birçok ağ ortamında, okuldaki bilgisayar laboratuvarındaki öğrenciler veya bir işletmedeki bir
bölümdeki çalışanlar gibi doğal kullanıcı grupları vardır. Sıklıkla, grubun tüm üyelerinin, gruptaki
çeşitli bilgisayarlarında paylaşılan kaynaklara erişebilmesini isteriz. Bu tür gruplar içinde genel
erişim haklarını yönetmek için Windows, etki alanı kavramını kullanır. Daha önce, bu alan
adlarının, İnternet ana bilgisayar adlarını IP adresleriyle eşleyen alan adı sistemi (DNS) ile hiçbir
ilişkisi yoktu . Ancak şimdi, bunlar yakından ilişkilidir.
Spesifik olarak, bir Windows etki alanı, ortak bir güvenlik ilkesini ve kullanıcı veritabanını
paylaşan bir grup Windows iş istasyonu ve sunucusudur. Windows, güven ve kimlik doğrulama
için Kerberos protokolünü kullandığından, Windows etki alanı Kerberos bölgesiyle aynı şeydir.
Windows, ilgili etki alanları arasında güven ilişkileri kurmak için hiyerarşik bir yaklaşım kullanır.
Güven ilişkileri DNS'ye dayanır ve hiyerarşide yukarı ve aşağı akabilen geçişli güvenlere izin verir.
Bu yaklaşım, n etki alanı için gereken güven sayısını n (n 1)'den O(n)'ye düşürür. Etki
alanındaki iş istasyonları, her kullanıcının erişim hakları hakkında doğru bilgi vermek için etki
alanı denetleyicisine güvenir ( LSASS tarafından kullanıcının erişim belirtecine yüklenir ). Bununla
birlikte, herhangi bir etki alanı denetleyicisi ne derse desin, tüm kullanıcılar kendi iş istasyonlarına
erişimi kısıtlama olanağına sahiptir.
46 Ek B Windows 7
kurumsal bilgi teknolojisi grupları, bu tekdüzelik bilgi işlem maliyetini büyük ölçüde
azaltır.
Windows, işlemler arasında nesneleri paylaşmak için üç yol sağlar. İlk yol, bir alt
sürecin nesneye bir tanıtıcı devralmasıdır. Üst öğe CreateXXX işlevini çağırdığında,
üst öğe, bInheritHandle alanı TRUE olarak ayarlanmış bir GÜVENLİK ÖZELLİKLERİ
yapısı sağlar. Bu alan, devralınabilen bir tanıtıcı oluşturur. Daha sonra, CreateProcess()
işlevinin bInheritHandle bağımsız değişkenine bir TRUE değeri geçirilerek alt süreç
oluşturulur . Şekil B.8, bir alt süreç tarafından devralınan bir semafor tanıtıcısı
oluşturan bir kod örneğini gösterir.
Şekil B.8 Bir çocuğun bir tutamacı devralarak bir nesneyi paylaşmasını sağlayan kod.
Machine Translated by Google
// İşlem A
...
HANDLE a semaphore = CreateSemaphore(NULL, 1, 1, "MySEM1");
...
// İşlem B
...
KOLU b semaforu = OpenSemaphore(TÜM ERİŞİM SEMAPHORE,
YANLIŞ, "MySEM1");
...
Windows'ta bir işlem , bir uygulamanın yüklü bir örneğidir ve bir iş parçacığı ,
çekirdek dağıtıcı tarafından zamanlanabilen yürütülebilir bir kod birimidir. Bu
nedenle, bir işlem bir veya daha fazla iş parçacığı içerir. Başka bir işlemdeki bir iş
parçacığı CreateProcess() API'sini çağırdığında bir işlem oluşturulur. Bu rutin, işlem
tarafından kullanılan tüm dinamik bağlantı kitaplıklarını yükler ve işlemde bir ilk iş
parçacığı oluşturur. CreateThread() işlevi tarafından ek iş parçacıkları oluşturulabilir .
Her iş parçacığı, CreateThread() bağımsız değişkeninde aksi belirtilmedikçe varsayılan
olarak 1 MB olan kendi yığınıyla oluşturulur .
48
Ek B
Machine Translated by Google Windows 7
// İşlem A
HANDLE a semaphore = CreateSemaphore(NULL, 1, 1, NULL); // bir mesaj
veya paylaşılan bellek nesnesi kullanarak semaforun değerini İşlem B'ye
gönder //
...
// İşlem B
HANDLE işlemi a = OpenProcess(TÜM ERİŞİMİ İŞLEYİN, YANLIŞ, A'nın işlem
kimliği);
KOLU b semaforu;
DuplicateHandle(a işlemi, bir semafor,
GetCurrentProcess(), &b semaforu,
0, YANLIŞ, AYNI ERİŞİMİ ÇOĞALTIR); //
semafora erişmek için b semaforunu kullanın
...
Bir kullanıcı etkileşimli bir süreç çalıştırırken, sistemin iyi yanıt verme sağlamak için
sürecin iş parçacıklarını programlaması gerekir. Bu nedenle, Windows'un NOR MAL
ÖNCELİK SINIFINDAKİ işlemler için özel bir zamanlama kuralı vardır. Windows, ekrandaki
ön plan penceresiyle ilişkili süreç ile diğer (arka plan) süreçler arasında ayrım yapar. Bir
işlem ön plana geçtiğinde, Windows tüm iş parçacıkları için zamanlama kuantumunu 3
kat artırır; CPU'ya bağlı iş parçacıkları
Machine Translated by Google
ön plan işleminde, arka plan işlemlerindeki benzer iş parçacıklarından üç kat daha uzun süre
çalışacaktır.
Bir iş parçacığı, sınıfı tarafından belirlenen bir ilk öncelikle başlar. Öncelik, SetThreadPriority()
işlevi tarafından değiştirilebilir . Bu işlev, sınıfının temel önceliğine göre bir öncelik belirten
bir argüman alır:
Önceliği ayarlamak için diğer iki gösterim de kullanılır. Kısım B.3.2.2'den çekirdeğin iki
öncelik sınıfı olduğunu hatırlayın: gerçek zamanlı sınıf için 16– 31 ve değişken sınıf için 1– 15.
İPLİK ÖNCELİKLİ BOŞTA, gerçek zamanlı iş parçacıkları için önceliği 16'ya ve değişken öncelikli
iş parçacıkları için 1'e ayarlar.
THREAD PRIORITY TIME CRITİK, gerçek zamanlı iş parçacıkları için önceliği 31'e ve değişken
öncelikli iş parçacıkları için önceliği 15'e ayarlar.
Bölüm B.3.2.2'de tartışıldığı gibi, çekirdek, iş parçacığının G/Ç'ye bağlı veya CPU'ya bağlı
olmasına bağlı olarak değişken sınıf iş parçacığının önceliğini dinamik olarak ayarlar. Win32
API , SetProcessPriorityBoost() ve SetThreadPriorityBoost() işlevleri aracılığıyla bu ayarı devre
dışı bırakmak için bir yöntem sağlar .
parçacığı askıya alınmış durumda oluşturulabilir veya daha sonra SuspendThread() işlevi
kullanılarak askıya alınmış bir duruma yerleştirilebilir. Askıya alınmış bir iş parçacığı çekirdek
gönderici tarafından programlanmadan önce, ResumeThread() işlevi kullanılarak askıya
alınmış durumdan çıkarılmalıdır. Her iki işlev de bir sayaç ayarlar, böylece bir iş parçacığı iki
kez askıya alınırsa, çalışabilmesi için iki kez devam ettirilmesi gerekir.
parçacıkları tarafından paylaşılan nesnelere eşzamanlı erişimi senkronize etmek için çekirdek,
semaforlar ve muteksler gibi senkronizasyon nesneleri sağlar. Bunlar, Bölüm B.3.2.2'de
tartışıldığı gibi gönderici nesnelerdir. İş parçacıkları ayrıca, iş parçacıkları, işlemler ve dosyalar
gibi çekirdek nesneleri üzerinde çalışan çekirdek hizmetleriyle de senkronize edilebilir çünkü
bunlar aynı zamanda gönderici nesnelerdir. Çekirdek gönderici nesneleri ile senkronizasyon,
WaitForSingleObject() ve WaitForMultipleObjects() işlevleri kullanılarak gerçekleştirilebilir; bu
işlevler, bir veya daha fazla gönderici nesnesinin sinyallenmesini bekler.
Aynı işlem içinde özel olarak kod yürütmek isteyen iş parçacıkları için başka bir eşitleme
yöntemi kullanılabilir. Win32 kritik bölüm nesnesi , genellikle çekirdeğe girmeden alınabilen
ve serbest bırakılabilen bir kullanıcı modu muteks nesnesidir. Çok işlemcili bir bilgisayarda,
bir Win32 kritik bölümü, başka bir iş parçacığı tarafından tutulan kritik bir bölümün serbest
bırakılmasını beklerken dönmeye çalışır.
50 Ek B
Machine Translated by Google Windows 7
Döndürme çok uzun sürerse, edinen iş parçacığı bir çekirdek muteks tahsis edecek ve
CPU'sunu verecektir. Kritik bölümler özellikle verimlidir, çünkü çekirdek muteksi
yalnızca çekişme olduğunda tahsis edilir ve daha sonra yalnızca döndürme girişiminde
bulunulduktan sonra kullanılır. Programlardaki çoğu muteks, hiçbir zaman fiilen
çekiştirilmez, bu nedenle tasarruf önemlidir.
Kritik bir bölümü kullanmadan önce, işlemdeki bazı iş parçacıklarının
InitializeCriticalSection()'ı çağırması gerekir. Muteksi almak isteyen her iş parçacığı
EnterCriticalSection()'ı çağırır ve ardından mutex'i serbest bırakmak için LeaveCritical
Section() 'ı çağırır. Muteksi engellemeden almaya çalışan bir TryEnterCriticalSection()
işlevi de vardır.
Bir muteks yerine kullanıcı modu okuyucu-yazıcı kilitleri isteyen programlar için
Win32 , ince okuyucu-yazıcı (SRW) kilitlerini destekler . SRW kilitleri, InitializeSRWLock,
AcquireSRWLockXXX ve ReleaseSRWLockXXX gibi kritik bölümler için olanlara benzer
API'lere sahiptir; burada XXX , iş parçacığının kilit tarafından korunan nesneye yazma
erişimi mi yoksa yalnızca okuma erişimi mi istediğine bağlı olarak Özel veya
Paylaşılandır . Win32 API , kritik bölümlerle veya SRW kilitleriyle kullanılabilen koşul
değişkenlerini de destekler .
Her bir örneklemede küçük miktarlarda iş yapan uygulamalar ve hizmetler için tekrar
tekrar iş parçacığı oluşturmak ve silmek pahalı olabilir. Win32 iş parçacığı havuzu,
kullanıcı modu programlarına üç hizmet sağlar: iş isteklerinin gönderilebileceği bir sıra
( SubmitThreadpoolWork() işlevi aracılığıyla), geri çağrıları beklenebilir tanıtıcılara
bağlamak için kullanılabilen bir API (Regis terWaitForSingleObject()), ve zamanlayıcılarla
çalışacak (CreateThread poolTimer() ve WaitForThreadpoolTimerCallbacks ()) ve geri
aramaları G/Ç tamamlama kuyruklarına (BindIoCompletionCallback()) bağlamak için
API'ler.
Bir iş parçacığı havuzu kullanmanın amacı, performansı artırmak ve bellek ayak
izini azaltmaktır. İş parçacıkları nispeten pahalıdır ve her işlemci, kaç tane iş parçacığı
olursa olsun, aynı anda yalnızca bir iş parçacığı yürütebilir.
İş parçacığı havuzu, makinenin CPU'larını etkin bir şekilde kullanmak için yeterli iş
parçacığı sağlarken iş isteklerini biraz geciktirerek (her iş parçacığını birçok istek için
yeniden kullanarak) çalıştırılabilir iş parçacıklarının sayısını azaltmaya çalışır . Bekleme
ve G/Ç ve zamanlayıcı geri arama API'leri , iş parçacığı havuzunun bir işlemdeki iş
parçacığı sayısını daha da azaltmasına, bir işlemin her bir beklenebilir tanıtıcıya,
zamanlayıcıya, veya tamamlama limanı.
B.7.3.6 Lifler
Fibe , kullanıcı tanımlı bir zamanlama algoritmasına göre programlanan kullanıcı modu
kodudur . Fiberler tamamen bir kullanıcı modu tesisidir; çekirdek onların var olduğunun
farkında değildir. Fiber mekanizması, Windows iş parçacıklarını , fiberleri yürütmek için
CPU'larmış gibi kullanır. Fiberler işbirlikli olarak programlanmıştır, yani hiçbir zaman
önlenmezler, ancak üzerinde çalıştıkları ipliği açıkça vermelidirler. Bir fiber bir iplik
verdiğinde, çalışma zamanı sistemi (programlama dili çalışma zamanı kodu) tarafından
başka bir fiber bunun üzerinde programlanabilir.
Sistem, ConvertThreadToFiber() veya CreateFiber() öğesini çağırarak bir fiber
oluşturur . Bu işlevler arasındaki temel fark,
B.7 Programcı Arayüzü 51
Machine Translated by Google
Windows 7'deki yeni bir mekanizma olan kullanıcı modu zamanlama (UMS), fiberlerin
çeşitli sınırlamalarını ele alır. İlk olarak, fiberlerin kendi TEB'leri olmadığı için Win32
API'lerini yürütmek için güvenilmez olduğunu hatırlayın . Bir fiber çalıştıran bir iş
parçacığı çekirdekte bloke ettiğinde , çekirdek dağıtıcısı zamanlamayı devraldıkça,
kullanıcı zamanlayıcı bir süreliğine CPU'nun kontrolünü kaybeder. Fiberler, öncelik veya
kimliğe bürünme belirteci gibi bir iş parçacığının çekirdek durumunu değiştirdiğinde
veya zaman uyumsuz G/Ç'yi başlattığında sorunlar ortaya çıkabilir.
UMS , her Windows iş parçacığının aslında iki iş parçacığı olduğunu kabul ederek
alternatif bir model sağlar: bir çekirdek iş parçacığı (KT) ve bir kullanıcı iş parçacığı (UT).
Her iş parçacığı türünün kendi yığını ve kendi kaydedilmiş kayıt kümesi vardır. KT ve UT ,
programcıya tek bir iş parçacığı olarak görünür, çünkü UT'ler hiçbir zaman
engelleyemezler, ancak her zaman, karşılık gelen KT'ye örtük bir geçişin gerçekleştiği
çekirdeğe girmelidir . UMS , UT'yi benzersiz bir şekilde tanımlamak için her UT'nin
TEB'sini kullanır . Bir UT çekirdeğe girdiğinde, mevcut TEB tarafından tanımlanan UT'ye
karşılık gelen KT'ye açık bir geçiş yapılır. Çekirdeğin hangi UT'nin çalıştığını bilmemesinin
nedeni, UT'lerin fiberlerin yaptığı gibi bir kullanıcı modu zamanlayıcısını çağırabilmesidir.
Ancak UMS'de , zamanlayıcı UT'leri değiştirir;
TEB'ler.
Bir UT çekirdeğe girdiğinde, KT'si engellenebilir. Bu olduğunda, çekirdek, UMS'nin
birincil olarak adlandırdığı bir zamanlama iş parçacığına geçer ve bu iş parçacığını,
çalıştırılacak başka bir UT seçebilmesi için kullanıcı modu zamanlayıcısına yeniden
girmek için kullanır . Sonunda, engellenen bir KT işlemini tamamlayacak ve kullanıcı
moduna geri dönmeye hazır olacaktır. UMS , farklı bir UT'yi çalıştırmak için kullanıcı
modu planlayıcısına zaten yeniden girdiğinden , UMS , tamamlanmış KT'ye karşılık gelen
UT'yi kullanıcı modunda bir tamamlama listesine kuyruğa alır . Kullanıcı modu
zamanlayıcı geçiş yapmak için yeni bir UT seçerken , tamamlama listesini inceleyebilir
ve listedeki herhangi bir UT'yi zamanlama adayı olarak değerlendirebilir.
Fiberlerin aksine, UMS'nin doğrudan program mer tarafından kullanılması
amaçlanmamıştır. Kullanıcı modu zamanlayıcıları yazmanın ayrıntıları çok zor olabilir ve
UMS böyle bir zamanlayıcı içermez. Bunun yerine, zamanlayıcılar, UMS'nin üzerine inşa
edilen programlama dili kitaplıklarından gelir . Microsoft Visual Studio 2010 , C++ için
eşzamanlı bir programlama çerçevesi olan Concurrency Runtime (ConcRT) ile birlikte
gelir. ConcRT , programları daha sonra mevcut CPU'larda programlanabilecek görevlere
ayrıştırmak için olanaklarla birlikte bir kullanıcı modu zamanlayıcı sağlar. ConcRT ,
aşağıdakiler için eşit düzeyde destek sağlar:
Machine Translated by Google
52 Ek B Windows 7
KT0 blokları
NTOS yöneticisi
UT tamamlama listesi
kullanıcı modu
UT0 zamanlayıcı
yapıların yanı sıra ilkel kaynak yönetimi ve görev senkronizasyonu ilkelleri. UMS'nin
temel özellikleri Şekil B.11'de gösterilmektedir.
B.7.3.8 Winsock
Winsock , Windows soket API'sidir. Winsock, UNIX yuvalarıyla büyük ölçüde uyumlu
olan, ancak bazı Windows uzantıları eklenmiş bir oturum katmanı arabirimidir.
Herhangi bir Winsock uygulamasının herhangi bir Winsock uyumlu protokol
yığınında çalışabilmesi için, farklı adresleme şemalarına sahip olabilen birçok
aktarım protokolüne standartlaştırılmış bir arabirim sağlar. Winsock, izleme, IPv6
desteği, kimliğe bürünme, yeni güvenlik API'leri ve diğer birçok özelliği eklemek
için Windows Vista'da büyük bir güncellemeden geçti .
Winsock, uygulamalar ve ağ protokolleri arasında standart bir hizmet sağlayıcı
arabirimi (SPI) sağlayan Windows Açık Sistem Mimarisi (WOSA) modelini izler .
Uygulamalar , taşıma protokolü katmanlarının üzerine ek güvenlik gibi ek işlevler
oluşturan katmanlı protokolleri yükleyebilir ve kaldırabilir . Winsock, eşzamansız
işlemleri ve bildirimleri, güvenilir çok noktaya yayını, güvenli yuvaları ve çekirdek
modu yuvalarını destekler. Hedefi, sunucunun adını veya IP adresini ve hedef
bağlantı noktasının hizmet veya bağlantı noktası numarasını belirten dizeler olarak
kabul eden WSAConnect ByName() işlevi gibi daha basit kullanım modelleri için de
destek vardır .
Her Win32 iş parçacığının, mesajları aldığı kendi girdi kuyruğu vardır. Bir Win32
uygulaması, giriş kuyruğundaki olayları işlemek için GetMessage() 'ı çağırmazsa ,
kuyruk dolar ve yaklaşık beş saniye sonra sistem uygulamayı “Yanıt Vermiyor” olarak
işaretler.
uygulama, sanal belleği ayırmak veya kaydetmek için VirtualAlloc() 'u ve belleği
devreden çıkarmak veya serbest bırakmak için VirtualFree() 'yi çağırır. Bu işlevler,
uygulamanın belleğin tahsis edildiği sanal adresi belirlemesini sağlar. Bellek sayfa
boyutunun katları üzerinde çalışırlar. Bu işlevlerin örnekleri Şekil B.12'de görülmektedir.
uygulamanın belleği kullanmasının başka bir yolu, bir dosyayı adres alanına bellek
eşlemesi yapmaktır. Bellek eşleme aynı zamanda iki kişi için uygun bir yoldur.
Machine Translated by Google
54 Ek B Windows 7
belleği paylaşmak için işlemler: her iki işlem de aynı dosyayı sanal belleklerine eşler. Bellek
eşleme, Şekil B.13'teki örnekte görebileceğiniz gibi, çok aşamalı bir süreçtir.
Bir işlem, yalnızca bir bellek bölgesini başka bir işlemle paylaşmak için bir adres
alanını eşlemek isterse, dosyaya gerek yoktur. İşlem , 0xffffffff dosya tanıtıcısı ve belirli
bir boyut ile CreateFileMap ping() 'i çağırır. Ortaya çıkan dosya eşleme nesnesi, devralma,
ad arama veya tanıtıcı çoğaltma yoluyla paylaşılabilir.
B.7.5.3 Yığınlar
Yığınlar , standart C'de mal loc() ve free() ile olduğu gibi, uygulamaların belleği kullanması
için üçüncü bir yol sağlar . Win32 ortamındaki bir yığın, ayrılmış adres alanı bölgesidir. Bir
Win32 işlemi başlatıldığında, varsayılan bir yığınla oluşturulur. Çoğu Win32 uygulaması
çok iş parçacıklı olduğundan, yığının alan tahsisi veri yapılarının birden çok iş parçacığı
tarafından eşzamanlı güncellemelerden zarar görmesini önlemek için yığına erişim
eşitlenir.
Win32 , bir işlemin özel bir yığın tahsis edebilmesi ve yönetebilmesi
için birkaç yığın yönetimi işlevi sağlar. Bu işlevler HeapCreate(), Hea
pAlloc(), HeapRealloc(), HeapSize(), HeapFree() ve HeapDestroy()'dur.
Win32 API ayrıca, bir iş parçacığının bir yığına özel erişim elde etmesini sağlamak için
HeapLock() ve HeapUnlock() işlevlerini de sağlar. VirtualLock()'tan farklı olarak , bu işlevler
yalnızca senkronizasyon gerçekleştirir; sayfaları fiziksel belleğe kilitlemezler.
Orijinal Win32 yığını, alanın verimli kullanımı için optimize edilmiştir. Bu, uzun süreler
boyunca çalışan daha büyük sunucu programları için adres alanının parçalanmasıyla ilgili
önemli sorunlara yol açtı. Windows XP'de tanıtılan yeni bir düşük parçalanma yığını (LFH)
tasarımı, parça parçalarını büyük ölçüde azalttı.
Machine Translated by Google
55
Özet
T1sFree(var dizin);
atama sorunu. Windows 7 yığın yöneticisi , uygun şekilde LFH'yi otomatik olarak açar .
Uygulamaların belleği kullanması için dördüncü bir yol, iş parçacığı yerel depolama (TLS) mekanizmasıdır.
Genel veya statik verilere dayanan işlevler, genellikle çok iş parçacıklı bir ortamda düzgün şekilde
çalışmaz. Örneğin, C çalışma zamanı işlevi strtok() , bir dizeyi ayrıştırırken mevcut konumunu takip
etmek için statik bir değişken kullanır. İki eşzamanlı iş parçacığının strtok() işlevini doğru bir şekilde
yürütmesi için ayrı geçerli konum değişkenlerine ihtiyaçları vardır. TLS , yürütülen işlev için genel olan
ancak başka herhangi bir iş parçacığıyla paylaşılmayan değişken örneklerini korumanın bir yolunu
sağlar.
TLS , iş parçacığı yerel depolama oluşturmak için hem dinamik hem de statik yöntemler sağlar.
Dinamik yöntem Şekil B.14'te gösterilmektedir. TLS mekanizması , genel yığın depolaması tahsis eder
ve bunu Windows'un her kullanıcı modu iş parçacığına ayırdığı iş parçacığı ortam bloğuna ekler. TEB'e
her iş parçacığı tarafından kolayca erişilebilir ve yalnızca TLS için değil, kullanıcı modundaki tüm iş
parçacığı başına durum bilgileri için kullanılır.
Bir iş parçacığı yerel statik değişkeni kullanmak için uygulama değişkeni bildirir
her iş parçacığının kendi özel kopyasına sahip olmasını sağlamak için aşağıdaki gibi:
B.8 Özet
Microsoft, Windows'u genişletilebilir, taşınabilir bir işletim sistemi olarak tasarladı; yeni tekniklerden ve
donanımlardan yararlanabilen bir sistem. Windows, hem 32 bit hem de 64 bit işlemciler ve NUMA
bilgisayarları dahil olmak üzere birden çok işletim ortamını ve simetrik çoklu işlemeyi destekler . İstemci-
sunucu bilgi işlem desteğiyle birlikte temel hizmetleri sağlamak için çekirdek nesnelerinin kullanılması,
Windows'un çok çeşitli uygulama ortamlarını desteklemesini sağlar. Windows, sanal bellek, tümleşik
önbelleğe alma ve önleyici zamanlama sağlar. Ayrıntılı güvenlik mekanizmalarını destekler ve
uluslararasılaştırma özelliklerini içerir. Windows çok çeşitli bilgisayarlarda çalışır, böylece kullanıcılar,
çalıştırdıkları uygulamaları değiştirmeye gerek kalmadan bütçelerine ve performans gereksinimlerine
uygun donanımı seçip yükseltebilirler.
Machine Translated by Google
56 Ek B Windows 7
Alıştırmalar
B.1 Windows ne tür bir işletim sistemidir? Başlıca iki tanesini tanımlayın
özellikleri.
B.2 Windows'un tasarım hedeflerini listeleyin. İki tanesini ayrıntılı olarak açıklayın.
bibliyografya
bibliyografya 57
CEk
BSD UNIX'i
Ritchie ve Thompson, UNIX üzerinde uzun yıllar sessizce çalıştı. İkinci bir versiyon
için onu bir PDP-11/20'ye taşıdılar ; üçüncü bir sürüm için, işletim sisteminin çoğunu
daha önce kullanılan derleme dili yerine sistem programlama dili C'de yeniden
yazdılar. C, UNIX'i desteklemek için Bell Laboratuvarlarında geliştirilmiştir . UNIX
ayrıca 11/45 ve 11/70 gibi daha büyük PDP-11 modellerine taşındı. Çoklu programlama
ve diğer geliştirmeler, C'de yeniden yazıldığında ve çoklu programlama için donanım
desteği olan sistemlere (11/45 gibi) taşındığında eklendi.
1
2 Ek C BSD UNIX
Machine Translated by Google
yan Bell Laboratories, 1976'da yayınlanan Sürüm 6'ydı. (İlk UNIX sistemleri için sürüm
numarası , dağıtım yapıldığında geçerli olan UNIX Programlama Kılavuzunun baskı
numarasına karşılık gelir ; kod ve kılavuz bağımsız olarak revize edilmiştir.)
Versiyon 7'nin dağıtımından sonra, UNIX Destek Grubu (USG) , Bell Laboratuvarlarının
ana kuruluşu olan AT&T içindeki UNIX'in dağıtımları için Araştırma Grubundan idari
kontrol ve sorumluluk üstlendi . UNIX , yalnızca bir araştırma aracı olmaktan çıkıp bir
ürün haline geliyordu. Ancak Araştırma Grubu , dahili hesaplamalarını desteklemek
için kendi UNIX sürümlerini geliştirmeye devam etti . Sürüm 8, çekirdek IPC
modüllerinin esnek konfigürasyonuna izin veren akış G/Ç sistemi adı verilen bir tesisi
içeriyordu . Ayrıca Sun'ın NFS'sine benzer bir uzak dosya sistemi olan RFS'yi de
içeriyordu . Geçerli sürüm, 1989'da yayınlanan ve yalnızca Bell Laboratuvarlarında
kullanılabilen Sürüm 10'dur.
USG , esas olarak AT&T içinde UNIX için destek sağladı . USG'den ilk harici
dağıtım 1982'de Sistem III'tü. Sistem III, Sürüm 7 ve 32V'nin özelliklerinin yanı sıra
Research dışındaki gruplar tarafından geliştirilen birkaç UNIX sisteminin özelliklerini
içeriyordu. Örneğin, UNIX/RT'nin özellikleri, gerçek zamanlı bir UNIX sistemi ve
Programmer's Work Bench (PWB) yazılım araçları paketinin çok sayıda bölümü
Sistem III'e dahil edilmiştir.
USG , System V'i 1983'te piyasaya sürdü; büyük ölçüde Sistem III'ten türetilmiştir.
AT&T'den çeşitli Bell işletme şirketlerinin elden çıkarılması, AT&T'yi System V'i agresif
bir şekilde pazarlayacak bir konumda bıraktı . USG , 1984'te UNIX System V Release
2'yi (V.2) yayınlayan UNIX System Development Laboratory (USDL) olarak yeniden
yapılandırıldı . UNIX System V Release 2, Version 4 (V.2.4), kopyalı sanal belleğin yeni
bir uygulamasını ekledi. -yazma sırasında sayfalama ve paylaşılan bellek. USDL ,
sırayla , 1987'de System V Sürüm 3'ü (V.3) dağıtan AT&T Information Systems (ATTIS)
ile değiştirildi. V.3, akış G/Ç sisteminin V8 uygulamasını uyarlar ve onu STREAMS
olarak kullanıma sunar. Ayrıca , daha önce bahsedilen NFS benzeri uzak dosya
sistemi olan RFS'yi de içerir.
Erken UNIX sistemlerinin küçük boyutu, modülerliği ve temiz tasarımı, RAND, BBN, Illinois
Üniversitesi, Harvard, Purdue ve DEC gibi çok sayıda diğer bilgisayar bilimi kuruluşlarında
UNIX tabanlı çalışmaya yol açtı. Bell Laboratories ve AT&T dışındaki en etkili UNIX geliştirme
grubu ise Berkeley'deki California Üniversitesi olmuştur.
İlk Berkeley VAX UNIX çalışmasını 1978 yılında Bill Joy ve Özalp Babaoğlu yaptı .
3BSD UNIX'i üretmek için sanal bellek, talep sayfalama ve 32V'a sayfa değiştirme
eklediler. Bu sürüm, bu tesislerin herhangi birini bir UNIX sisteminde uygulayan ilk
sürümdü. 3BSD'nin geniş sanal bellek alanı, Berkeley'in kendi Franz LISP'i gibi çok
büyük programların geliştirilmesine izin verdi .
Bellek yönetimi çalışması, Savunma İleri Araştırmalarını ikna etti
Machine Translated by Google
Berkeley'e hükümet kullanımı için standart bir UNIX sisteminin geliştirilmesi için fon
sağlayacak Projeler Ajansı (DARPA) ; Sonuç 4BSD UNIX oldu.
DARPA için 4 BSD çalışması , UNIX ve ağ topluluklarından birçok önemli kişiyi
içeren bir yönlendirme komitesi tarafından yönlendirildi .
Bu projenin hedeflerinden biri, DARPA İnternet ağ protokollerine (TCP/IP) destek
sağlamaktı. Bu destek genel olarak sağlanmıştır. 4.2 BSD'de , yerel alan ağları
(Ethernet'ler ve belirteç halkaları gibi) ve geniş alan ağları ( NSFNET gibi) dahil olmak
üzere çeşitli ağ tesisleri arasında tek tip iletişim kurmak mümkündür . Bu uygulama,
bu protokollerin mevcut popülerliğinin en önemli nedeniydi. UNIX bilgisayar
sistemlerinin birçok satıcısı, uygulamalarının temeli olarak onu kullandı ve hatta
diğer işletim sistemlerinde bile kullanıldı. İnternetin 1984'te 60 bağlantılı ağdan
8.000'den fazla ağa ve 1993'te tahmini 10 milyon kullanıcıya çıkmasına izin verdi.
1986'da 4.3 BSD piyasaya sürüldü. 4.2 BSD'ye çok benziyordu ancak hata
düzeltmeleri ve performans iyileştirmeleri gibi çok sayıda dahili değişiklik içeriyordu.
Xerox Ağ Sistemi protokolleri desteği de dahil olmak üzere bazı yeni tesisler de
eklendi.
Bir sonraki sürüm, 1988'de piyasaya sürülen 4.3 BSD Tahoe idi. Geliştirilmiş ağ
tıkanıklığı kontrolü ve TCP/IP performansını içeriyordu. Disk yapılandırmaları, aygıt
sürücülerinden ayrıldı ve disklerin kendilerini okudu.
Genişletilmiş saat dilimi desteği de dahil edildi. 4.3 BSD Tahoe, normal VAX tabanı
yerine aslında CCI Tahoe sistemi (Computer Console, Inc., Power 6 bilgisayar)
üzerinde ve onun için geliştirildi. Karşılık gelen PDP-11 sürümü 2.10.1BSD idi; 4.3 BSD
kılavuzlarını da yayınlayan USENIX derneği tarafından dağıtıldı . 4.3.2 BSD Reno
sürümü , ISO/OSI ağ oluşturma uygulamasının dahil edilmesini gördü .
Son Berkeley sürümü olan 4.4 BSD, 1993 yılının Haziran ayında tamamlandı. Yeni
X.25 ağ desteği ve POSIX standart uyumluluğunu içeriyordu. Ayrıca, yeni bir sanal
dosya sistemi arayüzü ve istiflenebilir dosya sistemleri desteği ile kökten yeni bir
dosya sistemi organizasyonuna sahipti ve yeni özelliklerin kolayca dahil edilmesi için
dosya sistemlerinin birbirinin üzerine katmanlanmasına izin verdi. Yayına (Bölüm
15.8) ve yeni bir günlük tabanlı dosya sistemiyle birlikte bir NFS uygulaması dahil
edildi (bkz. Bölüm 11). 4.4 BSD sanal bellek sistemi Mach'tan türetilmiştir (Bölüm
A.13'te açıklanmıştır) . Gelişmiş güvenlik ve iyileştirilmiş çekirdek yapısı gibi diğer
bazı değişiklikler de dahil edildi. 4.4 sürümünün yayınlanmasıyla Berkeley, araştırma
çabalarını durdurdu.
4
Ek C BSD UNIX
Machine Translated by Google
Bu tür projeler devam ettikçe, UNIX'in özellikleri birleşecek ve UNIX'e yönelik tek
bir programlama arayüzüne yol açacak ve UNIX'in daha da popüler hale gelmesine
olanak tanıyacaktır . Aslında, iki ayrı güçlü UNIX satıcısı grubu bu sorun üzerinde
çalışıyor: AT&T-guided UNIX International (UI) ve Open Software Foundation (OSF) ,
her ikisi de POSIX standardını izlemeyi kabul etti . Son zamanlarda, bu iki grupta yer
alan satıcıların çoğu, daha fazla standardizasyon ( COSE anlaşması) üzerinde
anlaşmaya varmıştır.
Machine Translated by Google
1991
1993 Solaris 2
AT&T , 1989 yılında ATTIS grubunu UNIX Yazılım Organizasyonu ile değiştirdi.
(USO), ilk birleştirilmiş UNIX, System V Sürüm 4'ü sevk etti. Bu sistem
System V, 4.3 BSD ve Sun'ın SunOS'unun özelliklerini birleştirir;
dosya adları, Berkeley dosya sistemi, sanal bellek yönetimi, sembolik
bağlantılar, çoklu erişim grupları, iş denetimi ve güvenilir sinyaller; aynı zamanda uygundur
yayınlanan POSIX standardına, POSIX.1. USO , SVR4'ü ürettikten sonra ,
Unix System Laboratories (USL) adlı bağımsız bir AT&T yan kuruluşu; içinde
1993, Novell, Inc tarafından satın alındı. Şekil C.1 ilişkileri özetlemektedir.
UNIX'in çeşitli sürümleri arasında .
6 Ek C BSD UNIX
Machine Translated by Google
UNIX sistemi , iki Bell Laboratuar çalışanının kişisel projesinden çok uluslu
standardizasyon kuruluşları tarafından tanımlanan bir işletim sistemine dönüşmüştür.
Aynı zamanda, UNIX akademik çalışma için mükemmel bir araçtır ve işletim sistemi
teorisi ve uygulamasının önemli bir parçası olmaya devam edeceğine inanıyoruz.
Örneğin, Tunus işletim sistemi, Xinu işletim sistemi ve Minix işletim sistemi, UNIX
kavramlarına dayanmaktadır, ancak açıkça sınıf çalışması için geliştirilmiştir. Mach,
Chorus, Comandos ve Roisin dahil olmak üzere devam eden UNIX ile ilgili çok sayıda
araştırma sistemi bulunmaktadır. Orijinal geliştiriciler, Ritchie ve Thompson, çalışmaları
nedeniyle 1983 yılında Association for Computing Machinery Turing Ödülü tarafından
onurlandırıldılar.
UNIX'te .
bellek yönetimi ve CPU zamanlama kararlarını desteklemek için bir mekanizma olarak
sayfalama . Takas, bir sistem aşırı çağrıdan muzdaripse kullanılır.
UNIX , Thompson ve Ritchie tarafından kendi kolaylıkları için bir sistem olarak
ortaya çıktığından, anlaşılması için yeterince küçüktü . Algo ritmlerinin çoğu , hız veya
karmaşıklık için değil , basitlik için seçilmiştir. Amaç, çekirdeğe sahip olmaktı ve
kütüphaneler, bir kişinin gerektiğinde daha karmaşık bir sistem inşa etmesine izin
vermek için yeterince güçlü olan küçük bir tesis seti sağlıyordu.
UNIX'in temiz tasarımı birçok taklit ve modifikasyona yol açmıştır.
UNIX tasarımcıları diğer işletim sistemleri hakkında önemli miktarda bilgiye sahip
olsa da, UNIX'in uygulanmasından önce ayrıntılı bir tasarımı yoktu. Bu esneklik,
sistemin gelişmesinde kilit faktörlerden biri gibi görünmektedir. Bununla birlikte,
başlangıçta açıklığa kavuşturulmasalar da, bazı tasarım ilkeleri söz konusuydu.
PDP-11'in (ve UNIX için kullanılan önceki bilgisayarların ) boyut kısıtlamaları, belirli
bir zarafeti zorunlu kılmıştır. Diğer sistemlerin patolojik durumlarla başa çıkmak için
ayrıntılı algoritmaları olduğu yerde, UNIX sadece panik adı verilen kontrollü bir
çarpışma yapar . UNIX , bu tür durumları iyileştirmeye çalışmak yerine onları önlemeye
çalışır. Diğer sistemlerin kaba kuvvet veya makro genişleme kullandığı durumlarda,
UNIX çoğunlukla daha incelikli veya en azından daha basit yaklaşımlar geliştirmek zorunda
UNIX'in bu erken dönem güçlü yanları , popülaritesinin çoğunu üretti ve bu da bu
güçlü yönlere meydan okuyan yeni talepler üretti. UNIX , her zaman orijinal metin
yönelimli modeline uymayan ağ oluşturma, grafik ve gerçek zamanlı işlem gibi görevler
için kullanıldı. Bu nedenle bazı dahili tesislerde değişiklikler yapıldı ve yeni programlama
arayüzleri eklendi.
Bu yeni tesisleri ve diğerlerini, özellikle de pencere arayüzlerini desteklemek
Machine Translated by Google
8
Ek C BSD UNIX
— büyük miktarda kod gerektirdi ve sistemin boyutunu kökten artırdı.
Örneğin, hem ağ oluşturma hem de pencereleme, sistemin boyutunu iki katına çıkardı.
Bu model, sırayla UNIX'in devam eden gücüne işaret ediyordu— endüstride ne zaman
yeni bir gelişme meydana gelse, UNIX genellikle onu özümseyebilirdi ama
UNIX olarak kalır .
Çoğu işletim sistemi gibi, UNIX de iki ayrılabilir bölümden oluşur: çekirdek ve sistem
programları. UNIX işletim sistemini Şekil C.2'de gösterildiği gibi katmanlı olarak
görebiliriz . Sistem çağrısı arayüzünün altındaki ve fiziksel donanımın üzerindeki her
şey çekirdektir. Çekirdek, sistem çağrıları aracılığıyla dosya sistemi, CPU zamanlaması,
bellek yönetimi ve diğer işletim sistemi işlevlerini sağlar. Sistem programları, derleme
ve dosya işleme gibi yararlı işlevler sağlamak için çekirdek destekli sistem çağrılarını
kullanır.
Sistem çağrıları , programcı arayüzünü UNIX'e tanımlar . Yaygın olarak bulunan
sistem programları kümesi, kullanıcı arabirimini tanımlar . Programcı ve kullanıcı
arabirimi, çekirdeğin desteklemesi gereken bağlamı tanımlar.
Çoğu sistem programı C ile yazılmıştır ve UNIX Programcı El Kitabı tüm sistem
çağrılarını C fonksiyonları olarak sunar. Pentium'da FreeBSD için C dilinde yazılmış bir
sistem programı , iki sistem oldukça farklı olsa da genellikle bir Alpha FreeBSD sistemine
taşınabilir ve basitçe yeniden derlenebilir. Sistem çağrılarının ayrıntıları yalnızca
derleyici tarafından bilinir. Bu özellik, UNIX programlarının taşınabilirliğinin önemli bir
nedenidir .
UNIX için sistem çağrıları kabaca üç kategoriye ayrılabilir: dosya işleme, süreç
kontrolü ve bilgi işleme. Bölüm 2'de dördüncü bir kategori olan cihaz manipülasyonunu
listeledik, ancak UNIX'teki cihazlar ( özel) dosyalar olarak ele alındığından, aynı sistem
çağrıları hem dosyaları hem de cihazları destekler (aygıt parametrelerini ayarlamak için
fazladan bir sistem çağrısı olmasına rağmen).
(kullanıcılar)
kabuklar ve komutlar
derleyiciler ve yorumlayıcılar
sistem kitaplıkları
UNIX'teki bir dosya bir bayt dizisidir. Farklı programlar, çeşitli düzeylerde yapı bekler,
ancak çekirdek, dosyalara bir yapı dayatmaz. Örneğin, metin dosyalarının kuralı, tek
bir yeni satır karakteriyle (ASCII'deki satır besleme karakteridir) ayrılan ASCII
karakterlerinin satırlarıdır , ancak çekirdek bu kural hakkında hiçbir şey bilmez.
UNIX dosya sistemi hem mutlak yol adlarına hem de göreli yol adlarına sahiptir .
Mutlak yol adları, dosya sisteminin kökünden başlar ve yol adının başında bir eğik çizgi
ile ayırt edilir; /usr/local/font mutlak bir yol adıdır. Göreli yol adları , yol adına erişen
işlemin bir özniteliği olan geçerli dizinde başlar. Bu nedenle, yerel/yazı tipi, geçerli
dizinde yerel dizinde bulunan ve /usr olabilen veya olmayabilen, yazı tipi adlı bir dosya
veya dizini belirtir .
Bir dosya, bir veya daha fazla dizinde birden fazla adla biliniyor olabilir.
Bu tür birden çok ad, bağlantı olarak bilinir ve tüm bağlantılar, işletim sistemi
tarafından eşit olarak değerlendirilir. FreeBSD , başka bir dosyanın yol adını içeren
dosyalar olan sembolik bağları da destekler . İki tür bağlantı, sabit bağlantılar ve
yumuşak bağlantılar olarak da bilinir. Yumuşak (sembolik) bağlantılar, sabit
bağlantılardan farklı olarak dizinlere işaret edebilir ve dosya sistemi sınırlarını geçebilir.
Dosya adı “.” bir dizinde, dizinin kendisine sabit bir bağlantıdır. “..” dosya adı, üst
dizine giden sabit bir bağlantıdır. Bu nedenle, geçerli dizin /user/jlp/programs ise, ../
bin/wdf , /user/jlp/bin/ wdf'ye atıfta bulunur .
Donanım aygıtlarının dosya sisteminde adları vardır. Bu aygıt özel dosyaları veya
özel dosyalar , çekirdek tarafından aygıt arabirimleri olarak bilinir, ancak yine de
kullanıcı tarafından bunlara, diğer dosyalarla aynı sistem çağrılarıyla erişilir.
Şekil C.3 tipik bir UNIX dosya sistemini göstermektedir. Kök (/) normalde işletim
sisteminin ikili önyükleme görüntüsü olan /kernel'in yanı sıra az sayıda dizin içerir ; /
dev , /dev/console, /dev/lp0, /dev/mt0 gibi aygıt özel dosyalarını içerir ; ve /bin , temel
UNIX sistem programlarının ikili dosyalarını içerir . Diğer ikili dosyalar /usr/bin (metin
biçimlendiriciler gibi uygulama sistemleri programları için), /usr/compat (Linux gibi
diğer işletim sistemlerinden gelen programlar için) veya /usr/local/bin (yazılı sistem
programları için ) konumunda olabilir. yerel sitede). C, Pascal ve FORTRAN altyordam
kitaplıkları gibi kitaplık dosyaları /lib (veya /usr/lib veya /usr/local/lib) içinde tutulur .
Kullanıcıların dosyaları, her kullanıcı için ayrı bir dizinde, tipik olarak /usr içinde
saklanır. Bu nedenle, carol için kullanıcı dizini normalde /usr/carol içinde olacaktır.
Büyük bir sistem için, bu dizinler yönetimi kolaylaştırmak için daha fazla
gruplandırılabilir, /usr/prof/avi ve /usr/staff/carol ile bir dosya yapısı oluşturulabilir.
Yönetim dosyaları ve parola dosyası gibi programlar /etc içinde tutulur.
10
Ek C
Machine Translated by Google BSD UNIX
vmunix
dev
lp0 çöp Kutusu troff
••• •••
ş telnet
••• •••
çöp Kutusu
libc.a
kitap yerel kitap
•••
•••
jlp
tmac
kullanıcı avi kitap
troff
•••
•••
şifre
grup tmp
vb
içinde
•••
•••
tmp
Geçici dosyalar , normalde sistem önyüklemesi sırasında silinen /tmp dizinine veya /usr/tmp
dizinine yerleştirilebilir.
Bu dizinlerin her biri önemli ölçüde daha fazla yapıya sahip olabilir. Örneğin,
Merganthaler 202 için troff biçimlendirici için yazı tipi açıklama tabloları
C.3 Programcı Arayüzü 11
Machine Translated by Google
Dosya tanımlayıcı, bu işlem için küçük bir açık dosya tablosuna bir dizindir.
Tanımlayıcılar 0'dan başlar ve aynı anda maksimum açık dosya sayısına bağlı olarak
tipik programlar için nadiren 6 veya 7'den yüksek olur.
Her bir read() veya write() , dosya tablosu girişiyle ilişkili olan ve dosyadaki bir
sonraki read() veya write() için konumu belirlemek için kullanılan mevcut ofseti
dosyaya günceller. lseek() sistem çağrısı, pozisyonun açıkça sıfırlanmasına izin verir .
Ayrıca, seyrek dosyaların (içinde "delik" bulunan dosyalar) oluşturulmasına da izin
verir. dup() ve dup2 () sistem çağrıları, var olanın bir kopyası olan yeni bir dosya
tanımlayıcısı üretmek için kullanılabilir. fcntl() sistem çağrısı da bunu yapabilir ve
ayrıca açık bir dosyanın çeşitli parametrelerini inceleyebilir veya ayarlayabilir. Örneğin,
açık bir dosyaya yapılan her başarılı write() dosyasının o dosyanın sonuna eklenmesini
sağlayabilir. Aygıt parametrelerini işlemek için ek bir sistem çağrısı olan ioctl() vardır.
Örneğin, bir seri bağlantı noktasının baud hızını ayarlayabilir veya bir bandı geri
sarabilir.
Dosyayla ilgili bilgiler (boyutu, koruma modları, sahibi vb.) stat() sistem çağrısıyla
elde edilebilir. Birkaç sistem çağrısı bu bilgilerin bir kısmının değiştirilmesine izin
verir: rename() (dosya adını değiştirin), chmod() (koruma modunu değiştirin) ve
chown() (sahibi ve grubu değiştirin).
Bu sistem çağrılarının birçoğunun dosya adları yerine dosya tanımlayıcıları için geçerli
olan çeşitleri vardır. link() sistem çağrısı , mevcut bir dosya için yeni bir ad oluşturarak
mevcut bir dosya için sabit bir bağlantı oluşturur. Bir bağlantı, unlink(()) sistem çağrısı
tarafından kaldırılır ; son bağlantı ise, dosya silinir. symlink() sistem çağrısı sembolik
bir bağlantı oluşturur.
Dizinler mkdir() sistem çağrısı tarafından yapılır ve tarafından silinir.
rmdir(). Geçerli dizin cd() ile değiştirilir.
Standart dosya çağrıları (open() ve diğerleri) dizinlerde kullanılabilse
de, dizinlerin korunması gereken bir iç yapısı olduğundan, bunun
yapılması tavsiye edilmez. Bunun yerine, bir dizini açmak, dizin içindeki
her dosya girişinde ilerlemek, dizini kapatmak ve diğer işlevleri
gerçekleştirmek için başka bir sistem çağrıları seti sağlanır; bunlar
opendir(), readdir(), closedir() ve diğerleridir.
12 Ek C BSD UNIX
aramak. Yeni süreç, orijinal sürecin adres alanının bir kopyasından oluşur (aynı
program ve aynı değerlere sahip aynı değişkenler). Her iki işlem de (ebeveyn ve alt) bir
farkla çatal() 'dan sonraki talimatta yürütmeye devam eder : fork () için dönüş kodu
yeni (alt) süreç için sıfırdır, oysa (sıfır olmayan) süreç tanımlayıcısı çocuk ebeveyne iade
edilir.
Tipik olarak, execve() sistem çağrısı, iki işlemden biri tarafından çatallandıktan
sonra, bu işlemin sanal bellek alanını yeni bir programla değiştirmek için kullanılır.
execve() sistem çağrısı belleğe bir ikili dosya yükler (execve() sistem çağrısını içeren
programın bellek görüntüsünü yok eder ) ve yürütmeye başlar.
Bir işlem, çıkış() sistem çağrısı kullanılarak sonlandırılabilir ve üst süreci, wait()
sistem çağrısını kullanarak bu olayı bekleyebilir . Alt süreç çökerse, sistem çıkış()
çağrısını simüle eder. wait() sistem çağrısı, ebeveynin muhtemelen birçok çocuktan
hangisinin sonlandırıldığını söyleyebilmesi için sonlandırılan bir çocuğun işlem kimliğini
sağlar . İkinci bir sistem çağrısı olan wait3(), wait() 'e benzer, ancak ebeveynin çocuk
hakkında performans istatistikleri toplamasına da izin verir. Çocuğun çıkış zamanı ile
ebeveynin wait() sistem çağrılarından birini tamamlaması arasında, çocuk geçersizdir.
Eski bir süreç hiçbir şey yapamaz, sadece ebeveynin durum bilgilerini toplayabilmesi
için var olur. Eğer feshedilmiş bir sürecin ana süreci bir çocuktan önce çıkarsa,
feshedilmiş süreç init süreci tarafından miras alınır (bu da onu bekler) ve bir zombi
süreci haline gelir. Bu tesislerin tipik bir kullanımı Şekil C.4'te gösterilmektedir.
Prosesler arasındaki en basit iletişim şekli borulardır. Çatal()'dan önce bir boru
oluşturulabilir ve uç noktaları daha sonra çatal() ve execve() arasında kurulur . Bir boru,
esasen iki işlem arasındaki bir bayt sırasıdır. Boruya, sıradan bir dosya gibi bir dosya
tanıtıcısı tarafından erişilir.
Bir işlem boruya yazar, diğeri borudan okur. Orijinal boru sisteminin boyutu sistem
tarafından sabitlenmiştir. FreeBSD ile borular, değişken boyutlu tamponlara sahip olan
soket sisteminin üstüne uygulanır.
Boş bir borudan okumak veya dolu bir boruya yazmak, borunun durumu değişene
kadar işlemin bloke olmasına neden olur. Bir ebeveyn ve çocuk arasına yerleştirilecek
bir boru için özel düzenlemelere ihtiyaç vardır (böylece sadece biri okuyor ve biri
yazıyor).
Tüm kullanıcı işlemleri, init (işlem tanımlayıcısı 1'e sahip olan) adı verilen bir orijinal
işlemin torunlarıdır . Etkileşimli kullanım için mevcut her terminal bağlantı noktası ,
init tarafından kendisi için çatallanmış bir getty işlemine sahiptir. Getty işlemi , terminal
hattı parametrelerini başlatır ve içinden geçtiği kullanıcının oturum açma adını bekler.
Şekil C.4 Bir kabuk, bir programı yürütmek için bir alt işlemi çatallar.
C.3 Programcı Arayüzü 13
Machine Translated by Google
Bir oturum açma işleminin argümanı olarak bir execve() . Oturum açma işlemi
kullanıcının parolasını toplar, şifreler ve sonucu /etc/passwd dosyasından alınan
şifreli bir dizeyle karşılaştırır . Karşılaştırma başarılı olursa, kullanıcının oturum
açmasına izin verilir. Oturum açma işlemi, işlemin sayısal kullanıcı tanımlayıcısını
oturum açan kullanıcınınkine ayarladıktan sonra bir kabuk veya komut yorumlayıcı
yürütür . (Kabuk ve kullanıcı tanımlayıcısı /etc/passwd içinde kullanıcının oturum
açma adıyla bulunur.) Kullanıcı oturum açma oturumunun geri kalanında genellikle
bu kabuk ile iletişim kurar. Kabuğun kendisi, kullanıcının çalıştırmasını söylediği
komutlar için alt süreçleri çatallar.
Kullanıcı tanımlayıcısı, özellikle dosya erişimlerini içerenler olmak üzere, belirli
sistem çağrıları için kullanıcının izinlerini belirlemek için çekirdek tarafından kullanılır.
Bir kullanıcı koleksiyonuna benzer ayrıcalıklar sağlamak için kullanılan bir grup
tanımlayıcısı da vardır. FreeBSD'de bir süreç aynı anda birkaç grupta olabilir . Oturum
açma işlemi, kabuğu /etc/passwd ve /etc/group dosyaları tarafından kullanıcıya izin
verilen tüm gruplara yerleştirir .
Çekirdek tarafından iki kullanıcı tanımlayıcısı kullanılır: etkin kullanıcı tanımlayıcısı
ve gerçek kullanıcı tanımlayıcısı. Etkin kullanıcı tanımlayıcısı , dosya erişim izinlerini
belirlemek için kullanılır. Bir programın dosyası bir execve() tarafından yükleniyorsa ,
inode'unda setuid bit seti varsa, işlemin etkin kullanıcı tanımlayıcısı dosyanın
sahibinin kullanıcı tanımlayıcısına ayarlanırken gerçek kullanıcı tanımlayıcısı şu
şekilde bırakılır: öyleydi. Bu şema, belirli süreçlerin sıradan kullanıcılar tarafından
yürütülebilirken sıradan ayrıcalıklardan daha fazlasına sahip olmasına izin verir.
Setuid fikri, Dennis Ritchie (ABD Patenti 4,135,240) tarafından patentlenmiştir ve
UNIX'in ayırt edici özelliklerinden biridir . Gruplar için benzer bir setgid biti mevcuttur.
Bir süreç, sırasıyla getuid( ) ve geteuid() çağrılarıyla gerçek ve etkin kullanıcı
tanımlayıcısını belirleyebilir . getgid () ve getegid() çağrıları, sırasıyla sürecin gerçek
ve etkin grup tanımlayıcısını belirler. Bir işlemin geri kalan grupları getgroups()
sistem çağrısı ile bulunabilir.
C.3.3 Sinyaller
Sinyaller , yazılım kesintilerine benzer istisnai koşulların ele alınması için bir olanaktır.
Her biri ayrı bir duruma karşılık gelen 20 farklı sinyal vardır. Bir klavye kesintisi, bir
süreçteki bir hata (kötü bellek referansı gibi) veya bir dizi eşzamansız olay
(zamanlayıcılar veya kabuktan iş kontrol sinyalleri gibi) tarafından bir sinyal
üretilebilir. Hemen hemen her sinyal, kill() sistem çağrısı tarafından da üretilebilir .
( öldürme sinyali, sayı 9, SIGKILL) bir sinyal işleyici tarafından göz ardı edilemez veya
yakalanamaz. SIGKILL , örneğin, SIGINT ve SIGQUIT gibi diğer sinyalleri yok sayan
kontrolden çıkmış bir süreci öldürmek için kullanılır.
Sinyaller kaybolabilir. Yönlendirildiği proses tarafından bir önceki sinyal kabul
edilmeden önce aynı türden başka bir sinyal gönderilirse, ilk sinyalin üzerine yazılacak
ve süreç tarafından sadece son sinyal görülecektir. Başka bir deyişle, sinyal işleyiciye
yapılan bir çağrı, bir sürece sinyalin en az bir oluşumunun olduğunu söyler. Ayrıca
UNIX sinyalleri arasında göreli bir öncelik yoktur . Aynı prosese aynı anda iki farklı
sinyal gönderilirse prosesin önce hangisini alacağını bilemeyiz.
Sinyaller başlangıçta istisnai olaylarla ilgilenmek için tasarlandı. Ancak çoğu UNIX
özelliğinde olduğu gibi, sinyal kullanımı istikrarlı bir şekilde genişlemiştir. 4.1BSD ,
talep üzerine alt süreçleri başlatmak ve durdurmak için sinyalleri kullanan iş kontrolünü
tanıttı. Bu olanak, tek bir kabuğun birden çok işlemi kontrol etmesine olanak tanır;
bunları kullanıcının istediği gibi başlatma, durdurma ve arka planda tutma. Sun
Microsystems tarafından icat edilen SIGWINCH sinyali, çıktının görüntülendiği
pencerenin boyutunun değiştiğini bir sürece bildirmek için kullanılır. Sinyaller ayrıca
ağ bağlantılarından gelen acil verileri iletmek için kullanılır.
Kullanıcılar, eski sinyal uygulamasında doğal bir yarış koşulunda daha güvenilir
sinyaller ve bir hata düzeltmesi istedi. Böylece 4.2BSD , beraberinde yarışsız, güvenilir,
ayrı olarak uygulanan bir sinyal kabiliyeti getirdi. Kritik bölümler sırasında bireysel
sinyallerin bloke edilmesini sağlar ve bir işlemin kesintiye uğrayana kadar uyumasına
izin vermek için yeni bir sistem çağrısına sahiptir. Donanım kesme işlevine benzer.
Bu yetenek artık POSIX standardının bir parçasıdır.
UNIX sistem çağrısı arabirimi, geniş bir kitaplık rutinleri ve başlık dosyaları koleksiyonu
tarafından desteklenir ve genişletilir. Başlık dosyaları, sistem çağrılarında kullanılan
karmaşık veri yapılarının tanımını sağlar. Ek olarak, geniş bir işlev kitaplığı, ek program
desteği sağlar.
Örneğin, UNIX I/O sistem çağrıları, bayt bloklarının okunmasını ve yazılmasını
sağlar. Bazı uygulamalar bir seferde yalnızca 1 bayt okumak ve yazmak isteyebilir.
Mümkün olsa da, bu her bayt için bir sistem çağrısı gerektirir - çok yüksek bir ek yük.
Bunun yerine, bir dizi standart kitaplık yordamı ( <stdio.h> başlık dosyası aracılığıyla
erişilen standart G/Ç paketi) , yerel arabellekleri ve bu arabellekler arasındaki
aktarımları kullanarak bir seferde birkaç bin bayt okuyup yazan başka bir arabirim
sağlar. kullanıcı belleği) G/Ç istendiğinde.
Biçimlendirilmiş G/Ç , standart G/Ç paketi tarafından da desteklenir .
Matematiksel işlevler, ağ erişimi, veri dönüştürme vb. için ek kitaplık desteği
sağlanır. FreeBSD çekirdeği 300'den fazla sistem çağrısını destekler; C program
kitaplığı 300'den fazla kitaplık işlevine sahiptir. Kitaplık işlevleri sonunda gerektiğinde
sistem çağrılarıyla sonuçlanır (örneğin, getchar() kitaplık rutini , dosya arabelleği boşsa
bir read() sistem çağrısıyla sonuçlanır). Ancak, programcının genellikle temel çekirdek
sistem çağrıları seti ile kütüphane fonksiyonları tarafından sağlanan ek fonksiyonlar
arasında ayrım yapmasına gerek yoktur.
Bir UNIX sisteminin hem programcısı hem de kullanıcısı, esas olarak yazılmış ve
yürütülmeye hazır olan sistem programları kümesiyle ilgilenir.
Bu programlar, işlevlerini desteklemek için gerekli sistem çağrılarını yapar, ancak
sistem çağrılarının kendileri programın içinde bulunur ve kullanıcı için açık olması
gerekmez.
Ortak sistem programları birkaç kategoriye ayrılabilir; çoğu dosya veya dizin
yönelimlidir. Örneğin, dizinleri işlemek için sistem programları, yeni bir dizin
oluşturmak için mkdir , bir dizini kaldırmak için rmdir , geçerli dizini başka bir dizine
değiştirmek için cd ve geçerli (çalışan) dizinin mutlak yol adını yazdırmak için pwd'dir .
Bir dosyayı terminalde görüntülemek için kullanıcı cat'i çalıştırabilir . cat programı ,
dosyaların bir listesini alır ve bunları birleştirerek sonucu standart çıktıya, genellikle
terminale kopyalar. Yüksek hızlı bir katot ışınlı tüp (CRT) ekranında, elbette, dosya
okunamayacak kadar hızlı olabilir. Daha fazla program, dosyayı bir seferde bir ekran
görüntüler ve kullanıcı bir sonraki ekrana devam etmek için bir karakter yazana kadar
duraklar. Head programı , bir dosyanın yalnızca ilk birkaç satırını görüntüler; tail son birkaç
satırı gösterir.
Bunlar, UNIX'te yaygın olarak kullanılan temel sistem programlarıdır. Ayrıca, bir dizi
düzenleyici (ed, sed, emacs, vi vb.), derleyiciler (C, python, FORTRAN vb.) ve metin
biçimlendiricileri (troff, TEX, scribe vb.) vardır. . Dosyaları sıralamak (sıralamak) ve
karşılaştırmak (cmp, diff), kalıp aramak (grep, awk), diğer kullanıcılara e-posta göndermek
(mail) ve diğer birçok aktivite için programlar da vardır.
% ls -l
yüzde işareti olağan C kabuğu istemidir ve ls -l (kullanıcı tarafından yazılan) (uzun) liste
dizini komutudur. Komutlar, kullanıcının aynı satırda komut adından sonra yazdığı ve
boşluklarla (boşluklar veya sekmeler) ayırdığı argümanları alabilir.
Kabuklarda birkaç komut yerleşik olmasına rağmen ( cd gibi), tipik bir komut
yürütülebilir bir ikili nesne dosyasıdır. Birkaç dizinden oluşan bir liste, arama yolu, kabuk
tarafından tutulur. Her komut için, arama yolundaki dizinlerin her biri sırayla aynı ada
sahip bir dosya için aranır. Bir dosya bulunursa, yüklenir ve yürütülür. Arama yolu kullanıcı
tarafından ayarlanabilir. /bin ve /usr/bin dizinleri neredeyse her zaman arama yolundadır
ve bir FreeBSD sistemindeki tipik bir arama yolu şöyle olabilir :
ls komutunun nesne dosyası /bin/ls'dir ve kabuğun kendisi /bin/sh (Bourne kabuğu) veya /
bin/csh'dir (C kabuğu).
Bir komutun yürütülmesi, bir fork() sistem çağrısı ve ardından nesne dosyasının bir
execve() tarafından yapılır. Kabuk genellikle daha sonra askıya almak için bir wait() yapar
Machine Translated by Google
İşlemler dosyaları istedikleri gibi açabilir, ancak çoğu işlem, başladığında üç dosya
tanımlayıcısının (0, 1 ve 2 sayıları) açık olmasını bekler. Bu dosya tanımlayıcıları ,
süreci oluşturan çatal() (ve muhtemelen execve()) üzerinden miras alınır . Bunlar
standart giriş (0), standart çıkış (1) ve standart hata (2) olarak bilinir. Üçü de sıklıkla
kullanıcının terminaline açıktır. Böylece program, kullanıcının yazdıklarını standart
girdiyi okuyarak okuyabilir ve program, standart çıktıya yazarak çıktıyı kullanıcının
ekranına gönderebilir.
Standart hata dosya tanımlayıcısı da yazmaya açıktır ve hata çıktısı için kullanılır;
sıradan çıktı için standart çıktı kullanılır. Çoğu program, standart girdi ve standart
çıktı için (bir terminal yerine) bir dosyayı da kabul edebilir.
Program girdisinin nereden geldiği ve çıktısının nereye gittiği ile ilgilenmez. Bu,
UNIX'in zarif tasarım özelliklerinden biridir .
Ortak kabuklar, bir işlemin standart G/Ç akışları için hangi dosyaların açık olduğunu
değiştirmek için basit bir sözdizimine sahiptir . Standart bir dosyayı değiştirmeye G/Ç yeniden
yönlendirmesi denir . G/Ç yeniden yönlendirmesi için sözdizimi Şekil C.5'te gösterilmiştir. Bunda
% % program yap > & hatalar hem standart çıktıyı hem de standart
hatayı bir dosyaya kaydedin
18 Ek C BSD UNIX
örneğin, ls komutu, geçerli dizindeki dosyaların adlarının bir listesini, bir yazıcı için
uygun sayfalarda listelenen pr komut biçimlerinin bir listesini üretir ve lpr komutu,
biçimlendirilmiş çıktıyı /dev/lp0 gibi bir yazıcıya biriktirir . Sonraki komut, tüm çıktıları
ve tüm hata mesajlarını bir dosyaya yeniden yönlendirilmeye zorlar. Ve işareti
olmadan, terminalde hata mesajları görünür.
% ls | pr | lpr
Her dikey çubuk, kabuğa, önceki komutun çıktısının bir sonraki komuta girdi olarak
iletilmesi için düzenleme yapmasını söyler. Verileri bir süreçten diğerine taşımak için
bir boru kullanılır. Bir işlem borunun bir ucuna yazar ve diğer bir işlem diğer ucundan
okur. Örnekte, bir borunun yazma ucu, kabuk tarafından ls'nin standart çıkışı olacak
şekilde ayarlanır ve borunun okunan ucu, pr'nin standart girişi olur. Başka bir boru
pr ve lpr arasında olacaktır .
İşletim sistemleri için önemli bir tasarım problemi, süreçlerin temsilidir. UNIX ve
diğer birçok sistem arasındaki önemli bir fark , birden çok işlemin oluşturulabilmesi
ve değiştirilebilmesidir. Bunlar
C.5 Süreç Yönetimi 19
Machine Translated by Google
işlemler UNIX'te çeşitli kontrol blokları ile temsil edilir. Bir kullanıcı işleminin sanal
adres alanında hiçbir sistem kontrol bloğuna erişilemez; bir işlemle ilişkili kontrol
blokları çekirdekte depolanır. Çekirdek, süreç kontrolü ve CPU zamanlaması için bu
kontrol bloklarındaki bilgileri kullanır.
Bir kullanıcı işleminin sanal adres alanı metin (program kodu), veri ve yığın
bölümlerine bölünür. Veri ve yığın segmentleri her zaman aynı adres alanındadır,
ancak ayrı ayrı ve genellikle zıt yönlerde büyüyebilirler. Çoğu zaman, veri ona doğru
büyüdükçe yığın küçülür. Metin bölümü bazen (ayrı talimat ve veri alanına sahip Intel
8086'da olduğu gibi) veri ve yığından farklı bir adres alanında bulunur ve genellikle
salt okunurdur. Hata ayıklayıcı, kesme noktalarının eklenmesine izin vermek için bir
metin bölümünü okuma-yazma moduna geçirir.
20
Ek C BSD UNIX
kullanıcı, geçerli dizin ve açık dosyaların tablosu
kullanıcı yapısı.
Her işlemin hem bir kullanıcı hem de bir sistem modu vardır. Çoğu sıradan iş
kullanıcı modunda yapılır, ancak bir sistem çağrısı yapıldığında sistem modunda
gerçekleştirilir. Bir sürecin sistem ve kullanıcı aşamaları asla aynı anda yürütülmez.
Sistem modunda bir işlem yürütülürken, o işleme ait kullanıcı yığını yerine o işlem
için bir çekirdek yığını kullanılır. İşlem için çekirdek yığını, kullanıcı yapısını hemen
takip eder. Çekirdek yığını ve kullanıcı yapısı birlikte süreç için sistem veri bölümünü
oluşturur.
Çekirdeğin, bir işlem adına iş yapmadığında (örneğin, kesme işleme için) kullanmak
için kendi yığını vardır.
Şekil C.6, bir sürecin çeşitli parçalarını bulmak için süreç yapısının nasıl
kullanıldığını gösterir.
fork() sistem çağrısı , alt süreç için yeni bir süreç yapısı (yeni bir süreç tanımlayıcısı
ile) tahsis eder ve kullanıcı yapısını kopyalar. Süreçler metinlerini paylaştığı için
normalde yeni bir metin yapısına ihtiyaç yoktur. Uygun sayaçlar ve listeler yalnızca
güncellenir. Yeni bir sayfa tablosu oluşturulur ve alt sürecin veri ve yığın bölümleri
için yeni ana bellek tahsis edilir. Kullanıcı yapısının kopyalanması, açık dosya
tanımlayıcılarını, kullanıcı ve grup tanımlayıcılarını, sinyal işlemeyi ve bir işlemin en
benzer özelliklerini korur.
vfork () sistem çağrısı , verileri ve yığını yeni işleme kopyalamaz; bunun yerine,
yeni süreç eskisinin sayfa tablosunu paylaşır.
Yeni bir kullanıcı yapısı ve yeni bir süreç yapısı hala oluşturulmaktadır. Bu sistem
çağrısının yaygın bir kullanımı, bir kabuk bir komutu yürüttüğünde ve tamamlanmasını
beklediğinde gerçekleşir. Ana süreç, alt süreci oluşturmak için vfork() 'u kullanır .
Alt süreç, sanal adres alanını tamamen değiştirmek için hemen bir execve() kullanmak
istediğinden, tam bir kopyaya gerek yoktur.
yığın
veri
Metin
metin yapısı
Kullanıcı alanı
yerleşik tablolar
ebeveyn süreci. Boruları manipüle etmek için gerekli olan bu tür veri yapıları, vfork() ve
execve() arasındaki kayıtlarda tutulabilir . İlgili çekirdek veri yapıları, paylaşılmayan
kullanıcı yapısına bağlı olduğundan, dosyalar bir işlemde diğer işlemi etkilemeden
kapatılabilir. Ebeveyn , çocuğun ihtiyaç duyduğu belleği değiştirmemesi için, çocuk
execve() 'i çağırana veya sonlandırana kadar vfork()'u çağırdığında askıya alınır .
Ana süreç büyük olduğunda, vfork() sistem CPU zamanında önemli tasarruflar
sağlayabilir . Ancak, execve() gerçekleşene kadar her iki işlemde de herhangi bir bellek
değişikliği meydana geldiğinden, oldukça tehlikeli bir sistem çağrısıdır . Alternatif bir
yerel, sayfa tablosunu çoğaltarak tüm sayfaları paylaşmak, ancak her iki sayfa tablosunun
girişlerini yazma üzerine kopya olarak işaretlemektir. Donanım koruma bitleri, bu
paylaşılan sayfalara her türlü yazma girişimini yakalayacak şekilde ayarlanmıştır. Böyle bir
tuzak oluşursa, yeni bir çerçeve tahsis edilir ve paylaşılan sayfa yeni çerçeveye kopyalanır.
Sayfa tabloları, bu sayfanın artık paylaşılmadığını (ve dolayısıyla artık yazmaya karşı
korumalı olması gerekmediğini) ve yürütmenin devam edebileceğini gösterecek şekilde ayarla
execve() sistem çağrısı, yeni bir süreç veya kullanıcı yapısı oluşturmaz . Bunun yerine,
sürecin metni ve verileri değiştirilir. Açık dosyalar korunur (belirli dosya tanımlayıcılarının
bir execve() üzerinde kapatılacağını belirtmenin bir yolu olmasına rağmen ). Çoğu sinyal
işleme özelliği korunur, ancak bir sinyalde belirli bir kullanıcı rutinini çağırmak için
düzenlemeler, bariz nedenlerle iptal edilir. İşlem tanımlayıcısı ve işlemin diğer birçok
özelliği değişmez.
22 Ek C BSD UNIX
Bir sürecin beklediği bir olayla ilgili yapı. Olay gerçekleştiğinde, olayı bilen sistem
işlemi, olaya karşılık gelen adresle birlikte wakeup() 'ı çağırır ve aynı adreste uyku
işlemi yapan tüm işlemler çalıştırılmak üzere hazır kuyruğa alınır.
Olaylarla ilişkili bir bellek yoktur. Bir olayda uyku() yapan rutinin çağırıcısı,
bekleme nedeninin ortadan kalkma olasılığı da dahil olmak üzere erken bir geri
dönüşle başa çıkmaya hazır olmalıdır.
Etkinlik mekanizmasında yarış koşulları yer alır. Bir işlem (örneğin bellekteki bir
bayrağın kontrol edilmesi nedeniyle) bir olay üzerinde uyumaya karar verirse ve
olay, olay üzerinde uyku() işlevini yapan ilkel öğeyi çalıştırmadan önce olay meydana
gelirse, uyku işlemi sonsuza kadar uyuyabilir. . Herhangi bir kesinti olmaması için
kritik bölümde donanım işlemci önceliğini yükselterek bu durumun önüne geçiyoruz.
Böylece sadece olayı isteyen süreç uyuyana kadar çalışabilir. Donanım işlemcisi
önceliği, çekirdek boyunca kritik bölgeleri korumak için bu şekilde kullanılır ve
UNIX'in çok işlemcili makinelere taşınmasının önündeki en büyük engeldir. Ancak
bu sorun, bu tür taşıma işlemlerinin tekrar tekrar yapılmasını engellemedi.
Metin düzenleyiciler gibi pek çok işlem G/Ç'ye bağlıdır ve genel olarak, esas
olarak G/Ç'yi bekleme temelinde planlanır. Deneyimler, metin biçimlendiriciler veya
dil yorumlayıcılar gibi CPU'ya bağlı birkaç iş çalışırken görülebileceği gibi , UNIX
zamanlayıcısının G/Ç'ye bağlı işlerde en iyi performansı gösterdiğini göstermektedir.
Burada CPU planlaması olarak anılan şey, Bölüm 3'teki kısa vadeli programlamaya
çok yakındır . Bununla birlikte, öncelik şemasının negatif geri bildirim özelliği, uzun
vadeli iş karışımını büyük ölçüde belirlediği için bazı uzun vadeli programlama
sağlar . Orta vadeli planlama, Bölüm C.6'da açıklanan takas mekanizmasıyla yapılır.
bir veri segmentinin kesinti vektörlerine, bir diğerinin süreç başına sistem veri
segmentine ve bir diğerinin UNIBUS (sistem G/Ç veri yolu) kayıtları için tahsis edilmesi
nedeniyle daha da ciddi şekilde kısıtlandı . Ayrıca, daha küçük PDP-11'lerde toplam
fiziksel bellek 256 KB ile sınırlıydı . Toplam bellek kaynakları, karmaşık bellek yönetimi
algoritmalarını doğrulamak veya desteklemek için yetersizdi. Böylece UNIX , tüm süreç
belleği görüntülerini değiştirdi.
Berkeley , 3BSD ile UNIX'e sayfalamayı tanıttı. VAX 4.2BSD , talep disk belleğine
alınmış bir sanal bellek sistemidir. Sayfalama, belleğin harici parçalanmasını ortadan
kaldırır. (Dahili parçalanma hala meydana gelir, ancak oldukça küçük bir sayfa
boyutuyla ihmal edilebilir.) Sayfalama, bellekteki her işlemin yalnızca bir kısmıyla
yürütülmesine izin verdiği için, ana bellekte daha fazla iş tutulabilir ve takas minimumda
tutulabilir. Talep sayfalama basit bir şekilde yapılır.
Bir işlemin bir sayfaya ihtiyacı olduğunda ve sayfa orada olmadığında, çekirdekte bir
sayfa hatası meydana gelir, bir ana bellek çerçevesi tahsis edilir ve uygun disk sayfası
çerçeveye okunur.
Birkaç optimizasyon var. Gereken sayfa, işlem için hala sayfa tablosundaysa ancak
sayfa değiştirme işlemi tarafından geçersiz olarak işaretlendiyse, geçerli olarak
işaretlenebilir ve herhangi bir G/Ç aktarımı olmadan kullanılabilir. Sayfalar benzer
şekilde boş çerçeveler listesinden alınabilir. Çoğu işlem başlatıldığında, sayfalarının
çoğu önceden hazırlanır ve bu mekanizma tarafından kurtarma için ücretsiz listeye
alınır. Bir işlemin başlangıçta ön sayfalama yapmaması için de düzenlemeler yapılabilir.
Ancak bu nadiren yapılır, çünkü saf talep çağrısına daha yakın olan daha fazla sayfa
hatası yüküne neden olur. FreeBSD , sayfalama kuyruklarıyla sayfa renklendirme
uygular. Kuyruklar, işlemcinin L1 ve L2 önbelleklerinin boyutuna göre düzenlenir. Yeni
bir sayfa tahsis edilmesi gerektiğinde, FreeBSD önbellek için en uygun şekilde
hizalanmış olanı almaya çalışır. Sayfanın diskten getirilmesi gerekiyorsa, aktarım süresi
boyunca bellekte kilitlenmesi gerekir. Bu kilitleme, sayfanın değiştirilmek üzere
seçilmemesini sağlar. Sayfa düzgün bir şekilde getirildiğinde ve eşlendiğinde, üzerinde
ham fiziksel G/Ç yapılıyorsa kilitli kalmalıdır .
Sayfa değiştirme algoritması daha ilginç. 4.2BSD , Bölüm 10.4.5'te açıklanan ikinci
şans (saat) algoritmasının bir modifikasyonunu kullanır . Tüm çekirdek olmayan ana
belleğin haritası ( çekirdek harita veya cmap) , bir yazılım saat ibresi tarafından
doğrusal ve tekrar tekrar taranır. Saat ibresi belirli bir çerçeveye ulaştığında, çerçeve
bazı yazılım koşulları tarafından kullanımda olarak işaretlenirse (örneğin, fiziksel G/Ç
bunu kullanarak devam ediyorsa) veya çerçeve zaten boşsa, çerçeveye dokunulmadan
bırakılır ve saat ibresi bir sonraki kareye geçer.
Aksi takdirde, bu çerçeve için ilgili metin veya işlem sayfası tablosu girişi bulunur. Giriş
zaten geçersizse çerçeve ücretsiz listeye eklenir.
Aksi takdirde, sayfa tablosu girişi geçersiz ancak geri alınabilir (yani, bir sonraki
istendiğinde çağrılmamışsa, yeniden geçerli hale getirilebilir).
Bir işlem için geçerli veri sayfalarının sayısının çok düşük olmadığından emin
olmak ve çağrı cihazının taşmasını önlemek için kontroller vardır.
24 Ek C
Machine Translated by Google BSD UNIX
istekleri ile. Bir işlemin kullandığı ana bellek miktarını sınırlayabileceği bir mekanizma
da vardır.
LRU saat-el şeması, süreç 2 olan sayfa arka plan programında uygulanır.
( Takaslayıcının süreç 0 ve init'in süreç 1 olduğunu unutmayın.)
Bu işlem, zamanının çoğunu uyuyarak geçirir, ancak eylemin gerekli olup olmadığını
görmek için saniyede birkaç kez (bir zaman aşımıyla programlanır) bir kontrol yapılır.
Eğer öyleyse, süreç 2 uyandırılır. Boş kare sayısı bir eşiğin altına düştüğünde, lotfree,
pagedaemon uyandırılır . Bu nedenle, her zaman büyük miktarda boş bellek varsa,
sayfa arka plan programı hiçbir zaman çalışmadığından sisteme hiçbir yük yüklemez.
Zamanlayıcı, çağrı sisteminin aşırı yüklendiğine karar verirse, aşırı yük giderilene
kadar işlemler tamamen değiştirilir. Bu takas genellikle yalnızca birkaç koşul
karşılandığında gerçekleşir: yük ortalaması yüksek; boş hafıza alt sınırın altına düştü,
minfree; ve son zamanlarda mevcut olan ortalama bellek, çok boş > boş > minimum
boş olduğu durumda , istenen miktardan daha azdır . Başka bir deyişle, yalnızca
birkaç işlemin çalıştırılmaya çalışıldığı kronik bir bellek sıkıntısı takasa neden olur ve
o zaman bile boş belleğin şu anda son derece düşük olması gerekir. (Nadir
durumlarda, çekirdeğin aşırı bir sayfalama hızı veya bellek ihtiyacı da hesaplamalara
girebilir.) İşlemler, elbette başka nedenlerle (örneğin, yalnızca çalıştırmadıkları için)
zamanlayıcı tarafından değiştirilebilir. uzun zaman).
lotfree parametresi genellikle saatin ibraz ettiği haritadaki belleğin dörtte biridir
ve desfree ve minfree genellikle farklı sistemlerde aynıdır, ancak kullanılabilir belleğin
kesirleri ile sınırlıdır. FreeBSD , disk belleği kuyruklarını dinamik olarak ayarlar,
böylece bu sanal bellek parametrelerinin nadiren ayarlanması gerekir. Kesinti anında
ihtiyaç duyulabilecek sayfaları sağlamak için Minfree sayfalar boş tutulmalıdır.
İşlemin ihtiyaç duyacağı bellek miktarı, bu işlemin toplam sanal boyutunun bir
kısmıdır - bu işlem uzun bir süre boyunca değiştirilmişse yarısına kadar.
UNIX dosya sistemi iki ana nesneyi destekler: dosyalar ve dizinler . Dizinler yalnızca
özel bir biçime sahip dosyalardır, bu nedenle bir dosyanın temsili temel UNIX
kavramıdır.
Donanım disk sektörü genellikle 512 bayttır. Hız için 512 bayttan büyük bir blok
boyutu tercih edilir. Ancak, UNIX dosya sistemleri genellikle çok sayıda küçük dosya
içerdiğinden, çok daha büyük bloklar aşırı dahili parçalanmaya neden olur. Bu
nedenle önceki 4.1BSD dosya sistemi 1.024 bayt (1-KB) blokla sınırlıydı . 4.2BSD
çözümü, dolaylı blokları olmayan dosyalar için iki blok boyutu kullanmaktır. Bir
dosyanın tüm blokları , sonuncusu hariç, büyük boyuttadır (8 KB gibi) . Son blok,
dosyayı doldurmak için daha küçük bir parça boyutunun (örneğin, 1.024 KB) uygun
bir katıdır. Bu nedenle, 18.000 bayt boyutundaki bir dosyada iki adet 8 KB'lik blok ve
bir adet 2 KB'lik parça (tamamen doldurulmayacaktır) olacaktır.
Blok ve parça boyutları, dosya sisteminin kullanım amacına göre dosya sistemi
oluşturma sırasında ayarlanır. Çok sayıda küçük dosya bekleniyorsa, parça boyutu
küçük olmalıdır; büyük dosyaların tekrar tekrar aktarımı bekleniyorsa, temel blok
boyutu büyük olmalıdır. Uygulama ayrıntıları, 8:1'lik bir maksimum blok-parça oranı
ve 4 KB'lik bir minimum blok boyutuna zorlar, bu nedenle, ilk durum için tipik
seçenekler 4.096:512 ve ikincisi için 8.192:1.024'tür.
Verilerin 1 KB baytlık aktarım boyutlarında bir dosyaya yazıldığını ve dosya
sisteminin blok ve parça boyutlarının 4 KB ve 512 bayt olduğunu varsayalım. Dosya
sistemi , ilk aktarımdan gelen verileri içermek için 1 KB'lik bir parça tahsis edecektir .
Sonraki aktarım, 2 KB'lik yeni bir parçanın ayrılmasına neden olur. Orijinal parçadaki
veriler bu yeni parçaya kopyalanmalı ve ardından ikinci 1 KB aktarım
gerçekleştirilmelidir. Tahsis yordamları, kopyalamaya gerek kalmayacak şekilde,
mevcut parçanın hemen ardından diskte gerekli alanı bulmaya çalışır. Bunu
yapamazlarsa, parça bir blok haline gelmeden önce yedi kopyaya kadar gerekebilir.
Parçaların yeniden kopyalanmasını önlemek için, programların bir dosyanın blok
boyutunu keşfetmesi için hükümler yapılmıştır, böylece bu boyutta aktarımlar
yapılabilir.
C.7.2 Düğümler
Bir dosya, diskteki belirli bir dosya hakkındaki bilgilerin çoğunu depolayan bir kayıt
olan inode ile temsil edilir . (Bkz. Şekil C.7.) İnode ( Göz düğümü olarak telaffuz edilir)
adı “indeks düğümü”nden türetilmiştir ve orijinal olarak “i-node” olarak yazılmıştır;
tire yıllar içinde kullanım dışı kaldı. Terim bazen "Ben düğüm" olarak yazılır.
26 Ek C
Machine Translated by Google BSD UNIX
mod
sahipler (2)
veri
•
•
doğrudan bloklar • •
• veri
•
• veri
• • veri
tek dolaylı • •
veri • •
çift dolaylı veri
•
•
üçlü dolaylı • veri
•
•
veri
4.2BSD'deki bir dosya sistemi için minimum blok boyutu 4 KB'dir, bu nedenle
232 bayta kadar olan dosyalar üçlü değil, yalnızca ikili dolaylı yönlendirme kullanır.
Yani, her blok işaretçisi 4 bayt aldığından, doğrudan bloklarda erişilebilir 49.152
bayta, tek bir dolaylı olarak erişilebilen 4.194.304 bayta ve çift dolaylı olarak
erişilebilen 4.294.967.296 bayta, yani 232 bayttan daha büyük olan toplam
4.299.210.752 bayta sahibiz. 232 sayısı önemlidir, çünkü ana bellekteki dosya
yapısındaki dosya ofseti 32 bitlik bir kelimede tutulur. Bu nedenle dosyalar 232
bayttan büyük olamaz . Dosya işaretçileri imzalı tamsayılar olduğundan
C.7 Dosya Sistemi 27
Machine Translated by Google
(bir dosyada ileri ve geri aramak için), gerçek maksimum dosya boyutu 232 1
bayttır. İki gigabayt çoğu amaç için yeterince büyüktür.
C.7.3 Dizinler
Düz dosyalar, bu uygulama düzeyinde dizinlerden ayırt edilmez. Dizin içerikleri veri
bloklarında tutulur ve dizinler, düz dosyalarla aynı şekilde bir inode tarafından temsil
edilir. Yalnızca inode türü alanı, düz dosyalar ve dizinler arasında ayrım yapar. Düz
dosyaların bir yapıya sahip olduğu varsayılmazken, dizinlerin belirli bir yapısı vardır.
Sürüm 7'de dosya adları 14 karakterle sınırlıydı, bu nedenle dizinler 16 baytlık
girişlerin bir listesiydi: düğüm numarası için 2 bayt ve dosya adı için 14 bayt.
FreeBSD'de dosya adları 255 bayta kadar değişken uzunluktadır, dolayısıyla dizin
girişleri de değişken uzunluktadır . Her girdi, önce girdinin uzunluğunu, ardından
dosya adını ve düğüm numarasını içerir. Bu değişken uzunluklu giriş, dizin yönetimini
ve arama rutinlerini daha karmaşık hale getirir, ancak kullanıcıların dosyaları ve
dizinleri için çok daha anlamlı adlar seçmesine olanak tanır. Her dizindeki ilk iki isim
“.” ve "..". Yeni dizin girişleri, genellikle mevcut dosyalardan sonra, mevcut ilk alanda
dizine eklenir. Doğrusal bir arama kullanılır.
Kullanıcı bir dosyaya yol adıyla başvururken, dosya sistemi bir dosyanın tanımı
olarak düğümü kullanır. Bu nedenle, çekirdeğin sağlanan kullanıcı yolu adını bir
inode ile eşleştirmesi gerekir. Bu eşleme için dizinler kullanılır.
İlk olarak bir başlangıç dizini belirlenir. Daha önce belirtildiği gibi, yol adının ilk
karakteri “/” ise, başlangıç dizini kök dizindir.
Yol adı eğik çizgi dışında herhangi bir karakterle başlıyorsa, başlangıç dizini geçerli
işlemin geçerli dizinidir. Başlangıç dizini, uygun dosya türü ve erişim izinleri açısından
kontrol edilir ve gerekirse bir hata döndürülür. Başlangıç dizininin düğümü her
zaman kullanılabilir.
Yol adının bir sonraki öğesi, bir sonraki “/”ye veya yol adının sonuna kadar bir
dosya adıdır. Başlangıç dizini bu ad için aranır ve ad bulunamazsa bir hata döndürülür.
Yol adında başka bir öğe varsa, geçerli düğümün bir dizine başvurması gerekir;
dönmezse veya erişim reddedilirse bir hata döndürülür. Bu dizin öncekiyle aynı
şekilde aranır. Bu işlem, yol adının sonuna ulaşılana ve istenen inode döndürülene
kadar devam eder. Bu adım adım işlem gereklidir, çünkü herhangi bir dizinde,
çevirinin devam etmek için farklı bir dizin yapısına taşınmasına neden olan bir
bağlama noktası (veya aşağıda tartışıldığı gibi sembolik bağlantı) ile karşılaşılabilir.
Disk dışı dosyalar (cihazlar gibi) diskte tahsis edilmiş veri bloklarına sahip değildir.
Çekirdek, bu dosya türlerini (inode'da belirtildiği gibi) fark eder ve bunlar için G/Ç'yi
işlemek için uygun sürücüleri çağırır .
Örneğin, open() sistem çağrısı tarafından düğüm bulunduğunda, düğümü işaret
etmek için bir dosya yapısı tahsis edilir. Kullanıcıya verilen dosya tanıtıcısı bu dosya
yapısını ifade eder. FreeBSD'nin tutulacak bir dizin adı önbelleği vardır
Machine Translated by Google
28 Ek C BSD UNIX
veri
blokları
•
•
(4, …) oku •
senkronizasyon
düğüm
açık dosya tabloları dosya yapısı çekirdek içi
listesi
(işlem tablosu düğüm
başına) listesi
dosya sistemi performansını büyük ölçüde artıran son dizinden düğüme çeviriler.
Dosya yapısının işaret ettiği inode yapısı , inode'un diskteki çekirdek içi bir
kopyasıdır. Çekirdek içi inode, kaç dosya yapısının kendisine işaret ettiğini gösteren
bir referans sayısı gibi birkaç ekstra alana sahiptir ve dosya yapısı, kaç dosya
tanımlayıcısının ona atıfta bulunduğuna ilişkin benzer bir referans sayısına sahiptir.
Bir sayım sıfır olduğunda, girişe artık ihtiyaç duyulmaz ve geri alınabilir ve yeniden kullanılabilir.
Kullanıcının gördüğü dosya sistemi, bir yığın depolama aygıtındaki (genellikle bir
disk) verilerle desteklenir. Kullanıcı normalde yalnızca bir dosya sistemini bilir, ancak
bu tek mantıksal dosya sistemi aslında her biri farklı bir aygıtta bulunan birkaç
fiziksel dosya sisteminden oluşabilir. Cihaz özellikleri farklı olduğundan, her biri ayrı
Machine Translated by Google
donanım aygıtı kendi fiziksel dosya sistemini tanımlar. Aslında, genellikle diskler
gibi büyük fiziksel aygıtları birden çok mantıksal aygıta bölmek isteriz.
Her mantıksal aygıt, bir fiziksel dosya sistemini tanımlar. Şekil C.9, bir dizin
yapısının, fiziksel aygıtların bölümleri olan mantıksal aygıtlarla eşlenen dosya
sistemlerine nasıl bölündüğünü gösterir. Bu bölümlerin boyutları ve konumları
önceki sistemlerde aygıt sürücülerine kodlanmıştır, ancak bunlar FreeBSD
tarafından diskte tutulmaktadır .
Fiziksel bir aygıtı birden çok dosya sistemine bölmenin birçok faydası vardır.
Farklı dosya sistemleri farklı kullanımları destekleyebilir. Çoğu bölüm dosya
sistemi tarafından kullanılacak olsa da, sanal bellek yazılımı için takas alanı olarak
en az birine ihtiyaç duyulacaktır. Güvenilirlik artırıldı, çünkü yazılım hasarı
genellikle yalnızca bir dosya sistemiyle sınırlıdır. Her bölüm için dosya sistemi
parametrelerini (blok ve parça boyutları gibi) değiştirerek verimliliği artırabiliriz.
Ayrıca, ayrı dosya sistemlerine sahip olmak, dosyalar dosya sistemleri arasında
bölünemeyeceğinden, bir programın büyük bir dosya için tüm kullanılabilir alanı
kullanmasını engeller. Son olarak, disk yedeklemeleri bölüm başına yapılır ve
bölüm daha küçükse bir dosya için bir yedekleme bandı aramak daha hızlıdır.
Tam bölümü teypten geri yüklemek de daha hızlıdır.
Bir sürücüdeki dosya sistemlerinin sayısı, diskin boyutuna ve bir bütün olarak
bilgisayar sisteminin amacına göre değişir. Tek dosya sistemi,
kök
takas
30 Ek C BSD UNIX
kök dosya sistemi, her zaman kullanılabilir. Diğer dosya sistemleri monte edilebilir ,
yani kök dosya sisteminin dizin hiyerarşisine entegre edilebilir.
İnode yapısındaki bir bit, inode'un üzerine monte edilmiş bir dosya sistemine
sahip olduğunu gösterir. Bu dosyaya yapılan bir referans, monte edilen cihazın cihaz
numarasını bulmak için mount tablosunun aranmasına neden olur. Aygıt numarası,
bağlı dosya sisteminin kök dizininin düğümünü bulmak için kullanılır ve bu düğüm
kullanılır. Tersine, bir yol adı öğesi “..” ise ve aranan dizin, monte edilmiş bir dosya
sisteminin kök dizini ise, monte edildiği inode'u bulmak için mount tablosu aranır ve
o inode kullanılır.
Her dosya sistemi ayrı bir sistem kaynağıdır ve bir dizi dosyayı temsil eder.
Mantıksal aygıttaki ilk sektör , muhtemelen bir sonraki 7.5 KB'de bulunan ikincil bir
önyükleme programını çağırmak için kullanılabilecek bir birincil önyükleme programı
içeren önyükleme bloğudur . Bir sistem, önyükleme bloğu verilerini içeren yalnızca
bir bölüme ihtiyaç duyar, ancak sistem yöneticisi, birincil kopya hasar gördüğünde
önyüklemeye izin vermek için ayrıcalıklı programlar aracılığıyla kopyaları yükleyebilir.
Süper blok , dosya sisteminin statik parametrelerini içerir. Bu parametreler, dosya
sisteminin toplam boyutunu, veri bloklarının blok ve parça boyutlarını ve ayırma
ilkelerini etkileyen çeşitli parametreleri içerir.
C.7.6 Uygulamalar
Dosya sisteminin kullanıcı arabirimi basit ve iyi tanımlanmış olup, dosya sisteminin
uygulanmasının kullanıcı üzerinde önemli bir etkisi olmaksızın değiştirilmesine
olanak tanır. Dosya sistemi, 3BSD'nin Sürüm 6 ve Sürüm 7 arasında ve yine Sürüm 7
ve 4BSD arasında değiştirildi. Sürüm 7 için düğümlerin boyutu iki katına çıktı,
maksimum dosya ve dosya sistemi boyutları arttı ve serbest liste işleme ve süper
blok bilgilerinin ayrıntıları değişti. O zaman ayrıca, daha büyük dosyalarda ofsetlerin
belirtilmesine izin vermek için, search( ) ( 16-bit offset ile) lseek() (32-bit offset ile)
haline geldi, ancak çekirdeğin dışında birkaç başka değişiklik görülebiliyordu.
4.0BSD'de dosya sisteminde kullanılan blokların boyutu 512 bayttan 1.024 bayta
çıkarıldı . Bu artan boyut, disk üzerinde artan dahili parçalanma üretse de, esas
olarak her bir disk aktarımında erişilen daha fazla veri nedeniyle verimi iki katına
çıkardı. Bu fikir daha sonra System V tarafından bir dizi başka fikir, aygıt sürücüsü ve
programla birlikte benimsendi.
4.2BSD , hızı artıran ve beraberinde yeni özelliklerin eşlik ettiği Berkeley Fast File System'ı
ekledi. Sembolik bağlantılar yeni sistem çağrıları gerektiriyordu.
Uzun dosya adları, artık karmaşık olan dahili dizin yapısını geçmek için yeni dizin
sistemi çağrılarını gerektirdi. Son olarak, truncate() çağrıları eklendi.
Hızlı Dosya Sistemi başarılıydı ve artık UNIX'in çoğu uygulamasında bulunuyor.
Performansı, daha sonra tartışacağımız yerleşim ve tahsis politikaları ile mümkün
olmaktadır. Bölüm 14.4.4'te, disk verimini daha da artırmak için SunOS'ta yapılan
değişiklikleri tartıştık .
Çekirdek, bir dosyayı tanımlamak için bir <mantıksal aygıt numarası, düğüm numarası> çifti kullanır.
Mantıksal aygıt numarası, ilgili dosya sistemini tanımlar. Dosya sistemindeki
düğümler sırayla numaralandırılmıştır. Sürüm 7 dosya sisteminde, tüm düğümler,
başlangıçtaki tek bir süper bloğun hemen ardından gelen bir dizidedir.
Machine Translated by Google
düğümleri takip eden veri blokları ile mantıksal aygıt. İnode numarası, bu diziye etkin
bir şekilde yalnızca bir dizindir.
Sürüm 7 dosya sistemiyle, bir dosya bloğu, inode dizisinin sonu ile dosya
sisteminin sonu arasında diskte herhangi bir yerde olabilir. Serbest bloklar, süper
blokta bağlantılı bir listede tutulur. Bloklar, ücretsiz listenin önüne itilir ve yeni
dosyalar sunmak veya mevcut dosyaları genişletmek için gerektiğinde önden
kaldırılır. Bu nedenle, bir dosyanın blokları hem düğümden hem de birbirinden keyfi
olarak uzak olabilir. Ayrıca, bu tür bir dosya sistemi ne kadar çok kullanılırsa, bir
dosyadaki bloklar o kadar düzensiz hale gelir. Bu işlemi ancak gerçekleştirilmesi
uygun olmayan tüm dosya sistemini yeniden başlatarak ve geri yükleyerek tersine
çevirebiliriz. Bu süreç Bölüm 14.7.4'te açıklanmıştır.
Diğer bir zorluk ise dosya sisteminin güvenilirliğinin şüpheli olmasıdır. Hız için,
bağlanan her dosya sisteminin süper bloğu bellekte tutulur. Süper bloğu bellekte
tutmak, özellikle ücretsiz listeyi kullanmak için çekirdeğin bir süper bloğa hızlı bir
şekilde erişmesini sağlar. Her 30 saniyede bir, çekirdek içi ve disk kopyalarını
senkronize tutmak için süper blok diske yazılır (güncelleme programı tarafından,
sync() sistem çağrısı kullanılarak). Ancak, sistem hataları veya donanım arızaları, disk
güncellemeleri arasındaki çekirdek içi süper bloğu yok eden bir sistem çökmesine
neden olabilir. Ardından, diskteki boş liste diskin durumunu tam olarak yansıtmaz.
Yeniden yapılandırmak için dosya sistemindeki tüm blokların uzun bir incelemesini
yapmalıyız. (Bu sorun yeni dosya sisteminde devam etmektedir.)
veri blokları
süper blok
silindir bloğu
düğümler
veri blokları
Dizin listeleme komutu genellikle bir dizindeki her dosyanın tüm düğümlerini okur ve
bu tür tüm düğümlerin disk üzerinde birbirine yakın olmasını arzu edilir hale getirir. Bu
nedenle, bir dosyanın düğümü genellikle dosyanın üst dizininin düğümünü içeren silindir
grubundan tahsis edilir. Bununla birlikte, her şey yerelleştirilemez, bu nedenle yeni bir
dizinin düğümü , ana dizinininkinden farklı bir silindir grubuna yerleştirilir. Böyle yeni bir
dizin düğümü için seçilen silindir grubu, en fazla sayıda kullanılmayan düğüme sahip
olandır.
Bir dosyanın veri bloklarına erişimle ilgili disk kafası aramalarını azaltmak için,
mümkün olduğunca sık olarak aynı silindir grubundan bloklar tahsis ediyoruz. Tek bir
dosyanın bir silindir grubundaki tüm blokları almasına izin verilemeyeceğinden, belirli bir
boyutu (2 MB gibi) aşan bir dosyanın daha fazla blok tahsisi farklı bir silindir grubuna
yönlendirilir; yeni grup, ortalamanın üzerinde boş alana sahip olanlar arasından seçilir.
Dosya büyümeye devam ederse, ayırma (her megabaytta) yeniden başka bir silindir
grubuna yönlendirilir. Böylece, küçük bir dosyanın tüm bloklarının aynı silindir grubunda
olması muhtemeldir ve büyük bir dosyaya erişimde yer alan uzun başlık aramalarının
sayısı küçük tutulur.
Disk blok ayırma rutinlerinin iki düzeyi vardır. Genel ilke rutinleri, daha önce tartışılan
hususlara göre istenen bir disk bloğunu seçer. Yerel politika rutinleri, istenen bloğun
yakınında bir blok seçmek için silindir bloklarında kaydedilen özel bilgileri kullanır. İstenen
blok kullanımda değilse, döndürülür. Aksi takdirde, rutin ya aynı silindirde talep edilene
dönüşsel olarak en yakın bloğu ya da farklı bir silindirde fakat aynı silindir grubundaki bir
bloğu döndürür. Silindir grubunda başka blok yoksa, bir blok bulmak için diğer tüm silindir
grupları arasında ikinci dereceden bir tekrarlama yapılır. Bu başarısız olursa, kapsamlı bir
arama yapılır. Dosya sisteminde yeterli boş alan (tipik olarak yüzde 10) bırakılırsa, bloklar
genellikle istendiği yerde bulunur, ikinci dereceden yeniden karma ve kapsamlı arama
kullanılmaz ve dosya sisteminin performansı kullanımla birlikte düşmez.
Hızlı Dosya Sisteminin artan verimliliği nedeniyle, tipik diskler artık ham aktarım
kapasitelerinin yüzde 30'unda kullanılmaktadır. Bu yüzde, bant genişliğinin yaklaşık yüzde
3'ünü kullanan Sürüm 7 dosya sistemiyle gerçekleştirilene göre belirgin bir gelişmedir.
BSD Tahoe, silindir grubu başına düğüm sayısını, silindir grubu başına silindir sayısını
ve dosya sistemi oluşturulduğunda ayarlanacak olan farklı dönüş konumlarının sayısını
sağlayan Fat Fast File System'ı tanıttı. FreeBSD önceden bu parametreleri disk donanım
tipine göre ayarlamaktaydı.
Machine Translated by Google
FreeBSD'de üç ana G/Ç türü vardır : blok aygıtları, karakter aygıtları ve soket
arabirimi. Soket arayüzü, protokolleri ve ağ arayüzleri ile birlikte Bölüm C.9.1'de
açıklanacaktır.
Blok aygıtları , diskleri ve bantları içerir. Ayırt edici özellikleri, sabit bir blok
boyutunda (genellikle 512 bayt) doğrudan adreslenebilmeleridir.
Parçaların, silindirlerin vb. ayrıntılarını çekirdeğin geri kalanından yalıtmak için bir blok
aygıt sürücüsü gerekir. Blok aygıtlarına, uygun aygıt özel dosyaları ( /dev/rp0 gibi)
aracılığıyla doğrudan erişilebilir, ancak bunlara daha yaygın olarak dosya sistemi
aracılığıyla dolaylı olarak erişilir. Her iki durumda da aktarımlar, verimlilik üzerinde
derin bir etkisi olan blok arabellek önbelleği aracılığıyla arabelleğe alınır.
Karakter aygıtları , terminalleri ve satır yazıcılarını içerir, ancak blok arabellek
önbelleğini kullanmayan hemen hemen her şeyi (ağ arabirimleri hariç) içerir. Örneğin, /
dev/mem , fiziksel ana belleğe bir arabirimdir ve /dev/null , veriler için dipsiz bir havuz
ve sonsuz bir dosya sonu işaretçisi kaynağıdır. Yüksek hızlı grafik arabirimleri gibi bazı
aygıtların kendi arabellekleri olabilir veya her zaman doğrudan kullanıcının veri alanına
G/Ç yapabilir; blok arabellek önbelleğini kullanmadıkları için karakter aygıtları olarak
sınıflandırılırlar.
Terminaller ve terminal benzeri cihazlar , blok arabellek önbelleğinden daha küçük
arabellekler olan C listelerini kullanır.
Blok cihazları ve karakter cihazları iki ana cihaz sınıfıdır. Aygıt sürücülerine, iki
giriş noktası dizisinden biri tarafından erişilir. Bir dizi blok cihazlar içindir; diğeri ise
karakter cihazları içindir. Bir cihaz, bir sınıf (blok veya karakter) ve bir cihaz numarası
ile ayırt edilir. Cihaz numarası iki bölümden oluşmaktadır. Ana aygıt numarası , uygun
aygıt sürücüsüne girişleri bulmak için diziyi karakter veya blok aygıtları için indekslemek
için kullanılır. küçük _
ağ Arayüzü
blok aygıt sürücüsü karakter aygıtı sürücüsü
donanım
Blok aygıtları, belirtildiği gibi, bir blok arabellek önbelleği kullanır. Arabellek önbelleği, her biri
bir fiziksel bellek parçasına ve ayrıca bir cihaz numarasına ve cihazdaki bir blok numarasına işaret
edebilen bir dizi arabellek başlığından oluşur. Şu anda kullanımda olmayan blokların arabellek
başlıkları, aşağıdakilerin her biri için bir tane olmak üzere birçok bağlantılı listede tutulur:
arabellekler ( AGE listesi) • Kendileriyle ilişkili hiçbir fiziksel belleği olmayan BOŞ arabellekler
Bu listelerdeki arabellekler ayrıca arama verimliliği için cihaz ve blok numarasına göre hash'lenir.
Bir cihazdan blok istendiğinde (okuma), önbellek aranır. Blok bulunursa, kullanılır ve G/Ç
aktarımı gerekmez. Bulunamazsa, AGE listesinden veya bu liste boşsa LRU listesinden bir tampon
seçilir . Daha sonra ilgili cihaz numarası ve blok numarası güncellenir, gerekirse bunun için hafıza
bulunur ve cihazdan yeni veriler ona aktarılır. Boş arabellek yoksa, LRU arabelleği aygıtına yazılır
(değiştirilirse) ve arabellek yeniden kullanılır.
Yazma sırasında, söz konusu blok zaten arabellek önbelleğindeyse, yeni veriler arabelleğe
alınır (önceki verilerin üzerine yazılır), arabelleğin değiştirildiğini ve G/Ç olmadığını belirtmek için
arabellek başlığı işaretlenir. hemen gereklidir. Veriler, diğer veriler için arabelleğe ihtiyaç
duyulduğunda yazılacaktır. Eğer arabellek önbelleğinde blok bulunamazsa, boş bir arabellek
seçilir (bir okumada olduğu gibi) ve bu arabelleğe bir aktarım yapılır. Bir kilitlenmeden sonra
olası dosya sistemi tutarsızlıklarını en aza indirmek için, yazma işlemleri düzenli aralıklarla kirli
arabellek blokları için zorlanır.
FreeBSD'deki bir arabellekteki veri sayısı değişkendir, tüm dosya sistemlerinde maksimuma
kadar, genellikle 8 KB'dir. Minimum boyut, genellikle 1.024 bayt olan sayfalama kümesi
boyutudur. Arabellekler sayfa kümesi hizalıdır ve herhangi bir disk bloğunun aynı anda yalnızca
bir arabelleğe eşlenebilmesi gibi, herhangi bir sayfa kümesi aynı anda yalnızca bir arabelleğe
eşlenebilir. EMPTY listesi, 8 KB'lik bir fiziksel bellek bloğu birden çok, daha küçük blokları tutmak
için bölünürse kullanılan arabellek başlıklarını tutar .
Bu bloklar için başlıklar gereklidir ve EMPTY'den alınır.
Bir kullanıcı işlemi, halihazırda arabellekte bulunanların ardından daha fazla veri yazarken,
arabellekteki veri sayısı artabilir. Bu artış gerçekleştiğinde, tüm verileri tutacak kadar büyük yeni
bir arabellek tahsis edilir ve orijinal veriler buna kopyalanır, ardından yeni veriler gelir. Bir
arabellek küçülürse, bir arabellek alınır
C.8 G/Ç Sistemi 35
Machine Translated by Google
boş kuyruktan, fazla sayfalar buna konur ve bu arabellek diske yazılmak üzere serbest
bırakılır.
Manyetik bantlar gibi bazı aygıtlar, blokların belirli bir sırada yazılmasını gerektirir.
Bu nedenle, arabelleklerin bu cihazlara doğru sırada senkronize yazılmasını zorlamak
için olanaklar sağlanmıştır. Kilitlenme tutarsızlıklarını önlemek için dizin blokları da
eşzamanlı olarak yazılır. Bir dizinde çok sayıda değişiklik yapıldığında, ancak dizin
girişlerinin kendileri güncellenmediğinde oluşabilecek kaosu düşünün!
Arabellek önbelleğinin boyutu, bir sistemin performansı üzerinde derin bir etkiye
sahip olabilir, çünkü yeterince büyükse, önbellek isabetlerinin yüzdesi yüksek olabilir
ve gerçek G/Ç aktarımlarının sayısı düşük olabilir. FreeBSD , programlar ve disk
önbelleği tarafından kullanılan bellek miktarını sürekli olarak ayarlayarak arabellek
önbelleğini optimize eder.
Arabellek önbelleği, dosya sistemi ve disk sürücüleri arasında bazı ilginç
etkileşimler meydana gelir. Veriler bir disk dosyasına yazıldığında, önbellekte
arabelleğe alınır ve disk sürücüsü çıkış kuyruğunu disk adresine göre sıralar.
Bu iki eylem, disk sürücüsünün disk kafası aramalarını en aza indirmesine ve disk
dönüşü için optimize edilmiş zamanlarda veri yazmasına olanak tanır. Eşzamanlı
yazma gerekli olmadıkça, diske yazma işlemi yalnızca arabellek önbelleğine yazar ve
sistem uygun olduğunda verileri eşzamansız olarak diske yazar. Kullanıcı işlemi çok
hızlı yazma görür. Veriler bir disk dosyasından okunduğunda, blok G/Ç sistemi bir
miktar ileri okuma yapar; ancak yazma işlemleri, okumalara göre eşzamansıza çok
daha yakındır. Bu nedenle, dosya sistemi aracılığıyla diske çıkış, sezginin tersine,
büyük aktarımlar için girişten genellikle daha hızlıdır.
Hemen hemen her blok aygıtının bir karakter arabirimi vardır ve bunlara ham aygıt
arabirimleri denir. Böyle bir arabirim , blok arabelleği önbelleğinin atlanmasıyla blok
arabiriminden farklıdır .
Her disk sürücüsü, bekleyen aktarımlar için bir sıra tutar. Kuyruktaki her kayıt,
bunun bir okuma mı yoksa yazma mı olduğunu belirtir ve aktarım için bir ana bellek
adresi (genellikle 512 baytlık artışlarla), aktarım için bir aygıt adresi (genellikle bir disk
sektörünün adresi) ve bir ana bellek adresi verir. transfer boyutu (sektörlerde).
Bir blok arabelleğinden bu kuyruk için gerekli olan bilgileri eşleştirmek kolaydır.
Bir kullanıcı sürecinin sanal adres alanının bir kısmına karşılık gelen bir ana bellek
parçasının haritasını çıkarmak neredeyse o kadar basittir. Bu eşleme, örneğin bir ham
disk arabiriminin yaptığı şeydir. Bu nedenle, bir kullanıcının sanal adres alanına
doğrudan veya bu alandan arabelleğe alınmamış aktarımlara izin verilir. Aktarımın
boyutu, bazıları çift sayıda bayt gerektiren fiziksel aygıtlarla sınırlıdır.
Çekirdek, uygun aygıt için uygun isteği kuyruğa koyarak takas ve sayfalama için
aktarımları gerçekleştirir. Özel takas veya sayfalama aygıtı sürücüsüne gerek yoktur.
4.2BSD dosya sistemi uygulaması aslında kod çekirdeğe taşınmadan önce ham
disk arabirimi kullanan bir kullanıcı işlemi olarak yazılmış ve büyük ölçüde test
edilmiştir . İlginç bir şekilde, Mach işletim sistemi
Machine Translated by Google
36 Ek C BSD UNIX
kendi başına dosya sistemi yoktur. Dosya sistemleri, kullanıcı düzeyinde görevler olarak
uygulanabilir (bkz. Ek D).
C.8.3 C-Listeleri
Belirtildiği gibi, uçbirimler ve uçbirim benzeri aygıtlar, C-listeleri adı verilen bağlantılı
listelerde küçük karakter bloklarını (genellikle 28 bayt) tutan bir karakter arabelleğe alma
sistemi kullanır. Tüm boş karakter arabellekleri tek bir boş listede tutulsa da, bunları
kullanan çoğu aygıt sürücüsü herhangi bir terminal hattı için aynı anda kuyruğa alınabilecek
karakter sayısını sınırlar.
Bu tür listeler için karakterleri kuyruğa almak ve kuyruktan çıkarmak için rutinler vardır.
Bir terminale yapılan write() sistem çağrısı, aygıt için bir listedeki karakterleri sıraya koyar.
İlk aktarım başlatılır ve kesintiler karakterlerin sırasının kaldırılmasına ve daha fazla
aktarıma neden olur.
Giriş benzer şekilde kesmeye dayalıdır. Bununla birlikte, terminal sürücüleri tipik olarak
iki giriş kuyruğunu destekler ve ilkinden (ham kuyruk) diğerine (kurallı kuyruk) dönüştürme,
kesme yordamı ham kuyruğa bir satır sonu karakteri koyduğunda tetiklenir. Cihazda okuma
yapan süreç daha sonra uyandırılır ve sistem fazı dönüşümü yapar. Bu şekilde kurallı
kuyruğa yerleştirilen karakterler, daha sonra okuma tarafından kullanıcı işlemine
döndürülmek üzere hazırdır.
İzole süreçlerde birçok görev gerçekleştirilebilse de, diğerleri süreçler arası iletişimi
gerektirir. İzole bilgi işlem sistemleri uzun süredir birçok uygulama için hizmet veriyor,
ancak ağ oluşturma giderek daha önemli hale geliyor. Dahası, kişisel iş istasyonlarının artan
kullanımı ile kaynak paylaşımı daha yaygın hale geliyor. Süreçler arası iletişim geleneksel
olarak UNIX'in güçlü noktalarından biri olmamıştır.
C.9.1 Soketler
Boru (Bölüm C.4.3'te ele alınmıştır), UNIX'in en karakteristik IPC mekanizmasıdır . Bir boru,
iki işlem arasında güvenilir bir tek yönlü bayt akışına izin verir. Birkaç istisna dışında
geleneksel olarak sıradan bir dosya olarak uygulanır. Dosya sisteminde adı yoktur, bunun
yerine pipe() sistem çağrısı tarafından oluşturulur. Boyutu sabittir ve bir işlem dolu bir
boruya yazmaya çalıştığında işlem askıya alınır. Daha önce boruya yazılan tüm veriler
okunduktan sonra, dosyanın başında yazma devam eder (borular gerçek dairesel tamponlar
değildir). Küçük boyutlu boruların (genellikle 4.096 bayt) bir yararı, boru verilerinin nadiren
gerçekten diske yazılmasıdır; genellikle normal blok arabellek önbelleği tarafından bellekte
tutulurlar.
Aynı makinede bile, bir boru yalnızca fork() sistem çağrısının kullanımıyla ilgili iki
işlem tarafından kullanılabilir. Soket mekanizması alakasız işlemler tarafından
kullanılabilir.
Soket, iletişimin uç noktasıdır. Kullanımdaki bir soketin genellikle kendisine bağlı
bir adresi vardır . Adresin doğası , soketin iletişim alanına bağlıdır . Bir etki alanının
karakteristik bir özelliği, aynı etki alanında iletişim kuran işlemlerin aynı adres
biçimini kullanmasıdır. Tek bir soket yalnızca bir etki alanında iletişim kurabilir.
Şu anda FreeBSD'de uygulanan üç alan , UNIX alanı (AF UNIX), İnternet alanı (AF
INET) ve XEROX Ağ Hizmetleri (NS) alanıdır (AF NS). UNIX etki alanının adres biçimi, /
alpha/beta/gamma gibi sıradan bir dosya sistemi yolu adının biçimidir. İnternet etki
alanında iletişim kuran işlemler, DARPA İnternet iletişim protokollerini ( TCP/IP gibi)
ve 32 bitlik bir ana bilgisayar numarası ve 32 bitlik bir bağlantı noktası numarasından
(ana bilgisayardaki bir buluşma noktasını temsil eden) oluşan İnternet adreslerini
kullanır.
Hizmet sınıflarını temsil eden birkaç soket türü vardır. Her tür, herhangi bir
iletişim alanında uygulanabilir veya uygulanmayabilir. Belirli bir etki alanında bir tür
uygulanırsa, kullanıcı tarafından seçilebilen bir veya daha fazla protokol tarafından
uygulanabilir:
• Akış yuvaları. Bu yuvalar güvenilir, çift yönlü, sıralı veri akışları sağlar. Teslimatta
hiçbir veri kaybolmaz veya çoğaltılmaz ve kayıt sınırı yoktur. Bu tür, İnternet etki
alanında TCP tarafından desteklenir. UNIX etki alanında, borular bir çift iletişim
kuran akış soketi olarak uygulanır.
• Güvenilir bir şekilde iletilen mesaj soketleri. Bu soketler, varma garantisi olan ve
aksi takdirde datagram soketleri kullanılarak aktarılan mesajlara benzeyen
mesajları iletir. Bu tür şu anda desteklenmiyor.
• Ham soketler. Bu soketler, diğer soket tiplerini destekleyen protokollere
prosesler tarafından doğrudan erişime izin verir. Erişilebilir protokoller yalnızca
en üsttekileri değil, aynı zamanda alt düzey protokolleri de içerir. Örneğin,
İnternet etki alanında, bunun altında TCP, IP veya bunun altında bir Ethernet
protokolüne ulaşmak mümkündür. Bu yetenek, yeni protokoller geliştirmek için
kullanışlıdır.
Bir dizi sistem çağrısı, soket tesisine özeldir. socket() sistem çağrısı bir soket
oluşturur . İletişim alanının, soket tipinin ve bu tipi desteklemek için kullanılacak
protokolün argüman özelliklerini alır. Çağrı tarafından döndürülen değer, yuva
tanımlayıcısı adı verilen küçük bir tamsayıdır.
38 Ek C
Machine Translated by Google BSD UNIX
dosya tanımlayıcılarla aynı ad alanını kaplar. Soket tanımlayıcı, çekirdekteki u yapısındaki
açık dosya dizisini indeksler ve kendisine tahsis edilmiş bir dosya yapısına sahiptir.
FreeBSD dosya yapısı bir inode yerine bir soket yapısına işaret edebilir . Bu durumda,
belirli soket bilgileri (soketin tipi, mesaj sayısı ve giriş ve çıkış kuyruklarındaki veriler gibi)
doğrudan soket yapısında tutulur.
Başka bir işlemin bir soketi adreslemesi için soketin bir adı olmalıdır. Bir ad, soket
tanımlayıcısını, isme bir işaretçiyi ve adın uzunluğunu bir bayt dizesi olarak alan bind()
sistem çağrısı tarafından bir sokete bağlanır.
Bayt dizesinin içeriği ve uzunluğu, adres biçimine bağlıdır. connect() sistem çağrısı , bir
bağlantı başlatmak için kullanılır. Bağımsız değişkenler sözdizimsel olarak bind() için
olanlarla aynıdır ; soket tanımlayıcısı yerel soketi temsil eder ve adres, bağlanmaya
çalışılan yabancı soketin adresidir.
Soket IPC'sini kullanarak iletişim kuran birçok işlem , istemci-sunucu modelini takip
eder. Bu modelde, sunucu işlemi istemci işlemine bir hizmet sağlar . Hizmet kullanılabilir
olduğunda, sunucu işlemi iyi bilinen bir adresi dinler ve istemci işlemi sunucuya ulaşmak
için connect() 'i kullanır.
Bir sunucu işlemi, bir soket oluşturmak için socket ( ) 'i ve hizmetinin iyi bilinen
adresini o sokete bağlamak için bind() 'i kullanır. Ardından, çekirdeğe istemcilerden gelen
bağlantıları kabul etmeye hazır olduğunu söylemek ve sunucunun onlara hizmet verene
kadar kaç tane bekleyen bağlantının sıraya girmesi gerektiğini belirtmek için lis ten()
sistem çağrısını kullanır. Son olarak, sunucu bireysel bağlantıları kabul etmek için kabul()
sistem çağrısını kullanır. Hem listen() hem de kabul() , orijinal soketin soket tanımlayıcısını
argüman olarak alır. Kabul () sistem çağrısı , yeni bağlantıya karşılık gelen yeni bir yuva
tanımlayıcısı döndürür; orijinal soket tanımlayıcısı daha fazla bağlantı için hala açıktır.
Sunucu , orijinal sunucu işlemi daha fazla bağlantı için dinlemeye devam ederken,
istemciye hizmet vermek için kabul() 'den sonra yeni bir işlem oluşturmak için genellikle
fork() 'u kullanır. Ayrıca bir bağlantının parametrelerini ayarlamak ve bir kabul() işleminden
sonra yabancı soketin adresini döndürmek için sistem çağrıları vardır .
Akış soketi gibi bir soket tipi için bir bağlantı kurulduğunda, her iki uç noktanın
adresleri bilinir ve veri aktarımı için başka adresleme bilgisine ihtiyaç duyulmaz. Sıradan
read() ve write() sistem çağrıları daha sonra verileri aktarmak için kullanılabilir.
Bir bağlantıyı sonlandırmanın ve ilişkili soketi yok etmenin en basit yolu, soket
tanımlayıcısında close() sistem çağrısını kullanmaktır. Ayrıca, bir çift yönlü bağlantının
yalnızca bir yönlü iletişimini sona erdirmek isteyebiliriz; kapatma() sistem çağrısı bu amaç
için kullanılabilir .
Datagram soketleri gibi bazı soket türleri bağlantıları desteklemez.
Bunun yerine, yuvaları, ayrı ayrı ele alınması gereken datagramları değiş tokuş eder.
Bu tür bağlantılar için sistem çağrıları sendto() ve recvfrom() kullanılır.
Her ikisi de argüman olarak bir soket tanımlayıcı, bir arabellek işaretçisi ve bir uzunluk ve
bir adres arabellek işaretçisi ve bir uzunluk alır. Adres arabelleği sendto() için uygun adresi
içerir ve recvfrom() tarafından henüz alınan datagramın adresiyle doldurulur . Gerçekte
aktarılan veri sayısı, her iki sistem çağrısı tarafından döndürülür.
bağlantı yapıldıkça her bağlantı için bir işlem. Sunucu her hizmet için bir socket(),
bind() ve listen() yapar ve ardından tüm soket tanımlayıcılarında bir select() yapar.
Select() bir tanımlayıcı üzerindeki etkinliği gösterdiğinde, sunucu bunun üzerinde bir
accept() yapar ve kabul () tarafından döndürülen yeni tanımlayıcıda bir işlem çatallar
ve ana işlemi tekrar bir select() yapması için bırakır .
tüm mevcut UNIX sistemleri , UUCP posta ağını ve USENET haber ağını desteklemek
için çoğunlukla çevirmeli telefon hatları üzerinden kullanılan UUCP ağ olanaklarını
destekler. Ancak bunlar, ilkel ağ oluşturma tesisleridir; uzaktan oturum açmayı,
çağrılar veya dağıtılmış dosya sistemlerini çok daha az uzaktan bile desteklemezler.
Bu tesisler neredeyse tamamen kullanıcı süreçleri olarak uygulanmaktadır ve işletim
sisteminin kendisinin bir parçası değildir.
FreeBSD , çok çeşitli Ethernet, token-ring ve ARPANET arayüzlerinde DARPA
İnternet protokolleri UDP, TCP, IP ve ICMP'yi destekler . Bu protokolleri desteklemek
için çekirdekteki çerçeve, başka protokollerin uygulanmasını kolaylaştırmak için
tasarlanmıştır ve tüm protokollere soket arabirimi aracılığıyla erişilebilir.
BBN'den Rob Gurwitz, kodun ilk sürümünü 4.1BSD için bir eklenti paketi olarak yazdı.
FreeBSD ağ oluşturma uygulaması ve bir dereceye kadar soket tesisi, daha çok
ARPANET Referans Modeli'ne (ARM) yöneliktir . Orijinal haliyle ARPANET , paket
anahtarlama ve protokol katmanlama gibi birçok ağ oluşturma fikri için bir kavram
kanıtı işlevi gördü. ARPANET , onu destekleyen donanım artık son teknoloji olmadığı
için 1988'de kullanımdan kaldırıldı . NSFNET ve İnternet gibi ardılları daha da büyüktür
ve araştırmacılar için iletişim araçları ve İnternet ağ geçidi araştırması için test
yatakları olarak hizmet eder. ARM , ISO modelinden önce gelir ; ISO modeli büyük
ölçüde ARPANET araştırmasından esinlenmiştir .
ISO modeli genellikle katman başına bir protokol iletişimi sınırı belirlemek olarak
yorumlansa da, ARM aynı katmanda birkaç protokole izin verir. ARM'de yalnızca dört protokol
katmanı vardır :
• Süreç/uygulamalar. Bu katman, ISO modelinin uygulama, sunum ve oturum
katmanlarını kapsar . Dosya aktarım protokolü (FTP) ve Telnet (uzaktan oturum
açma) gibi kullanıcı düzeyindeki programlar bu düzeyde bulunur. • Host– host.
Bu katman, ISO'nun aktarımına ve ağ katmanlarının üst kısmına karşılık gelir. Hem
İletim Kontrol Protokolü (TCP) hem de İnternet Protokolü (IP) , IP'nin üstünde
TCP ile bu katmandadır . TCP , bir ISO aktarım protokolüne karşılık gelir ve IP ,
ISO ağ katmanının adresleme işlevlerini gerçekleştirir . • Ağ arayüzü. Bu
katman, ISO ağ katmanının alt kısmını ve tüm veri bağlantısı katmanını kapsar.
Burada yer alan protokoller şunlara bağlıdır:
Machine Translated by Google
40
Ek C BSD UNIX
fiziksel ağ türü. ARPANET , IMP-Host protokollerini kullanırken Ethernet,
Ethernet protokollerini kullanır. • Ağ donanımı. ARM öncelikle yazılımla
ilgilenir, bu nedenle açık bir ağ donanım katmanı yoktur . Ancak, herhangi bir
gerçek ağ, ISO fiziksel katmanına karşılık gelen donanıma sahip olacaktır .
ISO ARPANET
4.2BSD örnek
referans referans
modeli modeli katmanları katmanlama
TCP
ev sahibi – ev sahibi protokol
ağ veri IP
bağlantısı
ağ Arayüzü Ağ Ethernet
donanım arayüzleri sürücüsü
ağ ağ interlan
donanımı donanımı denetleyicisi
bu düzeyde güvenilir iletimi destekler, ancak çoğu desteklemez. Bazı ağlar yayın adreslemesi
sağlar, ancak çoğu sağlamaz.
Soket tesisi ve ağ çerçevesi, ortak bir bellek arabelleği veya mbuf seti kullanır. Bunlar, blok
G/Ç sistemi tarafından kullanılan büyük arabellekler ile karakter aygıtları tarafından kullanılan C
listeleri arasında orta büyüklüktedir.
Bir mbuf 128 bayt uzunluğundadır; 112 bayt veri için kullanılabilir ve geri kalanı, mbuf'u sıralara
bağlamak için işaretçiler ve veri alanının gerçekte ne kadarının kullanımda olduğunun göstergeleri
için kullanılır.
Veriler genellikle mbuf'larda katmanlar (soket-protokol, protokol-protokol veya protokol-ağ
arabirimi) arasında iletilir. Verileri içeren arabellekleri geçirme yeteneği, bazı veri kopyalamayı
ortadan kaldırır, ancak yine de sıklıkla protokol başlıklarını kaldırmaya veya eklemeye ihtiyaç
vardır. Ayrıca, bellek yönetimi sayfasının boyutunda bir alanı kaplayan verileri tutabilmek birçok
amaç için uygun ve verimlidir. Böylece, bir mbuf'un verileri mbuf'un kendisinde değil, hafızanın
başka bir yerinde bulunabilir . Bu amaç için bir mbuf sayfa tablosu ve ayrıca mbuf kullanımına
ayrılmış bir sayfa havuzu bulunmaktadır.
C.10 Özet
UNIX'in ilk avantajları, yüksek seviyeli bir dilde yazılmış olması, kaynak biçiminde dağıtılması ve
ucuz bir platformda güçlü işletim sistemi ilkelleri sağlamasıydı. Bu avantajlar, UNIX'in eğitim,
araştırma ve devlet kurumlarında ve nihayetinde ticari dünyada müttefiki olarak popülaritesine
yol açtı. Bu popülerlik , değişen ve geliştirilmiş tesislere sahip birçok UNIX suşu üretti .
UNIX , ağaç yapılı dizinlere sahip bir dosya sistemi sağlar. Çekirdek, dosyaları
yapılandırılmamış bayt dizileri olarak destekler. Doğrudan erişim ve sıralı erişim, sistem
çağrıları ve kitaplık rutinleri aracılığıyla desteklenir.
Dosyalar, belki de sonunda bir parça bulunan bir dizi sabit boyutlu veri bloğu olarak
depolanır. Veri blokları, inode'daki işaretçiler tarafından bulunur. Dizin girişleri düğümlere işaret
eder. Kafa hareketini en aza indirmek ve performansı artırmak için silindir gruplarından disk
alanı ayrılır.
UNIX , çok programlı bir sistemdir. Prosesler, fork() sistem çağrısı ile kolayca yeni prosesler
oluşturabilir . İşlemler borularla veya daha genel olarak soketlerle iletişim kurabilir. Sinyallerle
kontrol edilebilecek işler halinde gruplandırılabilirler.
Süreçler iki yapı ile temsil edilir: süreç yapısı ve kullanıcı yapısı. CPU zamanlaması, dinamik
olarak hesaplanmış önceliklere sahip bir öncelik algoritmasıdır ve en uç noktada döngüsel
zamanlamaya indirgenir.
dava.
FreeBSD bellek yönetimi, sayfalama tarafından desteklenen takası kullanır. Bir sayfa arka
plan programı işlemi, yürütme işlemlerini desteklemek için yeterli sayıda boş çerçeve tutmak için
değiştirilmiş bir ikinci şans sayfa değiştirme algoritması kullanır.
Sayfa ve dosya G/Ç , gerçek miktarı en aza indirmek için bir blok arabellek önbelleği kullanır.
G/Ç. Terminal aygıtları ayrı bir karakter arabelleğe alma sistemi kullanır.
Ağ desteği, FreeBSD'deki en önemli özelliklerden biridir .
Soket konsepti, bir ağ üzerinden bile diğer işlemlere erişmek için programlama mekanizması
sağlar. Soketler, birkaç protokol kümesi için bir arabirim sağlar.
Machine Translated by Google
42 Ek C BSD UNIX
[McKusick et al. (2015)], FreeBSD hakkında iyi bir genel tartışma sağlar . FreeBSD için
modern bir zamanlayıcı [Roberson (2003)]'de açıklanmıştır. Çok İş parçacıklı FreeBSD
Çekirdeğinde kilitleme [Baldwin (2002)]'de açıklanmıştır.
FreeBSD , http://www.freebsd.org adresinden indirilebilen The FreeBSD El
Kitabında açıklanmıştır .
bibliyografya
[McKusick et al. (2015)] MK McKusick, GV Neville-Neil ve RNM Wat son, The Design and
Implementation of the FreeBSD UNIX İşletim Sistemi – İkinci Baskı, Pearson (2015).
[Roberson (2003)] J. Roberson, “ULE: FreeBSD İçin Modern Bir Zamanlayıcı”, Pro
USENIX BSDCon Konferansı (2003), sayfa 17-28.
Machine Translated by Google
bu
Mach
Ek
D
sistem
Bu bölüm ilk olarak 1991 yılında yazılmıştır ve zamanla güncellenmiştir ancak artık
değiştirilmemiştir Bu ekte Mach işletim sistemini inceliyoruz. Mach, tamamen
işlevsel, teknik olarak gelişmiş bir sistem üretmek için işletim sistemi
araştırmalarındaki birçok yeniliği birleştirmek üzere tasarlanmıştır. Çoklu işlem
dikkate alınmadan geliştirilen UNIX'in aksine , Mach baştan sona çoklu işlem desteği
içerir. Bu destek, işlemciler arasında paylaşılan belleğin olmadığı sistemlerin yanı
sıra paylaşılan bellek sistemlerini de barındıran, son derece esnektir. Mach, bir
işlemciden binlerce işlemciye kadar değişen bilgisayar sistemlerinde çalışacak
şekilde tasarlanmıştır. Ayrıca, birçok farklı bilgisayar mimarisine kolayca taşınabilir.
Mach'ın temel amacı, heterojen donanım üzerinde çalışabilen dağıtılmış bir sistem
olmaktır.
Pek çok deneysel işletim sistemi tasarlanıyor, inşa ediliyor ve kullanılıyor olsa
da, Mach, UNIX 4.3 BSD ile tam uyumluluk sunduğu için çoğu kullanıcının ihtiyaçlarını
diğerlerinden daha iyi karşılıyor. Bu uyumluluk aynı zamanda bize işlevsel olarak
benzer, ancak dahili olarak farklı iki işletim sistemini karşılaştırmak için eşsiz bir
fırsat verir. Mach ve UNIX vurgularında farklılık gösterir, bu nedenle Mach
tartışmamız UNIX tartışmamızla tam olarak paralel değildir. Ayrıca, bu bileşen 4.3
BSD'deki kullanıcı arayüzüne benzer olduğu için kullanıcı arayüzü ile ilgili bir bölüm
eklemiyoruz. Göreceğiniz gibi, Mach, diğer işletim sistemlerinin öykünmesini de
katmanlama yeteneği sağlar; hatta diğer işletim sistemleri Mach ile aynı anda
çalışabilir.
1
Machine Translated by Google
2
Ek D Mach Sistemi
Mach'ın gelişimi, BSD UNIX sistemlerinden evrimsel bir yol izledi . Mach
kodu ilk olarak 4.2BSD çekirdeği içinde geliştirildi, Mach bileşenleri
tamamlandıktan sonra BSD çekirdek bileşenleri Mach bileşenleriyle değiştirildi.
BSD bileşenleri, kullanıma sunulduğunda 4.3 BSD'ye güncellendi. 1986'ya
gelindiğinde, sanal bellek ve iletişim alt sistemleri, VAX'in çok işlemcili
sürümleri de dahil olmak üzere DEC VAX bilgisayar ailesi üzerinde çalışıyordu .
IBM RT/PC ve Sun 3 iş istasyonları için sürümler kısa bir süre sonra geldi;
1987, görev ve iş parçacığı desteği de dahil olmak üzere Encore Multimax ve
Sequent Balance çok işlemcili sürümlerinin yanı sıra sistemin ilk resmi
sürümleri olan Sürüm 0 ve Sürüm 1'in tamamlandığını gördü.
Sürüm 2 aracılığıyla Mach , BSD kodunun çoğunu çekirdeğe dahil ederek
ilgili BSD sistemleriyle uyumluluk sağladı. Mach'ın yeni özellikleri ve yetenekleri,
bu sürümlerdeki çekirdekleri karşılık gelen BSD çekirdeklerinden daha büyük
hale getirdi. Mach 3 (Şekil D.1) BSD kodunu çekirdeğin dışına taşıyarak çok
daha küçük bir mikro çekirdek bıraktı. Bu sistem, çekirdekte yalnızca temel
Mach özelliklerini uygular; UNIX'e özgü tüm kodlar, kullanıcı modu
sunucularında çalıştırılmak üzere çıkarıldı. UNIX'e özgü kodun çekirdekten
çıkarılması, BSD'nin başka bir işletim sistemiyle değiştirilmesine veya mikro
çekirdeğin üzerinde birden çok işletim sistemi arabiriminin aynı anda yürütülmesine olanak tanır.
BSD'ye ek olarak, DOS, Macintosh işletim sistemi ve OSF/1 için kullanıcı modu
uygulamaları geliştirilmiştir . Bu yaklaşımın sanal makine konseptiyle
benzerlikleri vardır, ancak sanal makine donanımdan ziyade yazılımla (Mach
çekirdek arayüzü) tanımlanır. Sürüm 3.0 ile Mach, tek işlemcili Sun, Intel, IBM
ve DEC makineleri ve çok işlemcili DEC, Sequent ve Encore sistemleri dahil
olmak üzere çok çeşitli sistemlerde kullanılabilir hale geldi .
Açık Yazılım Vakfı (OSF) 1989'da yeni işletim sistemi OSF/1'in temeli olarak Mach 2.5'i
kullanacağını duyurduğunda, Mach endüstrinin dikkatini çekti . OSF/1'in piyasaya sürülmesi bir
yıl sonra gerçekleşti ve şimdi UNIX International (UI) üyeleri arasında tercih edilen işletim
sistemi olan UNIX System V, Sürüm 4 ile rekabet ediyor. OSF üyeleri arasında IBM, DEC ve HP
gibi önemli teknolojik şirketler bulunmaktadır . Mach 2.5, aynı zamanda , Apple Computer
şöhretinin Steve Jobs'un buluşu olan NeXT iş istasyonundaki işletim sisteminin temelidir . OSF ,
Mach 3'ü geleceğin temeli olarak değerlendiriyor
OSF/1
OS/2
HPUX
veritabanı
4.3 BSD
sistemi
Mach
işletim sistemi sürümü ve Mach üzerine araştırmalar CMU, OSF ve başka yerlerde devam
ediyor.
değişen ağ hızlarıyla çalışma yeteneği, geniş alan ağlarından yüksek hızlı yerel alan
ağlarına ve sıkı bağlı çoklu işlemcilere
• İletişim tabanlı bellek yönetiminin yanı sıra çok sayıda verinin verimli iletişimini
sağlamak için entegre bellek yönetimi ve süreçler arası iletişim
• Mach'ı birden fazla satıcının bilgisayar sistemleri arasında yaygın olarak kullanılabilir
ve birlikte çalışabilir hale getirmek için heterojen sistem desteği
• İyi bir ilkel kümesi ve bir con ile basit bir programcı arayüzü
sistem tesislerine yönelik tutarlı arabirim seti
• Atask , kaynak tahsisinin temel birimini sağlayan bir yürütme ortamıdır. Sanal
bir adres alanından ve bağlantı noktaları aracılığıyla sistem kaynaklarına
korumalı erişimden oluşur ve bir veya daha fazla iş parçacığı içerebilir.
• Bir iş parçacığı , yürütmenin temel birimidir ve bir görev bağlamında (adres
alanını sağlayan) çalıştırılmalıdır. Bir görevdeki tüm iş parçacıkları şunları paylaşır:
Machine Translated by Google
görevin kaynakları (bağlantı noktaları, bellek vb.). Mach'ta bir süreç kavramı yoktur .
Bunun yerine, geleneksel bir süreç, tek bir kontrol iş parçacığına sahip bir görev olarak
uygulanır.
• Bağlantı noktası kümesi , ortak bir mesaj kuyruğunu paylaşan bir grup bağlantı
noktasıdır. Bir iş parçacığı, bir bağlantı noktası kümesi için mesajlar alabilir ve böylece
birden çok bağlantı noktasına hizmet verebilir. Alınan her mesaj, alındığı bireysel
bağlantı noktasını (küme içindeki) tanımlar. Alıcı, mesajın atıfta bulunduğu nesneyi
tanımlamak için bunu kullanabilir.
• Mach'da iş parçacıkları arasındaki iletişimin temel yöntemi mesajdır . Yazılı bir veri
nesneleri koleksiyonudur. Her nesne için, gerçek verileri veya hat dışı verilere bir
işaretçi içerebilir. Bağlantı noktası hakları mesajlarda iletilir; onları görevler arasında
taşımanın tek yolu budur. (Paylaşılan bellekte bir bağlantı noktası hakkını geçmek işe
yaramaz, çünkü Mach çekirdeği yeni görevin bu şekilde elde edilen bir hakkı
kullanmasına izin vermez.)
• Bir bellek nesnesi bir bellek kaynağıdır. Görevler, bir nesnenin bölümlerini (veya tüm
nesneyi) adres alanlarına eşleyerek ona erişebilir. Nesne, bir kullanıcı modu harici
bellek yöneticisi tarafından yönetilebilir. Bir örnek, bir dosya sunucusu tarafından
yönetilen bir dosyadır; ancak, bir bellek nesnesi, bellek eşlemeli erişimin anlamlı
olduğu herhangi bir nesne olabilir. Bir UNIX kanalının eşlenmiş arabellek uygulaması
başka bir örnektir.
Şekil D.2, bu bölümün geri kalanında daha ayrıntılı olarak açıkladığımız bu soyutlamaları
göstermektedir.
Mach'ın alışılmadık bir özelliği ve sistemin verimliliğinin anahtarı, bellek ve süreçler
arası iletişim (IPC) özelliklerinin harmanlanmasıdır. Diğer bazı dağıtılmış sistemler ( NFS
özellikleriyle Solaris gibi ) dosya sistemini bir ağ üzerinden genişletmek için özel amaçlı
uzantılara sahipken, Mach çekirdeğinin kalbinde genel amaçlı, genişletilebilir bir bellek ve
mesaj birleşimi sağlar. . Bu özellik yalnızca Mach'ın dağıtılmış ve paralel programlama için
kullanılmasına izin vermekle kalmaz, aynı zamanda çekirdeğin kendisinin uygulanmasına
da yardımcı olur.
metin bölgesi
İleti
konuları
Liman
program
sayıcı
görev
veri bölgesi
ikincil depolama
bellek
nesnesi
Görev, talimat işaretçisi veya kayıt seti olmayan geleneksel bir süreç olarak düşünülebilir.
Bir görev, bir sanal adres alanı, bir dizi bağlantı noktası hakkı ve hesap bilgilerini içerir. Görev,
içinde yürütülen bir veya daha fazla iş parçacığı olmadıkça hiçbir şey yapmayan pasif bir
varlıktır.
Bir iş parçacığı içeren bir görev, bir UNIX işlemine benzer. Bir fork() sistem çağrısının yeni bir
UNIX işlemi üretmesi gibi, Mach de fork()'u kullanarak yeni bir görev oluşturur . Yeni görevin
belleği, ebeveynin belleğinin kalıtım nitelikleri tarafından belirtildiği gibi, ebeveynin adres
alanının bir kopyasıdır . Yeni görev, üst öğede oluşturulan fork() çağrısıyla aynı noktada
başlatılan bir iş parçacığı içerir . Konular ve görevler de askıya alınabilir ve devam ettirilebilir.
Bir görev, göreve yönelik birden çok isteğe hizmet etmek için birden çok iş parçacığına
sahip olabileceğinden, iş parçacıkları özellikle UNIX'te yaygın olan sunucu uygulamalarında
kullanışlıdır . İş parçacıkları ayrıca paralel bilgi işlem kaynaklarının verimli kullanımına izin verir.
Her işlemcide karşılık gelen performans cezası ve işletim sistemi ek yükü ile tek bir işleme
sahip olmak yerine, bir görevin iş parçacıkları paralel işlemciler arasında dağılabilir. Konular,
kullanıcı düzeyindeki programlara da verimlilik katar. Örneğin, UNIX'te, bir sayfa hatası
oluştuğunda veya bir sistem çağrısı yürütüldüğünde tüm süreç beklemelidir. Birden çok iş
parçacığına sahip bir görevde, yalnızca sayfa hatasına neden olan veya bir sistem çağrısı
yürüten iş parçacığı ertelenir; diğer tüm iş parçacıkları yürütülmeye devam eder. Mach'ın
çekirdek destekli iş parçacıkları (Bölüm 4) olduğundan, iş parçacıklarının kendileriyle ilişkili
bazı maliyetleri vardır. Çekirdekte destekleyici veri yapılarına sahip olmalılar ve daha karmaşık
çekirdek zamanlama algoritmaları sağlanmalıdır. Bu algoritmalar ve iş parçacığı durumları
Bölüm 4'te tartışılmaktadır.
• Askıya alındı. İş parçacığı ne bir işlemci üzerinde yürütülüyor ne de bir işlemci atanmayı
bekliyor. Bir iş parçacığı, yalnızca çalışır duruma döndürülürse yürütmesine devam
edebilir.
Bu iki durum da bir görevle ilişkilidir. Bir görev üzerindeki bir işlem, bir görevdeki tüm iş
parçacıklarını etkiler, bu nedenle bir görevi askıya almak, içindeki tüm iş parçacıklarını askıya
almayı içerir. Görev ve iş parçacığı askıya alma işlemleri ayrı, bağımsız mekanizmalardır, bu
nedenle askıya alınmış bir görevde bir iş parçacığını sürdürmek, görevi devam ettirmez.
8 Ek D Mach Sistemi
çekirdekte anne henüz yeterli işlevsellik. Mach IPC tesisi, randevu noktalarında mesaj
alışverişi yapan süreçlerle senkronizasyon için kullanılabilir. İş parçacığı düzeyinde
senkronizasyon, uygun zamanlarda iş parçacıklarını başlatmak ve durdurmak için
yapılan çağrılarla sağlanır. Her iş parçacığı için bir askıya alma sayısı tutulur. Bu sayı,
bir iş parçacığında birden fazla suspend() çağrısının yürütülmesine izin verir ve yalnızca
eşit sayıda devam() çağrısı gerçekleştiğinde iş parçacığı devam ettirilir. Ne yazık ki, bu
özelliğin kendi sınırlaması vardır. Start() çağrısının stop() çağrısından önce yürütülmesi
bir hata olduğundan (askıya alma sayısı negatif olur), bu rutinler paylaşılan veri erişimini
senkronize etmek için kullanılamaz.
Ancak, semaforlarla ilişkilendirilen ve senkronizasyon için kullanılan wait() ve sinyal()
işlemleri IPC çağrıları aracılığıyla gerçekleştirilebilir . Bu yöntemi Bölüm D.5'te
tartışıyoruz.
• Yürütülecek bir işlev ve girdi olarak parametre verilen bir görev içinde yeni bir iş
parçacığı oluşturun. Ardından iş parçacığı, çağrı döndüğünde bir iş parçacığı
tanımlayıcısı alan oluşturma iş parçacığıyla aynı anda yürütülür.
döndürün. • Çağıran dizinin devam etmesine izin vermeden önce belirli bir dizinin
sona ermesini bekleyin. Bu çağrı, UNIX wait() sistem çağrılarına çok benzeyen bir
senkronizasyon aracıdır .
• mutex alloc() rutini dinamik olarak bir mutex değişkeni yaratır. • mutex
free() rutini , dinamik olarak oluşturulmuş bir mutex değişkenini serbest bırakır
hünerli.
• Mutex lock() rutini bir mutex değişkenini kilitler. Yürütme iş parçacığı, kilit elde
edilene kadar bir döndürme kilidi içinde döngü yapar. Kilitli bir iş parçacığı aynı
muteks değişkenini kilitlemeye çalışırsa bir kilitlenme oluşur. Sınırlı bekleme
Machine Translated by Google
Meşgul bekleme olmadan genel senkronizasyon, Bölüm 6'da açıklandığı gibi, bir
monitörü uygulamak için kullanılabilen koşul değişkenlerinin kullanımıyla sağlanabilir. Bir
koşul değişkeni, bir muteks değişkeni ile ilişkilendirilir ve o değişkenin bir Boole durumunu
yansıtır. Genel senkronizasyonla ilgili rutinler şunlardır:
• alloc() rutin koşulu , bir koşul değişkenini dinamik olarak tahsis eder.
hünerli.
• Bekleme() rutini , ilişkili muteks değişkeninin kilidini açar ve koşul değişkeni üzerinde,
beklenmekte olan olayın gerçekleşmiş olabileceğini gösteren bir koşul sinyali()
yürütülene kadar iş parçacığını bloke eder. Mutex değişkeni daha sonra kilitlenir ve iş
parçacığı devam eder.
Bir koşul sinyali() , engellenmemiş iş parçacığı nihayet koşul wait() çağrısından
döndüğünde koşulun hala geçerli olduğunu garanti etmez , bu nedenle uyanan iş
parçacığı , engeli kaldırılana ve koşul tutulana kadar koşul wait() yordamını yürüterek
döngü yapmalıdır .
muteks tahsisi(mutex);
koşul tahsisi(boş değil, dolu değil);
Üretici ipliğinin kodu Şekil D.3'te, tüketici ipliğinin kodu ise Şekil D.4'te gösterilmiştir.
Program sonlandırıldığında, muteks ve koşul değişkenlerinin ayrılması gerekir:
mutekssiz(muteks);
koşulsuz(boş olmayan, dolu olmayan);
10 Ek D Mach Sistemi
Machine Translated by Google
yap {
...
// nextp'e bir öğe üret
...
muteks kilidi (mutex);
while(dolu) koşul
wait(dolu olmayan, muteks);
...
// nextp'yi arabelleğe ekle
...
durum sinyali(boş değil); muteks
kilidini aç (mutex); } süre(DOĞRU);
İş parçacığı tabanlı çok işlemcili bir işletim sistemi için CPU zamanlayıcı, süreç tabanlı
akrabalarından daha karmaşıktır. Çok iş parçacıklı bir sistemde genellikle çok görevli bir
sistemdeki işlemlerden daha fazla iş parçacığı vardır.
Birden fazla işlemciyi takip etmek de zordur ve nispeten yeni bir araştırma alanıdır. Mach,
zamanlayıcıyı yönetilebilir tutmak için basit bir politika kullanır. Yalnızca iş parçacıkları
zamanlanır, bu nedenle zamanlayıcıda görev bilgisine gerek yoktur. Tüm iş parçacıkları,
zaman niceliği de dahil olmak üzere kaynaklar için eşit olarak rekabet eder.
Her iş parçacığının, CPU kullanımının üstel ortalamasına dayanan, 0 ile 127 arasında
değişen bir ilişkili öncelik numarası vardır . Yani, yakın zamanda CPU'yu çok uzun süre
kullanan bir iş parçacığı en düşük
do
{ muteks kilidi(mutex);
while(boş) koşul
wait(boş değil, muteks);
...
// sonraki c'ye buffe'dan bir öğeyi kaldır
...
durum sinyali(dolu değil);
muteks kilidini aç (mutex);
...
// öğeyi nextc'de tüket
...
} kadar(YANLIŞ);
İşlemcilere iş parçacığı atayan merkezi bir dağıtıcı yerine, her işlemci, çalıştırılacak
uygun bir sonraki iş parçacığını seçmek için yerel ve genel çalıştırma kuyruklarına danışır.
Yerel çalıştırma kuyruğundaki iş parçacıkları, genel sıralardakilere göre mutlak önceliğe
sahiptir, çünkü bunların çekirdek için bazı işler yaptıkları varsayılır. Çalıştırma kuyrukları
- Mach'daki diğer nesnelerin çoğu gibi - birden çok işlemci tarafından aynı anda değişiklik
yapılmasını önlemek için değiştirildiğinde kilitlenir. Genel çalıştırma kuyruğunda iş
parçacıklarının gönderilmesini hızlandırmak için Mach, boşta kalan işlemcilerin bir
listesini tutar.
Mach'ın çok işlemcili yapısından ek zamanlama zorlukları ortaya çıkar. Sabit zamanlı
bir kuantum uygun değildir, çünkü örneğin mevcut işlemcilerden daha az çalıştırılabilir
iş parçacığı olabilir. Bir iş parçacığının kuantumu bittiğinde çekirdeğe bir bağlam
anahtarıyla bir iş parçacığını kesmek, yalnızca iş parçacığının tekrar çalışır duruma
getirilmesi için israf olur. Böylece, sabit uzunluklu bir kuantum kullanmak yerine, Mach
zaman kuantumunun boyutunu sistemdeki toplam iş parçacığı sayısıyla ters orantılı
olarak değiştirir. Bununla birlikte, tüm sistem üzerindeki zaman kuantumunu sabit tutar.
Örneğin, 10 işlemci, 11 iş parçacığı ve 100 milisaniyelik bir kuantum içeren bir sistemde,
istenen kuantumu korumak için her işlemcide yalnızca saniyede bir kez bir bağlam
anahtarının gerçekleşmesi gerekir.
Tabii ki, komplikasyonlar hala var. Bir kaynağı beklerken CPU'dan vazgeçmek bile
geleneksel işletim sistemlerinde olduğundan daha zordur.
İlk olarak, bir iş parçacığı, iş parçacığının engellemek üzere olduğunu zamanlayıcıyı
uyarmak için bir çağrı yapmalıdır. Bu uyarı, yürütme çok işlemcili bir ortamda
gerçekleştiğinde meydana gelebilecek yarış koşullarını ve kilitlenmeleri önler. İkinci bir
çağrı, uygun olay gerçekleşene kadar iş parçacığının çalıştırma kuyruğundan çıkarılmasına
neden olur. Zamanlayıcı, iş parçacığı yürütmesini kontrol etmek için diğer birçok iç iş
parçacığı durumunu kullanır.
kullanıcı tanımlı istisnalar için destek ile tek, basit, tutarlı bir istisna işleme sistemi
sağlamak üzere tasarlanmıştır. Çekirdekte fazlalığı önlemek için Mach, mümkün
olduğunda çekirdek ilkellerini kullanır. Örneğin, bir istisna işleyicisi, istisnanın meydana
geldiği görevdeki başka bir iş parçacığıdır. Uzak prosedür çağrısı (RPC) mesajları,
istisnaya ( kurban) neden olan iş parçacığının yürütülmesini ve işleyicinin yürütmesini
senkronize etmek ve mağdur ile işleyici arasında istisna hakkında bilgi iletmek için
kullanılır. BSD sinyal paketini taklit etmek için Mach istisnaları da kullanılır .
Normal program yürütme kesintileri iki çeşittir: dahili olarak oluşturulan istisnalar
ve harici kesintiler. Kesintiler, bir iş parçacığının veya görevin eşzamansız olarak
oluşturulan kesintileridir, oysa istisnalar, bir iş parçacığının yürütülmesi sırasında
olağandışı koşulların ortaya çıkmasından kaynaklanır. Mach'ın genel amaçlı istisna tesisi,
hata tespiti ve hata ayıklayıcı desteği için kullanılır.
12 Ek D
Machine Translated by Google Mach Sistemi
Bu tesis, kötü bir görevin çekirdek dökümünü almak, görevlerin kendi hatalarını
(çoğunlukla aritmetik) işlemesine izin vermek ve donanımda uygulanmayan talimatları
taklit etmek gibi diğer işlevler için de yararlıdır.
Mach, istisna işlemenin iki farklı ayrıntı düzeyini destekler. Hata işleme, iş parçacığı
başına özel durum işleme tarafından desteklenirken, hata ayıklayıcılar görev başına
işleme kullanır. Yalnızca bir iş parçacığında hata ayıklamaya çalışmak veya birden çok iş
parçacığından istisnaların birden çok hata ayıklayıcıyı çağırması pek mantıklı değildir. Bu
ayrımın yanı sıra, iki istisna türü arasındaki tek fark, onların bir üst görevden miras
almalarında yatmaktadır. Görev genelinde özel durum işleme olanakları, üst öğeden alt
görevlere aktarılır, böylece hata ayıklayıcılar tüm bir görev ağacını değiştirebilir. Hata
işleyicileri devralınmaz ve iş parçacığı ve görev oluşturma zamanında varsayılan olarak
işleyici yoktur. Son olarak, istisnalar aynı anda meydana gelirse, hata işleyiciler hata
ayıklayıcılara göre önceliklidir. Bu yaklaşımın nedeni, hata işleyicilerin normalde görevin
bir parçası olmaları ve bu nedenle bir hata ayıklayıcının varlığında bile normal şekilde
yürütülmesi gerektiğidir.
İstisna işleme şu şekilde ilerler:
• Mağdur iş parçacığı, bir istisnanın meydana geldiğine ilişkin bildirime neden olur.
Raise() işleyiciye gönderilen RPC mesajı.
• Daha sonra kurban, istisna işlenene kadar beklemek için bir rutin çağırır. •
İşleyici, genellikle özel durum, iş parçacığı ve özel duruma neden olan görev hakkında
bilgi içeren özel durum bildirimi alır. • İşleyici, işlevini istisna türüne göre
Mach'ın 4.3 BSD programlarını çalıştırabilmesi için sinyal sisteminin çok iş parçacıklı
uygulamalarla doğru bir şekilde çalışması gerektiğinden, sinyallerden vazgeçilemezdi.
Bununla birlikte, işlevsel olarak doğru bir sinyal paketi üretmek, kodun birkaç kez
yeniden yazılmasını gerektirdi. UNIX sinyalleriyle ilgili son bir sorun da kaybolabilmeleridir.
Bu kayıp, ilki işlenmeden önce aynı türden başka bir sinyal oluştuğunda meydana gelir.
Mach istisnaları, RPC uygulamalarının bir sonucu olarak sıraya alınır .
Bir BSD sürecinden diğerine gönderilenler de dahil olmak üzere harici olarak
oluşturulan sinyaller, Mach 2.5 çekirdeğinin BSD sunucu bölümü tarafından işlenir . Bu
nedenle davranışları BSD kapsamındakiyle aynıdır . Donanım istisnaları farklı bir konudur,
çünkü BSD programları donanım istisnalarını sinyal olarak almayı bekler. Bu nedenle,
bir iş parçacığının neden olduğu bir donanım istisnası, iş parçacığına bir sinyal olarak
ulaşmalıdır. Bu sonucun üretilmesi için donanım istisnaları
Machine Translated by Google
istisna RPC'lerine dönüştürülür . Mach özel durum işleme özelliğini açıkça kullanmayan
görevler ve iş parçacıkları için, bu RPC'nin hedefi varsayılan olarak bir çekirdek içi
görevdir. Bu görevin tek bir amacı vardır: İş parçacığı, istisna RPC'lerini alarak sürekli
bir döngüde çalışır . Her RPC için, istisnayı, donanım istisnasına neden olan iş
parçacığına gönderilen uygun sinyale dönüştürür. Ardından , orijinal istisna koşulunu
temizleyerek RPC'yi tamamlar. RPC'nin tamamlanmasıyla , başlatan iş parçacığı
çalıştırma durumuna yeniden girer. Sinyali hemen görür ve sinyal işleme kodunu
yürütür. Bu şekilde, tüm donanım istisnaları, istisna RPC'leri olarak tek tip bir şekilde
başlar. Bununla birlikte, bu tür istisnaları işlemek için tasarlanmayan iş parçacıkları,
istisnaları standart bir BSD sisteminde olduğu gibi sinyaller olarak alır. Mach 3.0'da,
sinyal işleme kodu tamamen bir sunucuya taşınır, ancak genel yapı ve kontrol akışı,
Mach 2.5'inkine benzer.
UNIX gibi çoğu ticari işletim sistemi, işlemler arasında ve sabit, genel adlara (veya
İnternet adreslerine) sahip ana bilgisayarlar arasında iletişim sağlar. Tesislerin konum
bağımsızlığı yoktur, çünkü bir tesisi kullanması gereken herhangi bir uzak sistem, o
tesisi sağlayan sistemin adını bilmelidir. Genellikle mesajlardaki veriler, türlenmemiş
bayt akışlarıdır. Mach, konumdan bağımsız portlar arasında mesajlar göndererek bu
resmi basitleştirir. Mesajlar, yorumlama kolaylığı için yazılan verileri içerir. Bu
basitleştirilmiş sistemle tüm BSD iletişim yöntemleri uygulanabilir.
Bağlantı noktası, nesnenin bulunduğu sistemin çekirdeği içinde korumalı, sınırlı bir
kuyruk olarak uygulanır. Kuyruk doluysa, gönderen kişi işlemi iptal edebilir.
Machine Translated by Google
14 Ek D Mach Sistemi
gönderin, kuyrukta bir yuvanın uygun hale gelmesini bekleyin veya çekirdeğin mesajı iletmesini
sağlayın.
Birkaç sistem çağrısı, bağlantı noktasına aşağıdaki işlevleri sağlar: • Belirli bir görevde
yeni bir bağlantı noktası tahsis edin ve arayanın görevine tam erişim verin
yeni liman hakları. Bağlantı noktası adı döndürülür.
• Bir görevin erişim haklarını bir bağlantı noktasına ayırın. Görevin alma hakkı varsa, bağlantı
noktası yok edilir ve gönderme haklarına sahip diğer tüm görevler potansiyel olarak bildirilir.
durumunu alın. • Alma hakkını içeren görev serbest bırakılmasını isterse veya sonlandırılırsa,
bir bağlantı noktası için alma hakkı verilen bir yedek bağlantı noktası oluşturun.
Bir görev oluşturulduğunda, çekirdek bunun için birkaç bağlantı noktası oluşturur. Task self()
işlevi , çekirdeğe yapılan çağrılarda görevi temsil eden bağlantı noktasının adını döndürür. Örneğin,
yeni bir bağlantı noktası tahsis etmek için bir görev, bağlantı noktasına sahip olacak görevin adı
olarak görev self( ) ile bağlantı noktası tahsisat() 'ı çağırır. İş parçacığı oluşturma, benzer bir iş
parçacığı self() iş parçacığı çekirdek bağlantı noktasıyla sonuçlanır. Bu şema, UNIX'te bulunan
standart süreç kimliği kavramına benzer. Görev notify() tarafından başka bir bağlantı noktası
döndürülür ; bu, çekirdeğin olay bildirim mesajlarını göndereceği bağlantı noktasıdır (port
sonlandırma bildirimleri gibi).
Bağlantı noktaları ayrıca bağlantı noktası kümeleri halinde toplanabilir. Bu özellik, bir iş
parçacığı birden çok bağlantı noktasından gelen isteklere hizmet vermekse, örneğin birden çok
nesne için kullanışlıdır. Bir bağlantı noktası, aynı anda birden fazla bağlantı noktası kümesinin üyesi olabilir.
Ayrıca, bir bağlantı noktası bir kümedeyse, doğrudan mesaj almak için kullanılamaz.
Bunun yerine iletiler, bağlantı noktası kümesinin kuyruğuna yönlendirilecektir. Bir bağlantı
noktasının aksine, bir bağlantı noktası kümesi iletilerde iletilemez. Bağlantı noktası kümeleri, 4.3
BSD select() sistem çağrısına benzer bir amaca hizmet eden nesnelerdir , ancak daha verimlidirler.
D.5.2 Mesajlar
Bir mesaj, sabit uzunlukta bir başlıktan ve değişken sayıda yazılan veri nesnesinden oluşur. Başlık,
hedefin bağlantı noktası adını, geri dönüş mesajlarının gönderilmesi gereken yanıt bağlantı
noktasının adını ve mesajın uzunluğunu içerir (Şekil D.5). Mesajdaki veriler (veya hat içi veriler)
Mach 2.5 sistemlerinde 8 KB'den daha az ile sınırlıydı , ancak Mach 3.0'ın sınırı yok. Her veri bölümü
basit bir tür (sayılar veya karakterler), bağlantı noktası hakları veya hat dışı verilere işaretçiler
olabilir. Her bölümün ilişkili bir türü vardır, böylece alıcı, gönderici tarafından kullanılandan farklı
bir bayt sıralaması kullansa bile verileri doğru şekilde açabilir. Çekirdek ayrıca mesajı belirli veri
türleri için de inceler. Örneğin, çekirdek, bağlantı noktası adını bir dahili bağlantı noktası veri yapısı
adresine çevirerek veya işlenmek üzere NetMsgServer'a ileterek bir mesaj içindeki bağlantı noktası
bilgilerini işlemelidir (Kısım D.5.3).
Bir mesajda işaretçilerin kullanılması, bir görevin tüm adres alanını tek bir mesajda aktarmanın
yolunu sağlar. Çekirdeğin ayrıca hat dışı verilere yönelik işaretçileri de işlemesi gerekir, çünkü
gönderenin adres alanındaki verilere işaret eden bir işaretçi, özellikle gönderici ve alıcı farklı
sistemlerde bulunuyorsa, alıcıda geçersiz olacaktır. Genellikle sistemler, verileri göndericiden
alıcıya kopyalayarak mesaj gönderir. Bu teknik, özellikle büyük mesajlar için verimsiz olabileceğinden,
Mach farklı bir yaklaşım benimsiyor. Veriler başvuru-
Machine Translated by Google
Liman
mesaj kontrolü
Aynı sistemdeki bir bağlantı noktasına gönderilen bir mesajda bir işaretçi tarafından
gönderilenler, gönderici ve alıcı arasında kopyalanmaz. Bunun yerine, alma görevinin
adres haritası, mesaj sayfalarının yazıldığında kopyalanan bir kopyasını içerecek
şekilde değiştirilir. Bu işlem, veri kopyalamadan çok daha hızlıdır ve mesaj geçişini
daha verimli hale getirir. Özünde, mesaj geçişi sanal bellek yönetimi aracılığıyla
gerçekleştirilir.
Sürüm 2.5'te bu işlem iki aşamada uygulandı. Bir bellek bölgesine yönelik bir
işaretçi, çekirdeğin bu bölgeyi geçici olarak kendi alanına eşlemesine neden oldu ve
herhangi bir değişikliğin verilerin orijinal sürümünü etkilememesini sağlamak için
gönderenin bellek haritasını yazma üzerine kopyalama moduna ayarladı. Hedefinde
bir mesaj alındığında, çekirdek, bu görev içinde yeni tahsis edilmiş bir sanal bellek
bölgesini kullanarak eşlemesini alıcının adres alanına taşıdı.
Bir görevdeki yeni tahsis edilen bölgelerin önceki tahsislerle bitişik olması
gerekmez, bu nedenle Mach sanal belleğinin, ayrılmamış adreslerle ayrılmış veri
bölgelerinden oluşan seyrek olduğu söylenir. Tam bir mesaj aktarımı Şekil D.6'da
gösterilmektedir.
D.5.3 NetMsgSunucusu
A B A B
P1 P1
Bir harita çekirdek haritası B haritası Bir harita çekirdek haritası B haritası
TCP veya UDP'ye dayalı hizmetler için bağlantı noktası numarası ). Mach'ın
ilkelerinden biri, sistemdeki tüm nesnelerin konumdan bağımsız olması ve konumun
kullanıcı için şeffaf olmasıdır. Bu ilke, IPC'yi birden çok bilgisayar arasında genişletmek
için Mach'ın konum şeffaf adlandırma ve aktarım sağlamasını gerektirir .
Bu adlandırma ve aktarım, ana bilgisayarlar arasında ward mesajları için kullanıcı
düzeyinde, yetenek tabanlı bir ağ arka plan programı olan Ağ İleti Sunucusu
(NetMsgServer) tarafından gerçekleştirilir. Ayrıca, görevlerin ağdaki diğer herhangi
bir bilgisayardaki görevler tarafından aranmak üzere bağlantı noktalarını
kaydetmesine olanak tanıyan ilkel bir ağ çapında ad hizmeti sağlar. Mach portları
sadece mesajlarda aktarılabilir ve mesajların portlara gönderilmesi gerekir. İlkel ad
hizmeti, ilk bağlantı noktasını aktarma sorununu çözer. NetMsgServer, bilgisayarlar
arası iletilerde geçirilen tüm hakları ve hat dışı belleği izlediği ve uygun aktarımları
düzenlediği için sonraki IPC etkileşimleri tamamen şeffaftır. NetMsgServers,
bilgisayarlar ve bu hakların karşılık geldiği bağlantı noktaları arasında aktarılan
bağlantı noktası haklarının dağıtılmış bir veritabanını kendi aralarında tutar.
Yerel IPC'yi düğümler arasında şeffaf bir şekilde genişletme yeteneği, proxy
bağlantı noktalarının kullanımıyla desteklenir. Gönderme hakkı bir bilgisayardan
diğerine aktarıldığında, hedef bilgisayardaki NetMsgServer, hedefteki orijinal
bağlantı noktasını temsil etmek için yeni bir bağlantı noktası veya proxy oluşturur.
Bu proxy'ye gönderilen mesajlar NetMsgServer tarafından alınır ve şeffaf bir şekilde iletilir.
Machine Translated by Google
sistem A sistem B
kullanıcı kullanıcı
işlem işlem
NetMsg NetMsg
sunucu sunucu
çekirdek çekirdek
gönderen alıcı
18 Ek D Mach Sistemi
Hızlı ara bağlantı donanımına sahip çoklu bilgisayarlar için çok daha verimli internode
IPC sağlayan Mach çekirdeği. Örneğin, NetMsgServer ile çekirdek arasındaki
mesajların zaman alıcı kopyalanması ortadan kalkar. NORMA IPC'nin kullanılması,
NetMsgServer'ın kullanımını engellemez ; NetMsgServer, bir NORMA çok işlemcisini
diğer bilgisayarlara bağlayan ağlar üzerinden Mach IPC hizmeti sağlamak için hala
kullanılabilir . NORMA IPC'ye ek olarak , Mach 3.0 ayrıca bir NORMA sistemi genelinde
bellek yönetimi için destek sağlar ve böyle bir sistemdeki bir görevin kendi düğümleri
dışındaki düğümlerde alt görevler oluşturmasını sağlar. Bu özellikler, bir NORMA
çok işlemcili üzerinde tek sistem görüntülü bir işletim sisteminin uygulanmasını
destekler . Çoklu işlemci, daha küçük sistemlerin bir araya gelmesinden ziyade (hem
kullanıcılar hem de uygulamalar için) büyük bir sistem gibi davranır.
Bir görevin sanal adres alanı genellikle seyrektir ve birçok ayrılmamış alan deliğinden
oluşur. Örneğin, bir dizi adrese bellek eşlemeli bir dosya yerleştirilir. Büyük mesajlar
da paylaşılan hafıza bölümleri olarak aktarılır.
Bu bölümlerin her biri için, iş parçacıklarının mesaja erişimini sağlamak için bir sanal
bellek adresi bölümü kullanılır. Yeni öğeler eşlendiğinde veya
Machine Translated by Google
19
D.6 Bellek Yönetimi
kullanıcı
adres
Uzay
önceki giriş
sonraki giriş
kafa kuyruk
adres alanı
başlangıç/bitiş
başlatıldı başlatılmamış
Metin yığın miras
veri veri
koruma
akım/maks
nesne
önbelleğe alınmış
sanal bellek
nesne
20 Ek D Mach Sistemi
ayrıca bir görev, hat dışı veriler içeren bir mesaj aldığında otomatik olarak tahsis edilir.
İlişkili sistem çağrıları, bir görevin adres alanındaki bir bellek nesnesi hakkında
bilgi döndürür, nesnenin erişim korumasını değiştirir ve bir nesnenin yaratıldıkları
sırada alt görevlere nasıl iletileceğini belirtir (paylaşılır, yazılırken kopyalanır, veya
mevcut değil).
Bir bellek nesnesi üzerinde ilk vm map() çağrısı yapıldığında, çekirdek, çağrıda
geçirilen bellek yöneticisi portuna bir mesaj göndererek, bellek yöneticisinin kendi
sürecinin bir parçası olarak sağlaması gereken bellek yöneticisi init() rutinini çağırır.
bir bellek nesnesinin desteği. Bellek yöneticisine iletilen iki bağlantı noktası, bir kontrol
bağlantı noktası ve bir ad bağlantı noktasıdır. Kontrol portu, çekirdeğe veri sağlamak
için bellek yöneticisi tarafından kullanılır; örneğin, yerleşik hale getirilecek sayfalar. Ad
bağlantı noktaları Mach boyunca kullanılır. Mesaj almazlar, sadece referans ve
karşılaştırma noktaları olarak kullanılırlar.
Son olarak, bellek nesnesi, istekleri kabul etmeye hazır olduğunu belirtmek için bir
bellek nesnesi kümesi öznitelikleri () çağrısıyla bir bellek yöneticisi init() çağrısına yanıt
vermelidir. Bir bellek nesnesine gönderme haklarına sahip tüm görevler bu haklardan
vazgeçtiğinde, çekirdek nesnenin bağlantı noktalarını serbest bırakır, böylece bellek
yöneticisini ve bellek nesnesini imha için serbest bırakır.
Harici bellek yöneticilerini desteklemek için birkaç çekirdek çağrısı gerekir. vm
map() çağrısı az önce tartışıldı. Ek olarak, bazı komutlar öznitelikleri alır ve ayarlar ve
gerektiğinde (örneğin, bir sayfa hatası oluştuktan sonra ancak bellek yöneticisi uygun
verileri döndürmeden önce) sayfa düzeyinde kilitleme sağlar. Başka bir çağrı, bir sayfa
hatasına yanıt olarak çekirdeğe bir sayfa (veya ileri okuma kullanılıyorsa birden çok
sayfa) iletmek için bellek yöneticisi tarafından kullanılır. Çekirdek, bellek yöneticisini
eşzamansız olarak çağırdığı için bu çağrı gereklidir. Son olarak, birkaç çağrı, bellek
yöneticisinin hataları çekirdeğe bildirmesine izin verir.
Bir nesneyi destekleyebilmesi için bellek yöneticisinin kendisi birkaç çağrı için
destek sağlamalıdır. Bellek nesnesi init() ve diğerlerini zaten tartışmıştık . Bir iş
parçacığı, bir bellek nesnesinin sayfasında bir sayfa hatasına neden olduğunda,
çekirdek, hata yapan iş parçacığı adına bellek nesnesinin bağlantı noktasına bir bellek
nesnesi veri isteği() gönderir. İş parçacığı, bellek yöneticisi ya bir bellek nesnesi verisi
çağrısında sayfayı döndürene ya da çekirdeğe uygun bir hata döndürene kadar bir
bekleme durumuna yerleştirilir . sahip olan sayfalardan herhangi biri
Machine Translated by Google
22 Ek D Mach Sistemi
Bir programcı, Mach içinde çeşitli seviyelerde çalışabilir. Elbette, Mach 2.5'te 4.3 BSD
sistem çağrısı arayüzüne eşdeğer olan sistem çağrısı seviyesi vardır. Sürüm 2.5 ,
çekirdekte bir iş parçacığı olarak 4.3 BSD'nin çoğunu içerir . Bir BSD sistem çağrı
tuzakları çekirdeğe bağlanır ve standart BSD'nin halledeceği gibi, arayan adına bu iş
parçacığı tarafından hizmet verilir . Öykünme çok iş parçacıklı değildir, bu nedenle
sınırlı verimliliğe sahiptir.
Mach 3.0, tek sunucu modelinden birden çok sunucuyu desteklemeye geçmiştir.
Bu nedenle, normalde bir çekirdekte bulunan tüm özelliklere sahip olmayan gerçek
bir mikro çekirdek haline gelmiştir. Bunun yerine, tam işlevsellik öykünme kitaplıkları,
sunucular veya ikisinin birleşimi aracılığıyla sağlanabilir. Bir mikro çekirdeğin tanımına
uygun olarak, öykünme kitaplıkları ve sunucular, kullanıcı düzeyinde çekirdeğin
dışında çalışır. Bu sayede birden fazla işletim sistemi aynı anda tek bir Mach 3.0
çekirdeği üzerinde çalışabilir.
Öykünme kitaplığı, bir programın adres alanının salt okunur bir bölümünde
yaşayan bir dizi rutindir. Programın yaptığı tüm işletim sistemi çağrıları, kitaplığa
yapılan alt program çağrılarına çevrilir. MS-DOS ve Macintosh işletim sistemi gibi tek
kullanıcılı işletim sistemleri, yalnızca öykünme kitaplıkları olarak uygulanmıştır.
Verimlilik nedenleriyle, öykünme kitaplığı, işlevselliğine ihtiyaç duyan programın
adres alanında yaşar; teoride, ancak, ayrı bir görev olabilir.
Daha karmaşık işletim sistemleri, kitaplıklar ve bir veya daha fazla sunucu
kullanılarak taklit edilir. Kütüphanede uygulanamayan sistem çağrıları uygun
sunucuya yönlendirilir. Sunucular için çok iş parçacıklı olabilir
Machine Translated by Google
24
Ek D Mach Sistemi
Verimliliği arttırmak; BSD ve OSF/1 , tek, çok iş parçacıklı sunucular olarak uygulanır.
Sistemler, daha fazla modülerlik için birden çok sunucuya ayrıştırılabilir.
İşlevsel olarak, bir sistem çağrısı bir görevde başlar ve uygunsa görevin adres
alanındaki kitaplığa veya bir sunucuya yeniden yönlendirilmeden önce çekirdekten
geçer. Bu ekstra kontrol transferi Mach'ın verimliliğini azaltsa da, bu düşüş bir
dereceye kadar birden çok iş parçacığının BSD benzeri kodu aynı anda yürütme
yeteneği ile dengelenir.
Bir sonraki daha yüksek programlama seviyesinde, C iş parçacığı paketi bulunur.
Bu paket yaşı, temel Mach iş parçacığı temel öğelerine bir C dili arabirimi sağlayan
bir çalışma zamanı kitaplığıdır. İş parçacıklarının çatallanması ve birleştirilmesi için
rutinler, muteks değişkenleri aracılığıyla karşılıklı dışlama (Kısım D.4.2) ve koşul
değişkenlerinin kullanımı yoluyla senkronizasyon dahil olmak üzere bu ilkellere kolay
erişim sağlar. Ne yazık ki, yapılarını uygulamak için paylaşılan belleğe bağlı
olduğundan, bellek paylaşmayan sistemler (NORMA sistemleri) arasında C iş parçacığı
paketinin kullanılması uygun değildir . Şu anda NORMA sistemleri için C iş parçacığı
eşdeğeri yoktur. Diğer diller için iş parçacığı desteği de dahil olmak üzere, Mach için
başka çalışma zamanı kitaplıkları yazılmıştır.
İlkellerin kullanılması Mach'ı esnek hale getirse de, birçok programlama görevini
tekrarlı hale getirir. Örneğin, mesajları kullanan her görevde (Mach'de çoğu görev
olan) önemli miktarda kod, mesaj gönderme ve alma ile ilişkilidir. Bu nedenle Mach
tasarımcıları, MIG adı verilen bir arayüz oluşturucu (veya saplama oluşturucu) sağlar.
MIG , esasen, kullanılacak arabirimin tanımını (değişkenlerin, türlerin ve prosedürlerin
bildirimleri) girdi olarak alan ve bu tanıma uyan mesajları göndermek ve almak ve
mesajları birbirine bağlamak için gereken RPC arabirim kodunu üreten bir derleyicidir.
gönderen ve alan iş parçacıkları.
D.8 Özet
Mach işletim sistemi, tamamen işlevsel, teknik olarak gelişmiş bir işletim sistemi
üretmek için işletim sistemi araştırmalarındaki birçok yeniliği birleştirmek üzere
tasarlanmıştır.
Mach işletim sistemi, üç kritik hedef göz önünde bulundurularak tasarlanmıştır:
• 4.3 BSD UNIX'i taklit edin, böylece bir UNIX sisteminden yürütülebilir dosyalar
Mach altında doğru şekilde çalıştırın.
Mach, çoklu işlem ve paralel hesaplamayı desteklemek için tek bir görev
(veya adres alanı) içinde birden çok yürütme iş parçacığı biçiminde hafif
işlemler kullanır. Tek iletişim yöntemi olarak mesajların kapsamlı kullanımı,
koruma mekanizmalarının eksiksiz ve verimli olmasını sağlar.
Mach, mesajları sanal bellek sistemiyle entegre ederek, mesajların verimli bir
şekilde işlenmesini de sağlar. Son olarak, Mach, sanal bellek sisteminin destek
deposunu yöneten cinlerle iletişim kurmak için mesajları kullanmasını
sağlayarak, bu bellek nesnesi yönetim görevlerinin tasarımında ve
uygulanmasında büyük esneklik sağlar.
Mach, daha karmaşık işlevlerin oluşturulabileceği düşük düzeyli veya ilkel
sistem çağrıları sağlayarak, çekirdeğin boyutunu küçültürken, IBM'in sanal
makine sistemleri gibi, kullanıcı düzeyinde işletim sistemi öykünmesine izin
verir .
bibliyografya
[Rashid (1986)] RF Rashid, “RIG to Accent to Mach: The Evolution of a Network Operating
System”, Proceedings of the ACM/IEEE Computer Society, Fall Joint Computer
Conference (1986), sayfa 1128-1137.
[Rashid ve Robertson (1981)] R. Rashid ve G. Robertson, “Accent: A Communication-
Oriented Network Operating System Kernel”, Proceedings of the ACM Symposium
on Operating System Principles (1981), sayfa 64-75.
[Tevanyan et al. (1987a)] A. Tevanian, Jr., RF Rashid, DB Golub, DL Black, E. Cooper ve
MW Young, “Mach Threads and the Unix Kernel: The Battle for Control”, Proceedings
of the Summer USENIX Konferansı (1987) ).
26 Ek D Mach Sistemi
Memory and Memory Mapped Files Under Mach”, Teknik rapor, Carnegie Mellon
University (1987).
[Tevanyan et al. (1989)] A. Tevanian, Jr. ve B. Smith, “Mach: The Model for for
Gelecek Unix”, Byte (1989).
Machine Translated by Google
Kredi
• Şekil 1.14: Hennesy ve Patterson'dan, Bilgisayar Mimarisi: Niteliksel Bir Yaklaşım,
Üçüncü Baskı, c 2002, Morgan Kaufmann Publishers, Şekil 5.3, s. 394. Yayıncının
izniyle yeniden basılmıştır.
• Şekil 5.19: Khanna/Sebree/Zolnowsky'den, “Gerçek Zamanlı Planlama
SunOS 5.0,” Proceedings of Winter USENIX, Ocak 1992, San Francisco,
Kaliforniya. Yazarların izniyle türetilmiştir.
• Şekil 5.30, Sun Microsystems, Inc.'in izniyle uyarlanmıştır.
• Şekil 10.20: IBM Systems Journal, Cilt. 10, No. 3, c 1971, International Business
Machines Corporation. IBM'in izniyle yeniden basılmıştır
şirket.
• Şekil 12.5: Pentium İşlemci Kullanıcı Kılavuzundaki bir tabloya göre : Archi
tecture and Programming Manual, Cilt 3, c 1993.
• Şekil 14.8: Leffler/McKusick/Karels/Quarterman'dan Tasarım ve
4.3BSD UNIX İşletim Sisteminin Uygulanması, c 1989, Addison Wesley Publishing
Co., Inc., Reading, Massachusetts. Şekil 7.6, s. 196.
Yayıncının izniyle yeniden basılmıştır.
• Şekil 19.5, 19.6 ve 19.8: Halsall'dan, Veri İletişimi, Bilgisayar
Networks, and Open Systems, Üçüncü Baskı, c 1992, Addison-Wesley Pub lishing
Co., Inc., Reading, Massachusetts. Şekil 1.9, s. 14, Şekil 1.10, s.
15 ve Şekil 1.11, s. 18. Yayıncının izniyle yeniden basılmıştır.
963
Machine Translated by Google
Machine Translated by Google
dizin
965
966 dizin
Machine Translated by Google
B
ASIC'ler, 46
ASID'ler (adres alanı tanımlayıcıları) 366 arka kapı, 503, 626, 627, 638
ASLR (adres alanı düzeni arka plan sınıfı, 186 arka plan
rastgeleleştirme), 656, 827 işlemi, 74-75, 115, 123, 215, 241 yedekleme
atama kenarı, 323 deposu, 376 arka işaretçi, 682
asimetrik kümeleme, 19 yedekleme, 588-589 bozuk blok, 466-467
asimetrik şifreleme, 641, 645 bozuk küme dosyası, 877 bozuk sayfa, 856
asimetrik şifreleme algoritması, 641 bakiye, çok çekirdekli programlamada, 163
asimetrik çoklu işlem, 220 asimetri, dengeli ikili arama ağacı, 38 balon bellek
adreslemede, 129 asenkron iptal, 190 yöneticisi, 721 bant genişliği, 457 bankacı
asenkron cihaz, 502, 506-507 asenkron algoritması, 333-337 engel, bellek, 265-266
mesaj geçişi, 130 asenkron prosedür çağrısı tabanlı bölümler, 852 temel dosya kaydı, 876
( APC'ler), 189-190, 846 asenkron iş parçacığı, temel kayıt, 351-352 bash (bourne-tekrar
169 asenkron yazma, 585 kabuk), 58, 783 temel dosya sistemleri, 564,
565 Bayes teoremi, 657 BCC (BPF Derleyici
Koleksiyonu), 98-100 Belady's anomalisi, 406
best-fi stratejisi, 358 , 359 BGP (Border
ATA veriyolları, Gateway Protocol), 745 büyük çekirdek,
456 "en fazla bir kere" işlevselliği, 226-227 büyük veri, 22 big-endian, 150
150 atom talimatı, 266, 269 atom big.LITTLE mimarisi, 226-227 ikili format, 785
güvenli kaydetme, 592 atom ikili genel ağaç, 38 ikili arama ağacı, 38, 39 ikili
değişkeni, 269-270 saldırı, 622 semafor, 273 ikili çeviri, 708-710 ikili ağaç, 38,
arabellek taşması, 628-631 kod 39 bağlayıcı, 151 bağlama, 352 biyometri,
enjeksiyonu, 628-631 kod yeniden 652-653 Bionic standart, 90
kullanımı, 827 hizmet reddi, 622,
636 bilgi sızıntısı, 827 ortadaki
adam, 623, 635, 645 tekrar, 622
tünelli, 659-660 sıfır gün, 656
saldırgan, 622 saldırı yüzeyi, 624
nitelik, 551, 826, 875-876 öznitelik
tanım tablosu, 877 denetim, 659
denetim izi, 669 artırılmış gerçeklik
uygulaması, 42 kimlik doğrulama:
ihlali, 622
968 dizin
Machine Translated by Google
BIOS, 94 önyükleme, 86, 94-95, 863-864 , 872-874
bit(ler): önyükleme yükleyicileri, önyükleme programları
erişildi, 437 ek önyükleme bölümü, 465 önyükleme sektörü, 466
referans bit algoritması, 409-410 önyükleme bağlantı noktası, 136 önyükleme
programı (önyükleme yükleyicileri,
bitişik, 432-433 tanımlı,
12 mod, 24 değişiklik önyükleme yükleyicileri), 11, 70, 94, 465,
(kirli), 402 referans, 409 601
setuid, 674-675 64-bit önyükleme sunucusu, 136
hesaplama, 383 geçerli- önyükleme virüsü, 632, 633
geçersiz, 368-369 Border Gateway Protocol (BGP), 745 darboğaz,
95 alt yarı (kesme hizmeti rutinleri), 793-794
sınırlı tampon, 126 sınırlı tampon sorunu, 290,
bit düzeyinde şeritleme, 475 304 sınırlı kapasite (kuyruk), 131-132
BitLocker, 863 bit sınırlı bekleme, 261 bourne- tekrar kabuk (bash),
eşlemler (bit vektörleri), 38-39, 579, 877 58, 783
BKL, çalışan, 794 blade
sunucu, 18-19 blok, 186
bozuk, 466-467 önyükleme,
94, 464-466, 566 BPF Derleyici Koleksiyonu (BCC), 98-100
önyükleme denetimi, 566 kullanılabilirlik ihlali, 622 gizliliğin ihlali 622
tanımlı, 564 doğrudan, ,
576 disk, 40 dosya bütünlüğün ihlali, 622
denetimi, 565 , 567 dizin, köprüleme, 723 yayın, 745
575-577 dolaylı, 576, 577 broker, 837 tarayıcı işlemi,
mantıksal, 456 işlem 124
denetimi, 109-110 iş
parçacığı oluşturma, BSD UNIX, 49-50 bss
186-188 iş parçacığı (sembolle başlayan blok) alanı, 108
ortamı, 889-890 B+ ağacı (NTFS), 876
arkadaş, 427 buddy
yığını (Linux), 796 buddy
Kullanılmayan TRIMing, 581-582 sistemi (Linux), 796 buddy-sistem
sanal adres kontrolü, 865 ses tahsisi, 427, 428 tampon: sınırlı ve sınırsız,
kontrolü, 566 126 sınırlı-tampon sorunu, 290, 304
blok şifreleme, 639 dairesel, 587 , 716-717 tanımlı, 509
blok cihaz, 502-504, 810-811 blok çeviriye bak, 365-368, 376, 384,
cihaz arayüzü, 503 blok grubu, 806
bloklama, belirsiz 213 bloklama I/O,
506 bloklama (senkron) mesaj geçişi,
130 855
arabellek önbelleği,
583-585 arabelleğe alma, 131-132, 412, 499,
blok serpiştirilmiş dağıtılmış parite, 477-478 509-510 arabellek taşması saldırıları, 628-631
bug, 66 bug bounty programı, 826 bus(lar),
blok düzeyinde şeritleme, 475 7, 456 ileri teknoloji eki, 456 tanımlı , 490-491
blok numarası, göreceli, sembol eSATA, 456 genişletme, 490 fiber kanal, 456
(bss) alanı tarafından başlatılan 540 blok 108
blok senkronizasyonu, 305 gövde (değer), 187
önyükleme bloğu, 94, 465-466, 566 önyükleme
kontrol bloğu, 566 önyükleme diski (sistem disk),
465 önyükleme dosyası 877
G/Ç, 456
PCIe, 490
dizin 969
Machine Translated by Google
seri ATA, 456 değişiklik günlüğü (Windows 10), 879
seri bağlı SCSI, 456, 490 evrensel karakter aygıtı (Linux), 810-812
seri, 456 meşgul bekleme, 272, karakter akışı aygıtı, 502, 504 karakter
493-494 bayt, 11 bayt kod, 727 akışı arabirimi, 504 sağlama toplamı,
bayt akış, 748 462, 746 alt öğe, 38, 111 çip çoklu
okuma (CMT), 222, 223 yonga setleri,
835
C Krom, 124
CIFS (ortak İnternet dosya sistemi), 607, 880
önbellekler, 583-586
arabellek, şifreler, 639, 640
583-584 tanımlı, dairesel arabellek, 587, 716-717
510 Linux'ta, 797, dairesel bağlantılı listeler, 37, 38
798 konumu, 765-766 dairesel SCAN (C-SCAN) zamanlama
arabellek olarak, 350 algoritması, 460 dairesel bekleme
sayfa, 583, 798 ve koşulu (kilitlenmeler), 321, 328-330
performans iyileştirme, güncelleme için
583-586 politikası, 766-767 slab in, 427, 428 iddia kenarı, 333
birleşik arabellek, 583-585 önbellek tutarlılığı, sınıf (Java), 694 sınıf
32 önbellek tutarlılığı sorunu, 765 önbellek yükleyici, 727
yönetimi, 30-31 önbellek yöneticisi (Windows temizleme işleyicisi,
10), 864-866 önbelleğe alma, 30-31, 510-511 191 temizleme kesintisi, 9, 494
temel şema, 764-765 istemci tarafı , 883 çift, CLI (komut satırı arayüzü), 56
584 geri yazma, 766 iptal, iş parçacığı, 190-192 C kitaplığı, bkz. libc
iptal noktası, 191 Canonical, 779 yetenek(ler), istemci(ler)i, istemci-
680, 682-683, 685-686, 697 yetenek tabanlı sunucu modelinde 73 , 606
koruma sistemleri, 685-687 yetenek listeleri, tanımlı, 757 disksiz, 762
680-681 yetenek sistemleri, 826 kapasite, dağıtılmış sistemlerde, 734
kuyruk, 131-132 basamaklı sonlandırma, 121 ince, önbelleğe alınmış verileri
yakalama kesintisi, 9, 494 CAV (sabit açısal hız), doğrulamak için istemci
457 cd komutu, 751 merkezi işlem birimi, 18, tarafından başlatılan 40 yaklaşım, 767
318. Ayrıca bkz. CPU Ceph, 484 sertifika yetkilisi, istemci arabirimi, 757 istemci-
644 CET (Control-flo Enforcement Technology), sunucu DFS model, 758-759 istemci-sunucu
828 CFG (Control-Flow Guard), 827 CFQ dağıtılmış sistem, 734 istemci-sunucu
planlayıcı, 461, 811 CFS ile başlayan modeli, 606, 758-759, 861-862 istemci-
girişler, bkz. Tamamen Adil Program r CFS sunucu sistemleri, 42-43, 734 istemci-tarafı
(kümelenmiş dosya sistemi), 768 zorlu parola, önbelleğe alma (CSC), 883 istemci sistemleri,
652 42 saat , 505-506 saat algoritması, 410-411
saat sahibi, 837 klon, 591, 705 klon() sistem
çağrısı, 195-196 kapalı kaynaklı işletim sistemi,
46 kapak, 174, 186 bulut bilişim, 44-45, 706
bulut depolama , 471, 751 küme, 19-21, 464,
574, 875 küme tabanlı DFS modeli, 758-760
kümelenmiş dosya sistemi (CFS), 768
kümelenmiş sayfa tablosu, 374 kümelenmiş
sistem, 19-21
970 dizin
Machine Translated by Google