You are on page 1of 300

19.

7 DFS Adlandırma ve Şeffaflık 763


Machine Translated by Google

Dezavantajları, önyükleme protokollerinin ek karmaşıklığı ve yerel disk yerine ağ


kullanımından kaynaklanan performans kaybıdır.

19.7.2 Adlandırma Şemaları

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.

Üçüncü bir yaklaşım kullanarak bileşen dosya sistemlerinin tam entegrasyonunu


sağlayabiliriz. Burada, tek bir genel ad yapısı, sistemdeki tüm dosyaları kapsar.
OpenAFS , dışa aktardığı dosyalar ve dizinler için tek bir global ad alanı sağlayarak
farklı istemci makinelerinde benzer bir kullanıcı deneyimi sağlar. İdeal olarak,
oluşturulan dosya sistemi yapısı, geleneksel bir dosya sisteminin yapısıyla aynıdır.
Ancak pratikte, birçok özel dosya (örneğin, UNIX aygıt dosyaları ve makineye özel ikili
dizinler) bu hedefe ulaşılmasını zorlaştırır.

Adlandırma yapılarını değerlendirmek için idari karmaşıklıklarına bakıyoruz.


En karmaşık ve bakımı en zor yapı NFS yapısıdır.
Herhangi bir uzak dizin, yerel dizin ağacının herhangi bir yerine eklenebildiğinden,
ortaya çıkan hiyerarşi oldukça yapılandırılmamış olabilir. Bir sunucu kullanılamaz
hale gelirse, farklı makinelerdeki bazı rastgele dizinler kullanılamaz hale gelir. Ayrıca,
ayrı bir akreditasyon mekanizması, hangi makinenin hangi dizini ağacına eklemesine
izin verileceğini kontrol eder. Bu nedenle, bir kullanıcı bir istemcideki uzak dizin
ağacına erişebilir, ancak başka bir istemcide erişimi reddedilebilir.

19.7.3 Uygulama Teknikleri

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

764 Bölüm 19 Ağlar ve Dağıtılmış Sistemler

Önemli eşleme bilgilerinin kullanılabilirliğini artırmak için çoğaltma, yerel önbelleğe


alma veya her ikisini de kullanabiliriz. Belirttiğimiz gibi, konum bağımsızlığı,
haritalamanın zaman içinde değişmesi anlamına gelir. Bu nedenle, eşlemeyi çoğaltmak,
bu bilgilerin basit ama tutarlı bir şekilde güncellenmesini imkansız hale getirir. Bu
engelin üstesinden gelmek için, düşük seviyeli, konumdan bağımsız dosya tanımlayıcıları tanıtabiliriz.
(OpenAFS bu yaklaşımı kullanır.) Metinsel dosya adları, dosyanın hangi bileşen birimine
ait olduğunu gösteren alt düzey dosya tanımlayıcılarına eşlenir. Bu tanımlayıcılar hala
konumdan bağımsızdır. Bileşen birimlerinin taşınmasıyla geçersiz kılınmadan serbestçe
çoğaltılabilir ve önbelleğe alınabilirler. Kaçınılmaz fiyat, bileşen birimlerini konumlara
eşleyen ve basit ama tutarlı bir güncelleme mekanizmasına ihtiyaç duyan ikinci bir
eşleme düzeyine duyulan ihtiyaçtır. Bu düşük seviyeli, konumdan bağımsız tanımlayıcıları
kullanarak UNIX benzeri dizin ağaçlarını uygulamak , bileşen-birim geçişi altında tüm
hiyerarşiyi değişmez kılar.
Değişen tek yön, bileşen-birim konum eşlemesidir.
Düşük seviyeli tanımlayıcıları uygulamanın yaygın bir yolu, yapılandırılmış adlar
kullanmaktır. Bu isimler, genellikle iki bölümden oluşan bit dizileridir. İlk kısım, dosyanın
ait olduğu bileşen birimini tanımlar; ikinci kısım, ünite içindeki belirli dosyayı tanımlar.
Daha fazla parçalı varyantlar mümkündür. Bununla birlikte, yapılandırılmış adların
değişmezi, adın tek tek bölümlerinin her zaman yalnızca geri kalan bölümlerin
bağlamında benzersiz olmasıdır. Hala kullanımda olan bir adı tekrar kullanmamaya
özen göstererek, yeterince fazla bit ekleyerek (bu yöntem OpenAFS'de kullanılır) veya
adın bir parçası olarak bir zaman damgası kullanarak (yapıldığı gibi ) her zaman
benzersizlik elde edebiliriz. Apollo Domain'de).
Bu süreci görmenin başka bir yolu da, Ibis gibi konum-saydam bir sistem alıyor olmamız
ve konumdan bağımsız bir adlandırma şeması oluşturmak için başka bir soyutlama
düzeyi eklememizdir.

19.8 Uzaktan Dosya Erişimi

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.

Bir uzaktan hizmet mekanizmasının makul performansını sağlamak için bir


önbelleğe alma biçimi kullanabiliriz. Geleneksel dosya sistemlerinde, önbelleğe almanın
mantığı disk G/ Ç'sini azaltmaktır (böylece performansı arttırır), oysa DFS'lerde amaç
hem ağ trafiğini hem de disk G/Ç'sini azaltmaktır. Aşağıdaki tartışmada, bir DFS'de
önbelleğe alma uygulamasını açıklıyor ve bunu temel uzaktan hizmet paradigması ile
karşılaştırıyoruz.

19.8.1 Temel Önbelleğe Alma Şeması

Ö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

19.8 Uzaktan Dosya Erişimi 765

müşteri sistemi. Erişimler, önbelleğe alınmış kopya üzerinde gerçekleştirilir. Buradaki


fikir, yakın zamanda erişilen disk bloklarını önbellekte tutmaktır, böylece aynı bilgilere
tekrarlanan erişimler, ek ağ trafiği olmadan yerel olarak işlenebilir.
Bir değiştirme ilkesi (örneğin, en son kullanılan algoritma), önbellek boyutunu sınırlı
tutar. Erişimler ve sunucuya gelen trafik arasında doğrudan bir yazışma yoktur. Dosyalar
hala sunucu makinesinde bulunan bir ana kopya ile tanımlanır, ancak dosyanın kopyaları
(veya parçaları) farklı önbelleklere dağılır. Önbelleğe alınmış bir kopya değiştirildiğinde,
ilgili tutarlılık semantiğini korumak için değişikliklerin ana kopyaya yansıtılması gerekir.
Önbelleğe alınmış kopyaları ana dosyayla tutarlı tutma sorunu, Bölüm 19.8.4'te
tartıştığımız önbellek tutarlılığı sorunudur . DFS önbelleğe alma, ağ sanal belleği olarak
da adlandırılabilir . Yedekleme deposunun genellikle yerel bir disk yerine uzak bir sunucu
olması dışında, disk belleğine alınmış sanal belleğe benzer şekilde davranır. NFS , takas
alanının uzaktan bağlanmasına izin verir, böylece performans cezasıyla sonuçlansa da
sanal belleği bir ağ üzerinden uygulayabilir.

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.

19.8.2 Önbellek Konumu

Ö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:

• Ana bellek önbellekleri, iş istasyonlarının disksiz olmasına izin

verir. • Verilere ana bellekteki bir önbellekten daha hızlı erişilebilir.


bir diskte.

• 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.

Birçok uzaktan erişim uygulaması, önbelleğe alma ve uzaktan hizmetin melezleri


olarak düşünülebilir. Örneğin , NFS'de uygulama, uzak hizmete dayalıdır, ancak
performans için istemci ve sunucu tarafı bellek önbelleğe alma ile güçlendirilir. Bu
nedenle, iki yöntemi değerlendirmek için, her iki yöntemin de vurgulanma derecesini
değerlendirmeliyiz. NFS protokolü ve çoğu uygulama disk önbelleğe almayı sağlamaz
(ancak OpenAFS yapar).

19.8.3 Önbellek Güncelleme Politikası


Değiştirilmiş veri bloklarını sunucunun ana kopyasına geri yazmak için kullanılan
politika, sistemin performansı ve güvenilirliği üzerinde kritik bir etkiye sahiptir. En
basit politika, verileri herhangi bir önbelleğe yerleştirildiği anda diske yazmaktır.
Yazma ilkesinin avantajı güvenilirliktir: bir istemci sistemi çöktüğünde çok az bilgi
kaybolur. Ancak bu politika, her yazma erişiminin bilgi sunucuya gönderilene kadar
beklemesini gerektirir, bu nedenle düşük yazma performansına neden olur. Yazma
ile önbelleğe alma, yazma erişimleri için uzak hizmeti kullanmaya ve yalnızca okuma
erişimleri için önbelleğe almayı kullanmaya eşdeğerdir.
Bir alternatif, ana kopyadaki güncellemeleri geciktirdiğimiz , geri yazma önbelleği
olarak da bilinen gecikmeli yazma ilkesidir. Değişiklikler önbelleğe yazılır ve daha
sonra sunucuya yazılır. Bu ilkenin, yazma işlemine göre iki avantajı vardır. İlk olarak,
yazma işlemleri önbelleğe yapıldığından, yazma erişimleri çok daha hızlı tamamlanır.
İkincisi, geri yazılmadan önce verilerin üzerine yazılabilir, bu durumda yalnızca son
güncellemenin yazılması gerekir. Ne yazık ki, gecikmeli yazma şemaları güvenilirlik
sorunları ortaya çıkarır, çünkü bir kullanıcı makinesi çöktüğünde yazılmamış veriler
kaybolur.

Gecikmeli yazma ilkesinin varyasyonları, değiştirilen veri bloklarının sunucuya


boşaltılması durumunda farklılık gösterir. Alternatiflerden biri, müşterinin
önbelleğinden çıkarılmak üzere olan bir bloğu temizlemektir. Bu seçenek iyi
performansla sonuçlanabilir, ancak bazı bloklar sunucuya geri yazılmadan önce uzun
bir süre istemcinin önbelleğinde kalabilir. Bu alternatif ile baştan sona yazma ilkesi
arasında bir uzlaşma, önbelleği düzenli aralıklarla taramak ve UNIX'in yerel
önbelleğini taradığı gibi, en son taramadan bu yana değiştirilen blokları temizlemektir.
NFS , dosya verileri için ilkeyi kullanır, ancak önbellek temizleme sırasında sunucuya
bir yazma işlemi yapıldığında, yazma işleminin tamamlanmış sayılmadan önce
sunucunun diskine ulaşması gerekir. NFS , meta verileri (dizin verileri ve dosya
özniteliği verileri) farklı şekilde ele alır. Herhangi bir meta veri değişikliği, sunucuya eşzama
Böylece, bir istemci veya sunucu çöktüğünde dosya yapısı kaybı ve dizin yapısı
bozulması önlenir.
Gecikmeli yazmanın bir başka varyasyonu, dosya kapatıldığında verileri sunucuya
geri yazmaktır. Bu kapatma üzerine yazma ilkesi OpenAFS'de kullanılır . Kısa
süreliğine açık olan veya nadiren değiştirilen dosyalar söz konusu olduğunda, bu
politika ağ trafiğini önemli ölçüde azaltmaz. Ek olarak, kapatma üzerine yazma
politikası, dosya yazılırken kapatma işleminin gecikmesini gerektirir,
Machine Translated by Google

19.9 Dağıtılmış Dosya Sistemleri Üzerine Son Düşünceler 767

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:

1. Müşteri tarafından başlatılan yaklaşım. İstemci, sunucuyla bağlantı kurduğu ve yerel


verilerin ana kopyayla tutarlı olup olmadığını kontrol ettiği bir geçerlilik denetimi
başlatır. Geçerlilik denetiminin sıklığı, bu yaklaşımın en önemli noktasıdır ve elde
edilen tutarlılık semantiğini belirler. Her erişimden önceki bir kontrolden, sadece bir
dosyaya ilk erişimde (temelde dosya açıkken) bir kontrole kadar değişebilir. Geçerlilik
denetimiyle birleştirilmiş her erişim, önbellek tarafından hemen sunulan bir erişime
kıyasla gecikir.
Alternatif olarak, kontroller sabit zaman aralıklarında başlatılabilir. Frekansına bağlı
olarak, geçerlilik kontrolü hem ağı hem de cihazı yükleyebilir.
sunucu.

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 .

19.9 Dağıtılmış Dosya Sistemleri Üzerine Son Düşünceler

DFS istemci-sunucu ve küme tabanlı mimariler arasındaki çizgi bulanıklaşıyor.


NFS Sürüm 4.1 spesifikasyonu , pNFS adı verilen NFS'nin paralel bir sürümü için bir protokol
içerir , ancak bu yazıdan itibaren benimseme yavaştır.
Machine Translated by Google

768 Bölüm 19 Ağlar ve Dağıtılmış Sistemler

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

• Ağ katmanlama modelleri tarafından belirtildiği gibi protokol yığınları bilgi ekler


hedefine ulaştığından emin olmak için bir mesaja.
• Bir ana bilgisayar adından bir ağ adresine çevirmek için bir adlandırma sistemi
( DNS gibi) kullanılmalıdır ve ağ numarasını bir ağ cihazı adresine çevirmek için
başka bir protokole ( ARP gibi) ihtiyaç duyulabilir (bir Ethernet adresi, misal). •
Sistemler ayrı ağlarda bulunuyorsa, paketleri kaynak ağdan hedef ağa geçirmek

için yönlendiricilere ihtiyaç vardır.

• UDP ve TCP taşıma protokolleri , sistem genelinde benzersiz bağlantı noktası


numaralarını kullanarak paketleri bekleyen işlemlere yönlendirir. Ayrıca, TCP
protokolü, paket akışının güvenilir, bağlantı yönelimli bir bayt akışı olmasını
sağlar.
• Dağıtılmış bir sistemin doğru çalışması için üstesinden gelinmesi gereken birçok
zorluk vardır. Sorunlar, sistemdeki düğümlerin ve süreçlerin adlandırılmasını,
hata toleransını, hata kurtarmayı ve ölçeklenebilirliği içerir. Ölçeklenebilirlik
sorunları arasında artan yükün ele alınması, hataya dayanıklı olma ve sıkıştırma
ve/veya veri tekilleştirme olasılığı da dahil olmak üzere verimli depolama
şemalarının kullanılması yer alır. • DFS , istemcileri, sunucuları ve depolama
aygıtları dağıtılmış bir sistemin siteleri arasında dağılmış bir dosya hizmeti
sistemidir. Buna göre, hizmet faaliyeti ağ üzerinden yürütülmelidir; tek bir
merkezi veri deposu yerine, birden çok bağımsız depolama aygıtı vardır. • İki
ana DFS modeli türü vardır: istemci-sunucu modeli ve küme tabanlı model. İstemci-
sunucu modeli, bir veya daha fazla istemci arasında şeffaf dosya paylaşımına
izin verir. Küme tabanlı model, dosyaları bir veya daha fazla veri sunucusu
arasında dağıtır ve büyük ölçekli paralel veri işleme için oluşturulmuştur. •
İdeal olarak, bir DFS istemcilerine geleneksel, merkezi bir dosya sistemi gibi
bakmalıdır (her ne kadar POSIX gibi geleneksel dosya sistemi arabirimlerine tam
olarak uymasa da). Sunucularının ve depolama cihazlarının çokluğu ve dağılımı
şeffaf olmalıdır. Şeffaf bir DFS , istemcinin ortamını istemcinin oturum açtığı
siteye getirerek istemci hareketliliğini kolaylaştırır.

• Bir DFS'de şemaları adlandırmak için çeşitli yaklaşımlar vardır . En basit


yaklaşımda, dosyalar, sistem çapında benzersiz bir adı garanti eden ana
bilgisayar adları ve yerel adlarının bir kombinasyonu ile adlandırılır. NFS
tarafından popüler hale getirilen başka bir yaklaşım, uzak dizinleri yerel dizinlere
eklemek için bir araç sağlar, böylece tutarlı bir dizin görünümü verir.
ağaç.

• 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

770 Bölüm 19 Ağlar ve Dağıtılmış Sistemler

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.

a. Dağıtılmış bir sistemdeki olası üç arıza türünü listeleyin.


b. Listenizdeki girişlerden hangilerinin merkezi bir sistem için de geçerli
olduğunu belirtin.

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.

B. aşağı iner. b. A ve B arasındaki


bağlantı azalır.
c. B aşırı derecede aşırı yüklenmiştir ve tepki süresi normalden 100 kat
daha uzundur.

Cevabınızın dağıtılmış sistemlerde kurtarma için ne gibi etkileri var?

[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.

Lustre hakkında daha fazla bilgi edinmek için bkz . http://lustre.org.


Machine Translated by Google

bibliyografya 771

bibliyografya

[Callaghan (2000)] B. Callaghan, NFS Illustrated, Addison-Wesley (2000).

[Comer (2000)] D. Comer, TCP/IP ile İnternet Çalışması, Cilt I, Dördüncü Baskı,
Prentice Salonu (2000).

[Fall ve Stevens (2011)] K. Fall ve R. Stevens, TCP/IP Illustrated, Cilt 1: The


Protokoller, İkinci Baskı, John Wiley and Sons (2011).
[Ghemawat et al. (2003)] S. Ghemawat, H. Gobioff ve S.-T. Leung, “Google Dosya
Sistemi”, İşletim Sistemleri İlkeleri Üzerine ACM Sempozyumu Tutanakları (2003).

[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).

[Peterson ve Davie (2012)] LL Peterson ve BS Davie, Bilgisayar Ağları:


Bir Sistem Yaklaşımı, Beşinci Baskı, Morgan Kaufmann (2012).

[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).

[Stevens (1995)] R. Stevens, TCP/IP Illustrated, Cilt 2: The Implementation, Addison-Wesley


(1995).
Machine Translated by Google

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.12 Ad sunucuları hiyerarşik bir şekilde düzenlenmiştir. Hiyerarşik bir organizasyon


kullanmanın amacı nedir?

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.

19.14 Şekil 19.4'teki programı çalıştırınız ve IP adreslerini belirleyiniz.


aşağıdaki ana bilgisayar

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.

• Bir üniversite laboratuvarında öğrenci dosyalarının

barındırılması. • Hubble teleskobu tarafından gönderilen

verilerin işlenmesi. • Bir ev sunucusundan birden fazla cihazla veri paylaşımı.

19.20 OpenAFS ve NFS'nin aşağıdakileri sağlayıp sağlamadığını tartışın: (a) konum


şeffaflığı ve (b) konum bağımsızlığı.

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

Bu bölüm, Linux işletim sisteminin derinlemesine bir incelemesini sunar.


Eksiksiz, gerçek bir sistemi inceleyerek, tartıştığımız kavramların hem birbirleriyle
hem de uygulamayla nasıl ilişkili olduğunu görebiliriz.
Linux, son birkaç on yılda popülerlik kazanan, cep telefonları kadar küçük ve
odayı dolduran süper bilgisayarlar kadar büyük cihazlara güç sağlayan UNIX'in
bir çeşididir . Bu bölümde, Linux'un tarihçesine ve gelişimine bakacağız ve
Linux'un sunduğu kullanıcı ve programcı arayüzlerini, yani UNIX geleneğine
büyük ölçüde borçlu olan arayüzleri ele alacağız. Ayrıca bu arayüzlerin tasarımını
ve uygulamasını tartışıyoruz. Linux hızla gelişen bir işletim sistemidir. Bu bölüm,
2017'de piyasaya sürülen Linux 4.12 çekirdeğindeki gelişmeleri açıklamaktadır.

BÖLÜM HEDEFLERİ

• Linux'un türetildiği UNIX işletim sisteminin tarihini ve Linux tasarımının dayandığı


ilkeleri keşfedin .
• Linux sürecini ve iş parçacığı modellerini inceleyin ve Linux'un nasıl
iş parçacıklarını programlar ve süreçler arası iletişim sağlar.
• Linux'ta bellek yönetimine bakın. • Linux'un
dosya sistemlerini nasıl uyguladığını ve G/Ç cihazlarını nasıl yönettiğini keşfedin .

20.1 Linux Geçmişi

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.

Temel Linux sistemi, uygulamalar ve kullanıcı programlama için standart bir


ortamdır, ancak bir bütün olarak mevcut işlevselliği yönetmek için herhangi bir
standart aracı zorlamaz. Linux olgunlaştıkça, Linux sisteminin üzerine başka bir
işlevsellik katmanına ihtiyaç duyuldu. Bu ihtiyaç çeşitli Linux dağıtımları tarafından
karşılanmıştır. Bir Linux dağıtımı , Linux sisteminin tüm standart bileşenlerini ve
ayrıca Linux'un ilk kurulumunu ve sonraki yükseltmesini basitleştirmek ve sistemdeki
diğer paketlerin kurulumunu ve kaldırılmasını yönetmek için bir dizi yönetim aracı
içerir. Modern bir dağıtım ayrıca tipik olarak dosya sistemlerinin yönetimi, kullanıcı
hesaplarının oluşturulması ve yönetimi, ağların yönetimi, web tarayıcıları, kelime
işlemcileri vb. için araçlar içerir.

20.1.1 Linux Çekirdeği

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

dosyaları takas etmek için sayfalamayı ve rastgele dosyaların bellek eşlemesini


desteklemek için tüm bellek alt sistemi (ancak 1.0'da yalnızca salt okunur bellek eşlemesi
uygulandı).
Bu sürüme bir dizi ekstra donanım desteği dahil edilmiştir. Hala Intel PC
platformuyla sınırlı olmasına rağmen , donanım desteği, disket ve CD-ROM aygıtlarının
yanı sıra ses kartları, çeşitli fareler ve uluslararası klavyeleri içerecek şekilde büyümüştü.
80387 matematik yardımcı işlemcisi olmayan 80386 kullanıcı için çekirdekte kayan nokta
öykünmesi sağlandı. Paylaşılan bellek, semaforlar ve mesaj kuyrukları dahil olmak üzere
System V UNIX tarzı süreçler arası iletişim (IPC) uygulandı.

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.

20.1.2 Linux Sistemi


Daha önce belirttiğimiz gibi, Linux çekirdeği Linux projesinin çekirdeğini oluşturur,
ancak diğer bileşenler eksiksiz bir Linux işletim sistemini oluşturur. Linux çekirdeği
tamamen özel olarak Linux projesi için sıfırdan yazılmış kodlardan oluşurken, Linux
sistemini oluşturan destekleyici yazılımların çoğu Linux'a özel değildir, UNIX benzeri
işletim sistemlerinde ortaktır. Özellikle Linux, Berkeley'in BSD işletim sisteminin,
MIT'nin X Pencere Sisteminin ve Özgür Yazılım Vakfı'nın GNU projesinin bir parçası
olarak geliştirilen birçok aracı kullanır.

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.

Bir bütün olarak Linux sistemi, belirli bileşenlerin bütünlüğünü koruma


sorumluluğuna sahip küçük gruplar veya bireylerle İnternet üzerinden işbirliği yapan
gevşek bir geliştiriciler ağı tarafından sürdürülür. Az sayıda genel İnternet dosya
aktarım protokolü (FTP) arşiv sitesi, bu bileşenler için fiili standart depolar olarak
işlev görür. Dosya Sistemi Hiyerarşisi
20.1 Linux Geçmişi 779
Machine Translated by Google

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.

20.1.3 Linux Dağıtımları

Teorik olarak herkes, gerekli sistem bileşenlerinin en son revizyonlarını ftp


sitelerinden alıp derleyerek bir Linux sistemi kurabilir. Linux'un ilk günlerinde, bir
Linux kullanıcısının yapması gereken tam olarak buydu. Ancak Linux olgunlaştıkça,
çeşitli kişiler ve gruplar, kolay kurulum için standart, önceden derlenmiş paket setleri
sağlayarak bu işi daha az zahmetli hale getirmeye çalıştılar.

Bu koleksiyonlar veya dağıtımlar, temel Linux sisteminden çok daha fazlasını


içerir. Bunlar tipik olarak, haber sunucuları, web tarayıcıları, metin işleme ve
düzenleme araçları ve hatta oyunlar gibi birçok yaygın UNIX aracının önceden
derlenmiş ve kuruluma hazır paketlerinin yanı sıra ekstra sistem kurulum ve yönetim
yardımcı programlarını içerir .
İlk dağıtımlar, tüm dosyaları uygun yerlere açmanın bir yolunu sağlayarak bu
paketleri yönetti. Bununla birlikte, modern dağıtımların önemli katkılarından biri,
gelişmiş paket yönetimidir. Günümüzün Linux dağıtımları, paketlerin zahmetsizce
kurulmasına, yükseltilmesine veya kaldırılmasına izin veren bir paket izleme
veritabanı içerir.
Linux'un ilk günlerine dayanan SLS dağıtımı, eksiksiz bir dağıtım olarak tanınan
ilk Linux paketleri koleksiyonuydu . Tek bir varlık olarak kurulabilmesine rağmen, SLS
artık Linux dağıtımlarından beklenen paket yönetim araçlarından yoksundu.
Slackware dağıtımı , aynı zamanda zayıf paket yönetimine sahip olmasına rağmen,
genel kalitede büyük bir gelişmeyi temsil ediyordu. Aslında, hala Linux topluluğunda
en yaygın olarak yüklenen dağıtımlardan biridir.

Slackware'in piyasaya sürülmesinden bu yana, birçok ticari ve ticari olmayan


Linux dağıtımı kullanıma sunuldu. Red Hat ve Debian özellikle popüler dağıtımlardır;
ilki ticari bir Linux destek şirketinden, ikincisi ise özgür yazılım Linux topluluğundan
gelir. Linux'un ticari olarak desteklenen diğer sürümleri, Canonical ve SuSE'den
dağıtımları ve diğerlerini içerir. Dolaşımda hepsini burada listeleyemeyeceğimiz
kadar çok Linux dağıtımı var. Ancak dağıtımların çeşitliliği, Linux dağıtımlarının
uyumlu olmasını engellemez. RPM paketi dosya formatı , dağıtımların çoğunluğu
tarafından kullanılır veya en azından anlaşılır ve bu formatta dağıtılan ticari
uygulamalar, RPM dosyalarını kabul edebilen herhangi bir dağıtıma kurulabilir ve
çalıştırılabilir .

20.1.4 Linux Lisanslama


Linux çekirdeği, şartları Özgür Yazılım Vakfı tarafından belirlenen GNU Genel Kamu
Lisansı'nın (GPL) 2.0 sürümü altında dağıtılır.
Linux, kamuya açık bir yazılım değildir. Kamu malı , yazarların yazılımdaki telif
haklarından feragat ettikleri anlamına gelir, ancak Linux kodundaki telif hakları hala
kodun çeşitli yazarlarına aittir. Linux özgür bir yazılımdır, nasıl-
Machine Translated by Google

780 Bölüm 20 Linux Sistemi


insanların onu kopyalayabilmeleri, değiştirebilmeleri, istedikleri şekilde kullanabilmeleri ve kendi
kopyalarını başkalarına verebilmeleri (veya satabilmeleri) anlamında.
Linux'un lisanslama koşullarının ana anlamı, Linux kullanan veya Linux'un bir
türevini (meşru bir uygulama) oluşturan hiç kimsenin kaynak kodunu eklemeden
türevi dağıtamamasıdır. GPL kapsamında yayınlanan yazılımlar, yalnızca ikili bir ürün
olarak yeniden dağıtılamaz. GPL kapsamındaki herhangi bir bileşeni içeren bir yazılım
yayınlarsanız, GPL kapsamında kaynak kodunu herhangi bir ikili dağıtımla birlikte
kullanılabilir hale getirmelisiniz. (Bu kısıtlama, ikili yazılımları alan herkese makul bir
dağıtım ücreti karşılığında kaynak kodu alma fırsatı verildiği sürece, ikili yazılım
dağıtımları yapmayı ve hatta satmayı bile yasaklamaz.)

20.2 Tasarım İlkeleri


Genel tasarımında Linux, diğer geleneksel, mikro çekirdek olmayan UNIX
uygulamalarına benzer. Tam bir UNIX uyumlu araç setine sahip, çok kullanıcılı,
öncelikli olarak çok görevli bir sistemdir. Linux'un dosya sistemi, geleneksel UNIX
semantiğine bağlıdır ve standart UNIX ağ modeli tamamen uygulanmaktadır. Linux
tasarımının iç detayları, bu işletim sisteminin gelişim tarihinden büyük ölçüde
etkilenmiştir.
Linux çok çeşitli platformlarda çalışsa da, başlangıçta yalnızca PC mimarisinde
geliştirilmiştir. Bu erken geliştirmenin büyük bir kısmı, iyi finanse edilen geliştirme
veya araştırma tesislerinden ziyade bireysel meraklılar tarafından gerçekleştirildi, bu
nedenle Linux, en başından beri sınırlı kaynaklardan mümkün olduğunca fazla
işlevsellik elde etmeye çalıştı. Bugün Linux, yüzlerce gigabayt ana belleğe ve birçok
terabayt disk alanına sahip çok işlemcili bir makinede mutlu bir şekilde çalışabilir,
ancak yine de 16 MB RAM'in altında yararlı bir şekilde çalışabilir.

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.

Hem programcıya hem de kullanıcıya standart arayüzler sağladığı için Linux,


UNIX'e aşina olan herkese birkaç sürpriz sunar. Bu arayüzleri burada
detaylandırmıyoruz. BSD'nin programcı arayüzü (Kısım C.3) ve kullanıcı arayüzü
(Kısım C.4) ile ilgili bölümler, Linux için eşit derecede iyi uygulanır. Ancak varsayılan
olarak, Linux programlama arayüzü BSD davranışından ziyade SVR4 UNIX semantiğine
bağlıdır. İki davranışın önemli ölçüde farklılık gösterdiği yerlerde BSD semantiğini
uygulamak için ayrı bir kitaplık seti mevcuttur .
Machine Translated by Google

20.2 Tasarım İlkeleri 781

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.

20.2.1 Bir Linux Sisteminin Bileşenleri


Linux sistemi, çoğu geleneksel UNIX uygulamasına uygun olarak üç ana kod gövdesinden
oluşur :

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.

2. Sistem kitaplıkları. Sistem kitaplıkları, uygulamaların çekirdekle etkileşime girebileceği


standart bir işlevler kümesi tanımlar. Bu işlevler, çekirdek kodunun tüm
ayrıcalıklarına ihtiyaç duymayan işletim sistemi işlevlerinin çoğunu uygular. En
önemli sistem kütüphanesi, libc olarak bilinen C kütüphanesidir . Standart C
kitaplığını sağlamanın yanı sıra libc , Linux sistem çağrı arabiriminin kullanıcı modu
tarafının yanı sıra diğer kritik sistem düzeyinde arabirimleri de uygular.

3. Sistem yardımcı programları. Sistem yardımcı programları, bireysel, özel yönetim


görevlerini gerçekleştiren programlardır. Bazı sistem yardımcı programları,
sistemin bazı yönlerini başlatmak ve yapılandırmak için yalnızca bir kez çağrılır.
UNIX terminolojisinde arka plan programı olarak bilinen diğerleri , gelen ağ
bağlantılarına yanıt verme, terminallerden oturum açma isteklerini kabul etme ve
günlük dosyalarını güncelleme gibi görevleri yerine getirerek kalıcı olarak çalışır.

Ş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

sistem paylaşımlı kitaplıklar

Linux çekirdeği

yüklenebilir çekirdek modülleri

Şekil 20.1 Linux sisteminin bileşenleri.


782 Bölüm
Machine Translated by Google 20 Linux Sistemi
bilgisayarın tüm fiziksel kaynaklarına tam erişim ile. Linux, bu ayrıcalıklı moda çekirdek
modu olarak atıfta bulunur . Linux altında, çekirdeğe hiçbir kullanıcı kodu
yerleştirilmemiştir. Çekirdek modunda çalıştırılması gerekmeyen herhangi bir işletim
sistemi destek kodu, sistem kitaplıklarına yerleştirilir ve kullanıcı modunda çalışır.
Çekirdek kipinden farklı olarak, kullanıcı kipi yalnızca sistemin denetimli bir alt kümesine eriş
kaynaklar.

Ç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.

Sistem kitaplıkları birçok türde işlevsellik sağlar. En basit düzeyde, uygulamaların


Linux çekirdeğine sistem çağrıları yapmasına izin verirler. Bir sistem çağrısı yapmak,
kontrolün ayrıcalıksız kullanıcı modundan ayrıcalıklı çekirdek moduna aktarılmasını
içerir; bu aktarımın detayları mimariden mimariye değişmektedir. Kütüphaneler, sistem
çağrısı argümanlarını toplamaya ve gerekirse bu argümanları sistem çağrısı yapmak
için gerekli olan özel formda düzenlemeye özen gösterir.

Kütüphaneler ayrıca temel sistem çağrılarının daha karmaşık versiyonlarını da


sağlayabilir. Örneğin, C dilinin arabelleğe alınmış dosya işleme işlevlerinin tümü sistem
kitaplıklarında uygulanır ve temel çekirdek sistem çağrılarından daha gelişmiş dosya
G/Ç denetimi sağlar. Kitaplıklar ayrıca, sıralama algoritmaları, matematiksel işlevler ve
dizi işleme rutinleri gibi sistem çağrılarına hiç uymayan rutinler sağlar. UNIX veya
POSIX uygulamalarının çalışmasını desteklemek için gerekli tüm işlevler sistem
kitaplıklarında uygulanır.
20.3 Çekirdek Modülleri 783
Machine Translated by Google

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).

20.3 Çekirdek Modülleri

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:

1. Modül yönetim sistemi , modüllerin belleğe yüklenmesine ve çekirdeğin geri kalanıyla


iletişim kurmasına izin verir.

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.

20.3.1 Modül Yönetimi Bir modülü


yüklemek, onun ikili içeriğini çekirdek belleğe yüklemekten fazlasını
gerektirir. Sistem ayrıca, modülün çekirdek sembollerine veya giriş
noktalarına yaptığı tüm referansların, çekirdeğin adres alanındaki doğru
konumları gösterecek şekilde güncellendiğinden emin olmalıdır. Linux bu
referans güncellemesiyle modül yükleme işini iki ayrı bölüme ayırarak
ilgilenir: çekirdek belleğindeki modül kodu bölümlerinin yönetimi ve
modüllerin referans vermesine izin verilen sembollerin işlenmesi.
Linux, çekirdekte dahili bir sembol tablosu tutar. Bu sembol tablosu, çekirdeğin
derlenmesi sırasında çekirdekte tanımlanan tam sembol setini içermez; bunun
yerine, bir sembol açıkça dışa aktarılmalıdır. Dışa aktarılan semboller seti, bir
modülün çekirdek ile etkileşime girebileceği iyi tanımlanmış bir arayüz oluşturur.

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.

Modülün yüklenmesi iki aşamada gerçekleştirilir. İlk olarak, modül yükleyici


yardımcı programı, çekirdekten modül için sürekli bir sanal çekirdek belleği alanı
ayırmasını ister. Çekirdek, ayrılan belleğin adresini döndürür ve yükleyici yardımcı
programı, modülün makine kodunu doğru yükleme adresine yeniden yerleştirmek
için bu adresi kullanabilir. İkinci bir sistem çağrısı daha sonra modülü ve yeni
modülün dışa aktarmak istediği herhangi bir sembol tablosunu çekirdeğe iletir.
Modülün kendisi şimdi daha önce ayrılmış alana kelimesi kelimesine kopyalanır ve
çekirdeğin sembol tablosu, henüz yüklenmemiş diğer modüller tarafından olası
kullanım için yeni sembollerle güncellenir.
Son modül yönetimi bileşeni, modül talep edendir. Çekirdek, bir modül yönetim
programının bağlanabileceği bir iletişim arabirimi tanımlar. Kurulan bu bağlantıyla
çekirdek, bir süreç o anda yüklü olmayan bir aygıt sürücüsü, dosya sistemi veya ağ
hizmeti istediğinde yönetim sürecini bilgilendirecek ve yöneticiye bu hizmeti yükleme
fırsatı verecektir. Modül yüklendikten sonra orijinal hizmet talebi tamamlanacaktır.
Yönetici işlemi, dinamik olarak yüklenmiş bir modülün hala kullanımda olup
olmadığını görmek için çekirdeği düzenli olarak sorgular ve artık aktif olarak ihtiyaç
duyulmadığında bu modülü kaldırır.
Machine Translated by Google

20.3 Çekirdek Modülleri 785

20.3.2 Sürücü Kaydı

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:

• Aygıt sürücüleri. Bu sürücüler arasında karakter aygıtları (yazıcılar, terminaller ve fareler


gibi), blok aygıtları (tüm disk sürücüleri dahil) ve ağ arabirim aygıtları bulunur.

• 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.

• İkili biçim. Bu biçim, tanıma, yükleme ve


yeni bir yürütülebilir dosya türü yürütme.

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).

20.3.3 Çatışma Çözümü

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:

• Modüllerin donanım kaynaklarına erişim konusunda çakışmasını önlemek için •

Otomatik algılamaların (aygıt yapılandırmasını otomatik olarak algılayan aygıt sürücüsü


araştırmaları) mevcut aygıt sürücülerine müdahale etmesini önlemek için
Machine Translated by Google

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

Bu amaçlar için, çekirdek tahsis edilmiş donanım kaynaklarının listelerini tutar.


PC'de sınırlı sayıda olası G /Ç bağlantı noktası (donanım G/Ç adres alanındaki
adresler), kesme hatları ve DMA kanalları bulunur. Herhangi bir aygıt sürücüsü böyle
bir kaynağa erişmek istediğinde, önce kaynağı çekirdek veritabanıyla ayırması
beklenir. Bu gereksinim, sistem yöneticisinin herhangi bir noktada hangi kaynakların
hangi sürücü tarafından tam olarak tahsis edildiğini belirlemesine olanak tanır.

Bir modülün, kullanmayı umduğu tüm donanım kaynaklarını önceden ayırmak


için bu mekanizmayı kullanması beklenir. Kaynak mevcut olmadığı veya halihazırda
kullanımda olduğu için rezervasyon reddedilirse, nasıl devam edileceğine modül
karar verir. Başlatma girişiminde başarısız olabilir ve devam edemezse kaldırılmasını
isteyebilir veya alternatif donanım kaynaklarını kullanarak devam edebilir.

20.4 Süreç Yönetimi

İş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.

20.4.1 fork() ve exec() Süreç Modeli UNIX süreç yönetiminin

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

20.4 Süreç Yönetimi 787

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.

20.4.1.1 Süreç Kimliği Bir

süreç kimliği temel olarak aşağıdaki öğelerden oluşur:

• İş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.

• Kişilik. İşlem kişilikleri geleneksel olarak UNIX sistemlerinde bulunmaz , ancak


Linux altında her işlemin belirli sistem çağrılarının anlamını biraz değiştirebilen
ilişkili bir kişilik tanımlayıcısı vardır. Kişilikler, sistem çağrılarının belirli UNIX
çeşitleriyle uyumlu olmasını istemek için öncelikle öykünme kitaplıkları tarafından
kullanılır.

• 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.

20.4.1.2 Süreç Ortamı

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.

20.4.1.3 Süreç İçeriği

İşlem kimliği ve ortam özellikleri genellikle bir işlem oluşturulduğunda ayarlanır ve bu


işlem çıkana kadar değiştirilmez. Bir süreç, gerekirse kimliğinin bazı yönlerini değiştirmeyi
seçebilir veya çevresini değiştirebilir. Buna karşılık, süreç bağlamı, herhangi bir zamanda
çalışan programın durumudur; sürekli değişir. Süreç bağlamı aşağıdaki bölümleri içerir:

• Zamanlama bağlamı. Süreç bağlamının en önemli kısmı, zamanlama bağlamıdır -


zamanlayıcının süreci askıya alması ve yeniden başlatması için ihtiyaç duyduğu bilgiler.
Bu bilgiler, tüm sürecin kayıtlarının kaydedilmiş kopyalarını içerir. Kayan nokta kayıtları
ayrı olarak depolanır ve yalnızca gerektiğinde geri yüklenir. Bu nedenle, kayan nokta
aritmetiği kullanmayan işlemler, bu durumu kaydetme ek yüküne maruz kalmaz.
Programlama bağlamı aynı zamanda zamanlama önceliği ve sürece teslim edilmeyi
bekleyen bekleyen sinyaller hakkında bilgi içerir. Zamanlama bağlamının önemli bir
parçası, çekirdek modu kodu tarafından kullanılmak üzere ayrılmış ayrı bir çekirdek
belleği alanı olan işlemin çekirdek yığınıdır. İşlem yürütülürken meydana gelen hem
sistem çağrıları hem de kesintiler bu yığını kullanır. • Muhasebe. Çekirdek, her bir
işlem tarafından tüketilen kaynaklar ve o ana kadar tüm ömrü boyunca işlem

tarafından tüketilen toplam kaynaklar hakkında muhasebe bilgilerini tutar.

• 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

20.4 Süreç Yönetimi 789

• 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.

20.4.2 Süreçler ve Konular

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

CLONE_FS Dosya sistemi bilgileri paylaşılır.

CLONE_VM Aynı bellek alanı paylaşılır.

CLONE_SIGHAND Sinyal işleyiciler paylaşılır.


CLONE_FILES Açık dosya kümesi paylaşılır.

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.

klon() sistem çağrısının argümanları, ona hangi alt bağlamların kopyalanacağını


ve hangilerinin paylaşılacağını söyler. Yeni sürece her zaman yeni bir kimlik ve yeni
bir zamanlama bağlamı verilir - bunlar bir Linux sürecinin temelleridir. Bununla
birlikte, iletilen argümanlara göre, çekirdek, ebeveynin kopyaları olacak şekilde
başlatılan yeni alt bağlam veri yapıları oluşturabilir veya ebeveyn tarafından kullanılan
aynı alt bağlam veri yapılarını kullanmak için yeni süreci kurabilir.
790 Bölüm 20 Linux Sistemi
Machine Translated by Google

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.

Normalde, programlamayı kullanıcı dizilerinin çalıştırılması ve kesintiye uğratılması


olarak düşünürüz, ancak programlamanın bir başka yönü de Linux'ta önemlidir: çeşitli
çekirdek görevlerinin çalıştırılması. Çekirdek görevleri, hem çalışan bir iş parçacığı tarafından
talep edilen görevleri hem de Linux'un G/Ç alt sistemi tarafından oluşturulan görevler gibi,
çekirdeğin kendisi adına dahili olarak yürütülen görevleri kapsar.

20.5.1 Diş Planlaması


Linux'un iki ayrı süreç zamanlama algoritması vardır. Biri, birden çok iş parçacığı arasında
adil, önleyici zamanlama için bir zaman paylaşımlı algoritmadır. Diğeri, mutlak önceliklerin
adaletten daha önemli olduğu gerçek zamanlı görevler için tasarlanmıştır.

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.

CFS , geleneksel UNIX süreç planlayıcısından önemli bir sapmadır.


İkincisinde, zamanlama algoritmasındaki temel değişkenler öncelik ve zaman dilimidir.
Zaman dilimi , bir iş parçacığının sağladığı zamanın uzunluğudur - işlemcinin dilimi -.
Geleneksel UNIX sistemleri, süreçlere, belki de yüksek veya düşük öncelikli süreçler için bir
artış veya ceza ile sabit bir zaman dilimi verir.
Machine Translated by Google 20.5 Planlama 791

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.

Peki ya 1.000 iş parçacığımız olsaydı? Az önce açıklanan prosedürü izleseydik, her


bir iş parçacığı 1 mikrosaniye boyunca çalışırdı. Geçiş maliyetleri nedeniyle, iş
parçacıklarının bu kadar kısa süreler için programlanması verimsizdir. Sonuç olarak, CFS
ikinci bir yapılandırılabilir değişkene, yani herhangi bir iş parçacığının işlemciye tahsis
edildiği minimum süre olan minimum ayrıntı düzeyine dayanır . Hedef gecikme
süresinden bağımsız olarak tüm iş parçacıkları en azından minimum ayrıntı düzeyi için
çalışacaktır. Bu şekilde, CFS , çalıştırılabilir iş parçacıklarının sayısı önemli ölçüde
arttığında, geçiş maliyetlerinin kabul edilemez ölçüde artmamasını sağlar. Bunu
yaparken, adalet girişimlerini ihlal ediyor. Ancak olağan durumda, çalıştırılabilir iş
parçacığı sayısı makul kalır ve hem adalet hem de geçiş maliyetleri maksimize edilir.

Adil çizelgelemeye geçişle birlikte CFS , geleneksel UNIX süreç çizelgeleyicilerinden


çeşitli şekillerde farklı davranır. En önemlisi, gördüğümüz gibi, CFS statik zaman dilimi
kavramını ortadan kaldırır. Bunun yerine, her iş parçacığı işlemcinin zamanının bir oranını
alır. Bu tahsisatın ne kadar süreceği, başka kaç tane iş parçacığının çalıştırılabilir olduğuna
bağlıdır. Bu yaklaşım, öncelikleri önleyici, önceliğe dayalı zamanlama algoritmalarının
doğasında bulunan zaman dilimlerine eşlemede birçok sorunu çözer. Klasik UNIX
zamanlayıcısını terk etmeden bu sorunları başka yollarla çözmek elbette mümkündür .
Ancak CFS, mobil cihazlar gibi etkileşimli iş yüklerinde iyi performans gösteren basit bir
algoritma ile sorunları en büyük sunucularda verim performansından ödün vermeden
çözer.
Machine Translated by Google

792 Bölüm 20 Linux Sistemi

20.5.2 Gerçek Zamanlı Planlama


Linux'un gerçek zamanlı zamanlama algoritması, standart zaman paylaşımlı iş parçacıkları
için kullanılan adil zamanlamadan çok daha basittir. Linux, POSIX.1b'nin gerektirdiği iki
gerçek zamanlı zamanlama sınıfını uygular : ilk gelen, ilk hizmet veren (FCFS) ve round-
robin (sırasıyla Kısım 5.3.1 ve Kısım 5.3.3).
Her iki durumda da, her iş parçacığının zamanlama sınıfına ek olarak bir önceliği vardır.
Zamanlayıcı her zaman iş parçacığını en yüksek önceliğe sahip olarak çalıştırır. Eşit önceliğe
sahip iş parçacıkları arasında en uzun süre bekleyen iş parçacığını çalıştırır. FCFS ile
döngüsel zamanlama arasındaki tek fark , FCFS dizilerinin çıkana ya da bloke olana kadar
çalışmaya devam etmesidir, oysa bir döngüsel ardışık iş parçacığı bir süre sonra önlenir ve
zamanlama kuyruğunun sonuna taşınır, bu nedenle eşit önceliğe sahip döngüsel iş
parçacıkları otomatik olarak kendi aralarında zaman paylaşımı yapacaktır.

Linux'un gerçek zamanlı zamanlaması, gerçek zamanlı değil, yumuşaktır. Zamanlayıcı,


gerçek zamanlı iş parçacıklarının göreli öncelikleri hakkında kesin garantiler sunar, ancak
çekirdek, bir iş parçacığı çalıştırılabilir hale geldiğinde gerçek zamanlı bir iş parçacığının ne
kadar hızlı programlanacağı konusunda herhangi bir garanti sunmaz. Buna karşılık, zor bir
gerçek zamanlı sistem, bir iş parçacığının çalıştırılabilir hale geldiği zaman ile gerçekten
çalıştığı zaman arasında minimum bir gecikmeyi garanti edebilir.

20.5.3 Çekirdek Senkronizasyonu


Çekirdeğin kendi işlemlerini planlama şekli, iş parçacıklarını programlama biçiminden temel
olarak farklıdır. Çekirdek modu yürütme isteği iki şekilde gerçekleşebilir. Çalışan bir
program, bir sistem çağrısı yoluyla açık bir şekilde veya örneğin bir sayfa hatası oluştuğunda
örtük olarak bir işletim sistemi hizmeti talep edebilir. Alternatif olarak, bir aygıt denetleyicisi,
CPU'nun bu kesme için çekirdek tanımlı bir işleyiciyi yürütmeye başlamasına neden olan bir
donanım kesintisi sağlayabilir .

Çekirdeğin sorunu, tüm bu görevlerin aynı dahili veri yapılarına erişmeye


çalışabilmesidir. Bir kesme hizmeti yordamı yürütüldüğünde bir çekirdek görevi bazı veri
yapılarına erişmenin ortasındaysa, bu hizmet yordamı, veri bozulması riski olmadan aynı
verilere erişemez veya bunları değiştiremez.
Bu gerçek, kritik bölümler fikriyle ilgilidir - paylaşılan verilere erişen ve dolayısıyla aynı anda
yürütülmesine izin verilmemesi gereken kod bölümleri. Sonuç olarak, çekirdek
senkronizasyonu, iş parçacığı programlamasından çok daha fazlasını içerir. Çekirdek
görevlerinin paylaşılan verilerin bütünlüğünü ihlal etmeden çalışmasına izin veren bir
çerçeve gereklidir.
2.6 sürümünden önce Linux, önleyici olmayan bir çekirdekti; bu, çekirdek modunda
çalışan bir iş parçacığının önceden alınamayacağı anlamına geliyordu - daha yüksek
öncelikli bir iş parçacığı çalıştırılabilir hale gelse bile. 2.6 sürümü ile Linux çekirdeği
tamamen önleyici hale geldi. Artık, bir görev çekirdekte çalışırken önlenebilir.

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:

tek işlemci çoklu işlemciler

Çekirdek önceliğini devre dışı bırakın. Döndürme kilidi edinin.

Çekirdek önceliğini etkinleştirin. Döndürme kilidini serbest bırakın.

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.

20.5.4 Simetrik Çoklu İşlem Linux 2.0 çekirdeği,

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ı.

üst yarı kesme işleyicileri

alt yarı kesme işleyicileri

çekirdek sistem hizmeti rutinleri (öncelikli)

kullanıcı modu programları (öncelikli)

Şekil 20.2 Kesinti koruma seviyeleri.


Machine Translated by Google

20.6 Bellek Yönetimi 795


20.6Hafıza Yönetimi
Linux altında bellek yönetiminin iki bileşeni vardır. İlki, sayfalar, sayfa grupları ve
küçük RAM blokları gibi fiziksel belleğin ayrılması ve serbest bırakılmasıyla ilgilidir.
İkincisi, çalışan işlemlerin adres alanına bellek eşlenen sanal belleği işler. Bu bölümde,
bu iki bileşeni açıklıyoruz ve ardından bir exec() sistem çağrısına yanıt olarak yeni bir
programın yüklenebilir bileşenlerinin bir işlemin sanal belleğine getirilme
mekanizmalarını inceliyoruz .

20.6.1 Fiziksel Belleğin Yönetimi Belirli donanım kısıtlamaları

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

Bu bölgeler mimariye özgüdür. Örneğin, Intel x86-32 mimarisinde, belirli ISA


(endüstri standardı mimarisi) aygıtları, DMA kullanarak yalnızca 16 MB'lık daha düşük
fiziksel belleğe erişebilir. Bu sistemlerde, ilk 16 MB fiziksel bellek ZONE DMA'yı içerir.
Diğer sistemlerde, belirli cihazlar 64 bit adresleri desteklemesine rağmen yalnızca ilk
4 GB fiziksel belleğe erişebilir. Bu tür sistemlerde, ilk 4 GB fiziksel bellek ZONE
DMA32'yi içerir. ZONE HIGHMEM ("yüksek bellek" için), çekirdek adres alanına
eşlenmemiş fiziksel belleği ifade eder. Örneğin, 32 bit Intel mimarisinde ( 232 , 4
GB'lık bir adres alanı sağlar), çekirdek, adres alanının ilk 896 MB'ına eşlenir ; kalan
belleğe yüksek bellek denir ve ZONE HIGHMEM'den ayrılır . Son olarak, NORMAL
BÖLGE diğer her şeyi içerir - normal, düzenli olarak eşlenen sayfalar. Bir mimarinin
belirli bir bölgeye sahip olup olmadığı, kısıtlamalarına bağlıdır. Intel x86-64 gibi
modern bir 64-bit mimari, küçük bir 16-MB ZONE DMA'ya (eski cihazlar için) ve
belleğinin geri kalanının tamamı ZONE NORMAL'de, "yüksek bellek" olmadan bulunur.

Intel x86-32 mimarisindeki bölgeler ve fiziksel adreslerin ilişkisi Şekil 20.3'te


gösterilmektedir. Çekirdek, aşağıdakiler için ücretsiz sayfaların bir listesini tutar:

alan fiziksel hafıza

ZONE_DMA < 16 MB

ZONE_NORMAL 16 .. 896 MB

ZONE_HIGHMEM > 896 MB

Şekil 20.3 Intel x86-32'de bölgeler ve fiziksel adreslerin ilişkisi.


Machine Translated by Google

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

Şekil 20.4 Buddy sisteminde belleğin bölünmesi.


Machine Translated by Google

20.6 Bellek Yönetimi 797


çekirdek nesneleri önbellekler levhalar

3 KB

nesneler

fiziksel olarak
bitişik sayfalar

7 KB

nesneler

Şekil 20.5 Linux'ta levha ayırıcı.

çekirdek, kmalloc() hizmeti tarafından kullanılan sayfaların listesini tutar . Bellek


tahsisi, uygun listenin belirlenmesini ve listede bulunan ilk boş parçanın alınmasını
veya yeni bir sayfanın tahsis edilmesini ve bölünmesini içerir.
kmalloc() sistemi tarafından talep edilen bellek bölgeleri, ilgili bir kfree() çağrısı ile
açıkça serbest bırakılıncaya kadar kalıcı olarak tahsis edilir ; kmal loc() sistemi , bellek
eksikliklerine yanıt olarak bu bölgeleri yeniden tahsis edemez veya geri alamaz.

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

798 Bölüm 20 Linux Sistemi

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 .

Linux'ta bir levha üç olası durumdan birinde olabilir:

1. Dolu. Döşemedeki tüm nesneler kullanılmış olarak işaretlenir.

2. Boş. Döşemedeki tüm nesneler serbest olarak işaretlenir.

3. Kısmi. Döşeme hem kullanılmış hem de serbest nesnelerden oluşur.

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.

20.6.2 Sanal Bellek Linux sanal

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. .

20.6.2.1 Sanal Bellek Bölgeleri Linux,

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.

20.6.2.2 Sanal Adres Alanının Ömrü Çekirdek iki

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

800 Bölüm 20 Linux Sistemi


çataldan sonra, ebeveyn ve çocuk, adres alanlarında aynı fiziksel bellek sayfalarını
paylaşır.
Kopyalama işlemi özel olarak eşlenen bir sanal bellek bölgesine ulaştığında özel
bir durum oluşur. Bu tür bir bölge içinde üst işlemin yazdığı sayfalar özeldir ve üst
veya alt öğe tarafından bu sayfalarda yapılan sonraki değişiklikler, sayfayı diğer
işlemin adres alanında güncellememelidir. Bu tür bölgeler için sayfa tablosu girdileri
kopyalandığında, bunlar salt okunur olarak ayarlanır ve yazma üzerine kopyalama
için işaretlenir. Hiçbir işlem bu sayfaları değiştirmediği sürece, iki işlem aynı fiziksel
bellek sayfasını paylaşır. Ancak, herhangi bir işlem bir yazma üzerine kopyalama
sayfasını değiştirmeye çalışırsa, sayfadaki referans sayısı kontrol edilir. Sayfa hala
paylaşılıyorsa, süreç sayfanın içeriğini yepyeni bir fiziksel bellek sayfasına kopyalar
ve bunun yerine onun kopyasını kullanır. Bu mekanizma, özel veri sayfalarının
mümkün olduğunda süreçler arasında paylaşılmasını ve kopyaların yalnızca kesinlikle
gerekli olduğunda yapılmasını sağlar.

20.6.2.3 Değiştirme ve Sayfalama

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 .

Disk belleği mekanizması, hem tahsis edilmiş takas cihazlarına ve bölümlere


hem de normal dosyalara disk belleği destekler, ancak dosya sisteminin ek yükü
nedeniyle bir dosyaya geçiş önemli ölçüde daha yavaştır. Bloklar, her zaman fiziksel
bellekte tutulan kullanılmış blokların bir bit haritasına göre takas cihazlarından tahsis
edilir. Ayırıcı, gelişmiş performans için sürekli ikincil depolama blokları çalıştırmalarına
sayfalar yazmaya çalışmak için bir sonraki uygun algoritmayı kullanır. Ayırıcı, modern
işlemlerde sayfa tablolarının bir özelliğini kullanarak bir sayfanın depoya çağrıldığını
kaydeder: sayfa tablosu girişinin sayfa mevcut değil biti ayarlanır ve sayfa tablosu
girişinin geri kalanına izin verilir. sayfanın nerede olduğunu belirten bir dizinle
doldurulacak
yazılı.
Machine Translated by Google

20.6 Bellek Yönetimi 801

20.6.2.4 Çekirdek Sanal Belleği


Linux, kendi dahili kullanımı için her işlemin sanal adres alanının sabit, mimariye
bağlı bir bölgesini ayırır. Bu çekirdek sayfalarıyla eşleşen sayfa tablosu girişleri
korumalı olarak işaretlenir, böylece işlemci kullanıcı modunda çalışırken sayfalar
görünmez veya değiştirilemez. Bu çekirdek sanal bellek alanı iki bölge içerir.
Birincisi, sistemdeki mevcut her fiziksel bellek sayfasına sayfa tablosu
referanslarını içeren statik bir alandır, böylece çekirdek kodu çalıştırıldığında
fiziksel adreslerden sanal adreslere basit bir çeviri gerçekleşir. Çekirdeğin
çekirdeği, normal sayfa ayırıcı tarafından ayrılan tüm sayfalarla birlikte bu
bölgede bulunur.
Çekirdeğin ayrılmış adres alanının geri kalanı herhangi bir özel amaç için
ayrılmamıştır. Bu adres aralığındaki sayfa tablosu girişleri, çekirdek tarafından
diğer bellek alanlarını işaret edecek şekilde değiştirilebilir. Çekirdek, çekirdek
kodunun bu sanal belleği kullanmasına izin veren bir çift olanak sağlar.
vmalloc() işlevi , fiziksel olarak bitişik olmayabilecek rastgele sayıda fiziksel bellek
sayfasını sanal olarak bitişik çekirdek belleğinin tek bir bölgesine ayırır. vremap
() işlevi, bir aygıt sürücüsü tarafından bellek eşlemeli G/Ç için kullanılan bir bellek
alanına işaret etmek üzere bir dizi sanal adres eşler.

20.6.3 Kullanıcı Programlarının Yürütülmesi ve Yüklenmesi


Linux çekirdeğinin kullanıcı programlarını yürütmesi, exec() sistem çağrısına
yapılan bir çağrıyla tetiklenir. Bu exec() çağrısı, çekirdeğe, mevcut işlem içinde
yeni bir programı çalıştırması için komut verir ve yeni programın ilk bağlamı ile
mevcut yürütme bağlamının tamamen üzerine yazar. Bu sistem hizmetinin ilk işi,
çağıran işlemin yürütülmekte olan dosya üzerinde izin haklarına sahip olduğunu
doğrulamaktır. Bu konu kontrol edildikten sonra, çekirdek programı çalıştırmaya
başlamak için bir yükleyici rutini başlatır. Yükleyici mutlaka program dosyasının
içeriğini fiziksel belleğe yüklemez, ancak en azından programın eşlenmesini
sanal belleğe ayarlar.
Linux'ta yeni bir program yüklemek için tek bir rutin yoktur. Bunun yerine,
Linux olası yükleyici işlevleri tablosunu tutar ve bu tür her bir işleve, bir exec()
sistem çağrısı yapıldığında verilen dosyayı yüklemeyi deneme fırsatı verir . Bu
yükleyici tablosunun ilk nedeni, 1.0 ve 1.2 çekirdeklerinin sürümleri arasında,
Linux'un ikili dosyalarının standart biçiminin değiştirilmiş olmasıdır. Daha eski
Linux çekirdekleri , ikili dosyalar için a.out biçimini anlıyordu -eski UNIX
sistemlerinde yaygın olan nispeten basit bir biçim. Daha yeni Linux sistemleri ,
şimdi en güncel UNIX uygulamaları tarafından desteklenen daha modern ELF
biçimini kullanır. ELF , esneklik ve genişletilebilirlik dahil olmak üzere a.out'a göre
bir dizi avantaja sahiptir . Bir ELF ikili dosyasına (örneğin, fazladan hata ayıklama
bilgisi eklemek için) yükleyici rutinlerinin karıştırılmasına neden olmadan yeni
bölümler eklenebilir . Linux, birden çok yükleyici rutininin kaydedilmesine izin
vererek, tek bir çalışan sistemde ELF ve a.out ikili biçimlerini kolayca destekleyebilir .

Bölüm 20.6.3.1 ve Bölüm 20.6.3.2'de, yalnızca ELF biçimli ikili dosyaların


yüklenmesi ve çalıştırılmasına odaklanıyoruz. a.out ikili dosyalarını yükleme
prosedürü daha basittir ancak operasyonda benzerdir.
Machine Translated by Google

802 Bölüm 20 Linux Sistemi


20.6.3.1 Programların Belleğe Eşlenmesi Linux

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.

çekirdek sanal bellek kullanıcı modu kodu için görünmez bellek

yığın

bellek eşlemeli bölge bellek

eşlemeli bölge bellek eşlemeli

bölge

'brk' işaretçisi
çalışma zamanı verileri

başlatılmamış veri
başlatılmış veri

program metni

yasak bölge

Şekil 20.6 ELF programları için bellek düzeni.


20.7 Dosya Sistemleri 803
Machine Translated by Google

Bu sabit boyutlu bölgelerin hemen ötesinde, programların çalışma zamanında


tahsis edilen verileri tutmak için gerektiğinde genişletebileceği değişken boyutlu bir
bölge vardır. Her işlemin, bu veri bölgesinin geçerli kapsamına işaret eden bir işaretçisi
( brk) vardır ve işlemler, brk bölgesini tek bir sistem çağrısı — sbrk() ile genişletebilir
veya daraltabilir.
Bu eşlemeler ayarlandıktan sonra yükleyici, ELF başlığında kaydedilen başlangıç
noktası ile sürecin program-sayıcı kaydını başlatır ve süreç programlanabilir.

20.6.3.2 Statik ve Dinamik Bağlama

Program yüklendikten ve çalışmaya başladıktan sonra, ikili dosyanın tüm gerekli


içeriği işlemin sanal adres alanına yüklenir. Ancak, çoğu programın sistem
kitaplıklarından işlevleri çalıştırması gerekir ve bu kitaplık işlevlerinin de yüklenmesi
gerekir. En basit durumda, gerekli kitaplık işlevleri doğrudan programın yürütülebilir
ikili dosyasına gömülür. Böyle bir program kitaplıklarına statik olarak bağlıdır ve statik
olarak bağlantılı yürütülebilir dosyalar yüklenir yüklenmez çalışmaya başlayabilir.

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.

20.7 Dosya Sistemleri

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 :

• Bir inode nesnesi , tek bir dosyayı temsil eder. • Bir

fil nesnesi , açık bir dosyayı temsil eder. • Bir süper blok

nesnesi , tüm dosya sistemini temsil eder. • Bir dişçi nesnesi ,

bireysel bir dizin girişini temsil eder.

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:

• int open(. . .) — Bir dosya açar. • ssize t


read(. . .) — Bir dosyadan okuyun.

• ssize t write(. . .) — Bir dosyaya yazın.

• int mmap(. . .) — Bir dosyayı hafızada eşler.

Dosya nesnesinin tam tanımı, /usr/include/linux/fs.h dosyasında bulunan struct dosya


işlemlerinde belirtilir.
Dosya nesnesinin tanımında belirtilen her işlevi uygulamak için dosya nesnesinin bir
uygulaması (belirli bir dosya türü için) gereklidir.
VFS yazılım katmanı , tam olarak ne tür bir nesneyle uğraştığını önceden bilmek
zorunda kalmadan, nesnenin işlev tablosundan uygun işlevi çağırarak dosya sistemi
nesnelerinden biri üzerinde bir işlem gerçekleştirebilir. VFS , bir düğümün ağ bağlantılı bir
dosyayı mı, bir disk dosyasını mı, bir ağ soketini mi yoksa bir dizin dosyasını mı temsil
ettiğini bilmez veya umursamaz. Bu dosyanın read() işlemi için uygun işlev , işlev tablosunda
her zaman aynı yerde olacaktır ve VFS yazılım katmanı, verilerin gerçekte nasıl okunduğuna
bakmadan bu işlevi arayacaktır.

İ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.

Dişçilik nesnelerinin nasıl kullanıldığına bir örnek olarak, bir iş parçacığının


dosyayı bir düzenleyici kullanarak /usr/include/stdio.h yol adıyla açmak istediği
durumu düşünün . Linux, dizin adlarını dosya olarak ele aldığından, bu yolu çevirmek
için önce kök—/ için düğümün edinilmesi gerekir. Daha sonra işletim sistemi, içerme
dosyası için düğümü elde etmek için bu dosyayı okumalıdır . stdio.h dosyası için
düğümü elde edene kadar bu iş parçacığına devam etmelidir . Yol adı çevirisi zaman
alan bir görev olabileceğinden, Linux, yol adı çevirisi sırasında başvurulan dişçilik
nesnelerinin bir önbelleğini tutar. Diş hekimliği önbelleğinden düğümü almak,
diskteki dosyayı okumak zorunda kalmaktan çok daha hızlıdır.

20.7.2 Linux ext3 Dosya Sistemi Linux tarafından

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

806 Bölüm 20 Linux Sistemi


en çok kullanılan Linux dosya sistemi. Tartışmanın çoğu aynı şekilde
ext4.
Linux'un ext3'ü, BSD Hızlı Dosya Sistemi (FFS) ile pek çok ortak noktaya sahiptir
(Bölüm C.7.7). Belirli bir dosyaya ait veri bloklarını bulmak için benzer bir mekanizma
kullanır, veri bloğu işaretçilerini dosya sistemi boyunca en fazla üç dolaylılık düzeyiyle
dolaylı bloklarda saklar. FFS'de olduğu gibi, dizin dosyaları, içerikleri farklı yorumlansa
da, normal dosyalar gibi diskte depolanır. Bir dizin dosyasındaki her blok, bağlantılı bir
giriş listesinden oluşur. Sırayla, her girdi girdinin uzunluğunu, bir dosyanın adını ve bu
girdinin atıfta bulunduğu düğümün düğüm numarasını içerir.

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

20.7 Dosya Sistemleri 807

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.

dağınık serbest bloklar tahsis etmek

sürekli serbest bloklar tahsis etmek

blok seçildi
kullanımda blok bit sınırı
tahsis eden tarafından

ücretsiz blok bitmap araması bayt sınırı

Şekil 20.7 ext3 blok tahsisi politikaları.


808 Bölüm 20 Linux Sistemi
Machine Translated by Google
20.7.3 Günlük kaydı

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.

Sistem çökerse, bazı işlemler günlükte kalabilir. Bu işlemler, işletim sistemi


tarafından yapılmasına rağmen dosya sistemine hiçbir zaman tamamlanmadı, bu
nedenle sistem kurtarıldıktan sonra tamamlanması gerekiyor. İşlemler, iş
tamamlanana ve dosya sistemi yapıları tutarlı kalana kadar işaretçiden yürütülebilir.
Tek sorun, bir işlem iptal edildiğinde ortaya çıkar; yani, sistem çökmeden önce işlem
yapılmamıştır. Dosya sistemine uygulanan bu işlemlerde yapılan herhangi bir
değişiklik, dosya sisteminin tutarlılığı korunarak geri alınmalıdır. Bu kurtarma, bir
çökmeden sonra ihtiyaç duyulan tek şeydir ve tutarlılık denetimiyle ilgili tüm sorunları
ortadan kaldırır.

Güncelleştirmeler doğrudan disk üzerindeki veri yapılarına değil, bellek içi


günlüğe uygulandığında çok daha hızlı ilerlediğinden, günlük tutan dosya sistemleri
bazı işlemleri günlük olmayan sistemlerden daha hızlı gerçekleştirebilir. Bu
iyileştirmenin nedeni, sıralı G/Ç'nin rastgele G/Ç'ye göre performans avantajında
bulunur. Dosya sistemine yapılan maliyetli eşzamanlı rasgele yazma işlemleri, dosya
sisteminin günlüğüne çok daha az maliyetli eşzamanlı sıralı yazma işlemlerine
dönüştürülür. Bu değişiklikler, sırayla, uygun yapılara rastgele yazma yoluyla
eşzamansız olarak yeniden oynatılır. Genel sonuç, dosya oluşturma ve silme gibi
dosya sistemi meta veri odaklı işlemlerin performansında önemli bir kazançtır. Bu
performans iyileştirmesi nedeniyle, ext3 dosya verilerini değil, yalnızca meta verileri
günlüğe kaydedecek şekilde yapılandırılabilir.

20.7.4 Linux Proc Dosya Sistemi

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

name , sürecin benzersiz süreç tanımlayıcısının (PID) ASCII ondalık gösterimidir.

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 .

Bu aralıktaki tüm inode numaraları rezerve edilmemiştir. Çekirdek, yeni /proc


düğüm eşlemelerini dinamik olarak ayırabilir ve ayrılmış düğüm sayılarının bir bit
eşlemini korur. Ayrıca kayıtlı global /proc dosya sistemi girdilerinin bir ağaç veri
yapısını da korur. Her giriş, dosyanın içeriğini oluşturmak için kullanılan özel işlevlerle
birlikte dosyanın düğüm numarasını, dosya adını ve erişim izinlerini içerir. Sürücüler
istedikleri zaman bu ağaca girişleri kaydedebilir ve kayıtlarını silebilirler ve ağacın
özel bir bölümü – /proc/sys dizini altında görünür – çekirdek değişkenleri için
ayrılmıştır. Bu ağacın altındaki dosyalar, bu değişkenlerin hem okunmasına hem de
yazılmasına izin veren bir dizi ortak işleyici tarafından yönetilir, böylece bir sistem
yöneticisi, istenen yeni değerleri ASCII ondalık biçiminde uygun dosyaya yazarak
çekirdek parametrelerinin değerini ayarlayabilir .
Uygulamaların içinden bu değişkenlere verimli erişime izin vermek için, /proc/
sys alt ağacı, aynı değişkenleri metin yerine ikili olarak okuyan ve yazan özel bir
sistem çağrısı olan sysctl() aracılığıyla sağlanır. dosya sistemi. sysctl() fazladan bir
tesis değildir; uygulamanın atıfta bulunduğu değişkenleri tanımlamak için /proc
dinamik giriş ağacını okur .
Machine Translated by Google

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ü

aygıt SCSI yöneticisi


karakter ağ aygıtı
SCSI aygıt aygıt sürücüsü
sürücüsünü engelle
sürücüsü sürücüsü

Şekil 20.8 Aygıt sürücüsü blok yapısı.

20.8 Girdi ve Çıktı

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.

Blok cihazları , sabit diskler ve disketler, CD-ROM'lar ve Blu-ray diskler ve flash


bellek dahil olmak üzere tamamen bağımsız, sabit boyutlu veri bloklarına rastgele
erişime izin veren tüm cihazları içerir. Blok aygıtları genellikle dosya sistemlerini
depolamak için kullanılır, ancak programların aygıtın içerdiği dosya sistemini
oluşturup onarabilmesi için bir blok aygıtına doğrudan erişime de izin verilir.
Uygulamalar da dilerlerse bu blok cihazlara doğrudan erişim sağlayabilirler. Örneğin,
bir veritabanı uygulaması, genel amaçlı dosya sistemini kullanmak yerine, kendi ince
ayarlı veri düzenini bir disk üzerinde gerçekleştirmeyi tercih edebilir.
Karakter aygıtları , fareler ve klavyeler gibi diğer aygıtların çoğunu içerir.
Blok ve karakter cihazları arasındaki temel fark rastgele erişimdir; blok cihazlara
rastgele erişilirken karakter cihazlarına seri olarak erişilir. Örneğin, bir dosyada
belirli bir konumu aramak DVD için desteklenebilir, ancak fare gibi bir işaretleme
aygıtı için hiçbir anlam ifade etmez.
Ağ cihazları , blok ve karakter cihazlarından farklı şekilde ele alınır. Kullanıcılar
verileri doğrudan ağ cihazlarına aktaramaz. Bunun yerine, çekirdeğin ağ alt sistemine
bir bağlantı açarak dolaylı olarak iletişim kurmaları gerekir. Ağ cihazlarının arayüzünü
ayrı ayrı tartışıyoruz.
Bölüm 20.10.

20.8.1 Blok Cihazları


Blok aygıtları, bir sistemdeki tüm disk aygıtlarına ana arabirim sağlar. Performans
özellikle diskler için önemlidir ve blok cihaz sistemi
20.8 Girdi ve Çıktı 811
Machine Translated by Google

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.

Bu kuralın ana istisnası, terminal aygıtlarını uygulayan karakter aygıtı


sürücülerinin özel alt kümesidir. Çekirdek, bir dizi tty yapı yapısı aracılığıyla bu
sürücülere standart bir arabirim sağlar . Bu yapıların her biri, terminal cihazından
gelen veri akışı üzerinde arabelleğe alma ve akış kontrolü sağlar ve bu verileri bir hat
disiplinine besler.
Hat disiplini , terminal cihazından gelen bilgiler için bir yorumlayıcıdır . En yaygın
hat disiplini, terminalin veri akışını bir kullanıcının çalışan işlemlerinin standart giriş
ve çıkış akışlarına yapıştıran ve bu işlemlerin doğrudan iletişim kurmasına izin veren
tty disiplinidir.
812 Bölüm 20 Linux Sistemi
Machine Translated by Google

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.

20.9 Süreçler Arası İletişim

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.

20.9.1 Senkronizasyon ve Sinyaller


Bir olayın gerçekleştiğini bir sürece bildirmek için standart Linux mekanizması sinyaldir.
Sinyaller, başka bir kullanıcının sahip olduğu işlemlere gönderilen sinyaller üzerindeki
kısıtlamalarla birlikte, herhangi bir işlemden başka herhangi bir işleme gönderilebilir.
Ancak sınırlı sayıda sinyal mevcuttur ve bilgi taşıyamazlar. Sadece bir sinyalin meydana
geldiği gerçeği bir proses için kullanılabilir.
Sinyaller sadece süreçler tarafından üretilmez. Çekirdek ayrıca dahili olarak sinyaller
üretir. Örneğin, veriler bir ağ kanalına ulaştığında bir sunucu işlemine, bir çocuk sona
erdiğinde bir üst işleme veya bir zamanlayıcının süresi dolduğunda bekleyen bir işleme
bir sinyal gönderebilir.
Dahili olarak, Linux çekirdeği, çekirdek modunda çalışan işlemlerle iletişim kurmak
için sinyalleri kullanmaz. Bir çekirdek modu işlemi bir olayın gerçekleşmesini bekliyorsa,
bu olayla ilgili bildirim almak için sinyalleri kullanmaz.
Bunun yerine, çekirdek içinde gelen asenkron olaylarla ilgili iletişim, zamanlama
durumları ve bekleme kuyruğu yapılarının kullanımı yoluyla gerçekleşir.
Bu mekanizmalar, çekirdek modu süreçlerinin ilgili olaylar hakkında birbirini
bilgilendirmesine ve ayrıca olayların aygıt sürücüleri veya ağ sistemi tarafından
oluşturulmasına izin verir. Bir süreç bir olayın tamamlanmasını beklemek istediğinde,
kendisini o olayla ilişkili bir bekleme kuyruğuna yerleştirir ve zamanlayıcıya artık
yürütme için uygun olmadığını söyler. Etkinlik tamamlandığında, bekleme kuyruğundaki
her işlem uyandırılacaktır. Bu prosedür, birden çok işlemin tek bir olay için beklemesine
izin verir. Örneğin, birkaç işlem bir diskten bir dosyayı okumaya çalışıyorsa, veriler
başarıyla belleğe okunduğunda hepsi uyandırılacaktır.

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

20.10 Ağ Yapısı 813

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.

20.9.2 Verilerin Süreçler Arasında Geçişi Linux, süreçler

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.

Linux'ta paylaşılan bellek bölgesi, işlemler tarafından oluşturulabilen veya


silinebilen kalıcı bir nesnedir. Böyle bir nesne, küçük, bağımsız bir adres alanıymış
gibi ele alınır. Linux sayfalama algoritmaları, tıpkı bir işlemin veri sayfalarının
sayfalarını çıkarabildikleri gibi, paylaşılan bellek sayfalarını diske çıkarmayı seçebilir.
Paylaşılan bellek nesnesi, paylaşılan bellek bölgeleri için bir yedekleme deposu işlevi
görür, tıpkı bir dosyanın bellek eşlemeli bellek bölgesi için bir yedekleme deposu
işlevi görmesi gibi. Bir dosya bir sanal adres alanı bölgesine eşlendiğinde, meydana
gelen herhangi bir sayfa hatası, dosyanın uygun sayfasının sanal belleğe eşlenmesine
neden olur. Benzer şekilde, paylaşılan bellek eşlemeleri, sayfa hatalarını kalıcı bir
paylaşılan bellek nesnesinden sayfalarda eşlemeye yönlendirir. Ayrıca dosyalar için
olduğu gibi, paylaşılan bellek nesneleri, şu anda hiçbir işlem onları sanal belleğe
eşlemese bile içeriklerini hatırlar.

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.

Dahili olarak, Linux çekirdeğindeki ağ oluşturma, üç yazılım katmanı tarafından


uygulanır:
Machine Translated by Google

814 Bölüm 20 Linux Sistemi


1. Soket arayüzü

2. Protokol sürücüleri

3. Ağ aygıtı sürücüleri

Kullanıcı uygulamaları, tüm ağ isteklerini soket arabirimi aracılığıyla gerçekleştirir.


Bu arayüz, 4.3 BSD soket katmanına benzeyecek şekilde tasarlanmıştır , böylece Berkeley
soketlerini kullanmak üzere tasarlanmış herhangi bir program, herhangi bir kaynak kodu
değişikliği olmaksızın Linux üzerinde çalışacaktır. Bu arayüz Bölüm C.9.1'de açıklanmıştır.
BSD soket arayüzü , çok çeşitli ağ protokolleri için ağ adreslerini temsil etmek için
yeterince geneldir. Bu tek arabirim, Linux'ta yalnızca standart BSD sistemlerinde
uygulanan protokollere değil, sistem tarafından desteklenen tüm protokollere erişmek
için kullanılır.
Bir sonraki yazılım katmanı, organizasyonda BSD'nin kendi çerçevesine benzeyen
protokol yığınıdır . Bir uygulamanın soketinden veya bir ağ aygıtı sürücüsünden herhangi
bir ağ verisi bu katmana ulaştığında, verilerin hangi ağ protokolünü içerdiklerini belirten
bir tanımlayıcı ile etiketlenmesi beklenir. Protokoller dilerlerse birbirleriyle haberleşebilirler;
örneğin, İnternet protokolü seti içinde, ayrı protokoller, yönlendirmeyi, hata raporlamayı
ve kayıp verilerin güvenilir şekilde yeniden iletilmesini yönetir.

Protokol katmanı paketleri yeniden yazabilir, yeni paketler oluşturabilir, paketleri


parçalara ayırabilir veya yeniden birleştirebilir veya gelen verileri basitçe atabilir.
Nihayetinde, protokol katmanı bir dizi paketi işlemeyi bitirdiğinde, bunları ya veriler yerel
bir bağlantıya yönelikse soket arayüzüne yukarıya ya da verilerin uzaktan iletilmesi
gerekiyorsa aşağıya doğru bir aygıt sürücüsüne iletir. Protokol katmanı, paketi hangi
sokete veya cihaza göndereceğine karar verir.

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 .

Linux ağ sistemindeki en önemli protokol seti, TCP/IP protokol paketidir. Bu paket


bir dizi ayrı protokol içerir.
IP protokolü , ağdaki herhangi bir yerde farklı ana bilgisayarlar arasında yönlendirme
uygular. Yönlendirme protokolünün üstünde UDP, TCP ve ICMP protokolleri bulunur.
UDP protokolü , ana bilgisayarlar arasında isteğe bağlı bireysel veri birimleri taşır. TCP
protokolü , garantili sırayla paket teslimi ve kayıp verilerin otomatik olarak yeniden iletimi
ile ana bilgisayarlar arasında güvenilir bağlantılar uygular. ICMP protokolü , ana
bilgisayarlar arasında çeşitli hata ve durum mesajları taşır.
Ağ oluşturma yığınının protokol yazılımına ulaşan her paketin (skbuff) , paketin ilgili
olduğu protokolü gösteren bir dahili tanımlayıcı ile önceden etiketlenmesi beklenir. Farklı
ağ aygıtı sürücüleri
20.10 Ağ Yapısı 815
Machine Translated by Google

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.

IP sürücüsü tarafından gerçekleştirilen diğer iki işlev , büyük paketlerin


demontajı ve yeniden birleştirilmesidir. Giden bir paket bir aygıt için kuyruğa
alınamayacak kadar büyükse , tümü sürücü için kuyruğa alınan daha küçük parçalara
bölünür . Alıcı ana bilgisayarda bu parçaların yeniden birleştirilmesi gerekir. IP
sürücüsü, yeniden birleştirilmeyi bekleyen her parça için bir ipfrag nesnesi ve
birleştirilen her veri birimi için bir ipq tutar . Gelen parçalar, bilinen her ipq ile
eşleştirilir. Bir eşleşme bulunursa, parça buna eklenir; aksi takdirde, yeni bir ipq
oluşturulur. Bir ipq için son parça geldiğinde, yeni paketi tutmak için tamamen yeni
bir skbuff oluşturulur ve bu paket IP sürücüsüne geri gönderilir.

IP tarafından bu ana bilgisayara hedef olarak tanımlanan paketler , diğer


protokol sürücülerinden birine iletilir. UDP ve TCP protokolleri , paketleri kaynak ve
hedef soketlerle ilişkilendirmenin bir yolunu paylaşır: her bağlı soket çifti, kaynak ve
hedef adresleri ve kaynak ve hedef port numaraları ile benzersiz bir şekilde
tanımlanır. Soket listeleri, gelen paketlerde yuva araması için bu dört adres ve port
değerlerine anahtarlanmış hash tablolarına bağlanır. TCP protokolü güvenilmez
bağlantılarla uğraşmak zorundadır, bu nedenle bir zaman aşımından sonra yeniden
iletilecek onaylanmayan giden paketlerin ve eksik veriler geldiğinde sokete sunulacak
gelen sıra dışı paketlerin sıralı listelerini tutar.
816 Bölüm
Machine Translated by Google 20 Linux Sistemi
20.11 Güvenlik
Linux'un güvenlik modeli, tipik UNIX güvenlik mekanizmalarıyla yakından ilişkilidir .
Güvenlik endişeleri iki grupta sınıflandırılabilir:

1. Kimlik doğrulama. olmadan kimsenin sisteme erişemeyeceğinden emin olmak


ilk önce giriş haklarına sahip olduğunu kanıtlamak

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

20.11.1 Kimlik doğrulama

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.

Tarihsel olarak, bu mekanizmanın UNIX uygulamalarının birkaç dezavantajı olmuştur.


Parolalar genellikle sekiz karakterle sınırlıydı ve olası tuz değerlerinin sayısı o kadar
düşüktü ki, bir saldırgan yaygın olarak kullanılan parolaların sözlüğünü olası her tuz
değeriyle kolayca birleştirebilir ve parola dosyasında bir veya daha fazla parolayı
eşleştirme şansına sahip olabilir. , sonuç olarak güvenliği ihlal edilen herhangi bir hesaba
yetkisiz erişim elde etmek.
Parola mekanizmasına, şifrelenmiş parolayı herkes tarafından okunamayan, daha uzun
parolalara izin veren veya parolayı kodlamak için daha güvenli yöntemler kullanan bir
dosyada gizli tutan uzantılar getirilmiştir.
Bir kullanıcının sisteme bağlanmasına izin verilen süreleri sınırlayan başka kimlik
doğrulama mekanizmaları getirilmiştir. Ayrıca, kimlik doğrulama bilgilerini bir ağdaki tüm
ilgili sistemlere dağıtmak için mekanizmalar mevcuttur.

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

20.11 Güvenlik 817

20.11.2 Erişim Kontrolü

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, Bölüm C.3.2'de açıklanan standart UNIX setuid mekanizmasını uygular.


Bu mekanizma, bir programın, programı çalıştıran kullanıcınınkinden farklı
ayrıcalıklarla çalışmasına izin verir. Örneğin, (bir işi bir yazdırma kuyruğuna gönderen)
lpr programı, o programı çalıştıran kullanıcı olmasa bile sistemin yazdırma
kuyruklarına erişebilir. Setuid'in UNIX uygulaması, bir sürecin gerçek ve etkili UID'si
arasında ayrım yapar. Gerçek UID , programı çalıştıran kullanıcınınkidir; etkili UID ,
dosyanınkidir
sahip.

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.

• Linux çekirdeği, performans nedenleriyle geleneksel bir monolitik çekirdek olarak


uygulanır, ancak tasarımda, çoğu sürücünün çalışma zamanında dinamik olarak
yüklenmesine ve boşaltılmasına izin verecek kadar modülerdir.

• Linux, süreçler arasında koruma sağlayan ve bir zaman paylaşımlı zamanlayıcıya


göre birden çok işlemi çalıştıran çok kullanıcılı bir sistemdir. Yeni oluşturulan
süreçler, yürütme ortamlarının seçici kısımlarını üst süreçleriyle paylaşarak çok
iş parçacıklı programlamaya izin verebilir. • İşlemler arası iletişim, hem System

V mekanizmaları (mesaj kuyrukları, semaforlar ve paylaşılan bellek) hem de BSD'nin


yuva arabirimi tarafından desteklenir . Soket arabirimi aracılığıyla aynı anda
birden fazla ağ protokolüne erişilebilir.
Daha fazla okuma 819
Machine Translated by Google

• Bellek yönetim sistemi, farklı işlemler tarafından paylaşılan verilerin tekrarını en


aza indirmek için sayfa paylaşımını ve yazma üzerine kopyalamayı kullanır.
Sayfalar, ilk başvuruldıklarında talep üzerine yüklenir ve fiziksel belleğin geri
alınması gerekiyorsa , bir LFU algoritmasına göre yedekleme deposuna geri
çağrılır.

• 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.1 Dinamik olarak yüklenebilir çekirdek modülleri, bir sisteme sürücüler


eklendiğinde esneklik sağlar, ancak bunların dezavantajları da var mı? Hangi
koşullar altında bir çekirdek tek bir ikili dosyada derlenir ve onu modüllere
bölmek ne zaman daha iyi olur? açıkla
Cevap.

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 Çapraz Referans Sayfası (LXR) (http://lxr.linux.no) , Linux çekirdeğinin güncel


listelerini tutar, web üzerinden göz atılabilir ve tamamen çapraz referanslıdır.

• Çekirdek Hackerları Kılavuzu , Linux çekirdek bileşenleri ve iç bileşenleri hakkında


yararlı bir genel bakış sağlar ve http://tldp.org/LDP/tlk/tlk.html adresinde bulunur.

• 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.

Linux'a ayrılmış birçok posta listesi de mevcuttur. En önemlileri,


majordomo@vger.rutgers.edu e-posta adresinden ulaşılabilen bir posta listesi yöneticisi
tarafından tutulur . Liste sunucusuna nasıl erişileceği ve herhangi bir listeye nasıl
abone olunacağı hakkında bilgi için, postanın gövdesindeki tek satırlık “yardım” ile bu
adrese e-posta gönderin.
Son olarak, Linux sisteminin kendisi İnternet üzerinden edinilebilir. Eksiksiz Linux
dağıtımları, ilgili şirketlerin ana sitelerinden elde edilebilir ve Linux topluluğu ayrıca mevcut
sistem bileşenlerinin arşivlerini İnternet'in çeşitli yerlerinde tutar. En önemlisi ftp://ftp.kernel.org/
pub/linux'dur.

İnternet kaynaklarını araştırmaya ek olarak, aşağıdakileri okuyabilirsiniz.


[Mauerer (2008)] ve [Love (2010)]'daki Linux çekirdeğinin iç kısımları.
/ proc dosya sistemi tanıtıldı
http://lucasvr.gobolinux.org/etc/Killian84-Procfs-USENIX.pdf ve genişletilmiş

http://https://www.usenix.org/sites/default/files/usenix winter91 faulkner.pdf adresinde .

bibliyografya

[Love (2010)] R. Love, Linux Kernel Development, Third Edition, Developer's


Kütüphane (2010).

[Mauerer (2008)] W. Mauerer, Professional Linux Kernel Architecture, John Wiley


and Sons (2008).
Egzersizler EX-58
Machine Translated by Google
Bölüm 20 Alıştırmalar

20.7 Bir işlem yazmanın avantajları ve dezavantajları nelerdir?


C gibi üst düzey bir dilde sistem?

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.11 Sadece bazılarını yapmanın avantajları ve dezavantajları nelerdir?


yüklenebilir bir çekirdek modülüne erişilebilen bir çekirdeğin içinde tanımlanan semboller?

20.12 Kullanılan çatışma çözme mekanizmasının birincil hedefleri nelerdir?


çekirdek modüllerini yüklemek için Linux çekirdeği tarafından mı?

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.15 Klonlanmış bir iş parçacığının maliyetiyle karşılaştırıldığında, bir sürecin oluşturulması


ve planlanmasında hangi ekstra maliyetler ortaya çıkar?

20.16 Linux'un Tamamen Adil Zamanlayıcısı (CFS) nasıl gelişmiş


geleneksel bir UNIX süreç zamanlayıcı üzerinde adalet ? adalet ne zaman
garantili?

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.20 Hangi senaryolar bir hafıza sayfasının eşlenmesine neden olur?


Yazma üzerine kopyalama özelliğine sahip bir kullanıcı programının adres alanı
etkinleştirilmiş?

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?

20.24 Linux setuid özelliği, setuid'den hangi yönlerden farklıdır ?


SVR4 özelliği ?

20.25 Linux kaynak kodu, İnternet üzerinden ve CD-ROM satıcılarından serbestçe ve


yaygın olarak elde edilebilir . Linux sisteminin güvenliği için bu kullanılabilirliğin
üç etkisi nedir?
Machine Translated by Google

21 BÖLÜM

Windows 10

Alex Ionescu tarafından güncellendi

Microsoft Windows 10 işletim sistemi, Intel IA-32, AMD64, ARM ve ARM64


komut seti mimarilerini (ISA'lar) uygulayan mikroişlemciler için önleyici bir
çoklu görev istemci işletim sistemidir . Microsoft'un ilgili sunucu işletim
sistemi Windows Server 2016, Windows 10 ile aynı kodu temel alır ancak
yalnızca 64-bit AMD64 ISA'ları destekler. Windows 10, Windows 95/98
tabanlı önceki sistemlerin yerini alan NT koduna dayalı bir dizi Microsoft
işletim sisteminin en yenisidir. Bu bölümde, Windows 10'un 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İ

• Windows 10'un tasarımının altında yatan ilkeleri ve belirli


sistemin bileşenleri. • Windows

10 dosya sisteminin ayrıntılı bir tartışmasını sağlayın. • Windows 10'da

desteklenen ağ protokollerini gösterin. • Windows 10'da sistem ve uygulamaya

yönelik mevcut arayüzü tanımlayın


programcılar

• Windows 10 ile uygulanan önemli algoritmaları tanımlayın.

21.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ını sonlandırmaya ve kendi
"yeni teknoloji" (veya NT) taşınabilir işletim sistemini geliştirmeye karar verdi.

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.

21.1.1 Windows XP, Vista ve 7


Ekim 2001'de Windows XP , hem Windows 2000 masaüstü işletim sistemine yönelik bir
güncelleme hem de Windows 95/98'in yerini alacak şekilde piyasaya sürüldü. Nisan
2003'te, Windows XP'nin sunucu sürümü ( Windows Server 2003 olarak adlandırılır)
kullanıma sunuldu. Windows XP , grafik kullanıcı arabirimini (GUI) , daha yeni donanım
gelişmelerinden ve birçok yeni kullanım kolaylığı özelliğinden yararlanan görsel bir
tasarımla güncelleştirdi. Uygulamalardaki ve işletim sisteminin kendisindeki sorunları
otomatik olarak onarmak için çok sayıda özellik eklendi. Bu değişiklikler nedeniyle,
Windows XP daha iyi ağ iletişimi ve cihaz deneyimi sağladı (sıfır yapılandırmalı kablosuz,
anında mesajlaşma, akışlı ortam ve dijital fotoğraf/video dahil). Windows Server 2003,
büyük çok işlemcili sistemler için önemli performans iyileştirmelerinin yanı sıra önceki
Windows işletim sistemlerine göre daha iyi güvenilirlik ve güvenlik sağladı.

Windows XP için uzun zamandır beklenen ve Windows Vista olarak adlandırılan


güncelleme Ocak 2007'de yayınlandı, ancak iyi karşılanmadı. Windows Vista, daha sonra
Windows 7'de devam eden birçok iyileştirme içermesine rağmen, bu iyileştirmeler
Windows Vista'nın algılanan yavaşlığı ve uyumluluk sorunları tarafından gölgede
bırakıldı. Microsoft, mühendislik süreçlerini geliştirerek ve Windows donanım ve
uygulamalarının üreticileriyle daha yakın çalışarak Windows Vista'ya yönelik eleştirilere
yanıt verdi.
Sonuç, Ekim 2009'da piyasaya sürülen Windows 7 ve buna karşılık gelen Windows
Server 2008 R2 adlı sunucu sürümüydü. Önemli mühendislik değişiklikleri arasında,
sistem davranışını analiz etmek için sayaçlar veya profil oluşturma yerine olay izlemenin
kullanımının artması vardı. İzleme, sistemde sürekli olarak çalışır ve yüzlerce senaryonun
yürütülmesini izler. Senaryolar, örneğin işlem başlatma ve çıkış, dosya kopyalama ve
web sayfası yüklemeyi içerir.
Bu senaryolardan biri başarısız olduğunda veya başarılı olmasına rağmen iyi performans
göstermediğinde, nedeni belirlemek için izler analiz edilebilir.
21.1 Tarihçe 823
Machine Translated by Google
21.1.2 Windows 8
Üç yıl sonra, Ekim 2012'de, sektör genelinde mobil bilgi işlem ve uygulamalar
dünyasına yönelik bir pivotun ortasında Microsoft, Windows XP'den bu yana işletim
sisteminde yapılan en önemli değişikliği temsil eden Windows 8'i piyasaya sürdü .
Windows 8, yeni bir kullanıcı arabirimi ( Metro adlı) ve yeni bir programlama modeli
API'si ( WinRT adlı) içeriyordu. Ayrıca , Apple App Store ve Android Store'a rakip olan
yeni Windows Store'u özel olarak destekleyen bir paket sistemi aracılığıyla
uygulamaları (yeni bir sandbox mekanizması altında çalışan) yönetmenin yeni bir
yolunu da içeriyordu . Ek olarak, Windows 8 çok sayıda güvenlik, önyükleme ve
performans iyileştirmesi içeriyordu. Aynı zamanda, bölümün ilerleyen kısımlarında
açıklayacağımız bir kavram olan “alt sistemler” desteği kaldırıldı.

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 Terminal Hizmetleri aracılığıyla. Windows 10'un 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 .
Windows GUI'deki gelişmelere kısaca dönelim. GUI uygulamasının performansı
artırmak için Windows NT 4.0'da çekirdek moduna geçtiğini daha önce belirtmiştik .
Windows Vista'da Masaüstü Pencere Yöneticisi (DWM) adı verilen yeni bir kullanıcı
modu bileşeninin oluşturulmasıyla daha fazla performans kazanımı elde edildi. DWM ,
Windows DirectX grafik yazılımının üzerinde Windows arabirimi görünümü ve hissi
sağlar. DirectX, Windows'un pencereleme ve grafik modelini (Kullanıcı ve GDI)
uygulayan kod (Win32k) 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ı; Windows 10 ise özellikle performans ve güvenlik alanlarında daha fazla
iyileştirme yaptı. Ayrıca, Windows DirectX 11 ve 12, Direct Compute aracılığıyla GPGPU
mekanizmalarını ( GPU donanımında genel amaçlı bilgi işlem ) içerir ve Windows'un
birçok bölümü bu yüksek performanslı grafik modelinden yararlanmak için
güncellenmiştir. CoreUI adlı yeni bir işleme katmanı aracılığıyla , eski uygulamalar bile
artık DirectX tabanlı işlemeden (son ekran içeriğinin oluşturulması) yararlanabilir.

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 .

Windows 10 açıklamamızın geri kalanında, istemci sürümleri ile karşılık gelen


sunucu sürümleri arasında ayrım yapmıyoruz. Aynı çekirdek bileşenleri temel alırlar
ve çekirdek ve çoğu sürücü için aynı ikili dosyaları çalıştırırlar. Benzer şekilde,
Microsoft, farklı piyasa fiyat noktalarına hitap etmek için her sürümün çeşitli farklı
sürümlerini gönderse de, sürümler arasındaki farkların çok azı sistemin özüne
yansıtılır. Bu bölümde, öncelikle Windows 10'un temel bileşenlerine odaklanacağız.
Machine Translated by Google

826 Bölüm 21 Windows 10

21.2 Tasarım İlkeleri


Microsoft'un Windows için tasarım hedefleri güvenlik, güvenilirlik, uyumluluk, yüksek
performans, genişletilebilirlik, taşınabilirlik ve uluslararası desteği içeriyordu.
Enerji verimliliği ve dinamik cihaz desteği gibi bazı ek hedefler yakın zamanda bu listeye
eklenmiştir. Ardından, bu hedeflerin her birini ve Windows 10'da her birine nasıl ulaşıldığını
tartışacağız.

21.2.1 Güvenlik Windows

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 geleneksel olarak güvenliği isteğe bağlı erişim kontrollerine dayalıdır.


Dosyalar, kayıt defteri anahtarları ve çekirdek eşitleme nesneleri dahil olmak üzere sistem
nesneleri, erişim kontrol listeleri (ACL'ler) tarafından korunur (bkz. Bölüm 13.4.2). Ancak
ACL'ler , kullanıcı ve programcı hatalarına ve ayrıca kullanıcının genellikle Web'de gezinirken
kod çalıştırmaya kandırıldığı tüketici sistemlerine yönelik en yaygın saldırılara karşı
savunmasızdır. Windows Vista, erişimi denetlemek için temel bir yetenek sistemi olarak işlev
gören bütünlük düzeyleri adı verilen bir mekanizmayı tanıttı. Nesneler ve süreçler, sistem
bütünlüğü yok, düşük, orta veya yüksek sistem bütünlüğüne sahip olarak işaretlenir.
Bütünlük düzeyi, nesnelerin ve süreçlerin hangi haklara sahip olacağını belirler. Örneğin,
Windows , ACL ayarı ne olursa olsun , bir işlemin daha yüksek bütünlük düzeyine sahip bir
nesneyi (zorunlu ilkesine göre) değiştirmesine izin vermez. Ek olarak, ACL ne olursa olsun,
bir işlem daha yüksek bütünlüklü bir işlemin belleğini okuyamaz .

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).

Bu tür güvenlik özellikleri, kullanıcı ve veri güvenliğine odaklanır, ancak bunlar,


rastgele içeriği ayrıştıran ve programlama hataları nedeniyle kötü amaçlı kod yürütmek
üzere kandırılabilen yüksek ayrıcalıklı programlara karşı savunmasızdır. Bu nedenle
Windows, genellikle "istismar azaltıcı önlemler" olarak adlandırılan güvenlik önlemlerini
de içerir. Bu önlemler, adres alanı yerleşim düzeni rastgeleleştirmesi (ASLR), Veri Yürütme
Engellemesi (DEP), Kontrol Akışı Koruması (CFG) ve İsteğe Bağlı Kod Koruması (ACG) gibi
geniş kapsamlı azaltmaların yanı sıra dar kapsamlı (hedefli) içerir. çeşitli kullanım
tekniklerine özgü azaltımlar (bu bölümün kapsamı dışındadır).

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.

Güvenliğin bir diğer önemli yönü de bütünlüktür. Windows , kod bütünlüğü


özelliklerinin bir parçası olarak çeşitli dijital imza olanakları sunar. 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 IA-32 olmayan sürümlerinde, çekirdeğe yüklenen tüm
modüllerin tahrif edilmediğinden emin olmak için geçerli imzalara sahip olduğundan
emin olmak için önyükleme sırasında kod bütünlüğü modülü etkinleştirilir . Ek olarak,
Windows 8'in ARM sürümleri, kod bütünlüğü modülünü, tüm kullanıcı programlarının
Microsoft tarafından imzalandığını veya Windows Mağazası aracılığıyla teslim
edildiğini doğrulayan kullanıcı modu kod bütünlüğü kontrolleriyle genişletir. Windows
10'un özel bir sürümü (Windows 10 S, çoğunlukla eğitim pazarı içindir), tüm IA-32 ve
AMD64 sistemlerinde benzer imzalama kontrolleri sağlar. Dijital imzalar,
uygulamaların, uygun şekilde imzalanmamış ikincil depolamadan yürütülebilir kod
yüklemeye karşı kendilerini savunmasına olanak tanıyan Kod Bütünlüğü Korumasının
bir parçası olarak da kullanılır. Örneğin, bir saldırgan üçüncü taraf ikili dosyasını
kendisininkiyle değiştirebilir, ancak dijital imza başarısız olur ve Kod Bütünlüğü
Koruması ikili dosyayı süreçlerin adres alanına yüklemez.
Son olarak, Windows 10'un kurumsal sürümleri, Device Guard adlı yeni bir
güvenlik özelliğini etkinleştirmeyi mümkün kılar . Bu mekanizma, kuruluşların
bilgisayar sistemlerinin dijital imzalama gereksinimlerinin yanı sıra bireysel imzalama
sertifikalarını ve hatta ikili karmaları kara listeye ve beyaz listeye almalarına olanak
tanır. Örneğin bir kuruluş, yalnızca Microsoft, Google veya Adobe tarafından
imzalanmış kullanıcı modu programlarının kurumsal bilgisayarlarında başlatılmasına
izin vermeyi seçebilir.

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

Belirtildiği gibi, Windows XP hem Windows 2000'in bir güncellemesiydi hem de


Windows 95/98 için yedek. Windows 2000, öncelikle iş uygulamaları için uyumluluğa
odaklandı. Windows XP gereksinimleri dahil
Windows 95/98 üzerinde çalışan tüketici uygulamalarıyla çok daha yüksek uyumluluk.
Birkaç nedenden dolayı uygulama uyumluluğunun elde edilmesi zordur. Örneğin,
uygulamalar belirli bir Windows sürümünü kontrol edebilir,
API'lerin uygulanmasının tuhaflıklarına bir dereceye kadar bağlı olabilir veya
önceki sistemde maskelenmiş gizli uygulama hataları olabilir.
Uygulamalar ayrıca farklı bir komut seti için derlenmiş olabilir veya
günümüzün multi-gigahertz, multicore'unda çalıştırıldığında farklı beklentilere sahip olmak
sistemler. Windows 10, uyumsuzluklara rağmen uygulamaları çalıştırmak için çeşitli
stratejiler uygulayarak uyumluluk sorunlarına odaklanmaya devam ediyor.
Windows XP gibi, Windows 10 da şim adı verilen bir uyumluluk katmanına sahiptir.
uygulamalar ve Win32 API'leri arasında oturan motor . Bu motor olabilir
Windows 10'un önceki Windows sürümleriyle (neredeyse) hataya karşı uyumlu
görünmesini sağlayın. Windows 10, 6.500'den fazla şim veritabanıyla birlikte gelir
eskiler için yapılması gereken belirli tuhaflıkları ve ince ayarları açıklayan girişler
uygulamalar. Ayrıca, Uygulama Uyumluluğu Araç Seti aracılığıyla,
kullanıcılar ve yöneticiler kendi şim veritabanlarını oluşturabilir. Windows 10'lar
SwitchBranch mekanizması, geliştiricilerin , tüm tuhaflıklar ve/veya

ö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 Tasarım İlkeleri 831

Bu önemli ölçüde daha güçlü model, çekirdeği yetenek yoluyla genişletir.


her sistem çağrısını, istisnayı, hatayı, iş parçacığı oluşturmayı ve
sonlandırma ve süreç oluşturma, diğer birkaç dahili işlemle birlikte,
ikincil bir harici sürücüye (Pico Sağlayıcının kendisi). Bu ikincil sürücü
şimdi tüm bu tür işlemlerin sahibi olur. Hala Windows 10'ları kullanırken
zamanlayıcı ve bellek yöneticisi (mikro çekirdeğe benzer), uygulayabilir
kendi ABI'si, sistem çağrısı arayüzü, yürütülebilir dosya formatı ayrıştırıcısı, sayfa hatası
işleme, önbelleğe alma, G/Ç modeli, güvenlik modeli ve daha fazlası.
Windows 10, Linux çekirdeğinin çok megabaytlık bir yeniden uygulaması olan LxCore
adlı böyle bir Pico Sağlayıcı içerir. (Linux olmadığını unutmayın ve
Linux ile herhangi bir kod paylaşmaz.) Bu sürücü “Windows” tarafından kullanılır.
Değiştirilmemiş Linux'u yüklemek için kullanılabilen Linux için Alt Sistem" özelliği
PE ikili dosyaları olarak kaynak koduna veya yeniden derlemeye ihtiyaç duymadan ELF ikili dosyaları.
Windows 10 kullanıcıları, değiştirilmemiş bir Ubuntu kullanıcı modu dosya sistemini çalıştırabilir (ve,
daha yakın zamanda, OpenSUSE ve CentOS), apt-get paketiyle hizmet vermeye başladı.
yönetim komutu ve normal olarak çalışan paketleri. Çekirdek yeniden uygulamasının
tamamlanmadığını unutmayın; çoğu sistem çağrısı eksiktir.
çoğu aygıta erişim, çünkü hiçbir Linux çekirdek sürücüsü yüklenemez. Dikkat çekici bir şekilde,
ağ iletişimi, seri cihazların yanı sıra tam olarak desteklenir, GUI/çerçeve arabelleği yoktur
erişim mümkündür.
Son bir uyumluluk önlemi olarak, Windows 8.1 ve sonraki sürümleri de
İstemci için Hyper-V özelliğini içerir. Bu, uygulamaların bunları çalıştırarak Windows XP, Linux
ve hatta DOS ile hata için hata uyumluluğu elde etmesine olanak tanır.
sanal bir makine içindeki işletim sistemleri.

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.

Windows NT , simetrik çoklu işlem (SMP) için tasarlanmıştır; üzerinde


çok işlemcili bilgisayar, birkaç iş parçacığı aynı anda çalışabilir, hatta
çekirdek. Windows NT , her CPU'da öncelik tabanlı önleyici zamanlama kullanır
iş parçacığı Göndericide veya kesme düzeyinde yürütülürken hariç,
Windows'ta çalışan herhangi bir işlemdeki iş parçacıkları, daha yüksek öncelikli iş parçacıkları
tarafından engellenebilir. Böylece sistem hızlı yanıt verir (bkz. Bölüm 5).
Windows XP , kod yolunu azaltarak performansı daha da artırdı
kritik işlevlerde uzunluk ve daha ölçeklenebilir kilitleme protokolleri uygulamak,
sıraya alınmış spinlock'lar ve pushlock'lar gibi. (Pushlock'lar , okuma-yazma kilidi özelliklerine
sahip optimize edilmiş döndürmeli kilitler gibidir.) Yeni kilitleme protokolleri,
sistem veri yolu döngüleri ve dahil edilen kilitsiz listeler ve kuyruklar, atomik okuma -değiştir
– yazma işlemleri ( kilitlenmiş artış gibi) ve diğer gelişmiş senkronizasyon teknikleri. Bu
değişiklikler gerekliydi çünkü Windows XP
Machine Translated by Google

832 Bölüm 21 Windows 10

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.

Windows 7 geliştirildiğinde, bilgi işlemde birkaç büyük değişiklik gelmişti. En


büyük çoklu işlemcilerde bulunan CPU sayısı ve fiziksel bellek miktarı önemli ölçüde
arttı, bu nedenle işletim sistemi ölçeklenebilirliğini daha da geliştirmek için oldukça
fazla çaba sarf edildi.
Windows NT'de çoklu işlem desteğinin uygulanması, işlemci koleksiyonlarını
temsil etmek ve örneğin belirli bir iş parçacığının hangi işlemci kümesi üzerinde
programlanabileceğini belirlemek için bit maskeleri kullandı. Bu bit maskeleri, bir
sistem içinde desteklenen işlemci sayısını 64 bit sistemde 64 ve 32 bit sistemde 32
ile sınırlayarak tek bir bellek sözcüğüne sığacak şekilde tanımlandı. Böylece Windows
7 , 64 işlemciye kadar bir koleksiyonu temsil etmek için işlemci grupları kavramını
ekledi . Toplamda 64'ten fazla işlemciyi barındıran çoklu işlemci grupları
oluşturulabilir. Windows'un, fiziksel işlemci veya çekirdekten farklı olarak , bir
işlemcinin yürütme biriminin programlanabilir bir bölümünü mantıksal işlemci
olarak adlandırdığını unutmayın. Bu bölümde bir “işlemci” veya “CPU” dan
bahsettiğimizde, Windows'un bakış açısından gerçekten bir “mantıksal işlemci”yi
kastediyoruz. Windows 7, toplam 256 mantıksal işlemci için dört adede kadar işlemci
grubunu desteklerken, Windows 10 artık toplamda en fazla 640 mantıksal işlemciyle
(bu nedenle, tüm gruplar tam olarak doldurulamaz) 20 adede kadar grubu destekler.

Tüm bu ek CPU'lar , CPU'ları ve belleği zamanlamak için kullanılan kilitler için


büyük bir çekişme yarattı . Windows 7 bu kilitleri kırdı. Örneğin, Windows 7'den
önce, olayları bekleyen iş parçacıklarını içeren kuyruklara erişimi senkronize etmek
için Windows zamanlayıcı tarafından tek bir kilit kullanılıyordu. Windows 7'de, her
nesnenin kendi kilidi vardır, bu da sıralara aynı anda erişilmesini sağlar. Benzer
şekilde, küresel nesne yöneticisi kilidi, önbellek yöneticisi VACB kilidi ve bellek
yöneticisi PFN kilidi, daha önce büyük, küresel veri yapılarına erişimi senkronize
ediyordu. Hepsi daha küçük veri yapılarında daha fazla kilide ayrıştırıldı. Ayrıca,
zamanlayıcıdaki birçok yürütme yolu, kilitsiz olacak şekilde yeniden yazılmıştır. Bu
değişiklik, 256 mantıksal CPU'lu sistemlerde bile Windows 7 için iyileştirilmiş
ölçeklenebilirlik performansıyla sonuçlandı .
Diğer değişiklikler, paralel hesaplama için desteğin artan öneminden
kaynaklanıyordu. Yıllardır, bilgisayar endüstrisine Moore Yasası hakim olmuştur
(bkz. Bölüm 1.1.3), bu da kendilerini her bir CPU için daha hızlı saat hızları olarak
gösteren daha yüksek transistör yoğunluklarına yol açmıştır. Moore Yasası
geçerliliğini koruyor, ancak CPU saat hızlarının daha da artmasını engelleyen sınırlara
ulaşıldı . Bunun yerine, transistörler, her çipte daha fazla CPU oluşturmak için
kullanılıyor. Paralel elde etmek için yeni programlama modelleri
Machine Translated by Google

21.2 Tasarım İlkeleri 833

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.

Son olarak, özellikle pil ömrünün performans ihtiyaçlarının önüne geçebileceği


mobil sistemlerde ve aynı zamanda elektrik maliyetinin mümkün olan en hızlı
hesaplama ihtiyacından daha ağır basabileceği bulut/sunucu ortamlarında, güçle
ilgili hususlar yüksek performanslı bilgi işlem konusunda karmaşık tasarım kararlarına
sahiptir. sonuç. Buna göre, Windows 10 artık daha iyi güç verimliliği için bazen ham
performanstan ödün verebilecek özellikleri desteklemektedir.
Örnekler arasında, boşta bir sistemi uyku durumuna sokan Core Park etme ve
görevleri çekirdekler arasında verimli bir şekilde dağıtan Heterojen Çoklu İşleme
(HMP) sayılabilir.
Görev tabanlı paralelliği desteklemek için , Windows 7 ve sonraki sürümlerin
AMD64 bağlantı noktaları, 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 grafik ics 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 SIMD donanımı tarafından kullanılan "yüksek seviyeli
gölgelendirici dili" programlama modelini kullanarak hesaplama çekirdeklerini belirlemesine izin verir.
Hesaplamalı çekirdekler GPU üzerinde çok hızlı çalışır ve sonuçlarını CPU üzerinde
çalışan ana hesaplamaya döndürür . Windows 10'da, yerel grafik yığını ve birçok yeni
Windows uygulaması DirectCompute'u kullanır ve Task Manager'ın yeni sürümleri
GPU işlemcisini ve bellek kullanımını izler; DirectX'in artık kendi GPU iş parçacığı
zamanlayıcısı ve GPU bellek yöneticisi vardır.

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

834 Bölüm 21 Windows 10

çevre alt sistemleri sistem süreçleri Hizmetler uygulamalar

oturum kullanıcı
csrss SCM wininit winlogon biriktirici svchost
müdür süreçler

alt sistem dll'leri

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 soyutlama katmanı (HAL) HAL uzantıları

Hyper-V hiper yönetici

donanım

Şekil 21.1 Windows blok şeması.

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

Bir işletim sistemi, nispeten az 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.
Nispeten az mimariye özgü kaynak kodu ve çok az derleme vardır.
Machine Translated by Google 21.2 Tasarım İlkeleri 835

bly kodu. Windows'taki kullanıcı modu kodu neredeyse tamamen mimariden


bağımsız olacak şekilde yazıldığından, Windows'u yeni bir mimariye taşımak
çoğunlukla Windows çekirdeğini etkiler. Windows'u portlamak için, çekirdeğin
mimarisine özgü kodunun hedef CPU için yeniden yazılması gerekir ve bazen, sayfa
tablosu formatı gibi büyük veri yapılarındaki değişiklikler nedeniyle çekirdeğin diğer
bölümlerinde koşullu derlemeye ihtiyaç duyulur. 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 . Başlangıçta, Windows'un çalıştırdığı birçok mimariyi ve
piyasadaki birçok bilgisayar şirketini ve tasarımı desteklemek için 450'den fazla farklı
HAL mevcuttu. Zamanla, Gelişmiş Yapılandırma ve Güç Arayüzü (ACPI) gibi
standartların ortaya çıkışı , piyasada bulunan bileşenlerin artan benzerliği ve
bilgisayar üreticilerinin birleştirilmesi değişikliklere yol açtı; bugün, Windows 10'un
AMD64 bağlantı noktası tek bir HAL ile birlikte geliyor. Ancak ilginç bir şekilde, mobil
cihazlar pazarında henüz böyle bir gelişme yaşanmadı. Bugün, Windows sınırlı sayıda
ARM yonga setini destekler ve bunların her biri için uygun HAL koduna sahip olması
gerekir. Birden çok HAL modeline geri dönmekten kaçınmak için Windows 8 , kesme
denetleyicisi, zamanlayıcı gibi algılanan SoC (bir çip üzerindeki sistem) bileşenlerine
dayalı olarak HAL tarafından dinamik olarak yüklenen DLL'ler olan HAL Uzantıları
kavramını tanıttı. yönetici ve DMA denetleyicisi.

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.

21.2.7 Uluslararası Destek


Windows, uluslararası ve çok uluslu kullanım için tasarlanmıştır. Ulusal dil desteği
(NLS) API'si aracılığıyla farklı yerel ayarlar için destek sağlar .
NLS API , tarihleri , saati ve parayı ulusal geleneklere göre biçimlendirmek için özel
rutinler sağlar. Dize karşılaştırmaları, değişen karakter kümelerini hesaba katmak
için uzmanlaşmıştır. UNICODE , Windows'un yerel karakter kodudur, özellikle
UTL-16LE kodlama biçimindedir (bu,
836 Bölüm 21 Windows 10
Machine Translated by Google

Linux'lar ve Web'in standardı UTF-8). Windows, ANSI karakterlerini değiştirmeden önce


(8 bit - 16 bit dönüştürme) UNICODE karakterlerine dönüştürerek destekler.

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ı.

21.2.8 Enerji Verimliliği


Artan enerji verimliliği, dizüstü bilgisayarlar ve yalnızca İnternet'e bağlı netbooklar için
pillerin daha uzun süre dayanmasına neden olur, veri merkezlerinin güç ve soğutması
için önemli işletim maliyetlerinden tasarruf sağlar ve işletmelerin ve tüketicilerin enerji
tüketimini düşürmeyi amaçlayan yeşil girişimlere katkıda bulunur. Bir süredir Windows,
enerji kullanımını azaltmak için çeşitli stratejiler uygulamıştır. CPU'lar , mümkün
olduğunda, örneğin saat frekansı düşürülerek daha düşük güç durumlarına taşınır.
Ayrıca, bir bilgisayar aktif olarak kullanılmadığında, Windows tüm bilgisayarı düşük
güç durumuna (uyku) geçirebilir veya hatta tüm belleği ikincil depolamaya kaydedip
bilgisayarı kapatabilir (hazırda bekletme). Kullanıcı geri döndüğünde, bilgisayar açılır
ve önceki durumundan devam eder, böylece kullanıcının uygulamaları yeniden
başlatmasına ve yeniden başlatmasına gerek kalmaz.
Bir CPU ne kadar uzun süre kullanılmadan kalırsa, o kadar fazla enerji tasarrufu
sağlanabilir. Bilgisayarlar insanlardan çok daha hızlı olduğu için, insanlar düşünürken
çok fazla enerji tasarrufu yapılabilir. Sorun şu ki, birçok program aktiviteyi beklemek
üzere yoklanır ve yazılım zamanlayıcıları sık sık sona erer, bu da CPU'nun fazla enerji
tasarrufu sağlayacak kadar uzun süre boşta kalmasını engeller.
Windows 7, yalnızca mantıksal CPU 0'a ve şu anda etkin olan tüm diğer CPU'lara
(boşta olanları atlayarak) saat tıklamalı kesmeler sunarak ve uygun yazılım
zamanlayıcılarını daha az sayıda olayda birleştirerek CPU boşta kalma süresini uzatır.
Sunucu sistemlerinde, sistemler aşırı yüklenmediğinde tüm CPU'ları "park eder" .
Ek olarak, zamanlayıcı sona erme süresi dağıtılmaz ve genellikle tek bir CPU , tüm
yazılım zamanlayıcı sona ermelerini işlemekten sorumludur. Örneğin, mantıksal CPU 3
üzerinde çalışan bir iş parçacığı, bunun yerine başka, uyumayan bir CPU işleyebilirken ,
şu anda boştaysa, CPU 3'ün uyanmasına ve bu sona erme süresine hizmet etmesine
neden olmaz.
Bu önlemler yardımcı olsa da, dizüstü bilgisayarların pil kapasitesinin çok küçük
bir bölümüne sahip olan telefonlar gibi mobil sistemlerde pil ömrünü artırmaya
yetmedi. Böylece Windows 8, pil ömrünü daha da optimize etmek için bir dizi özellik
sunmuştur. İlk olarak, WinRT programlama modeli, garantili bir sona erme süresi olan
kesin zamanlayıcılara izin vermez. Yeni API aracılığıyla kaydedilen tüm zamanlayıcılar ,
manuel olarak etkinleştirilmesi gereken Win32 zamanlayıcılarının aksine, birleştirme
için adaydır . Ardından, dinamik tik kavramı tanıtıldı.
21.2 Tasarım İlkeleri 837
Machine Translated by Google

hangi CPU0 artık saat sahibi değildir ve son aktif CPU bu sorumluluğu üstlenir.

Daha da önemlisi, Windows Mağazası aracılığıyla sağlanan Metro/Modern/


UWP uygulama modelinin tamamı, birkaç saniyeden fazla boşta olan bir
süreçteki tüm iş parçacıklarını otomatik olarak askıya alan Process Lifetime
Manager (PLM) özelliğini içerir. Bu, yalnızca birçok uygulamanın sürekli yoklama
davranışını azaltmakla kalmaz, aynı zamanda UWP uygulamalarının kendi arka
plan çalışmalarını ( GPS konumunu sorgulamak gibi) yapma yeteneğini de
ortadan kaldırır ve onları sesi, konumu verimli bir şekilde birleştiren bir aracılar
sistemiyle uğraşmaya zorlar. , indirme ve diğer istekleri ve işlem askıya alınırken
verileri önbelleğe alabilir.
Son olarak, Desktop Activity Moderator (DAM) adlı yeni bir bileşen
kullanarak , Windows 8 ve sonraki sürümler Bağlı Bekleme adı verilen yeni bir
sistem durumu türünü destekler. Bir bilgisayarı uyku moduna geçirdiğinizi
hayal edin; bu işlem birkaç saniye sürer ve ardından bilgisayardaki her şey tüm
donanımın kapanmasıyla birlikte kaybolmuş gibi görünür. Klavyedeki bir
düğmeye basmak bilgisayarı uyandırır, bu da birkaç saniye daha sürer ve her
şey kaldığı yerden devam eder. Ancak bir telefon veya tablette cihazı uyku
moduna geçirmenin saniyeler sürmesi beklenmiyor; kullanıcılar ekranlarının heme
Ancak Windows yalnızca ekranı kapatırsa, tüm programlar çalışmaya devam
eder ve bir PLM ve zamanlayıcı birleştirmesi olmayan eski Win32 uygulamaları
yoklamaya devam eder, hatta belki de ekranı yeniden uyandırır. Pil ömrü
önemli ölçüde boşalacak.
Bağlı Bekleme, güç düğmesine basıldığında veya ekran kapandığında,
bilgisayarı gerçekten uyku moduna geçirmeden bilgisayarı sanal olarak
dondurarak bu sorunu giderir. Donanım saati durdurulur, tüm işlemler ve
hizmetler askıya alınır ve tüm zamanlayıcı sona erme süreleri 30 dakika
ertelenir. Net etki, bilgisayar hala çalışıyor olsa bile, işlemci ve çevre birimlerinin
en düşük güç durumlarında etkin bir şekilde çalışabilmesi için neredeyse
tamamen boşta çalışmasıdır. Bu modu tam olarak desteklemek için özel
donanım ve bellenim gereklidir; örneğin, Surface markalı tablet donanımı bu
özelliği içerir.

21.2.9 Dinamik Cihaz Desteği


PC endüstrisi tarihinin başlarında , bilgisayar yapılandırmaları oldukça statikti,
ancak bazen bir bilgisayarın arkasındaki seri, yazıcı veya oyun bağlantı
noktalarına yeni cihazlar takılabilir. PC'lerin dinamik konfigürasyonuna yönelik
sonraki adımlar , dizüstü bilgisayar yuvaları ve PCMCIA kartlarıydı. Böyle bir
cihaz kullanılarak, bir PC tüm çevre birimlerine hızlı bir şekilde bağlanabilir veya
bağlantısı kesilebilir. Çağdaş PC'ler , kullanıcıların çok sayıda çevre birimini sık
sık takıp çıkarmasını sağlamak için tasarlanmıştır.
Aygıtların dinamik yapılandırmasına yönelik destek, Windows'ta sürekli
olarak gelişmektedir. Sistem, aygıtları takılı olduklarında otomatik olarak
tanıyabilir ve uygun sürücüleri bulabilir, yükleyebilir ve yükleyebilir - çoğu
zaman kullanıcı müdahalesi olmadan. Aygıtlar fişten çekildiğinde, sürücüler
otomatik olarak kaldırılır ve sistem çalışması diğer yazılımları kesintiye uğratmadan
Ayrıca, Windows Update, üçüncü taraf sürücülerin indirilmesine izin verir.
Machine Translated by Google

838 Bölüm 21 Windows 10

doğrudan Microsoft aracılığıyla, kurulum DVD'lerinin kullanımından kaçınarak veya


kullanıcının üreticinin web sitesini incelemesini sağlayın.
Windows Server, çevre birimlerinin ötesinde, CPU'ların ve RAM'in dinamik çalışırken
ekleme ve çalışırken değiştirilmesinin yanı sıra RAM'in dinamik çalışırken çıkarılmasını da
destekler . Bu özellikler, bileşenlerin sistem kesintisi olmadan eklenmesine, değiştirilmesine
veya çıkarılmasına olanak tanır. Fiziksel sunucularda sınırlı kullanım olsa da, bu teknoloji
bulut bilişimde, özellikle Hizmet Olarak Altyapı (IaaS) ve bulut bilişim ortamlarında dinamik
ölçeklenebilirliğin anahtarıdır. Bu senaryolarda, fiziksel bir makine, bir hizmet ücretine
dayalı olarak sınırlı sayıda işlemcisini destekleyecek şekilde yapılandırılabilir; bu, daha
sonra yeniden başlatma gerektirmeden Hyper-V gibi uyumlu bir hiper yönetici ve içindeki
basit bir kaydırıcı aracılığıyla dinamik olarak yükseltilebilir. sahibinin kullanıcı arayüzü.

21.3 Sistem Bileşenleri

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.

Bu yapıya biraz daha detaylı bakalım.

• 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.

• Son olarak, Secure World'deki en alttaki katman , Normal-to-Normal'i oluşturmak için


donanım sanallaştırmasını kullanan Hyper-V hipervizör bileşenini içeren özel bir
işlemci modunda (örneğin, Intel işlemcilerde VMX Kök Modu olarak adlandırılır) çalışır.
Güvenli Dünya sınırı. (Kullanıcıdan çekirdeğe sınırı, yerel olarak CPU tarafından
sağlanır.)

Bu tip mimarinin başlıca avantajlarından biri, modüller arasındaki ve ayrıcalık seviyeleri


arasındaki etkileşimlerin basit tutulması ve izolasyon ihtiyaçları ile güvenlik ihtiyaçlarının
mutlaka ayrıcalık aracılığıyla birleştirilmesi gerekmemesidir.
Örneğin, parolaları depolayan güvenli, korumalı bir bileşenin kendisine ayrıcalık
tanınmayabilir. Geçmişte, işletim sistemi tasarımcıları, güvenli bileşeni son derece ayrıcalıklı
hale getirerek yalıtım ihtiyaçlarını karşılamayı seçiyordu, ancak bu, bu bileşen tehlikeye
girdiğinde sistemin güvenliği için net bir kayıpla sonuçlanıyor.
Bu bölümün geri kalanında bu katmanlar ve alt sistemler açıklanmaktadır.
21.3 Sistem Bileşenleri 839
Machine Translated by Google

21.3.1 Hyper-V Hiper Yönetici

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.

21.3.2 Güvenli Çekirdek

Güvenli çekirdek, yalıtılmış (VTL 1) kullanıcı modu Trustlet uygulamalarının (Windows


güvenlik modelinin parçalarını uygulayan uygulamalar) çekirdek modu ortamı olarak
işlev görür . Çekirdeğin yaptığı aynı sistem çağrısı arabirimini sağlar, böylece tüm
kesintiler, istisnalar ve bir VTL 1 Trustlet'ten çekirdek moduna girme girişimleri,
bunun yerine güvenli çekirdeğe girer. Ancak, güvenli çekirdek bağlam değiştirme, iş
parçacığı programlama, bellek yönetimi, süreçler arası iletişim veya diğer standart
çekirdek görevlerinden herhangi birine dahil değildir. Ek olarak, VTL 1'de çekirdek
modu sürücüleri yoktur . Secure World'ün saldırı yüzeyini azaltmak amacıyla, bu
karmaşık uygulamalar Normal World bileşenlerinin sorumluluğunda kalır. Böylece,
güvenli çekirdek, kaynaklarının yönetimini, sayfalama, zamanlama ve daha fazlasını
VTL 0'daki normal çekirdek hizmetlerine devreden bir tür "vekil çekirdek" görevi
görür. Bu, Güvenli Dünya'yı reddedilmeye karşı savunmasız hale getirir. - hizmet
saldırıları, ancak bu, hizmet garantilerinden çok veri gizliliğine ve bütünlüğüne değer
veren güvenlik tasarımının makul bir karşılığıdır.

Sistem çağrılarını yönlendirmeye ek olarak, güvenli çekirdeğin diğer


sorumluluğu, donanım sırlarına, güvenilir platform modülüne (TPM) ve önyükleme
sırasında yakalanan kod bütünlüğü ilkelerine erişim sağlamaktır. Bu bilgilerle
Trustlet'ler, Normal Dünyanın elde edemediği anahtarlarla verileri şifreleyebilir ve
şifrelerini çözebilir ve Güvenli Dünya dışında taklit edilemeyen veya çoğaltılamayan
bütünlük belirteçleriyle raporları imzalayabilir ve onaylayabilir (Microsoft tarafından
ortak imzalanır). İkinci Düzey Adres Çevirisi (SLAT) adı verilen bir CPU özelliği kullanan
güvenli çekirdek, sanal belleği, onu destekleyen fiziksel sayfaların Normal Dünya'dan
hiç görülemeyeceği şekilde tahsis etme yeteneği de sağlar. Windows 10, Credential
Guard adlı bir özellik aracılığıyla kurumsal kimlik bilgilerinin ek korunmasını sağlamak
için bu yetenekleri kullanır.
Ayrıca, Device Guard (daha önce bahsedilen) etkinleştirildiğinde, tüm dijital imza
denetimlerini güvenli çekirdeğe taşıyarak VTL 1 özelliklerinden yararlanır. Bu, bir
yazılım güvenlik açığı yeteneği aracılığıyla saldırıya uğrasa bile, normal çekirdeğin
imzasız sürücüleri yüklemeye zorlanamayacağı anlamına gelir, çünkü bunun
gerçekleşmesi için VTL 1 sınırının ihlal edilmesi gerekir. Device Guard ile korunan bir
sistemde, VTL 0'daki bir çekirdek modu sayfasının yürütme yetkisine sahip olması
için, çekirdeğin önce güvenli çekirdekten izin istemesi gerekir ve yalnızca güvenli
çekirdek bu sayfaya yürütülebilir erişim verebilir. Daha güvenli dağıtımlar
Machine Translated by Google

840 Bölüm 21 Windows 10

(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.3 Donanım-Soyutlama Katmanı


HAL , işletim sisteminin üst düzeylerinden donanım yonga seti farklılıklarını gizleyen
yazılım katmanıdır . HAL , çekirdek gönderici, yönetici ve aygıt sürücüleri tarafından
kullanılan bir sanal donanım arabirimini dışa aktarır . Hangi destek yongaları mevcut
olursa olsun, her CPU mimarisi için her aygıt sürücüsünün yalnızca tek bir sürümü
gerekir . 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.

21.3.4 Çekirdek

Windows'un çekirdek katmanı aşağıdaki ana sorumluluklara sahiptir: iş parçacığı


zamanlaması ve bağlam değiştirme, düşük seviyeli işlemci senkronizasyonu, kesinti
ve istisna işleme ve sistem çağrısı arabirimi aracılığıyla kullanıcı modu ile çekirdek
modu arasında geçiş yapma. Ek olarak, çekirdek katmanı, önyükleyiciden devralan
ve Windows işletim sistemine geçişi resmileştiren ilk kodu uygular. Ayrıca
beklenmeyen bir istisna, onaylama veya başka bir tutarsızlık durumunda çekirdeği
güvenli bir şekilde çökerten ilk kodu da uygular. Çekirdek çoğunlukla C dilinde,
yalnızca donanım mimarisinin en düşük seviyesiyle arayüz oluşturmak için kesinlikle
gerekli olduğunda ve doğrudan kayıt erişimi gerektiğinde montaj dilini kullanarak
uygulanır.

21.3.4.1 Sevkiyat

Görevlisi Sevkiyat görevlisi, 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ı), işlemler arası veya kesintiler
(IPI'ler) ve istisna gönderimidir. Ayrıca donanımı yönetir ve
Machine Translated by Google

21.3 Sistem Bileşenleri 841

kesme istek seviyeleri (IRQL'ler) sistemi altında yazılım kesintisi önceliklendirmesi .

21.3.4.2 Kullanıcı Modu ve Çekirdek Modu İş Parçacıkları Arasında Geçiş Yapma

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.

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
21.7.3.7'de daha ayrıntılı olarak açıklanmıştır.
Windows'ta dağıtıcı, çekirdekte çalışan ayrı bir iş parçacığı değildir.
Bunun yerine, gönderici kodu, bir UT iş parçacığının KT bileşeni tarafından yürütülür . Bir iş
parçacığı, diğer işletim sistemlerinde bir çekirdek iş parçacığının çağrılmasına neden olan
aynı koşullarda çekirdek moduna girer. Bu aynı koşullar, KT'nin diğer işlemlerinden sonra,
mevcut çekirdekte bir sonraki hangi iş parçacığının çalışacağını belirleyerek gönderici
kodundan geçmesine neden olacaktır.

21.3.4.3 Dişler

Diğer birçok modern işletim sistemi gibi, Windows da iş parçacıklarını, iş parçacığı


kapsayıcıları olarak hizmet veren işlemlerle birlikte, yürütülebilir kodun programlanabilir
anahtar birimi olarak kullanır. Bu nedenle, her işlemin en az bir iş parçacığı olması gerekir
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 .
Sekiz olası iş parçacığı durumu vardır: başlatılıyor, hazır, ertelenmiş hazır,
bekleme, çalışıyor, bekliyor, geçiş ve sonlandırıldı. hazır , iş parçacığının
yürütülmeyi beklediğini belirtirken, ertelenmiş hazır , iş parçacığının belirli bir
işlemcide çalışmak üzere seçildiğini ancak henüz programlanmadığını belirtir.
Bir işlemci çekirdeğinde 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ığı farklı bir işlemcideki başka bir iş parçacığını önlüyorsa, o işlemcide
bekleme durumuna alınır, bu da çalıştırılacak bir sonraki iş parçacığı olduğu anlamına gelir.
Öncelik anındadır— mevcut iş parçacığı kuantumunu bitirme şansına sahip değildir. Bu
nedenle, işlemci diğer işlemciye bir iş parçacığının bekleme durumunda olduğunu ve
yürütme için hemen alınması gerektiğini bildirmek için bir yazılım kesintisi (bu durumda bir
ertelenmiş prosedür çağrısı (DPC)) gönderir. İlginç bir şekilde, başka bir işlemci bu işlemcide
çalışacak daha yüksek öncelikli bir iş parçacığı bulursa , bekleme durumundaki bir iş
parçacığının kendisi önlenebilir. Bu noktada, daha yüksek öncelikli yeni iş parçacığı bekleme
moduna geçecek ,
842 Bölüm
Machine Translated by Google 21 Windows 10

ve önceki iş parçacığı hazır durumuna gidecektir . Bir iş parçacığı, gönderici nesnesinin


sinyallenmesini beklerken bekleme durumundadır. Yürütme için gerekli kaynakları beklerken
bir iş parçacığı geçiş durumundadır; örneğin, çekirdek yığınının ikincil depolamadan disk
belleğine alınmasını bekliyor olabilir. Bir iş parçacığı , yürütmeyi bitirdiğinde sonlandırılmış
duruma girer ve bir iş parçacığı , ilk kez hazır olmadan önce, oluşturulurken başlatma
durumunda başlar.

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.

Windows Server 2003'ten önce, dağıtım programı veritabanı küreseldi ve bu da büyük


CPU sistemlerinde yoğun çekişmelere neden oluyordu. Windows Server 2003 ve sonraki
sürümlerde, genel veritabanı, işlemci başına kilitlerle işlemci başına veritabanlarına
bölünmüştür. Bu yeni modelle, bir iş parçacığı yalnızca ideal işlemcisinin veritabanında
olacaktır. Böylece, veri tabanında bulunduğu işlemciyi içeren bir işlemci benzerliğine sahip
olması garanti edilir.
Dağıtıcı artık en yüksek bit seti ile ilişkili listedeki ilk iş parçacığını seçebilir ve genel bir kilit
alması gerekmez. Bu nedenle gönderme, makinedeki tüm CPU'lar arasında paralel hale
getirilebilen sabit zamanlı bir işlemdir .

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 .

Muteks, semafor veya olay eşzamanlama nesnelerinde bekleyen iş parçacıklarına


başka bir yükseltme türü uygulanır. Çekirdek sürücülerinin farklı bir değişiklik yapma
seçeneği olmasına rağmen, bu yükseltme genellikle bir öncelik düzeyinde sabit kodlanmış
bir değerdir. (Örneğin, çekirdek modu GUI kodu, pencere mesajlarını işlemek için uyanan
tüm GUI iş parçacıklarına iki öncelik düzeyinde bir artış uygular .)
Bu strateji, bir kilit veya başka bir bildirim mekanizmasının sinyallendiği zaman ile sıradaki
bir sonraki garsonun durum değişikliğine yanıt olarak yürütmesi arasındaki gecikmeyi
azaltmak için kullanılır.
Ek olarak, kullanıcının aktif GUI penceresiyle ilişkili iş parçacığı, herhangi bir nedenle
uyandığında, yanıt süresini artırmak için mevcut herhangi bir artırmaya ek olarak iki
öncelik artışı alır. Ön plan önceliği ayırma desteği olarak adlandırılan bu strateji, etkileşimli
iş parçacıklarına iyi yanıt süreleri verme eğilimindedir.

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.

İş parçacıkları, beklemelerden uyandıklarında artırılmış önceliklerle çalışabileceğinden,


iş parçacığı temel (ilk) önceliğinin üzerinde olduğu sürece, her kuantumun sonunda bir iş
parçacığının önceliği azalır. Bu, aşağıdaki kurala göre yapılır: Bir olay, muteks veya semafor
nedeniyle uyanma nedeniyle hızlandırılan G/Ç iş parçacıkları ve iş parçacıkları için kuantum
sonunda bir öncelik düzeyi kaybolur.
Kilit aktarma artırması veya ön plan önceliği ayırma artırması nedeniyle hızlandırılan iş
parçacıkları için, hızlandırmanın tüm değeri kaybolur. Her iki türden de artırma alan ileti
dizileri, bu kuralların her ikisine de uyacaktır (ilk artırmanın bir düzeyini ve ikinci artırmanın
tamamını kaybeder). İş parçacığının önceliğini düşürmek, artırmanın yalnızca gecikmeyi
azaltmak ve G/Ç aygıtlarını meşgul tutmak için uygulanmasını, bağlı iş parçacıklarını
hesaplamak için gereksiz yürütme tercihi vermemesini sağlar.

21.3.4.4 İş Parçacığı Zamanlama

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.

Göndericide çalışmasına neden olan bir olayı gerçekleştiren, bekleyen iş parçacığını


uyandıran ve kendisini hazır duruma geri getirirken hemen ona bağlam geçişi yapan,
düşük öncelikli iş parçacığının kendisidir . Bu model, esas olarak, zamanlama mantığını
düzinelerce Windows çekirdeği işlevi boyunca dağıtır ve o anda çalışan her bir iş
parçacığının zamanlama varlığı gibi davranmasını sağlar. Buna karşılık, diğer işletim
sistemleri, bir zamanlayıcıya dayalı olarak periyodik olarak tetiklenen harici bir "zamanlayıcı
iş parçacığına" dayanır. Windows yaklaşımının avantajı , mevcut iş parçacığının zamanlayıcı
çalışması gerçekleştirmesine neden olan her G/Ç ve diğer durum değiştiren işlemlerde ek
yük maliyetiyle birlikte gecikmeyi azaltmadır .

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.

Windows Vista'dan başlayarak, yürütme süresi, Pentium Pro'dan bu yana tüm


işlemcilerde bulunan donanım zaman damgası sayacı (TSC) kullanılarak da izlenir.
TSC'nin kullanılması, CPU kullanımının daha doğru bir şekilde hesaplanmasıyla
sonuçlanır ( onu kullanan uygulamalar için - Görev Yöneticisinin kullanmadığını
unutmayın) ve ayrıca zamanlayıcının, tam bir kuantum için çalışmadan önce iş
parçacıklarını değiştirmemesine neden olur. Ek olarak, Windows 7 ve sonraki sürümleri,
TSC'yi ISR'ye ve DPC'ye kadar izler ve şarj eder, bu da daha doğru "Kesinti Süresi"
ölçümleriyle sonuçlanır (yine, bu yeni ölçümü kullanan araçlar için). Tüm olası yürütme
süresi artık hesaba katıldığından, bunu boşta kalma süresine eklemek ( TSC kullanılarak
da izlenir) ve belirli bir dönemdeki tüm olası CPU döngülerinden CPU döngülerinin tam
sayısını doğru bir şekilde hesaplamak (nedeniyle) mümkündür. modern işlemcilerin
dinamik olarak değişen frekanslara sahip olması ve bu da döngüsel olarak doğru CPU
kullanım ölçümleriyle sonuçlanır. Microsoft'un SysInternals İşlem Gezgini gibi araçlar,
bu mekanizmayı kullanıcı arabirimlerinde kullanır.

21.3.4.5 Senkronizasyon İlkellerinin Uygulanması Windows ,

sistemdeki gönderimi ve senkronizasyonu kontrol etmek için bir dizi gönderici nesnesi
kullanır. Bu nesnelerin örnekleri aşağıdakileri içerir:

• Olay , bir olay oluşumunu kaydetmek ve bu oluşumu bazı eylemlerle senkronize


etmek için kullanılır. Bildirim olayları tüm bekleyen dizileri işaret eder ve
senkronizasyon olayları tek bir bekleyen diziyi işaret eder.

• 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 .

• İş parçacığı , çekirdek dağıtıcısı tarafından zamanlanan varlıktır. Bir sanal adres


alanını, açık kaynakların listesini ve daha fazlasını içeren bir işlemle ilişkilidir. İş
parçacığı, iş parçacığı çıktığında ve işlem, işlem çıktığında (yani, tüm iş parçacıkları
çıktığında) bildirilir.

• Zamanlayıcı , işlemler çok uzun sürdüğünde ve kesintiye uğraması gerektiğinde


veya periyodik bir faaliyetin planlanması gerektiğinde süreyi takip etmek ve zaman
aşımlarını bildirmek için kullanılır. Olaylar gibi, zamanlayıcılar da bildirim modunda
(tümüne sinyal gönder) veya senkronizasyon modunda (sinyal bir) çalışabilir.

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

846 Bölüm 21 Windows 10

işletim sisteminin yanı sıra diğer iş parçacıklarıyla da senkronize edin (bkz. Bölüm 21.7.1).

21.3.4.6 Kesinti İsteği Düzeyleri (IRQL'ler)

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.

Windows IRQL'leri Şekil 21.2'de tanımlanmıştır.

21.3.4.7 Yazılım Kesintileri: Asenkron ve Ertelenmiş Prosedür Çağrıları Dağıtıcı iki tür

yazılım kesmesi uygular: asenkron prosedür çağrıları (APC'ler) ve ertelenmiş prosedür


çağrıları (daha önce bahsedilen DPC'ler ).
APC'ler , mevcut iş parçacıklarını askıya almak veya sürdürmek, iş parçacıklarını
sonlandırmak, eşzamansız bir G/Ç'nin tamamladığı bildirimlerini iletmek ve çalışan bir
iş parçacığından CPU kayıtlarının (bağlam) içeriğini çıkarmak veya değiştirmek için
kullanılır . APC'ler belirli iş parçacıklarına kuyruğa alınır ve sistemin bir işlemin
bağlamında hem sistem hem de kullanıcı kodunu yürütmesine izin verir. Bir APC'nin
kullanıcı modunda yürütülmesi rastgele zamanlarda gerçekleşemez, ancak yalnızca iş
parçacığı beklerken ve uyarılabilir olarak işaretlendiğinde gerçekleşir. Buna karşılık, bir
APC'nin çekirdek modu yürütmesi , varsayılan IRQL 0'dan (PASİF DÜZEY) daha yüksek
olan IRQL 1'de (APC DÜZEYİ) çalışan bir yazılım kesmesi olarak teslim edildiğinden,
çalışan bir iş parçacığı bağlamında anında yürütülür. . Ek olarak, bir iş parçacığı çekirdek
modunda bekliyor olsa bile, bekleme APC tarafından kesilebilir ve APC yürütmeyi tamamladıktan sonra devam ettirilebili

kesme seviyeleri kesinti türleri

31 makine kontrolü veya veri yolu hatası

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

Şekil 21.2 Windows x86 kesme isteği seviyeleri (IRLQ'lar).


21.3 Sistem Bileşenleri 847
Machine Translated by Google

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.

21.3.4.8 İstisnalar, Kesintiler ve IPI'ler Çekirdek

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:

• Tamsayı veya kayan nokta taşması •

Tamsayı veya kayan noktayı sıfıra bölme • Geçersiz

talimat • Veri yanlış hizalaması • Ayrıcalıklı talimat

• Erişim ihlali

• Disk belleği dosyası kotası aşıldı

• Hata ayıklayıcı kesme noktası

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

21.3 Sistem Bileşenleri 849

Yönetici, nesne yönelimli tasarım ilkelerine göre organize edilmiştir.


Windows'taki nesne türü , davranışını tanımlamaya yardımcı olan bir dizi özniteliğe
(veri değerleri) ve bir dizi yönteme (örneğin işlevler veya işlemler) sahip sistem
tanımlı bir veri türüdür. Bir nesne , bir nesne türünün bir örneğidir.
Yönetici, öznitelikleri verileri depolayan ve yöntemleri etkinlikleri gerçekleştiren bir
dizi nesne kullanarak işini gerçekleştirir.

21.3.5.1 Nesne Yöneticisi


Çekirdek modu varlıklarını yönetmek için Windows, kullanıcı modu programları
tarafından manipüle edilen genel bir arabirimler kümesi kullanır. Windows bu varlık
nesnelerini çağırır ve bunları yöneten yönetici bileşen nesne yöneticisidir. Dosyalar,
kayıt defteri anahtarları, aygıtlar, ALPC bağlantı noktaları, sürücüler, muteksler,
olaylar, işlemler ve iş parçacıkları örnek olarak verilebilir. Daha önce gördüğümüz
gibi, muteksler ve işlemler gibi bunlardan bazıları, gönderici nesneleridir; bu, iş
parçacıklarının, bu nesnelerden herhangi birinin sinyallenmesini bekleyen
göndericide engelleyebileceği anlamına gelir. Ek olarak, gönderici olmayan
nesnelerin çoğu, onu kontrol eden yürütme hizmeti tarafından işaret edilen bir
dahili gönderici nesnesi içerir. Örneğin, dosya nesnelerinin gömülü bir olay nesnesi
vardır ve bu, bir dosya değiştirildiğinde bildirilir.
Kullanıcı modu ve çekirdek modu kodu, birçok API tarafından döndürülen ,
tanıtıcı adı verilen opak bir değer kullanarak bu nesnelere erişebilir . Her işlemin,
işlem tarafından kullanılan nesneleri izleyen girişleri içeren bir tanıtıcı tablosu vardır.
Kullanıcı kodundan korunan ve çekirdek modu kodu tutamaçları manipüle ederken
kullanılan kendi tutamaç tablosuna sahip bir “sistem süreci” (bkz. Bölüm 21.3.5.11)
vardır. Windows'taki tutamaç tabloları, 1.024 tutamacı tutmaktan 16 milyonun
üzerine kadar genişleyebilen bir ağaç yapısıyla temsil edilir. Tutamaçları kullanmaya
ek olarak, çekirdek modu kodu, özel bir API çağırarak elde etmesi gereken
başvurulan işaretçiyi kullanarak bir nesneye de erişebilir . Tutamaçlar kullanıldığında,
nesne üzerinde aktif bir referans tutmaktan kaçınmak için sonunda kapatılmaları
gerekir. Benzer şekilde, çekirdek kodu başvurulan bir işaretçi kullandığında,
başvuruyu bırakmak için özel bir API kullanmalıdır .
Bir nesne yaratılarak, var olan bir nesneyi açarak, çoğaltılmış bir tanıtıcı alarak
veya bir üst süreçten bir tanıtıcı devralarak bir tanıtıcı elde edilebilir. Geliştiricilerin
tutamaçlarını kapatmayı unutabilecekleri soruna geçici bir çözüm bulmak için, bir
sürecin tüm açık tanıtıcıları, çıktığında veya sonlandırıldığında örtük olarak kapatılır.
Ancak, çekirdek tanıtıcıları sistem genelindeki tanıtıcı tablosuna ait olduğundan, bir
sürücü kaldırıldığında, tutamaçları otomatik olarak kapanmaz ve bu, sistemde
kaynak sızıntılarına neden olabilir.
Nesne yöneticisi, nesne tanıtıcıları oluşturan tek varlık olduğundan, güvenliği
kontrol etmek için güvenlik referans izleyicisini (SRM) (bkz. Bölüm 21.3.5.7) çağırmayı
merkezileştirmek için doğal yerdir. Bir nesneyi açma girişiminde bulunulduğunda,
nesne yöneticisi, bir işlemin veya iş parçacığının nesneye erişim hakkına sahip olup
olmadığını kontrol etmek için SRM'yi arar. Erişim denetimi başarılı olursa, elde edilen
haklar ( erişim maskesi olarak kodlanmış) tanıtıcı tablosunda önbelleğe alınır. Bu
nedenle, opak tanıtıcı hem çekirdekteki nesneyi temsil eder hem de nesneye verilen
erişimi tanımlar. Bu önemli optimizasyon, bir dosyaya yazıldığında (saniyede yüzlerce
kez gerçekleşebilir), tanıtıcı zaten şu şekilde kodlandığından güvenlik kontrollerinin
tamamen atlandığı anlamına gelir.
850 Bölüm
Machine Translated by Google 21 Windows 10

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).

Nesne yöneticisi, Windows dahili ad alanını korur. Dosya sisteminde sistem ad


alanını köklendiren UNIX'in aksine, Windows yalnızca bellekte veya hata ayıklayıcı
gibi özel araçlar aracılığıyla görülebilen soyut bir nesne yöneticisi ad alanı kullanır .
Dosya sistemi dizinleri yerine, hiyerarşi, diğer nesnelerin (diğer dizin nesneleri dahil)
bir karma kovasını içeren dizin nesnesi adı verilen özel bir nesne türü tarafından
korunur. Bazı nesnelerin adları olmadığını (iş parçacığı gibi) ve hatta diğer nesneler
için bile, bir nesnenin adının olup olmadığının yaratıcısına bağlı olduğunu unutmayın.
Örneğin, bir süreç yalnızca diğer süreçlerin muteksin durumunu bulmasını, elde
etmesini veya sorgulamasını istiyorsa bir muteks olarak adlandırır.

İşlemler ve iş parçacıkları adsız oluşturulduğundan, işlem kimliği (PID) veya iş


parçacığı (TID) gibi ayrı bir sayısal tanımlayıcı aracılığıyla başvurulur . Nesne yöneticisi,
ad alanındaki sembolik bağları da destekler. Örnek olarak, DOS sürücü harfleri
sembolik bağlantılar kullanılarak uygulanır; Global? C: Device HarddiskVolumeN
cihaz nesnesine sembolik bir bağlantıdır ve Device dizininde takılı bir dosya sistemi
birimini temsil eder .

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:

1. Bir uygulama, C: foo bar.doc adlı bir dosyanın açılmasını ister.


2. Nesne yöneticisi, HarddiskVolume2 aygıt nesnesini bulur, nesnenin türünden
ayrıştırma prosedürünü (örneğin, IopParseDevice) arar ve onu dosya sisteminin
kök dizinine göre dosya adıyla çağırır.

3. IopParseDevice() , Hard DiskVolume2 birimine sahip olan dosya sistemini arar


ve ardından birimde foo bar.doc'a nasıl erişileceğini arayan dosya sistemini
çağırır ve foo dizininin kendi dahili ayrıştırmasını gerçekleştirir . bar.doc
dosyasını bulun . Dosya sistemi daha sonra bir dosya nesnesi tahsis eder ve
onu G/Ç yöneticisinin ayrıştırma rutinine döndürür.
4. Dosya sistemi geri döndüğünde, nesne yöneticisi mevcut işlem için tutamaç
tablosundaki dosya nesnesi için bir girdi tahsis eder ve tanıtıcıyı uygulamaya
döndürür.

Dosya başarıyla açılamıyorsa, IopParseDevice uygulamaya bir hata göstergesi


döndürür.

21.3.5.2 Sanal Bellek Yöneticisi Sanal


adres alanını, fiziksel bellek tahsisini ve sayfalamayı yöneten yönetici bileşen bellek
yöneticisidir (MM). MM'nin 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 aynı fiziksel sayfa çerçevesine birden çok sayfa tablosu girişinin
eşlenmesine izin verdiğini varsayar. Windows'taki MM , donanım tarafından
desteklenen sayfa boyutlarına (4 KB, 2 MB ve 1 GB) dayalı sayfa tabanlı bir yönetim
şeması kullanır . Fiziksel bellekte olmayan bir işleme tahsis edilen veri sayfaları, ya
ikincil depolamadaki disk belleği dosyasında depolanır ya da doğrudan yerel ya da
uzak dosya sistemindeki normal bir dosyaya eşlenir. Bir sayfa, aynı zamanda, sayfayı
eşlenmeden önce sıfırlarla başlatan ve böylece önceki içeriği silen, istek üzerine sıfır
doldur olarak işaretlenebilir.

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.

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) ikincil depolama 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, yalnızca yürütme, erişim yok veya yazma üzerine kopyalama olarak
ayarlanabilir.
Bu koruma ayarlarından son ikisine daha yakından bakalım:

• 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

21.3 Sistem Bileşenleri 853

• Yazma üzerine kopyalama mekanizması , MM'nin fiziksel belleği daha verimli


kullanmasını sağlar. İki işlem aynı bölüm nesnesinden bağımsız veri kopyaları
istediğinde, MM tek bir paylaşılan kopyayı sanal belleğe yerleştirir ve o bellek
bölgesi için yazma üzerine kopyalama özelliğini etkinleştirir. İşlemlerden biri,
yazma üzerine kopyalama sayfasındaki verileri değiştirmeye çalışırsa, MM , işlem
için sayfanın özel bir kopyasını oluşturur.

Ç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 dizini işaretçi tablosu

işaretçi 0 işaretçi 1 işaretçi 2 işaretçi 3

sayfa sayfa sayfa sayfa sayfa sayfa


dizini girişi dizini 0 dizini girişi dizini girişi dizini 3 dizini girişi
0 511 0 511

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

Şekil 21.3 Sayfa-tablo düzeni.


Machine Translated by Google

854 Bölüm 21 Windows 10


31 0

PTR PDE indeksi PTE indeksi sayfa ofseti

Şekil 21.4 IA-32'de sanaldan fiziksele adres çevirisi.

sadece 8 MB. Ek olarak, MM , PDE'lerin ve PTE'lerin sayfalarını gerektiği gibi tahsis


eder ve kullanılmadığında sayfa tablosu sayfalarını ikincil depolamaya taşır, böylece
her bir işlem için sayfalama yapılarının fiili fiziksel bellek ek yükü genellikle yaklaşık
2 KB olur. 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 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

856 Bölüm 21 Windows 10

• Ü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

tarafından yazılmıştır ve başka bir işlem tarafından kullanılmadan önce ikincil


depolamaya gönderilmelidir.

• Bekleme sayfası, ikincil depolamada zaten depolanmış bilgilerin bir kopyasıdır.


Bekleme sayfaları, değiştirilmemiş sayfalar, ikincil depolamaya önceden yazılmış
değiştirilmiş sayfalar veya yakında kullanılmaları beklendiği için önceden getirilmiş
sayfalar olabilir. • Bir donanım hatası algılandığından bozuk sayfa kullanılamaz. •

İ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).

İşlemlerin sayfa tablolarında geçerli sayfalar bulunurken, diğer durumlardaki sayfalar


durum tipine göre ayrı listelerde tutulur. Ayrıca, performansı artırmak ve bekleme
sayfalarının agresif geri dönüşümüne karşı koruma sağlamak için Windows Vista ve
sonraki sürümler, sekiz öncelikli bekleme listesi uygular.
Listeler, her bir fiziksel bellek sayfası için bir giriş içeren sayfa çerçeve numarası (PFN)
veritabanındaki karşılık gelen girişleri birbirine bağlayarak oluşturulur . PFN girişleri
ayrıca referans sayıları, kilitler ve NUMA bilgileri gibi bilgileri içerir . PFN veri tabanının
fiziksel bellek sayfalarını, PTE'lerin ise sanal bellek sayfalarını temsil ettiğini unutmayın .

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.

21.3.5.3 Process Manager


Windows süreç yöneticisi, süreçlerin, iş parçacıklarının ve işlerin yaratılması,
silinmesi, sorgulanması ve yönetilmesi için hizmetler sağlar. bilgisi yok
21.3 Sistem Bileşenleri 859
Machine Translated by Google

Ebeveyn-çocuk ilişkileri veya süreç hiyerarşileri hakkında, ancak işlerdeki süreçleri


gruplayabilir ve ikincisi, daha sonra sürdürülmesi gereken hiyerarşilere sahip olabilir.
Süreç yöneticisi, kendi sahip süreçlerinde iş parçacıklarının önceliklerini ve
yakınlıklarını belirlemek dışında, iş parçacıklarının programlanmasıyla da ilgilenmez.
Ek olarak, işler aracılığıyla süreç yöneticisi, iş parçacıkları üzerindeki zamanlama
özniteliklerinde (kısma oranları ve kuantum değerleri gibi) çeşitli değişiklikleri
etkileyebilir. Bununla birlikte, uygun iş parçacığı planlaması, çekirdek göndericisinde
gerçekleşir.
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 orijinal 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ırlamalar getirmekti. Böylece iş nesneleri, büyük veri
merkezi makinelerini yönetmek için kullanıldı. Windows XP ve sonraki sürümlerde, iş
nesneleri güvenlikle ilgili özellikler sağlayacak şekilde genişletildi ve Google Chrome
gibi bir dizi üçüncü taraf uygulaması bu amaçla işleri kullanmaya başladı. Windows
8'de, büyük bir mimari değişiklik, işlerin genel CPU kısıtlamasının yanı sıra kullanıcı
başına oturuma duyarlı adalet kısma/dengeleme yoluyla zamanlamayı etkilemesine
izin verdi. Windows 10'da, daraltma desteği, ikincil depolama G/ Ç'sine ve ağ G/
Ç'sine de genişletildi . Ek olarak, Windows 8, sistemin doğru bir şekilde hesaplaması
gereken sınırlar, oranlar ve kotalardan oluşan hiyerarşiler oluşturarak iş nesnelerinin
iç içe geçmesine izin verdi. İş nesnelerine ek güvenlik ve güç yönetimi özellikleri de
verildi.
Sonuç olarak, tüm Windows Mağazası uygulamaları ve tüm UWP uygulama
süreçleri işlerde çalışır. Daha önce tanıtılan DAM, işleri kullanarak Bağlı Bekleme
desteğini uygular. Son olarak, Windows 10'un bulut tekliflerinin önemli bir parçası
olan Docker Containers desteği, silolar olarak adlandırdığı iş nesnelerini kullanır .
Böylece işler, ezoterik bir veri merkezi kaynak yönetimi özelliği olmaktan çıkıp, çoklu
özellikler için süreç yöneticisinin temel mekanizmasına dönüştü.

Windows'un katmanlı mimarisi ve ortam alt sistemlerinin varlığı nedeniyle süreç


oluşturma oldukça karmaşıktır. Windows 10 altında Win32 ortamında işlem oluşturma
örneği aşağıdaki gibidir. UWP “Modern” Windows Mağazası uygulamalarının ( paket
uygulamalar veya “AppX” olarak adlandırılır) başlatılmasının önemli ölçüde daha
karmaşık olduğunu ve bu tartışmanın kapsamı dışındaki faktörleri içerdiğini
unutmayın.

1. Bir Win32 uygulaması CreateProcess()'i çağırır .


2. Bir dizi parametre dönüşümü ve davranışsal dönüşüm yapılır
Win32 dünyasından NT dünyasına.

3. CreateProcess() daha sonra , süreci ve onun ilk iş parçacığını fiilen oluşturmak


için NT yöneticisinin süreç yöneticisinde NtCreateUserProcess() API'sini çağırır .

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

5. İşlem yöneticisi, bir iş parçacığı nesnesi oluşturmak için nesne yöneticisini


yeniden çağırır ve tanıtıcıyı Win32'ye döndürür. Ardından, iş parçacığı ortam
bloğunu (TEB) oluşturmak için bellek yöneticisini ve iş parçacığının zamanlama
özniteliklerini başlatmak için göndericiyi çağırır ve durumunu başlatmaya
ayarlar.

6. İşlem yöneticisi ilk iş parçacığı başlatma bağlamını yaratır (sonunda uygulamanın


main() rutinine işaret eder), zamanlayıcıdan iş parçacığını hazır olarak
işaretlemesini ister ve ardından hemen askıya alarak bekleme durumuna getirir.

7. Win32 alt sistemine işlemin oluşturulmakta olduğunu bildiren bir mesaj


gönderilir . Alt sistem , kapatma düzeyini hesaplamak ve animasyonlu kum
saati veya "çörek" fare imlecini çizmek gibi işlemi başlatmak için Win32'ye özgü
ek işler gerçekleştirir.
8. CreateProcess()' te , ana süreç içinde, sürecin ilk iş parçacığını uyandırmak için
ResumeThread() API'si çağrılır.
Kontrol ebeveyne döner.
9. Şimdi, yeni işlemin ilk iş parçacığında, kullanıcı modu bağlantı yükleyicisi kontrolü
ele alır ( tüm işlemlere otomatik olarak eşlenen ntdll.dll'nin içinde). Uygulamanın
tüm kitaplık bağımlılıklarını (DLL'ler) yükler , ilk yığınını oluşturur, istisna işleme
ve uygulama uyumluluğu seçeneklerini ayarlar ve sonunda uygulamanın main()
işlevini çağırır.

Sanal belleği ve iş parçacıklarını işlemek ve tutamaçları çoğaltmak için Windows


API'leri bir işlem tanıtıcısı alır, böylece alt sistemleri ve diğer hizmetleri, işlem
oluşturma konusunda bilgilendirildiğinde, doğrudan yeni işlemin içinde yürütmek
zorunda kalmadan yeni işlem adına işlemler gerçekleştirebilir. bağlam. Windows
ayrıca bir UNIX çatal() süreç oluşturma stilini de destekler. İşlem çökmeleri sırasında
Windows hata raporlama (WER) altyapısı tarafından , yanı sıra
kullanılan
Linux'unişlem
Linux
yansımasının
fork() API'sini
uygulaması için Windows alt sistemi de dahil olmak üzere bir dizi özellik bu yeteneğe
bağlıdır.

İşlem yöneticisindeki hata ayıklayıcı desteği, dizileri askıya almak ve sürdürmek


ve askıya alınmış modda başlayan diziler oluşturmak için API'leri içerir.
Bir iş parçacığının kayıt bağlamını alıp ayarlayan ve başka bir işlemin sanal belleğine
erişen işlem yöneticisi API'leri de vardır. Mevcut süreçte iş parçacıkları oluşturulabilir;
başka bir işleme de enjekte edilebilirler. Hata ayıklayıcı, hata ayıklanan bir işlem
içinde kodu yürütmek için iş parçacığı enjeksiyonunu kullanır.
Ne yazık ki, işlemler arasında hem bellek hem de iş parçacığı tahsis etme, işleme ve enjekte
etme yeteneği genellikle kötü amaçlı programlar tarafından kötüye kullanılı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, MM , bir işlemin çalışma
kümesine veya sayfa tablolarına erişmesi gerektiğinde iş parçacığı eklemeyi
kullanabilir ve G/Ç yöneticisi bunu, eşzamansız G/Ç işlemleri için bir işlemdeki durum
değişkenini güncellemek için kullanabilir .
Machine Translated by Google

21.3 Sistem Bileşenleri 861

21.3.5.4 İstemci-Sunucu Bilişimi için Olanaklar Diğer

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.

Bir Windows bilgisayardaki bu tür en temel "sunucu" , Windows 95/98


günlerinden devralınan Win32 API'sinin işletim sistemi kişiliğini uygulayan sunucu
olan Win32 ortam alt sistemidir . Kullanıcı kimlik doğrulaması, ağ olanakları, yazıcı
biriktirme, Web hizmetleri, ağ dosya sistemleri ve tak-çalıştır gibi birçok başka hizmet
de 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, iş parçacıklarını paylaşmak ve mesajları beklemek için kullanıcı modu iş
parçacığı havuzu olanaklarına güvenerek hizmeti uygulayan bir dinamik bağlantı
kitaplığı (DLL) olarak yüklenir (bkz. Bölüm 21.3.5.3). Ne yazık ki, bu havuzlama,
başlangıçta, kaçak CPU kullanımı ve bellek sızıntılarını sorun giderme ve hata
ayıklama konusunda zayıf kullanıcı deneyimiyle sonuçlandı ve her hizmetin genel
güvenliğini zayıflattı. Bu nedenle, Windows 10'un son sürümlerinde, sistemde 2
GB'den fazla RAM varsa, her DLL hizmeti kendi bireysel svchost.exe işleminde çalışır.

Windows'ta, istemci-sunucu bilgi işlemi uygulamak için önerilen paradigma ,


doğal güvenlikleri, serileştirme hizmetleri ve genişletilebilirlik özellikleri nedeniyle
istekleri iletmek için RPC'leri kullanmaktır . Win32 API , Bölüm 21.6.2.7'de açıklandığı
gibi , MS-RPC adı verilen DCE-RPC protokolünün Microsoft standardını destekler .

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.

Bu noktada mesajlar, UDP gibi davranan ve yanıt gerektirmeyen datagramlar


veya yanıt alması gereken istekler olarak iletişim portları üzerinden gönderilebilir.
İstemci ve sunucu daha sonra ya bir tarafın her zaman engellediği (bir istek beklediği
veya bir yanıt beklediği) eşzamanlı mesajlaşmayı veya iş parçacığı havuzunun
bulunduğu eşzamansız mesajlaşmayı kullanabilir.
862 Bölüm
Machine Translated by Google 21 Windows 10

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.

Posta yuvaları, borular, yuvalar, olaylarla eşleştirilmiş bölüm nesneleri, pencere


mesajları ve daha fazlasını kullanmak gibi, istemci-sunucu iletişimini uygulamanın
birçok olası yolu vardır. Her birinin kullanımları, faydaları ve dezavantajları vardır.
Bununla birlikte, RPC ve ALPC , bu tür iletişim için en tam özellikli, güvenli, güvenli ve
zengin özelliklere sahip mekanizmalar olmaya devam etmektedir ve bunlar, Windows
işlemlerinin ve hizmetlerinin büyük çoğunluğu tarafından kullanılan mekanizmalardır.

21.3.5.5 G/Ç Yöneticisi

G /Ç yöneticisi , sistemdeki tüm aygıt sürücülerinden ve ayrıca sürücülerin birbirleriyle,


çekirdekle ve kullanıcı moduyla iletişim kurmasını sağlayan iletişim modelini
uygulamak ve tanımlamaktan sorumludur. müşteriler ve tüketiciler. Ek olarak, UNIX
tabanlı işletim sistemlerinde olduğu gibi, aygıt bir dosya sistemi olmasa bile G/Ç her
zaman bir fil nesnesine hedeflenir. Windows'taki G/Ç yöneticisi, aygıt sürücülerinin
diğer sürücüler tarafından "filtrelenmesine" izin vererek, G / Ç'nin içinden geçtiği ve
orijinal isteği değiştirmek, genişletmek veya geliştirmek için kullanılabilecek bir aygıt
yığını oluşturur. Bu nedenle, G/Ç yöneticisi her zaman hangi aygıt sürücülerinin ve
filtre sürücülerinin yüklendiğini takip eder.
Dosya sistemi sürücülerinin önemi nedeniyle, G/Ç yöneticisinin onlar için özel
desteği vardır ve dosya sistemlerini yüklemek ve yönetmek için arabirimler uygular.
Bellek eşlemeli dosya G/Ç sağlamak için MM ile birlikte çalışır ve tüm G/Ç sistemi için
önbelleğe almayı yöneten Windows önbellek yöneticisini kontrol eder . G /Ç yöneticisi
temelde eşzamansızdır ve bir G/Ç işleminin tamamlanmasını açıkça bekleyerek
eşzamanlı G/Ç sağlar. G /Ç yöneticisi
21.3 Sistem Bileşenleri 863
Machine Translated by Google

Olayların ayarlanması, çağrı sürecindeki bir durum değişkeninin güncellenmesi, başlangıç iş


parçacıklarına APC'lerin teslimi ve tek bir iş parçacığının G/Ç'yi işlemesine izin veren G / Ç
tamamlama bağlantı noktalarının kullanımı dahil olmak üzere çeşitli eşzamansız G/Ç tamamlama
modelleri sağlar. Diğer birçok iş parçacığından O tamamlamaları. Ayrıca G/Ç istekleri için
arabellekleri de yönetir.
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.
Ek olarak, donanım dışı sürücüler, farklı arabirimleri ortaya çıkarmanın bir yolu olarak aygıt
nesnelerini kullanabilir. Örnek olarak, TCP/IP sürücü nesnesinin sahip olduğu TCP6, UDP6, UDP,
TCP, RawIp ve RawIp6 aygıt nesneleri vardır , ancak bunlar fiziksel aygıtları temsil etmese de.
Benzer şekilde, ikincil depolamadaki her birim, birim yöneticisi sürücü nesnesine ait olan kendi
aygıt nesnesidir.
Bir aygıt nesnesine bir tanıtıcı açıldığında, G/Ç yöneticisi her zaman bir dosya nesnesi
oluşturur ve aygıt tanıtıcısı yerine bir dosya tanıtıcısı döndürür. Daha sonra aldığı istekleri
(oluşturma, okuma ve yazma gibi) G/Ç istek paketi (IRP) adı verilen standart bir forma
dönüştürür. 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
bir G/Ç işlemini inceleyebilir ve potansiyel olarak değiştirebilir. Birim anlık görüntüsü
alma (gölge kopyalar) ve disk şifreleme (BitLocker) , yığındaki birim yöneticisi sürücüsünün
üzerinde yürütülen filtre sürücüleri kullanılarak uygulanan iki yerleşik işlevsellik örneğidir.
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 örneklenmesi ve dinamik biçim
dönüştürme gibi işlevleri uygulamak için kullanılmıştır. Üçüncü taraflar, kötü amaçlı
yazılımdan koruma araçlarını uygulamak için dosya sistemi filtre sürücülerini de kullanır.
Çok sayıda dosya sistemi filtresi nedeniyle, Windows Server 2003 ve sonraki sürümler
artık tek dosya sistemi filtresi olarak işlev gören ve belirli yüksekliklere göre sıralanmış
mini filtreyi yükleyen bir filtre yöneticisi bileşeni içerir (göreceli öncelikler). Bu model,
filtrelerin birbirlerinin isteklerini bilmek zorunda kalmadan verileri ve tekrarlanan sorguları
şeffaf bir şekilde önbelleğe almasına olanak tanır. Ayrıca daha katı yük sıralaması sağlar.

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.

Bağlantı noktası/miniport ve sınıf/minisınıf modeliyle bile, çekirdeğe yönelik önemli


kod yazılmalıdır. Ve bu model, özel donanım veya mantıksal (donanım olmayan)
sürücüler için kullanışlı değildir. Windows 2000 Service Pack 4'ten başlayarak, çekirdek
modu sürücüleri, WDM'nin üzerindeki 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 . Diğer
bir seçenek de , sürücülerin istekleri çekirdeğin G/Ç yığını aracılığıyla ileten çekirdekteki
bir yansıma sürücüsü aracılığıyla kullanıcı modunda yazılmasına izin veren Kullanıcı
Modu Sürücü Çerçevesidir (UMDF) . Bu iki çerçeve , Windows 10'da Sürüm 2.1'e ulaşan
ve KMDF ile UMDF arasında tam uyumlu bir API içeren Windows Driver Foundation
modelini oluşturuyor . GitHub'da tamamen açık kaynaklıdır.

Çoğu sürücünün çekirdek modunda çalışması gerekmediğinden ve sürücüleri


kullanıcı modunda geliştirmek ve dağıtmak daha kolay olduğundan, yeni sürücüler için
UMDF şiddetle önerilir. Ayrıca, kullanıcı modu sürücüsündeki bir arıza, bir çekirdek
(sistem) çökmesine neden olmadığı için sistemi daha güvenilir hale getirir.

21.3.5.6 Önbellek Yöneticisi

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

21.3 Sistem Bileşenleri 865

Ö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

önbelleğe alınmış G/Ç

önbellek yöneticisi dosya sistemi

veri kopyası önbelleğe alınmamış G/Ç

sayfa hatası
sanal makine yöneticisi disk sürücüsü

Şekil 21.6 Dosya G/Ç.


866 Bölüm
Machine Translated by Google 21 Windows 10

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 .

Önbellek yöneticisi, MM'ye önbelleğin içeriğini temizlemesini söylemekten de


sorumludur . Önbellek yöneticisinin varsayılan davranışı, geri yazma önbelleğe almadır: 4
ila 5 saniye boyunca yazmaları biriktirir ve ardından önbellek yazıcısı dizisini uyandırır.
Yazarak önbelleğe alma gerektiğinde, bir işlem dosyayı açarken bir bayrak ayarlayabilir
veya açık bir önbellek temizleme işlevini çağırabilir.
Hızlı yazma işlemi, potansiyel olarak tüm boş önbellek sayfalarını, önbellek yazıcı iş
parçacığı uyanıp sayfaları ikincil depolamaya boşaltma şansı bulamadan önce doldurabilir.
Önbellek yazıcısı, bir işlemin sisteme taşmasını aşağıdaki şekilde engeller. Boş önbellek
miktarı azaldığında, önbellek yöneticisi veri yazmaya çalışan işlemleri geçici olarak engeller
ve sayfaları ikincil depolamaya boşaltmak için önbellek yazıcı iş parçacığını uyandırır. Hızlı
yazma işlemi aslında bir ağ dosya sistemi için bir ağ yeniden yönlendiricisiyse, onu çok
uzun süre engellemek ağ aktarımlarının zaman aşımına uğramasına ve yeniden iletilmesine
neden olabilir. Bu yeniden iletim, ağ bant genişliğini boşa harcar. Bu tür israfı önlemek için
ağ yeniden yönlendiricileri, önbellek yöneticisine önbellekteki yazmaların biriktirme listesini
sınırlaması talimatını verebilir.

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.

21.3.5.7 Güvenlik Referans İzleyicisi Sistem

varlıklarının yönetimini nesne yöneticisinde merkezileştirmek, Windows'un sistemdeki her


kullanıcı tarafından erişilebilen varlık için çalışma zamanı erişim doğrulaması ve denetim
kontrolleri gerçekleştirmek için tek tip bir mekanizma kullanmasını sağlar. Ek olarak, nesne
yöneticisi tarafından yönetilmeyen varlıklar bile güvenlik kontrollerini gerçekleştirmek için
API rutinlerine erişebilir. Bir iş parçacığı korumalı bir veri yapısına (bir nesne gibi) bir tanıtıcı
açtığında, güvenlik referansı izleyicisi
21.3 Sistem Bileşenleri 867
Machine Translated by Google

(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.

AppContainer mekanizmasının, güvenlik modelini, korunan kaynaklara erişimin kullanıcılar


ve gruplar tarafından tanımlandığı isteğe bağlı bir sistemden, her uygulamanın kendi benzersiz
güvenlik kimliğine sahip olduğu ve uygulama bazında erişimin gerçekleştiği zorunlu bir sisteme
değiştirdiğini görebiliriz. Ayrıcalıkların ve izinlerin bu şekilde ayrılması, güvenlik açısından
büyük bir atılımdır, ancak kaynak erişimi üzerinde potansiyel bir yük oluşturur. Yetenekler ve
aracılar bu yükü hafifletmeye yardımcı olur.

Yetenekler, paketlenmiş uygulamalar adına çeşitli eylemler gerçekleştirmek için Windows


tarafından uygulanan sistem aracıları tarafından kullanılır. Örneğin, Harold SID devre dışı
bırakıldığından, Harold'ın paketlenmiş uygulamasının Harold'ın dosya sistemine erişimi
olmadığını varsayalım. Bu durumda, bir aracı Kullanıcı Ortamını Oynat özelliğini kontrol edebilir
ve müzik çalar işleminin Harold'ın Müziğim dizininde bulunan herhangi bir MP3 dosyasını
okumasına izin verebilir . Böylece Harold , uygulamanın Play User Media özelliğine sahip
olduğu ve Harold uygulamayı indirirken kabul ettiği sürece, en sevdiği medya oynatıcı
uygulamasının AppContainer SID'si ile tüm dosyalarını işaretlemek zorunda kalmayacak .
21.3 Sistem Bileşenleri 869
Machine Translated by Google

SRM'nin son sorumluluğu, güvenlik denetimi olaylarını günlüğe kaydetmektir.


ISO standardı Ortak Kriterler (Amerika Birleşik Devletleri Savunma Bakanlığı tarafından
geliştirilen Orange Book standardının uluslararası halefi), güvenli bir sistemin, sistem
kaynaklarına erişmeye yönelik tüm girişimleri algılama ve kaydetme yeteneğine sahip
olmasını gerektirir; böylece, girişimleri daha kolay izleyebilir. Yetkisiz Erişim.
SRM , erişim kontrollerini yapmaktan sorumlu olduğundan , denetim kayıtlarının
çoğunu oluşturur ve bunlar daha sonra lsass.exe tarafından güvenlik olay günlüğüne
yazılır.

21.3.5.8 Tak ve Çalıştır Yöneticisi

İşletim sistemi, donanım yapılandırmasındaki değişiklikleri tanımak ve bunlara uyum


sağlamak için tak ve çalıştır (PnP) yöneticisini kullanır. PnP cihazları, kendilerini sisteme
tanıtmak için standart protokolleri kullanır. PnP yöneticisi, kurulu cihazları otomatik
olarak tanır ve sistem çalışırken cihazlardaki değişiklikleri algılar. 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, DMA kanalları ve G/Ç bellek aralıkları)
tüm aygıtların tam olarak başarıyla çalışabileceği bir donanım yapılandırması belirleme
hedefine sahiptir. PnP yöneticisi ve Windows Sürücü Modeli , sürücüleri bir veri yolu
üzerindeki aygıtları ( PCI veya USB gibi) algılayan ve sıralayan veri yolu sürücüleri veya
veri yolundaki belirli bir aygıtın işlevselliğini uygulayan işlev sürücüleri olarak görür.

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 aygıtların bir listesini alır. Sürücüleri yükler ve her
aygıt için uygun sürücüye bir aygıt ekleme isteği gönderir. Çeşitli veri yolu sürücülerinin
sahip olduğu özel kaynak hakemleriyle birlikte çalışan PnP yöneticisi, daha sonra en
uygun kaynak atamalarını belirler ve ilgili aygıtlar için kaynak atamalarını belirten her
sürücüye 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 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

870 Bölüm 21 Windows 10


PnP bildirimi. Windows 7 , sistem hizmetlerini yöneten hizmet denetim
yöneticisinde (SCM) (services.exe) bir hizmet tetikleme mekanizması sunmuştur.
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.

21.3.5.9 Power Manager


Windows, Bölüm 21.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 ikincil depolamaya yazabilir ve sistemin hazırda bekletme
moduna geçmesine izin vermek için gücü kapatabilir .

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.10 Kayıt Defteri

Windows, yapılandırma bilgilerinin çoğunu , genellikle kayıt defteri olarak bilinen


Windows yapılandırma yöneticisi tarafından yönetilen , kovan adı verilen dahili veri
havuzlarında tutar . Yapılandırma yöneticisi, yürütmenin bir bileşeni olarak uygulanır.

Sistem bilgileri, her kullanıcının tercihleri, yazılım bilgileri, güvenlik ve önyükleme


seçenekleri için ayrı kovanlar vardır. Ayrıca, Windows 8'de AppContainers ve
UWPModern/Metro paket uygulamaları tarafından sunulan yeni uygulama ve
güvenlik modelinin bir parçası olarak, bu tür her bir uygulamanın uygulama kovanı
adı verilen kendi ayrı kovanı vardır.
Kayıt defteri, her kovandaki yapılandırma durumunu, her biri isteğe bağlı olarak
boyutlandırılmış bir dizi değer içerebilen anahtarların (dizinlerin) hiyerarşik ad alanı
olarak temsil eder. Win32 API'sinde, bu değerlerin UNICODE dizesi, 32 bit tamsayı
veya türlenmemiş ikili veriler gibi belirli bir "türü" vardır , ancak kayıt defterinin
kendisi tüm değerleri aynı şekilde ele alır ve bir sonuç çıkarmak için daha yüksek API
katmanlarına bırakır. tip ve boyuta göre yapı. Bu nedenle, örneğin, hiçbir şey bir "32
bit tamsayının" 999 baytlık UNICODE dizesi olmasını engellemez.
Teoride, yeni yazılım yüklendikçe yeni anahtarlar ve değerler oluşturulur ve
başlatılır ve daha sonra bu yazılımın konfigürasyonundaki değişiklikleri yansıtacak
şekilde değiştirilir. 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.
Her yapılandırma değişikliği yapıldığında uygulamaları ve hatta sistemi yeniden
başlatmak sıkıntı yaratır. Bunun yerine programlar, sistem yapılandırmasındaki
değişiklikler hakkında bilgi edinmek için PnP ve güç yöneticileri tarafından sağlananlar
gibi çeşitli bildirim türlerine güvenir. Kayıt defteri ayrıca bildirimler sağlar; Konular,
kayıt defterinin bir bölümünde değişiklik yapıldığında haberdar olmak için kayıt
olabilir. Böylece iş parçacıkları, kayıt defterinde kaydedilen yapılandırma değişikliklerini
algılayabilir ve bunlara uyum sağlayabilir. Ayrıca, kayıt defteri anahtarları, nesne
yöneticisi tarafından yönetilen nesnelerdir ve bir olay nesnesini dağıtıcıya sunarlar.
Bu, iş parçacıklarının kendilerini , anahtar (veya değerlerinden herhangi biri)
değiştirildiğinde yapılandırma yöneticisinin bildireceği olayla ilişkili bir bekleme
durumuna sokmalarına olanak tanı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 bozuk bir sistemin yeniden çalışmasını sağlamak için kovanların bu
sürümüne geri dönmek için kullanılabilir.
Kayıt defteri yapılandırmasının kararlılığını artırmak için, kayıt defteri ayrıca,
belirli kayıt defteri bozulması durumlarını algılayıp düzeltebilen çeşitli "kendi kendini
iyileştiren" algoritmalar uygular. Ayrıca, kayıt defteri dahili olarak, güncellenirken tek
tek anahtarların veya değerlerin bozulmasını önleyen iki aşamalı bir kesinleştirme
işlem algoritması kullanır. Bu mekanizmalar sürerken
872 Bölüm
Machine Translated by Google 21 Windows 10

kayıt defterinin küçük bölümlerinin veya bireysel anahtarların ve değerlerin bütünlüğünü


garanti ederlerse, bir yazılım yüklemesi sırasında bir arızadan kaynaklanan kayıt defteri
yapılandırmasındaki hasarın kurtarılması için sistem geri yükleme olanağının yerini
almamışlardır.

21.3.5.11 Önyükleme

Windows PC'nin önyüklemesi, donanım açıldığında ve bellenim ROM'dan yürütülmeye


başladığında başlar . Eski makinelerde bu bellenim BIOS olarak biliniyordu , ancak daha
modern sistemler daha hızlı, daha modern ve çağdaş işlemcilerdeki olanaklardan daha
iyi yararlanan UEFI (Birleşik Genişletilebilir Ürün Yazılımı Arabirimi) kullanıyor. Ek olarak,
UEFI , tüm bellenim ve önyükleme zamanı bileşenlerinin dijital imza doğrulaması yoluyla
bütünlük kontrolleri sağlayan Güvenli Önyükleme adlı bir özellik içerir . Bu dijital imza
denetimi, önyükleme sırasında yalnızca Microsoft'un önyükleme zamanı bileşenlerinin
ve satıcının ürün yazılımının mevcut olduğunu garanti ederek, herhangi bir erken üçüncü
taraf kodunun yüklenmesini önler.

Ü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

UNIX'te işlem . SMSS , disk belleği dosyalarının oluşturulması ve ilk kullanıcı


oturumlarının oluşturulması dahil olmak üzere, sistemin daha ileri düzeyde başlatılmasını
gerçekleştirir. Her oturum, lsass ve hizmetler gibi sistem genelinde arka plan işlemlerini
çalıştırmak için kullanılan oturum 0 dışında, oturum açmış bir kullanıcıyı temsil eder .
Her oturuma, oturum oluşturulduktan sonra çıkan SMSS işleminin kendi örneği verilir .
Bu oturumların her birinde, bu kısa ömürlü SMSS , Win32 ortam alt sistemini ( csrss.exe)
ve sürücüsünü (win32k.sys) yükler. Ardından, 0 dışındaki her oturumda SMSS , oturum
açma işlemini başlatan winlogon işlemini çalıştırır . Bu işlem, lsass'ın bir kullanıcıda
oturum açması için kullanıcı kimlik bilgilerini yakalar ve ardından Windows kabuğunu
(başlat menüsü, masaüstü, tepsi simgeleri, bildirim merkezi vb.) uygulayan userinit ve
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 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 .

Windows XP'den başlayarak , sistem önceki önyüklemelere dayalı olarak ikincil


depolamadaki dosyalardan sayfaları önceden getirerek önyükleme işlemini optimize
eder. Önyükleme sırasındaki disk erişim kalıpları, gerekli G/Ç işlemlerinin sayısını
azaltmak için sistem dosyalarını diske yerleştirmek için de kullanılır . Windows 7,
hizmetlerin sistem başlangıcında değil, yalnızca gerektiğinde başlatılmasına izin vererek
sistemi başlatmak için gereken işlemleri azalttı. Windows 8, tüm sürücü yüklerini PnP alt
sistemindeki bir çalışan iş parçacığı havuzu aracılığıyla paralel hale getirerek ve
önyükleme zamanı geçişini daha verimli hale getirmek için UEFI'yi destekleyerek önyükleme
Tüm bu yaklaşımlar, sistem önyükleme süresinde önemli bir azalmaya katkıda bulundu,
ancak sonunda çok az iyileştirme mümkün oldu.
Özellikle RAM ve çekirdeklerin sınırlı olduğu mobil sistemlerde, önyükleme süresiyle
ilgili endişeleri gidermek için Windows 8, Hibrit Önyükleme'yi de tanıttı. Bu özellik,
hazırda bekletme modunu geçerli kullanıcının basit bir oturum kapatmasıyla birleştirir.
Kullanıcı sistemi kapattığında ve diğer tüm uygulamalar ve oturumlardan çıkıldığında,
sistem oturum açma istemine döndürülür ve ardından hazırda bekleme moduna alınır.
Sistem tekrar açıldığında, çok hızlı bir şekilde oturum açma ekranına döner ve bu
874 Bölüm
Machine Translated by Google 21 Windows 10

sürücülere cihazları yeniden başlatma şansı verir ve iş devam ederken tam önyükleme
görünümü verir.

21.4 Terminal Hizmetleri ve Hızlı Kullanıcı Değiştirme

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.

21.5 Dosya Sistemi

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 .

21.5.1 NTFS Dahili Düzeni


NTFS'deki temel varlık birimdir. Bir birim, Windows mantıksal disk yönetimi yardımcı
programı tarafından oluşturulur ve bir mantıksal disk bölümünü temel alır.
Bir birim, bir aygıtın bir bölümünü veya bir aygıtın tamamını kaplayabilir veya birkaç aygıta
yayılabilir. Birim yöneticisi, birimin içeriğini çeşitli RAID seviyeleriyle koruyabilir.

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

Bu bölümde) 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ın. 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 aygıtta 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.

21.5.1.1 NTFS B+ Ağacı

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 .

21.5.1.2 NTFS Meta Verileri

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:

• Günlük dosyası , dosya sistemine yapılan tüm meta veri


güncellemelerini kaydeder. • Birim dosyası , birimin adını, birimi biçimlendiren NTFS
sürümünü ve birimin bir
Machine Translated by Google

21.5 Dosya Sistemi 877

bozulmuş ve chkdsk programı kullanılarak tutarlılık açısından kontrol edilmesi


gerekiyor.

• Ö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 birimdeki

hangi kümelerin dosyalara ayrıldığını gösterir


ve hangileri ücretsizdir.

• Ö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 .

21.5.5 Bağlantı Noktaları, Sembolik Bağlantılar ve Sabit Bağlantılar Bağlantı noktaları,

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 .

21.5.6 Günlüğü Değiştir

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.

21.5.7 Birim Gölge Kopyaları


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 duruma ulaşmak, 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.

Windows'un sunucu sürümü, dosya sunucularında depolanan dosyaların eski sürümlerini


verimli bir şekilde korumak için gölge kopyalar kullanır. Bu, kullanıcıların belgeleri daha önceki
zamanlarda olduğu gibi görmelerini sağlar. Böylece bir kullanıcı, yanlışlıkla silinen dosyaları
kurtarabilir veya yalnızca dosyanın önceki bir sürümüne bakabilir, bunların hepsini yedekleme
ortamını çıkarmadan yapabilirsiniz.
880 Bölüm 21 Windows 10
Machine Translated by Google
21.6 Ağ

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

Windows'ta ağ oluşturmayı tanımlamak için, önce dahili ağ arabirimlerinden ikisinden


bahsetmemiz gerekir: Ağ Aygıtı Arabirimi özelliği (NDIS) ve Aktarım Sürücüsü Arabirimi (TDI).
NDIS arabirimi, 1989'da Microsoft ve 3Com tarafından ağ bağdaştırıcılarını taşıma
protokollerinden ayırmak için geliştirilmiştir , böylece her ikisi de diğerini etkilemeden
değiştirilebilir. NDIS , ISO modelinde veri bağlantısı ve ağ katmanları arasındaki arabirimde
bulunur ve birçok protokolün birçok farklı ağ bağdaştırıcısı üzerinde çalışmasını sağlar. ISO
modeli açısından , TDI , taşıma katmanı (katman 4) ve oturum katmanı (katman 5) arasındaki
arayüzdür. Bu arabirim, herhangi bir oturum katmanı bileşeninin mevcut herhangi bir
aktarım mekanizmasını kullanmasını sağlar. (Benzer akıl yürütme, UNIX'teki akış
mekanizmasına yol açtı . ) TDI , hem bağlantı tabanlı hem de bağlantısız taşımayı destekler
ve her tür veriyi gönderme işlevlerine sahiptir.

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.

21.6.2.1 Sunucu İleti Bloğu Sunucu

İ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.

21.6.2.2 İletim Kontrol Protokolü/İnternet Protokolü

İ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.

21.6.2.3 Noktadan Noktaya Tünel Protokolü Noktadan

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 .

21.6.2.4 HTTP Protokolü

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 .

21.6.2.5 Web'de Dağıtılmış Yazma ve Sürüm Oluşturma Protokolü Web'de

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

882 Bölüm 21 Windows 10

21.6.2.7 Uzaktan Yordam Çağrıları

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 .

21.6.2.8 Bileşen Nesne Modeli Bileşen Nesne

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.

21.6.3 Yönlendiriciler ve Sunucular


Windows'ta bir uygulama, uzak bilgisayarın Windows tarafından sağlananlar gibi bir CIFS sunucusu
çalıştırıyor olması koşuluyla, uzak bilgisayardaki dosyalara yerelmiş gibi erişmek için Windows G/Ç
API'sini kullanabilir. Aredirector , G/Ç isteklerini bir sunucu tarafından karşılandıkları uzak bir
sisteme ileten istemci tarafı nesnesidir . Performans ve güvenlik için, yeniden yönlendiriciler ve
sunucular çekirdek modunda çalışır.

Daha ayrıntılı olarak, uzak bir dosyaya erişim şu şekilde gerçekleşir:

1. Uygulama, I/O yöneticisini arayarak bir dosyanın şu komutla açılmasını ister:


standart UNC biçiminde bir dosya adı .

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.

6. Yönlendirici, ağ isteğini uzak sisteme gönderir.

7. Uzak sistem ağ sürücüleri, isteği alır ve


sunucu sürücüsü.

8. Sunucu sürücüsü, isteği uygun yerel dosya sistemi sürücüsüne iletir.

9. Verilere erişmek için uygun aygıt sürücüsü çağrılı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.

21.6.3.1 Dağıtılmış Dosya Sistemi UNC

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.

21.6.3.2 Klasör Yeniden Yönlendirme ve İstemci Tarafında Önbelleğe

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ı

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 (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.

21.6.5 Aktif Dizin


Active Directory , Basit Dizin Erişim Protokolü (LDAP) hizmetlerinin Windows
uygulamasıdır . Active Directory, etki alanıyla ilgili topoloji bilgilerini depolar, etki
alanı tabanlı kullanıcı ve grup hesaplarını ve parolaları tutar ve Windows grup ilkesi
gibi buna ihtiyaç duyan Windows özellikleri için etki alanı tabanlı bir depo sağlar.
Yöneticiler, masaüstü tercihleri ve yazılım için tek tip standartlar oluşturmak için
grup ilkelerini kullanır. Birçok kurumsal bilgi teknolojisi grubu için tekdüzelik, bilgi
işlem maliyetini önemli ölçüde azaltır.

21.7 Programcı Arayüzü

Win32 API , Windows'un yeteneklerinin temel arabirimidir. Bu bölümde Win32


API'nin beş ana yönü açıklanmaktadır : çekirdek nesnelerine erişim, süreçler arasında
nesnelerin paylaşımı, süreç yönetimi, süreçler arası iletişim ve bellek yönetimi.

21.7.1 Çekirdek Nesnelerine Erişim


Windows çekirdeği, uygulama programlarının kullanabileceği birçok hizmet sağlar.
Uygulama programları, bu hizmetleri çekirdek nesnelerini manipüle ederek elde
eder. Bir işlem, bir XXX örneğine bir tanıtıcı açmak için CreateXXX işlevini çağırarak
XXX adlı bir çekirdek nesnesine erişim kazanır . Bu tutamaç, sürece özgüdür. Hangi
nesnenin açıldığına bağlı olarak, Create() işlevi başarısız olursa, 0 veya INVALID
HANDLE VALUE adlı özel bir sabit döndürebilir. Bir işlem, herhangi bir tanıtıcıyı
çağırarak kapatabilir.
Machine Translated by Google

21.7 Programcı Arayüzü 885

GÜVENLİK ÖZELLİKLERİ sa;


sa.nuzunluk = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = DOĞRU; HANDLE
hSemaphore = CreateSemaphore(&sa, 1, 1, NULL); WCHAR
wszCommandline[MAX YOL]; StringCchPrintf(wszCommandLine,
countof(wszCommandLine), L"another process.exe %d", hSemaphore);
CreateProcess(L"başka bir işlem.exe", wszCommandline, . .); BOŞ, BOŞ,
DOĞRU, .

Şekil 21.7 Çocuğun bir tutamacı devralarak bir nesneyi paylaşmasını sağlayan kod.

CloseHandle() işlevini kullanır ve tüm işlemlerde nesneye başvuran tutamaçların sayısı


sıfıra düşerse sistem nesneyi silebilir.

21.7.2 Nesneleri İşlemler Arasında Paylaşma

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.

Alt sürecin hangi tanıtıcıların paylaşıldığını bildiğini varsayarsak, ebeveyn ve


çocuk, paylaşılan nesneler aracılığıyla süreçler arası iletişimi gerçekleştirebilir.
Şekil 21.7'deki örnekte, alt süreç ilk komut satırı argümanından tutamaç değerini alır
ve ardından semaforu üst süreçle paylaşır.

Nesneleri paylaşmanın ikinci yolu, bir işlemin nesne oluşturulduğunda nesneye


bir ad vermesi ve ikinci işlemin adı açmasıdır.
Bu yöntemin iki dezavantajı vardır: Windows, seçilen ada sahip bir nesnenin zaten
var olup olmadığını kontrol etmek için bir yol sağlamaz ve nesne türü ne olursa olsun
nesne ad alanı geneldir. Örneğin, iki farklı nesne (muhtemelen farklı türde)
istendiğinde, iki uygulama "foo" adlı tek bir nesne oluşturabilir ve paylaşabilir.

Adlandırılmış nesneler, ilgisiz süreçlerin bunları kolayca paylaşabilme avantajına


sahiptir. İlk işlem CreateXXX işlevlerinden birini çağırır ve parametre olarak bir ad
sağlar. İkinci işlem, Şekil 21.8'deki örnekte gösterildiği gibi, aynı adla OpenXXX() (veya
CreateXXX) öğesini çağırarak nesneyi paylaşmak için bir tanıtıcı alır.

Nesneleri paylaşmanın üçüncü yolu DuplicateHandle() işlevidir. Bu yöntem,


çoğaltılan tanıtıcıyı geçmek için başka bir süreçler arası iletişim yöntemi gerektirir.
Bir işleme bir tanıtıcı ve bu süreç içindeki bir tanıtıcının değeri verildiğinde, ikinci bir
süreç aynı nesneye bir tanıtıcı alabilir ve böylece onu paylaşabilir. Bu yöntemin bir
örneği Şekil 21.9'da gösterilmektedir.
886 Bölüm 21 Windows 10
Machine Translated by Google

// İşlem A
...
HANDLE hSemaphore = CreateSemaphore(NULL, 1, 1, L"MySEM1");
...

// İşlem B
...
HANDLE hSemaphore = OpenSemaphore(TÜM ERİŞİM SEMAPHORE,
YANLIŞ, L"MySEM1");
...

Şekil 21.8 Bir nesneyi ad aramasına göre paylaşma kodu.

21.7.3 Süreç Yönetimi


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şturula

// İşlem A, İşlem B'ye bir semafora erişim vermek istiyor

// İşlem A

DWORD dwProcessBId; // zorunlu; bazı IPC mekanizmasından


HANDLE hSemaphore = CreateSemaphore(NULL, 1, 1, NULL);
HANDLE hProcess = OpenProcess(PROCESS DUP HANDLE, FALSE,
dwProcessBId);
KOLU hSemaforKopya;
DuplicateHandle(GetCurrentProcess(), hSemaphore,
hProcess, &hSemaforKopya,
0, YANLIŞ, AYNI ERİŞİMİ ÇOĞALTIR); // bir
mesaj veya paylaşılan bellek nesnesi kullanarak semaforun değerini
İşlem B'ye gönder //
...

// İşlem B
HANDLE hSemaphore = // mesajdaki semaforun değeri // semafora
erişmek için hSemaphore kullanın
...

Şekil 21.9 Bir nesneyi bir tanıtıcı ileterek paylaşma kodu.


21.7 Programcı Arayüzü 887
Machine Translated by Google
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 .

21.7.3.1 Zamanlama Kuralı

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:

1. BOŞTA ÖNCELİK SINIFI (NT öncelik düzeyi 4)

2. NORMAL ÖNCELİK SINIFININ ALTINDA (NT öncelik seviyesi 6)

3. NORMAL ÖNCELİK SINIFI (NT öncelik seviyesi 8)

4. NORMAL ÖNCELİK SINIFININ ÜZERİNDE (NT öncelik seviyesi 10)

5. YÜKSEK ÖNCELİKLİ SINIF (NT öncelik seviyesi 13)

6. GERÇEK ZAMANLI ÖNCELİK SINIFI (NT öncelik seviyesi 24)

İşlemler, işlemin ebeveyni BOŞTA ÖNCELİK SINIFINDA olmadıkça veya CreateProcess


çağrıldığında başka bir sınıf belirtilmedikçe, genellikle NORMAL PRIORITY CLASS'ın üyeleridir.
Bir işlemin öncelik sınıfı, işlemde yürütülen tüm iş parçacıkları için varsayılandır.
SetPriorityClass() işleviyle veya start komutuna bir argüman iletilerek değiştirilebilir . Yalnızca
zamanlama önceliğini artırma ayrıcalığına sahip kullanıcılar, bir işlemi GERÇEK ZAMAN
ÖNCELİKLİ SINIF'a taşıyabilir. Yöneticiler ve yetkili kullanıcılar varsayılan olarak bu ayrıcalığa
sahiptir.

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.

21.7.3.2 İplik Öncelikleri

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:

• EN DÜŞÜK İPLİK ÖNCELİKLİ: taban 2

• NORMALİN ALTINDA İPLİK ÖNCELİKLİ: baz 1


Machine Translated by Google

888 Bölüm 21 Windows 10

• İPLİK ÖNCELİK NORMAL: baz + 0

• NORMALİN ÜZERİNDEKİ İPLİK ÖNCELİKLİ: baz + 1

• EN YÜKSEK İPLİK ÖNCELİKLİ: taban + 2

Ö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 .

21.7.3.3 İş parçacığını Askıya Al ve Devam Et Bir

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.

21.7.3.4 İş Parçacığı Senkronizasyonu İş

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

Muteksler 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 , 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 , XXX Özel veya
Paylaşılandır . Win32 API , kritik bölümlerle veya SRW kilitleriyle kullanılabilen koşul
değişkenlerini de destekler .

21.7.3.5 İplik Havuzu

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

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 birincil fark, CreateFiber() öğesinin oluşturulan
fiberi yürütmeye başlamamasıdır. Yürütmeyi başlatmak için uygulama SwitchToFiber()'i
çağırmalıdır. Uygulama, DeleteFiber()'i çağırarak bir fiberi sonlandırabilir .

Olası uyumsuzluklar nedeniyle standart C kitaplığı işlevleri yerine Win32 API'lerini


kullanan iş parçacıkları için fiberler önerilmez. Win32 kullanıcı modu iş parçacıkları ,
Win32 API'leri tarafından kullanılan çok sayıda iş parçacığı başına alan içeren bir iş
parçacığı ortamı bloğuna (TEB) sahiptir. Elyaflar, üzerinde çalıştıkları ipliğin TEB'sini
paylaşmalıdır. Bu, bir Win32 arabirimi bir fiber için TEB'e durum bilgisini koyduğunda
ve ardından bilgi
Machine Translated by Google

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.

21.7.3.7 Kullanıcı Modu Zamanlama UMS ve ConcRT Windows 7'deki

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.

Bir UT çekirdeğe girdiğinde, KT'si engellenebilir. Bu olduğunda, çekirdek, UMS'nin birincil iş


parçacığı olarak adlandırdığı bir zamanlama iş parçacığına geçer ve çalıştırmak üzere başka bir UT
seçebilmesi için kullanıcı modu zamanlayıcısına yeniden girmek için bu iş parçacığını 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. UMS'nin temel özellikleri Şekil 21.10'da gösterilmektedir.

Fiberlerin aksine UMS , doğrudan programcılar tarafından kullanılmak üzere tasarlanmamış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 , yapı stillerinin yanı sıra temel kaynak yönetimi ve görev senkronizasyonu ilkelleri
için eşit düzeyde destek sağlar . Ancak, Visual Studio 2013'ten itibaren UMS zamanlama modu
ConcRT'de artık mevcut değildir. Önemli performans ölçümleri, iyi yazılmış gerçek paralel
programların görevleri arasında geçiş yapmak için çok fazla zaman harcamadığını gösterdi. UMS'nin
bu alanda sağladığı faydalar, ayrı bir zamanlayıcıyı sürdürmenin karmaşıklığından daha ağır
basmıyordu; bazı durumlarda varsayılan NT zamanlayıcı bile daha iyi performans gösteriyordu.
21.7 Programcı Arayüzü 891
Machine Translated by Google

KT0 blokları
NTOS yöneticisi

KT0 KT1 KT2 birincil iş


parçacığı
tuzak kodu
iplik park
çekirdek
kullanıcı

UT tamamlama listesi

kullanıcı modu
UT0 zamanlayıcı

kullanıcı modunda yalnızca birincil iş parçacığı


çalışır tuzak kodu, park edilmiş KT'ye geçer
_
KT, kullanıcı moduna birincil dönüşleri engeller
UT1 UT0
KT, UT tamamlama kuyruğunu engeller ve park eder

Şekil 21.10 Kullanıcı modu zamanlaması.

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 .

21.7.4 Windows Mesajlaşmayı Kullanan IPC


Win32 uygulamaları, süreçler arası iletişimi çeşitli şekillerde işler.
Tipik yüksek performans yolu, yerel RPC'ler veya adlandırılmış kanallar kullanmaktır.
Bir diğeri, adlandırılmış bölüm nesneleri gibi paylaşılan çekirdek nesnelerini ve bir
olay gibi bir eşitleme nesnesini kullanmaktır. Bir diğeri, özellikle Win32 GUI
uygulamaları için popüler olan bir yaklaşım olan Windows mesajlaşma özelliğini
kullanmaktır. Bir iş parçacığı, PostMessage(), PostThreadMessage(), SendMessage(),
SendThreadMessage() veya SendMessageCallback()'i çağırarak başka bir iş
parçacığına veya bir pencereye mesaj gönderebilir . Mesaj göndermek ve mesaj
göndermek şu şekilde farklılık gösterir: Mesaj rutinleri eşzamansızdır; onlar
Machine Translated by Google

892 Bölüm 21 Windows 10

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 .

21.7.5 Bellek Yönetimi


Win32 API , bir uygulamanın belleği kullanması için birkaç yol sağlar: sanal bellek,
bellek eşlemeli dosyalar, yığınlar, iş parçacığı yerel depolama ve AWE fiziksel bellek.

21.7.5.1 Sanal Bellek Bir

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 .

21.7.5.2 Bellek Eşlemeli Dosyalar Bir

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

// adres alanımızın en üstünde 16 MB ayırın


PVOID pBuf = VirtualAlloc(BOŞ, 0x1000000,
MEM REZERVİ | MEM YUKARI AŞAĞI, SAYFA OKUMA YAZILI); //
ayrılan alanın üst 8 MB'sini taahhüt et
VirtualAlloc((LPVOID)((DWORD PTR)pBuf + 0x800000), 0x800000,
MEM KOMIT, SAYFA OKUMA); //
hafızayla bir şeyler yap
...
// şimdi hafızayı devre dışı bırak
VirtualFree((LPVOID)((DWORD PTR)pBuf + 0x800000), 0x800000,
MEM DECOMMIT); //
tahsis edilen tüm adres alanını serbest bırak
VirtualFree(pBuf, 0, MEM RELEASE);

Şekil 21.11 Sanal bellek tahsisi için kod parçaları.

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

// dosya eşleme boyutunu 8MB olarak ayarlayın


DWORD dwSize = 0x800000; // dosyayı açın veya
mevcut değilse oluşturun HANDLE hFile = CreateFile(L"somefile.ext",
GENEL OKUMA | GENEL YAZMA, DOSYA PAYLAŞIMI OKUMA | DOSYA
PAYLAŞIMI YAZMA, NULL, HER ZAMAN AÇ, DOSYA ÖZELLİĞİ
NORMAL, NULL) ; // dosya eşlemesini oluştur HANDLE hMap =
CreateFileMapping(hFile,

SAYFA OKUMA YAZILI | SEC COMMIT, 0, dwSize, L"SHM 1"); //


şimdi eşlenen alanın bir görünümünü elde edin
PVOID pBuf = MapViewOfFile(hMap, DOSYA HARİTASI TÜM ERİŞİM,
0, 0, 0, dwSize);
// eşlenen dosyayla bir şeyler yap
...
// şimdi dosyanın eşlemesini kaldır
UnmapViewOfFile(pBuf);
CloseHandle(hMap);
CloseHandle(hFile);

Şekil 21.12 Bir dosyanın bellek eşlemesi için kod parçaları.


Machine Translated by Google

894 Bölüm 21 Windows 10

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.7.5.5 AWE Belleği


Uygulamaların belleği kullanmasının son yolu, Adres Pencereleme Uzantısı (AWE)
işlevidir. Bu mekanizma, bir geliştiricinin doğrudan
Machine Translated by Google 21.8 Özet 895

// bir değişken için bir yuva ayır


DWORD dwVarIndex = T1sAlloc(); //
(dwVarIndex == TLS OUT OF INDEXES) dönerse
bir yuvanın kullanılabilir olduğundan emin olun; //
onu 10 değerine ayarla

T1sSetValue(dwVarIndex, (LPVOID)10); // değeri al

DWORD dwVar = (DWORD)(DWORD PTR)T1sGetValue(dwVarIndex); // dizini


serbest bırak
T1sFree(dwVarIndex);

Şekil 21.13 Dinamik iş parçacığı yerel depolaması için kod.

bellek yöneticisinden ( Allo cateUserPhysicalPages() aracılığıyla) RAM'in boş fiziksel


sayfalarını isteyin ve daha sonra VirtualAlloc() kullanarak fiziksel sayfaların üstüne
sanal bellek ekleyin. Bir kullanıcı modu uygulaması, fiziksel belleğin çeşitli bölgelerini
talep ederek (dağılım toplama desteği dahil), sanal adres alanından daha fazla fiziksel
belleğe erişebilir; bu, 4 GB'den fazla RAM'e sahip olabilen 32 bit sistemlerde
kullanışlıdır). Ayrıca uygulama, bellek yöneticisinin önbelleğe alma, sayfalama ve
renklendirme algoritmalarını atlayabilir.
UMS'ye benzer şekilde , AWE , belirli uygulamaların Windows'un varsayılan olarak sunduklarının
ötesinde ek performans veya özelleştirme elde etmesi için bir yol sunabilir. Örneğin SQL Server,
AWE belleğini kullanı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:

declspec(thread) DWORD doğru konum = 0;

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 .

• İ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 önleme sağlar
zamanlama.
896 Bölüm
Machine Translated by Google 21 Windows 10

• Kullanıcı verilerini korumak ve program bütünlüğünü garanti etmek için


Windows, ayrıntılı güvenlik mekanizmalarını destekler ve azaltmalardan
yararlanır ve donanım sanallaştırmasından yararlanır. • 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.
• Windows, uluslararasılaştırma özelliklerini dahil ederek çeşitli ülkelerde ve
birçok dilde çalışabilir. • Windows, gelişmiş zamanlama ve bellek yönetimi
algoritmasına sahiptir
performans ve ölçeklenebilirlik için ritimler.
• Windows'un son sürümlerinde telefon ve tablet gibi mobil sistemlerde daha
kullanışlı olması için güç yönetimi ve hızlı uyku ve uyanma özellikleri eklendi
ve çeşitli alanlarda kaynak kullanımı azaltıldı.

• Windows birim yöneticisi ve NTFS dosya sistemi,


masaüstü ve sunucu sistemleri için bir dizi özellik.

• Win32 API programlama ortamı zengin özelliklere sahiptir ve programcıların


programlarında Windows'un tüm özelliklerini kullanmalarına olanak tanır.

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.3 Bir Windows sistemi için önyükleme sürecini tanımlayın.

21.4 Windows çekirdeğinin üç ana mimari katmanını tanımlayın.

21.5 Nesne yöneticisinin işi nedir?

21.6 Süreç yöneticisi ne tür hizmetler sağlıyor?

21.7 Yerel prosedür çağrısı nedir?

21.8 I/O yöneticisinin sorumlulukları nelerdir ?

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.10 NTFS ad alanı nasıl düzenlenir?


21.11 NTFS veri yapılarını nasıl işler? NTFS bir sistem çökmesinden nasıl kurtulur ?
İyileşme gerçekleştikten sonra ne garanti edilir?

21.12 Windows, kullanıcı belleğini nasıl tahsis eder?

21.13 Bir uygulamanın Win32 API aracılığıyla belleği kullanabileceği bazı yolları
tanımlayın .
Machine Translated by Google

Daha fazla okuma 897

Daha fazla okuma

[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

[Russinovich et al. (2017)] M. Russinovich, DA Solomon ve A. Ionescu, Win


dows Internals – Bölüm 1, Yedinci Baskı, Microsoft Press (2017).
Egzersizler EX-60
Machine Translated by Google
Bölüm 21 Alıştırmalar

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.16 Sanal bellek yöneticisinin yönetim şemasını açıklayın.


VM yöneticisi performansı nasıl artırır?

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.19 Windows'ta önbelleğe almayı ne yönetir? Önbellek nasıl yönetilir?

21.20 NTFS dizin yapısı , dizin yapısından nasıl farklıdır ?


UNIX işletim sistemlerinde kullanılan ture ?

21.21 İşlem nedir ve Windows'ta nasıl yönetilir?

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

Artık işletim sistemlerinin (CPU ) temel kavramlarını anladığınıza göre


zamanlama, bellek yönetimi, süreçler vb.), bir konumdayız.
bu kavramların birkaç eski ve yüksek düzeyde nasıl uygulandığını incelemek
etkili işletim sistemleri Bazıları (örneğin XDS-940 ve THE
sistem) türünün tek örneği sistemlerdi; diğerleri ( OS/360 gibi) yaygın olarak kullanılmaktadır.
Sunum sırası benzerlikleri ve farklılıkları vurgular.
sistemler; kesinlikle kronolojik veya önem sırasına göre sıralanmış değildir. ciddi
işletim sistemleri öğrencisi tüm bu sistemlere aşina olmalıdır.
Bölümün sonundaki bibliyografik notlarda referanslara yer veriyoruz.
bu erken sistemler hakkında daha fazla okumak için. Sistemlerin tasarımcıları
tarafından yazılan yazılar hem teknik içerikleri hem de kullanımları açısından önemlidir.
stil ve lezzet.
BÖLÜM HEDEFLERİ

• İş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.

A.1 Özellik Geçişi

Erken mimarileri ve işletim sistemlerini incelemenin bir nedeni, bir özelliğin


Bir zamanlar yalnızca devasa sistemlerde çalışan, sonunda çok
küçük sistemler. Gerçekten de, ana bilgisayarlar için işletim sistemlerinin incelenmesi
ve mikrobilgisayarlar, bir zamanlar yalnızca ana çerçevelerde bulunan birçok
özelliğin mikrobilgisayarlar için benimsendiğini gösteriyor. Aynı işletim sistemi
kavramlar bu nedenle çeşitli bilgisayar sınıfları için uygundur: anabilgisayarlar,
mini bilgisayarlar, mikro bilgisayarlar ve el bilgisayarları. Modern işletim sistemlerini
anlamak için, özellik geçişi temasını tanımanız gerekir.
Şekil A.1'de gösterildiği gibi, birçok işletim sistemi özelliğinin uzun geçmişi.
Çok Yönlü Bilgi ve Bilgi İşlem Hizmetleri (MULTICS) işletim sistemi ile başlayan
özellik geçişine iyi bir örnek . MULTICS geliştirildi

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

grup çok işlemcili

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

Şekil A.1 İşletim sistemi kavramlarının ve özelliklerinin taşınması.

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.

A.2 Erken Sistemler


Şimdi dikkatimizi erken dönem bilgisayar sistemlerinin tarihsel bir incelemesine çeviriyoruz.
Hesaplama tarihinin, tezgahlar ve hesap makineleri ile “bilgisayarlardan” çok önce
başladığını belirtmeliyiz. Ancak tartışmamıza yirminci yüzyılın bilgisayarlarıyla başlıyoruz.

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ü.

İlk bilgisayarlar, konsollardan çalıştırılan fiziksel olarak devasa makinelerdi.


Aynı zamanda bilgisayar sisteminin operatörü olan programcı, bir program yazar ve
ardından onu doğrudan operatör konsolundan çalıştırırdı.
İlk olarak, program ön panel anahtarlarından (her seferinde bir talimat), kağıt banttan
veya delikli kartlardan belleğe manuel olarak yüklenecektir.
Ardından, başlangıç adresini ayarlamak ve programın yürütülmesini başlatmak için uygun
düğmelere basılacaktır. Program çalışırken, programcı/operatör, konsoldaki ekran
ışıklarıyla yürütülmesini izleyebilir.
Hatalar bulunursa, programcı programı durdurabilir, bellek ve kayıtların içeriğini
inceleyebilir ve programın hatalarını doğrudan konsoldan ayıklayabilir. Çıktı yazdırıldı veya
daha sonra yazdırılmak üzere kağıt bant veya kartlara delindi.

Zaman geçtikçe, ek yazılım ve donanım geliştirildi. Kart okuyucular, satır yazıcılar ve


manyetik bant yaygınlaştı. Birleştiriciler, yükleyiciler ve bağlayıcılar, programlama görevini
kolaylaştırmak için tasarlanmıştır. Ortak işlev kitaplıkları oluşturuldu. Ortak işlevler daha
sonra yeniden yazılmasına gerek kalmadan yeni bir programa kopyalanabilir ve böylece
yazılımın yeniden kullanılabilirliği sağlanır.

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:

1. FORTRAN derleyici bandının yüklenmesi

2. Derleyicinin çalıştırılması 3. Derleyici

bandının boşaltılması 4. Birleştirici bandının

yüklenmesi 5. Birleştiricinin çalıştırılması 6.

Birleştirici bandının boşaltılması 7. Nesne

programının yüklenmesi 8. Nesne

programının çalıştırılması

Herhangi bir adımda bir hata meydana gelirse, programcı/operatör en baştan


başlamak zorunda kalabilir. Her iş adımı, manyetik bantların, kağıt bantların ve delikli
kartların yüklenmesini ve boşaltılmasını içerebilir.
İş kurulum süresi gerçek bir problemdi. Bantlar takılırken veya programcı konsolu
çalıştırırken, CPU boşta kaldı. Unutmayın, ilk günlerde çok az bilgisayar mevcuttu ve
pahalıydı. Bir bilgisayar, güç, soğutma, programcılar vb. işletim maliyetleri hariç,
milyonlarca dolara mal olabilir. Bu nedenle, bilgisayar zamanı son derece değerliydi
ve sahipleri bilgisayarlarının mümkün olduğunca kullanılmasını istediler. Yatırımlarından
alabildikleri kadarını elde etmek için yüksek kullanıma ihtiyaçları vardı.

A.2.2 Paylaşılan Bilgisayar Sistemleri Çözüm iki

yönlüydü. İlk olarak, profesyonel bir bilgisayar operatörü işe alındı.


Programcı artık makineyi çalıştırmıyordu. Bir iş biter bitmez operatör bir sonrakine
başlayabilirdi. Operatör, montaj bantları konusunda bir programcıdan daha fazla
deneyime sahip olduğu için kurulum süresi kısaldı. Programcı, ihtiyaç duyulan kart
veya bantların yanı sıra işin nasıl yürütüleceğine dair kısa bir açıklama sağladı.
Operatör programı anlayamayacağı için elbette operatör konsolda yanlış bir
programda hata ayıklayamazdı. Bu nedenle, program hatası durumunda, bir bellek
ve kayıt dökümü alındı ve programcı dökümden hata ayıklamak zorunda kaldı. Belleği
ve kayıtları boşaltmak, operatörün bir sonraki işe hemen devam etmesine izin verdi,
ancak programcıyı daha zor hata ayıklama sorunuyla baş başa bıraktı.

İ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

A.2 Erken Sistemler 5

yükleyici

monitör iş sıralaması

kontrol kartı
tercümanı

kullanıcı

program
alanı

Şekil A.2 Yerleşik monitör için bellek düzeni.

Ama yine de sorunlar vardı. Örneğin, bir iş durduğunda, operatörün durduğunu


fark etmesi (konsolu gözlemleyerek), neden durduğunu belirlemesi (normal veya anormal
sonlandırma), belleği boşaltması ve kaydetmesi (gerekirse), uygun cihazı yüklemesi
gerekir. sonraki iş ile bilgisayarı yeniden başlatın. Bir işten diğerine bu geçiş sırasında
CPU boşta kaldı.

Bu boş zamanın üstesinden gelmek için insanlar otomatik iş sıralamasını geliştirdiler.


Bu teknikle ilk ilkel işletim sistemleri oluşturuldu.
Kontrolü bir işten diğerine otomatik olarak aktarmak için yerleşik monitör adı verilen
küçük bir program oluşturuldu (Şekil A.2). Yerleşik monitör her zaman bellektedir (veya
yerleşiktir).
Bilgisayar açıldığında, yerleşik monitör çağrılır ve kontrolü bir programa aktarırdı.
Program sona erdiğinde, kontrolü yerleşik monitöre geri verecek ve ardından bir sonraki
programa geçecektir. Böylece, yerleşik monitör bir programdan diğerine ve bir işten
diğerine otomatik olarak sıralanır.

Ancak yerleşik monitör hangi programın yürütüleceğini nasıl bilebilir?


Daha önce operatöre, hangi programların hangi veriler üzerinde çalıştırılacağına dair
kısa bir açıklama verilmişti. Bu bilgiyi doğrudan monitöre sağlamak için kontrol kartları
tanıtıldı. Fikir basit. Bir iş için program veya verilere ek olarak, programcı yerleşik
monitöre hangi programın çalıştırılacağını belirten yönergeler içeren kontrol kartları
sağladı.
Örneğin, normal bir kullanıcı programı çalıştırmak için üç programdan birini gerektirebilir:
FORTRAN derleyicisi (FTN), derleyici (ASM) veya kullanıcının programı (RUN). Bunların her
biri için ayrı bir kontrol kartı kullanabiliriz:

$FTN— FOTRAN derleyicisini çalıştırın.


$ASM— Derleyiciyi çalıştırın.
$RUN— Kullanıcı programını çalıştırın.

Bu kartlar, yerleşik monitöre hangi programın çalıştırılacağını söyler.


Machine Translated by Google

6 Ek A Influentia İşletim Sistemleri

Her işin sınırlarını tanımlamak için iki ek kontrol kartı kullanabiliriz:

$JOB— Bir işin ilk kartı


$END— Bir işin son kartı

Bu iki kart, programcı tarafından kullanılan makine kaynaklarının hesaplanmasında


faydalı olabilir. Parametreler, iş adını, tahsil edilecek hesap numarasını vb.
tanımlamak için kullanılabilir. Operatörden bir bant yüklemesini veya boşaltmasını
istemek gibi diğer işlevler için başka kontrol kartları tanımlanabilir.
Kontrol kartlarıyla ilgili bir sorun, bunların veri veya program kartlarından nasıl
ayırt edileceğidir. Genel çözüm, bunları kartta özel bir karakter veya desenle
tanımlamaktır. Birkaç sistem, bir kontrol kartını tanımlamak için ilk sütunda dolar
işareti karakterini ($) kullandı. Diğerleri farklı bir kod kullandı. IBM'in İş Kontrol Dili
(JCL) , ilk iki sütunda eğik çizgi (//) kullandı. Şekil A.3, basit bir toplu sistem için örnek
bir kart destesi kurulumunu göstermektedir.
Yerleşik bir monitör bu nedenle birkaç tanımlanabilir parçaya sahiptir:

• Kontrol kartı tercümanı , yürütme noktasında kartlardaki talimatları okumaktan


ve yürütmekten sorumludur.
• Yükleyici , sistem programlarını ve uygulama programlarını aralıklarla belleğe
yüklemek için kontrol kartı yorumlayıcısı tarafından çağrılır .
• Aygıt sürücüleri , sistemin G/Ç aygıtları için hem kontrol kartı yorumlayıcısı hem
de yükleyici tarafından kullanılır. Çoğu zaman, sistem ve uygulama programları
bu aynı aygıt sürücülerine bağlıdır, bu da çalışmalarında süreklilik sağlamanın
yanı sıra bellek alanından ve programlama zamanından tasarruf sağlar.

Bu toplu sistemler oldukça iyi çalışıyor. Yerleşik monitör, kontrol kartları


tarafından belirtildiği gibi otomatik iş sıralaması sağlar. Kontrol kartı bir programın
çalıştırılacağını belirttiğinde, monitör programı belleğe yükler ve kontrolü ona
aktarır. Program tamamlandığında kontrolü devreder.

$END

program için veri


$ÇALIŞTIR

$YÜK

derlenecek program
$FTN

$İŞ

Şekil A.3 Basit bir toplu sistem için kart destesi.


Machine Translated by Google

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

kart okuyucu satır yazıcısı

(a)

internet üzerinden

İşlemci

kart okuyucu teyp sürücüleri teyp sürücüleri satır yazıcısı

(b)

Şekil A.4 I/O cihazlarının (a) çevrim içi ve (b) çevrim dışı çalışması.
Machine Translated by Google

8 Ek A Influentia İşletim Sistemleri

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.

Bir disk sisteminde, kartlar doğrudan kart okuyucudan diske okunur.


Kart görüntülerinin konumu, işletim sistemi tarafından tutulan bir tabloya kaydedilir.
Bir iş yürütüldüğünde, işletim sistemi kart okuyucu girişi taleplerini diskten okuyarak
karşılar. Benzer şekilde, iş yazıcıdan bir satır çıkarmasını istediğinde, bu satır bir
sistem arabelleğine kopyalanır ve diske yazılır. İş tamamlandığında çıktı gerçekten
yazdırılır. Bu işleme biçimine biriktirme denir (Şekil A.5); isim, çevrim içi eşzamanlı
çevresel operasyon için bir kısaltmadır . Biriktirme, özünde, diski, girdi aygıtlarında
mümkün olduğu kadar ileriyi okumak ve çıktı aygıtları bunları kabul edebilecek
duruma gelene kadar çıktı dosyalarını depolamak için büyük bir arabellek olarak
kullanır.

disk

G/Ç

internet üzerinden

İşlemci

kart okuyucu satır yazıcısı

Şekil A.5 Biriktirme.


A.3 Atlası 9
Machine Translated by Google

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.

Biriktirme, sistemin performansı üzerinde doğrudan faydalı bir etkiye sahiptir.


Bir miktar disk alanı ve birkaç tablo maliyeti için, bir işin hesaplanması ve diğer işlerin
G/Ç işlemleri aynı anda gerçekleştirilebilir. Böylece, biriktirme hem CPU'yu hem de G/
Ç aygıtlarını çok daha yüksek hızlarda çalışır durumda tutabilir. Biriktirme, doğal
olarak, tüm modern işletim sistemlerinin temeli olan çoklu programlamaya yol açar.

A.3 Atlası

Atlas işletim sistemi, 1950'lerin sonlarında ve 1960'ların başlarında İngiltere'deki


Manchester Üniversitesi'nde tasarlandı. O zamanlar yeni olan temel özelliklerinin
çoğu, modern işletim sistemlerinin standart parçaları haline geldi.
Aygıt sürücüleri sistemin önemli bir parçasıydı. Ek olarak, sistem çağrıları, ekstra
kodlar adı verilen bir dizi özel talimatla eklendi .
Atlas, biriktirme özelliğine sahip bir toplu işletim sistemiydi. Biriktirme, sistemin
işleri manyetik şerit birimleri, kağıt şerit okuyucular, kağıt şerit delgeçleri, satır
yazıcıları, kart okuyucuları ve kart delgeçleri gibi çevresel aygıtların kullanılabilirliğine
göre zamanlamasına izin verdi.
Atlas'ın en dikkat çekici özelliği ise hafıza yönetimiydi. Çekirdek bellek o
zamanlar yeni ve pahalıydı. IBM 650 gibi birçok bilgisayar, birincil bellek için bir
tambur kullandı. Atlas sistemi, ana belleği için bir tambur kullandı, ancak tambur için
önbellek olarak kullanılan az miktarda çekirdek belleğe sahipti. Çekirdek bellek ve
tambur arasında otomatik olarak bilgi aktarmak için talep sayfalama kullanıldı.

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.

2. Tüm sayfalar için t1 t2 ise , sayfayı t2 için en büyük değerle değiştirin


- t1.

Sayfa değiştirme algoritması, programların belleğe döngüler halinde eriştiğini


varsayar. Son iki referans arasındaki süre t2 ise, t2 zaman birimi sonra başka bir
referans beklenir . Bir referans oluşmazsa (t1 > t2), sayfanın artık kullanılmadığı ve
sayfanın değiştirildiği varsayılır. Tüm sayfalar kullanımda ise en uzun süre ihtiyaç
duyulmayan sayfa değiştirilir. Bir sonraki referansa kadar geçen sürenin t2 t1
olması beklenir .

A.4 XDS-940

XDS-940 işletim sistemi , 1960'ların başında Berkeley'deki California Üniversitesi'nde


tasarlandı. Atlas sistemi gibi, bellek yönetimi için sayfalamayı kullandı. Atlas sisteminin
aksine, zaman paylaşımlı bir sistemdi. Çağrı yalnızca yer değiştirme için kullanıldı;
talep çağrısı için kullanılmadı. Herhangi bir kullanıcı işleminin sanal belleği 16 KB
kelimelerden, fiziksel bellek ise 64 KB kelimelerden oluşuyordu. Her sayfa 2 KB
kelimeden oluşuyordu.
Sayfa tablosu kayıtlarda tutuldu. Fiziksel bellek sanal bellekten daha büyük
olduğundan, aynı anda birkaç kullanıcı işlemi bellekte olabilir.
Sayfalar salt okunur yeniden giriş kodu içerdiğinde, sayfa paylaşımı ile kullanıcı sayısı
artırılabilir. İşlemler bir tambur üzerinde tutuldu ve gerektiğinde belleğe girip çıktı.

XDS-940 sistemi, değiştirilmiş bir XDS -930'dan yapılmıştır. Değişiklikler, bir


işletim sisteminin düzgün bir şekilde yazılmasına izin vermek için temel bir
bilgisayarda yapılan tipik değişikliklerdi. Bir kullanıcı izleme modu eklendi.
G/Ç ve halt gibi belirli komutlar ayrıcalıklı olarak tanımlandı. Kullanıcı modunda
ayrıcalıklı bir talimatı yürütme girişimi, işletim sistemini tuzağa düşürür.

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 _

THE işletim sistemi, 1960'ların ortalarında Hollanda'nın Eindhoven kentindeki


Technische Hogeschool'da tasarlandı . Hollandalı bir bilgisayar olan EL X8'de 32-KB
27-bit kelimelerle çalışan bir toplu sistemdi. Sistem temel olarak temiz tasarımıyla,
özellikle katman yapısıyla ve senkronizasyon için semaforlar kullanan bir dizi
eşzamanlı işlemi kullanmasıyla dikkat çekti.
XDS-940 sistemindeki süreçlerin aksine THE sistemindeki süreçler statikti. İşletim
sisteminin kendisi bir dizi işbirliği süreci olarak tasarlandı. Ayrıca, kullanıcı
programlarını derlemek, yürütmek ve yazdırmak için aktif aracılar olarak hizmet
eden beş kullanıcı süreci oluşturuldu. Bir iş bittiğinde, işlem başka bir iş seçmek için
giriş kuyruğuna dönecekti.

Öncelikli bir CPU zamanlama algoritması kullanıldı. Öncelikler her 2 saniyede


bir yeniden hesaplandı ve son zamanlarda (son 8 ila 10 saniyede) kullanılan CPU
zamanı miktarıyla ters orantılıydı. Bu şema, G/Ç'ye bağlı süreçlere ve yeni süreçlere
daha yüksek öncelik verdi .
Bellek yönetimi, donanım desteğinin olmaması nedeniyle sınırlıydı. Ancak
sistem sınırlı olduğundan ve kullanıcı programları sadece Algol'da yazılabileceğinden,
bir yazılım sayfalama şeması kullanıldı. Algol derleyicisi, sistem rutinlerine otomatik
olarak çağrılar oluşturdu, bu da istenen bilgilerin bellekte olmasını ve gerektiğinde
değiş tokuş edilmesini sağladı. Destek deposu 512 KB kelimelik bir davuldu. LRU
sayfa değiştirme stratejisi ile 512 kelimelik bir sayfa kullanıldı .
THE sisteminin bir diğer önemli endişesi de kilitlenme kontrolüydü. Kilitlenmeden
kaçınmak için bankacının algoritması kullanıldı.
THE sistemiyle yakından ilgili olan Venüs sistemidir. Venüs sistemi aynı zamanda
süreçleri senkronize etmek için semaforlar kullanan katman yapılı bir tasarımdı.
Tasarımın alt seviyeleri mikro kodda uygulandı, ancak çok daha hızlı bir sistem
sağladı. Bellek yönetimi için disk belleği segmentli bellek kullanıldı. Ayrıca sistem
toplu sistemden ziyade zaman paylaşımlı bir sistem olarak tasarlandı.

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:

• mesaj gönder ( alıcıda, mesajda , arabellekte ) • bekle-mesaj

( göndericiden, mesajdan , arabellekten ) • gönder-cevap ( sonuç,

mesajda , arabellekte ) • bekle-cevap ( sonuç, çıkış, mesaj dışarı ,

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ı:

• bekleme olayı ( önceki arabellekte, sonraki arabellekte çıkış, sonuç

sonuç ) • get-event ( arabellek çıkışı)

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 , MIT, GE (daha sonra bilgisayar bölümünü Honeywell'e sattı) ve Bell


Laboratories'den (1969'da projeden ayrılan) bir ekip tarafından tasarlandı . Temel GE 635
bilgisayarı , esas olarak disk belleği bölümlemeli bellek donanımının eklenmesiyle GE 645 adlı
yeni bir bilgisayar sistemine dönüştürüldü .

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.

A.9 IBM OS/360

İş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

bilgisayarcılar geldi ve büyük monolitik sistemlere olan ihtiyacı azalttı. Bunları iş


istasyonları ve ardından bilgi işlem gücünü son kullanıcılara daha da yakınlaştıran
kişisel bilgisayarlar izledi.

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.

TOPS-20 , 1970 civarında Bolt, Beranek ve Newman'da (BBN) bir araştırma


projesi olarak hayata başladı. BBN , TOPS-10 çalıştıran iş odaklı DEC PDP-10
bilgisayarını aldı, sanal belleği uygulamak için bir donanım bellek sayfalama
sistemi ekledi , ve o bilgisayar için yeni donanım özelliklerinden yararlanmak
için yeni bir işletim sistemi yazdı. Sonuç, genel amaçlı bir zaman paylaşım
sistemi olan TENEX oldu. DEC daha sonra TENEX'in haklarını satın aldı ve
yerleşik bir donanım çağrı cihazına sahip yeni bir bilgisayar yarattı. Ortaya
çıkan sistem, DECSYSTEM-20 ve TOPS-20 işletim sistemiydi.
TOPS-20 , kullanıcılara gerektiğinde yardım sağlayan gelişmiş bir komut
satırı yorumlayıcısına sahipti. Bu, bilgisayarın gücü ve uygun fiyatı ile birlikte
DECSYSTEM-20'yi zamanının en popüler zaman paylaşım sistemi haline
getirdi. 1984'te DEC , VMS çalıştıran 32-bit VAX sistemlerine odaklanmak için
36-bit PDP-10 bilgisayar serisindeki çalışmayı durdurdu .

A.11 CP/M ve MS/DOS

İ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 Ek A Influentia İşletim Sistemleri

A.12 Macintosh İşletim Sistemi ve Windows

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.

Apple ve Microsoft arasındaki masaüstü rekabeti, Windows ve Mac OS'nin yeni


sürümlerinin özellikler , kullanılabilirlik ve uygulama işlevleri açısından birbirlerini geçmeye
çalışmasıyla bugün de devam ediyor . AmigaOS ve OS/2 gibi diğer işletim sistemleri zamanla
ortaya çıktı, ancak iki önde gelen masaüstü işletim sistemine uzun vadeli rakip olmadılar. Bu
arada Linux, birçok biçimiyle daha teknik kullanıcılar arasında ve hatta Çocuklara Bir Dizüstü
Bilgisayar (OLPC) çocukların bağlı bilgisayar ağı (http://laptop.org/) gibi sistemlerde teknik
bilgisi olmayan kullanıcılar arasında popülerlik kazanmaya devam ediyor.

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.

Mach üzerinde çalışmalar 1980'lerin ortalarında başladı. İşletim sistemi, aşağıdaki üç


kritik hedef göz önünde bulundurularak tasarlandı:

1. Bir UNIX sisteminden yürütülebilir dosyaların


Mach altında doğru şekilde çalıştırın.

2. Birçok bellek modelini destekleyen modern bir işletim sistemi olun.


yanı sıra paralel ve dağıtılmış hesaplama.

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.

Çoklu işlem dikkate alınmadan geliştirilen UNIX'in aksine , Mach baştan


sona çoklu işlem desteği içerir. Bu destek, aynı zamanda, paylaşılan bellek
sistemlerinden işlemciler arasında paylaşılan belleği olmayan sistemlere
kadar son derece esnektir. Mach, çoklu işleme 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 azaltırken, IBM'in sanal makine sistemleri
gibi, kullanıcı düzeyinde işletim sistemi öykünmesine izin verir.
Machine Translated by Google

18 Ek A Influentia İşletim Sistemleri

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 Yeteneğe Dayalı Sistemler— Hydra ve CAP

Bu bölümde, iki yetenek tabanlı koruma sistemini inceleyeceğiz. Bu sistemler


karmaşıklıkları ve üzerlerinde uygulanabilecek politika türleri bakımından farklılık
gösterir. Her iki sistem de yaygın olarak kullanılmamaktadır, ancak her ikisi de
koruma teorileri için ilginç kanıtlar sunmaktadır.

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.

Nesneler üzerindeki işlemler prosedürel olarak tanımlanır. Bu tür işlemleri


uygulayan prosedürlerin kendileri bir nesne biçimidir ve yetenekler aracılığıyla dolaylı
olarak bunlara erişilir. Kullanıcı tanımlı türdeki nesnelerle ilgilenecekse, kullanıcı
tanımlı prosedürlerin adları koruma sistemine tanımlanmalıdır. Bir nesnenin tanımı
Hydra'ya bildirildiğinde, tür üzerindeki işlemlerin adları yardımcı haklar haline gelir.
Yardımcı haklar, türün bir örneği için bir yetenekte tanımlanabilir. Bir işlemin yazılan
bir nesne üzerinde işlem yapabilmesi için, o nesne için sahip olduğu yeteneğin,
yardımcı hakları arasında çağrılan işlemin adını içermesi gerekir. Bu kısıtlama, erişim
hakları ayrımcılığının örnek bazında ve süreç bazında yapılmasını sağlar.

Hydra ayrıca hak amplificatio sağlar . Bu şema, bir prosedürün , prosedürü


yürütme hakkını elinde tutan herhangi bir süreç adına belirli bir türdeki resmi bir
parametre üzerinde hareket etmesi için güvenilir olarak belgelendirilmesine izin
verir . Güvenilir bir prosedürün sahip olduğu haklar, çağrı sürecinin sahip olduğu
haklardan bağımsızdır ve bunları aşabilir. Bununla birlikte, böyle bir prosedür
evrensel olarak güvenilir olarak kabul edilmemelidir (örneğin prosedürün diğer türler
üzerinde çalışmasına izin verilmez) ve güvenilirlik, bir süreç tarafından yürütülebilecek
diğer prosedürlere veya program bölümlerine genişletilmemelidir.
A.14 Yeteneğe Dayalı Sistemler— Hydra ve CAP 19
Machine Translated by Google

Amplifikasyon, uygulama prosedürlerinin soyut bir veri tipinin temsil


değişkenlerine erişmesine izin verir. Örneğin, bir işlem, A tipi bir nesneye yönelik bir
yeteneğe sahipse , bu yetenek, bazı P işlemlerini başlatmak için bir yardımcı hak
içerebilir , ancak üzerinde okuma, yazma veya yürütme gibi çekirdek hakları olarak
adlandırılan hiçbir hakkı içermez. A'yı temsil eden segment . Böyle bir yetenek, bir
sürece, A'nın temsiline dolaylı erişim ( P işlemi aracılığıyla) için bir araç sağlar , ancak
yalnızca belirli amaçlar için.
Bununla birlikte, bir süreç bir A nesnesi üzerinde P işlemini başlattığında, kontrol
P'nin kod gövdesine geçerken A'ya erişim yeteneği güçlendirilebilir. Bu büyütme,
P'nin A'yı temsil eden depolama bölümüne erişim hakkına izin vermek için gerekli
olabilir. P'nin soyut veri tipinde tanımladığı işlemi uygulamak için . Çağırma işlemi
yapamasa bile, P'nin kod gövdesinin A'nın segmentini doğrudan okumasına veya
yazmasına izin verilebilir.
P'den dönüşte, A'nın yeteneği orijinal, güçlendirilmemiş durumuna geri yüklenir. Bu
durum, korunan bir bölüme erişim için bir işlemin sahip olduğu hakların
gerçekleştirilecek göreve bağlı olarak dinamik olarak değişmesi gereken tipik bir
durumdur. Hakların dinamik olarak ayarlanması, programcı tarafından tanımlanan
bir soyutlamanın tutarlılığını garanti etmek için gerçekleştirilir. Hydra işletim sistemine
soyut bir tür bildiriminde hakların genişletilmesi açıkça belirtilebilir.

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 .

İkinci tür yetenek, CAP mikrokodu tarafından korunan ancak yorumlanmayan


sözde yazılım yeteneğidir . Bir alt sistemin parçası olarak bir uygulama programcısı
tarafından yazılabilen, korumalı (yani ayrıcalıklı) bir prosedürle yorumlanır . Belirli
bir tür hak genişletme, korumalı bir prosedürle ilişkilendirilir. Böyle bir prosedürün
kod gövdesini yürütürken, bir süreç, bir yazılım yeteneğinin içeriğini okuma veya
yazma hakkını geçici olarak edinir. Bu özel hak genişletme türü , yetenekler üzerinde
mühürleme ve mühür açma ilkellerinin uygulanmasına karşılık gelir . Elbette bu
ayrıcalık, yalnızca belirli bir özet türü için yazılım yeteneklerinin bu tür herhangi bir
prosedüre geçirilmesini sağlamak için tür doğrulamasına tabidir. Evrensel güven,
CAP makinesinin mikro kodu dışında herhangi bir koda yerleştirilmemiştir .
(Referanslar için bölümün sonundaki bibliyografik notlara bakın.)

Bir yazılım yeteneğinin yorumlanması, içerdiği korumalı prosedürler ile


tamamen alt sisteme bırakılmaktadır. Bu şema, çeşitli koruma politikalarının
uygulanmasına izin verir. Programcılar kendi korumalı prosedürlerini
tanımlayabilmelerine rağmen (bunlardan herhangi biri yanlış olabilir), tüm sistemin
güvenliğinden ödün verilemez. Temel koruma sistemi, içinde bulunduğu koruma
ortamına ait olmayan herhangi bir depolama bölümüne (veya yeteneklerine)
doğrulanmamış, kullanıcı tanımlı, korumalı bir prosedür erişimine izin vermeyecektir.
Güvensiz bir korunan prosedürün en ciddi sonucu, bu prosedürün sorumlu olduğu
alt sistemin koruma arızasıdır.

CAP sisteminin tasarımcıları, yazılım yeteneklerinin kullanılmasının, soyut


kaynakların gereksinimleriyle orantılı koruma politikalarının formüle edilmesi ve
uygulanmasında önemli tasarruflar gerçekleştirmelerine izin verdiğini belirtmişlerdir.
Ancak bu olanaktan yararlanmak isteyen alt sistem tasarımcıları Hydra'da olduğu
gibi sadece bir başvuru kılavuzu üzerinde çalışamazlar.
Bunun yerine, sistem onlara hiçbir prosedür kitaplığı sağlamadığından, koruma ilke
ve tekniklerini öğrenmelidirler.

A.15 Diğer Sistemler

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.

Daha fazla okuma


Tezgahlar ve hesap makineleri [Frah (2001)]'da açıklanmış ve [Frauenfelder (2005)]'de
grafik olarak gösterilmiştir.
Manchester Mark 1 [Rojas ve Hashagen (2000)] tarafından tartışılmıştır ve
onun ürünü olan Ferranti Mark 1, [Ceruzzi (1998)] tarafından tarif edilmiştir.
[Kilburn et al. (1961)] ve [Howarth et al. (1961)] Atlas işletim sistemini inceler.

XDS-940 işletim sistemi [Lichtenberger ve Pirtle (1965)] tarafından açıklanmıştır .

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 .

Uyumlu Zaman Paylaşım Sistemi (CTSS) , [Corbato et al. (1962)].

MULTICS işletim sistemi [Corbato ve Vyssotsky (1965)] ve [Organick (1972)] tarafından


açıklanmıştır .
[Mealy et al. (1966)] IBM/360'ı sundu. [Lett ve Konigsford (1968)] TSS/
360'ı kapsıyor.
CP/67 , [Meyer ve Seawright (1970)] ve [Parmelee et al. (1972)].

DEC VMS [Kenah et al. (1988)] ve TENEX , [Bobrow ve ark. (1972)].

Apple Macintosh'un bir açıklaması [Apple (1987)]'de görünür. Bu işletim sistemleri ve


geçmişleri hakkında daha fazla bilgi için bkz. [Freiberger ve Swaine (2000)].

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

22 Ek A Influentia İşletim Sistemleri

bibliyografya

[Accetta et al. (1986)] M. Accetta, R. Baron, W. Bolosky, DB Golub, R. Rashid, A. Tevanian


ve M. Young, “Mach: A New Kernel Foundation for UNIX Geliştirme”, Proceedings of
the Summer USENIX Konferans (1986), sayfa 93-112.

[Apple (1987)] Apple'ın Macintosh Ailesine Teknik Tanıtımı. Addison


Wesley (1987).

[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.

[Bobrow ve ark. (1972)] DG Bobrow, JD Burchfiel, DL Murphy ve RS Tom linson, “TENEX, a


Paged Time Sharing System for the PDP-10”, Communications of the ACM, Cilt 15, Sayı
3 (1972).

[Brinch-Hansen (1970)] P. Brinch-Hansen, “The Nucleus of a Multiprogramming System”,


Communications of the ACM, Cilt 13, Sayı 4 (1970), sayfa 238-241 ve 250.

[Brinch-Hansen (1973)] P. Brinch-Hansen, İşletim Sistemi İlkeleri, Prentice


Hall (1973).

[Ceruzzi (1998)] PE Ceruzzi, Modern Bilişimin Tarihi, MIT Press (1998).

[Corbato ve Vyssotsky (1965)] FJ Corbato ve VA Vyssotsky, “Introduction and Overview of


the MULTICS System”, Proceedings of the AFIPS Fall Joint Computer Conference (1965),
sayfa 185– 196.

[Corbato et al. (1962)] FJ Corbato, M. Merwin-Daggett ve RC Daley, “An Experimental Time-


Sharing System”, Proceedings of the AFIPS Fall Joint Computer Conference (1962),
sayfa 335-344.

[Dijkstra (1968)] EW Dijkstra, “The Structure of the Multiprogramming System”,


Communications of the ACM, Cilt 11, Sayı 5 (1968), sayfa 341– 346.

[Frah (2001)] G. Frah, Bilgi İşlemin Evrensel Tarihi, John Wiley and Sons
(2001).

[Frauenfelder (2005)] M. Frauenfelder, The Computer— An Illustrated History,


Carlton Kitapları (2005).

[Freiberger ve Swaine (2000)] P. Freiberger ve M. Swaine, Vadideki Ateş—


Kişisel Bilgisayarın Yapımı, McGraw-Hill (2000).

[Howarth et al. (1961)] DJ Howarth, RB Payne ve FH Sumner, “Manchester Üniversitesi


Atlas İşletim Sistemi, Bölüm II: Kullanıcının Açıklaması”, Computer Journal, Cilt 4, Sayı
3 (1961), sayfa 226– 229.

[Kenah et al. (1988)] LJ Kenah, RE Goldenberg ve SF Bate, VAX/VMS


İç Yapılar ve Veri Yapıları, Dijital Baskı (1988).

[Kilburn et al. (1961)] T. Kilburn, DJ Howarth, RB Payne ve FH Sumner, “The Manchester


University Atlas Operating System, Part I: Internal Organisation”, Computer Journal,
Cilt 4, Sayı 3 (1961), sayfa 222– 225 .
Machine Translated by Google

bibliyografya 23

[Lett ve Konigsford (1968)] AL Lett ve WL Konigsford, “TSS/360: A


Zaman Paylaşımlı İşletim Sistemi”, AFIPS Sonbahar Eklemi Bilgisayarı Bildiriler Kitabı
Konferans (1968), sayfa 15-28.

[Lichtenberger ve Pirtle (1965)] WW Lichtenberger ve MW Pirtle, “A


İnsan-Makine Etkileşiminde Deney İmkanı”, Bildiriler Kitabı
AFIPS Güz Ortak Bilgisayar Konferansı (1965), sayfalar 589-598.
[Liskov (1972)] BH Liskov, “Venüs İşletim Sisteminin Tasarımı”, ACM İletişimi, Cilt 15,
Sayı 3 (1972), sayfa 144– 149.

[McKeag ve Wilson (1976)] RM McKeag ve R. Wilson, İşletme Çalışmaları


Systems, Academic Press (1976).

[Mealy et al. (1966)] GH Mealy, BI Witt ve WA Clark, “İşlevsel


OS/360'ın Yapısı”, IBM Systems Journal, Cilt 5, Sayı 1 (1966), sayfalar
3-11.

[Meyer ve Seawright (1970)] RA Meyer ve LH Seawright, “Bir Sanal


Machine Time-Sharing System”, IBM Systems Journal, Cilt 9, Sayı 3
(1970), sayfalar 199-218.
[Needham ve Walker (1977)] RM Needham ve RDH Walker, “Cam köprüsü CAP Bilgisayarı
ve Koruma Sistemi”, İşletim Sistemi İlkeleri Üzerine Altıncı Sempozyum Bildirileri
(1977), sayfa 1-10.

[Organick (1972)] EI Organick, Multics Sistemi: Yapısının İncelenmesi, MIT Press (1972).

[Parmelee et al. (1972)] RP Parmelee, TI Peterson, CC Tillman ve D. Hat field, “Virtual


Storage and Virtual Machine Concepts”, IBM Systems Journal,
Cilt 11, Sayı 2 (1972), sayfa 99-130.
[Rashid (1986)] RF Rashid, “RIG'den Accent'e, Mach'a: Bir
Ağ İşletim Sistemi”, Proceedings of the ACM/IEEE Computer Society, Güz
Ortak Bilgisayar Konferansı (1986), sayfalar 1128-1137.
[Rashid ve Robertson (1981)] R. Rashid ve G. Robertson, “Accent: A Communication-
Oriented Network Operating System Kernel”, Proceedings of the
ACM İşletim Sistemi İlkeleri Sempozyumu (1981), sayfa 64– 75.

[Rojas ve Hashagen (2000)] R. Rojas ve U. Hashagen, İlk Bilgisayarlar—


Tarih ve Mimariler, MIT Press (2000).

[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
Kontrol”, USENIX Yaz Konferansı Bildirileri (1987).

[Tevanyan et al. (1987b)] A. Tevanian, Jr., RF Rashid, MW Young, DB Golub,


MR Thompson, W. Bolosky ve R. Sanzi, “Paylaşılanlar İçin Bir UNIX Arayüzü
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

24 Ek A Influentia İşletim Sistemleri

[Wulf et al. (1981)] WA Wulf, R. Levin ve SP Harbison, Hydra/C.mmp: An


Deneysel Bilgisayar Sistemi, McGraw-Hill (1981).
Machine Translated by Google

BEk
Windows 7

Dave Probert tarafından güncellendi

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İ

• Windows 7'nin tasarımının altında yatan ilkeleri ve belirli özellikleri keşfedin.


sistemin bileşenleri. • Windows 7

dosya sisteminin ayrıntılı bir tartışmasını sağlayın. • Windows 7'de desteklenen

ağ protokollerini gösterin. • Windows 7'de sistem ve uygulamaya yönelik

mevcut arayüzü tanımlayın.


programcılar

• Windows 7 ile uygulanan önemli algoritmaları tanımlayın.

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ı.

Windows XP , Windows'un 64 bitlik bir sürüm sunan ilk sürümüydü ( 2001'de


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 kullandı; bu
nedenle, Windows XP'de 64-bit'in ana uzantısı , büyük sanal adresleri desteklemekti.
Ancak, Windows'un 64 bit sürümleri çok daha büyük fiziksel bellekleri de 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 . Ek olarak, o zamana kadar,
istemci sistemlerdeki fiziksel bellekler , IA-32'nin 4 GB sınırını sıklıkla aştı. Sonuç
olarak, Windows 7'nin 64 bit sürümü artık daha büyük istemci sistemlerine yaygın
olarak yüklenmektedir. 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.
Windows 7 açıklamamızın geri kalanında, Windows 7'nin istemci sürümleri ile
karşılık gelen sunucu sürümleri arasında ayrım yapmayacağız. Aynı çekirdek
bileşenleri temel alırlar ve çekirdek ve çoğu sürücü için aynı ikili dosyaları çalıştırırlar.
Benzer şekilde, Microsoft, farklı piyasa fiyat noktalarına hitap etmek için her
sürümün çeşitli farklı sürümlerini gönderse de, sürümler arasındaki farkların çok
azı sistemin özüne yansıtılır. Bu bölümde, öncelikle Windows 7'nin temel
bileşenlerine odaklanacağız.

B.2 Tasarım İlkeleri


Microsoft'un Windows için tasarım hedefleri arasında güvenlik, güvenilirlik, Windows
ve POSIX uygulama uyumluluğu, yüksek performans, genişletilebilirlik, taşınabilirlik
ve uluslararası destek yer alıyordu. Bazı ek hedefler, enerji verimliliği ve dinamik
cihaz desteği, yakın zamanda bu listeye eklenmiştir. Daha sonra, bu hedeflerin her
birini ve Windows 7'de nasıl elde edildiğini tartışacağız.

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, güvenliği isteğe bağlı erişim denetimlerine dayandırır. Dosyalar, kayıt


defteri ayarları ve çekirdek nesneleri dahil olmak üzere sistem nesneleri, erişim kontrol
listeleri (ACL'ler) tarafından korunur (bkz. Bölüm 13.4.2). ACL'ler , kullanıcı ve programcı
hatalarına karşı savunmasızdır, bununla birlikte, kullanıcının genellikle web'de gezinirken
kod çalıştırması için kandırıldığı tüketici sistemlerine yönelik en yaygın saldırılara karşı
savunmasızdır. Windows 7, erişimi denetlemek için temel bir yetenek sistemi olarak işlev
gören bütünlük düzeyleri adı verilen bir mekanizma içerir. Nesneler ve süreçler düşük,
orta veya yüksek bütünlüğe sahip olarak işaretlenir. Windows, ACL ayarı ne olursa olsun,
bir işlemin daha yüksek bütünlük düzeyine sahip bir nesneyi değiştirmesine izin vermez .

Diğer güvenlik önlemleri arasında adres alanı düzeni rastgeleleştirme (ASLR),


yürütülemez yığınlar ve yığınlar ve şifreleme ve dijital imza olanakları bulunur. ASLR ,
küçük miktarlarda enjekte edilen kodun normal işlemin bir parçası olarak bir işlemde
zaten yüklü olan koda kolayca atlamasını önleyerek birçok saldırı biçimini engeller. Bu
koruma, saldıran kodun kontrolü ele almasına izin vermek yerine, saldırı altındaki bir
sistemin başarısız olmasını veya çökmesini sağlar.
Hem Intel hem de AMD'nin son çipleri , bellek sayfalarının çalıştırılabilir talimat
kodu içeremeyecek şekilde işaretlenmesine izin veren AMD64 mimarisine dayanmaktadır .
Windows, kod yürütmek için kullanılamayacak şekilde yığınları ve bellek yığınlarını
işaretlemeye çalışır, böylece 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. Bu teknik,
tüm programlara uygulanamaz, çünkü bazıları verileri değiştirmeye ve yürütmeye
dayanır. Windows görev yöneticisinde "veri yürütme engelleme" etiketli bir sütun, bu
saldırıları önlemek için hangi işlemlerin işaretlendiğini gösterir.

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.

B.2.3 Windows ve POSIX Uygulama Uyumluluğu


Belirtildiği gibi, Windows XP hem Windows 2000'in bir güncellemesi hem de
Windows 95/98'in yerini almıştır. Windows 2000, öncelikle iş uygulamaları için
uyumluluğa odaklandı. Windows XP gereksinimleri, Windows 95/98 üzerinde
çalışan tüketici uygulamalarıyla çok daha fazla uyumluluk içeriyordu. Birçok
uygulama belirli bir Windows sürümünü kontrol ettiğinden, bir dereceye kadar
API'lerin uygulanmasının tuhaflıklarına bağlı olabileceğinden, önceki sistemde
maskelenmiş gizli uygulama hatalarına sahip olabileceğinden, uygulama
uyumluluğunun elde edilmesi zordur. Uygulamalar
Machine Translated by Google

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 .

B.2.4 Yüksek Performans


Windows, masaüstü sistemlerinde ( G/Ç performansı tarafından büyük ölçüde
kısıtlanmıştır ), sunucu sistemlerinde ( CPU'nun genellikle darboğaz olduğu) ve
büyük çok iş parçacıklı ve çok işlemcili ortamlarda (kilitleme performansının ve
önbellek hattı yönetiminin olduğu ) yüksek performans sağlamak üzere
tasarlanmıştır. ölçeklenebilirliğin anahtarlarıdır). 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ı . Bellek yönetimi ve senkronizasyon algoritmaları,
önbellek hatları ve çoklu işlemcilerle ilgili performans değerlendirmelerinin
bilincinde olarak tasarlanmıştır.
Windows NT , simetrik çoklu işlem (SMP) için tasarlanmıştır; çok işlemcili bir
bilgisayarda, çekirdekte bile aynı anda birkaç iş parçacığı çalışabilir. Her CPU'da,
Windows NT , iş parçacıklarının önceliğe dayalı önceden planlanmasını kullanır.
Çekirdek göndericisinde veya kesme düzeyinde yürütülürken dışında, Windows'ta
çalışan herhangi bir işlemdeki iş parçacıkları, daha yüksek öncelikli iş parçacıkları
tarafından engellenebilir. Böylece sistem hızlı yanıt verir (bkz. Bölüm 5).
Windows NT'yi oluşturan alt sistemler , yüksek performanslı mesaj geçişi
sağlayan bir yerel prosedür çağrısı (LPC) tesisi aracılığıyla birbirleriyle verimli bir
şekilde iletişim kurar . Bir iş parçacığı, bir LPC aracılığıyla başka bir işlemden
eşzamanlı bir hizmet istediğinde , hizmet iş parçacığı hazır olarak işaretlenir ve
zaten kuyrukta olan iş parçacıklarını beklemek zorunda kaldığında meydana
gelebilecek zamanlama gecikmelerini önlemek için önceliği geçici olarak yükseltilir.
Windows XP , kritik işlevlerde kod yolu uzunluğunu azaltarak, daha iyi
algoritmalar ve işlemci başına veri yapıları kullanarak, tek tip olmayan bellek
erişimi (NUMA) makineleri için bellek renklendirmeyi kullanarak ve sıraya alınmış
gibi daha ölçeklenebilir kilitleme protokolleri uygulayarak performansı daha da
artırdı. spinlock'lar. Yeni kilitleme protokolleri, sistem veri yolu döngülerinin
azaltılmasına yardımcı oldu ve kilitsiz listeler ve kuyruklar, atomik okuma-
değiştirme-yazma işlemleri (kilitli artış gibi) ve diğer gelişmiş senkronizasyon tekniklerini içeriyordu.
B.2 Tasarım İlkeleri 7
Machine Translated by Google

Windows 7 geliştirildiğinde, bilgi işlemde birkaç büyük değişiklik gelmişti. İstemci/


sunucu bilgi işlemin önemi arttı, bu nedenle LPC'den daha yüksek performans ve
daha fazla güvenilirlik sağlamak için gelişmiş bir yerel prosedür çağrısı (ALPC) tesisi
tanıtıldı . En büyük çoklu işlemcilerde bulunan CPU sayısı ve fiziksel bellek miktarı
önemli ölçüde arttı, bu nedenle işletim sistemi ölçeklenebilirliğini geliştirmek için
oldukça fazla çaba harcandı.

Windows NT'de SMP'nin uygulanması , işlemci koleksiyonlarını temsil etmek ve


örneğin belirli bir iş parçacığının hangi işlemci kümesi üzerinde programlanabileceğini
belirlemek için bit maskeleri kullandı. Bu bit maskeleri, bir sistem içinde desteklenen
işlemci sayısını 64 ile sınırlayarak tek bir bellek sözcüğüne sığacak şekilde tanımlandı.
Windows 7, isteğe bağlı sayıda CPU'yu temsil etmek için işlemci grupları kavramını
ekledi, böylece daha fazla CPU çekirdeği barındırıyordu.
Tek sistemlerdeki CPU çekirdeklerinin sayısı, yalnızca daha fazla çekirdek nedeniyle
değil, aynı anda birden fazla mantıksal yürütme dizisini destekleyen çekirdekler
nedeniyle de artmaya devam etti.
Tüm bu ek CPU'lar , CPU'ları ve belleği zamanlamak için kullanılan kilitler için
büyük bir çekişme yarattı . Windows 7 bu kilitleri kırdı. Örneğin, Windows 7'den önce,
olayları bekleyen iş parçacıklarını içeren kuyruklara erişimi senkronize etmek için
Windows zamanlayıcı tarafından tek bir kilit kullanılıyordu. Windows 7'de, her
nesnenin kendi kilidi vardır, bu da sıralara aynı anda erişilmesini sağlar. Ayrıca,
zamanlayıcıdaki birçok yürütme yolu, kilitsiz olacak şekilde yeniden yazılmıştır. Bu
değişiklik, 256 donanım iş parçacığına sahip sistemlerde bile Windows için iyi bir
ölçeklenebilirlik performansı sağladı.
Diğer değişiklikler, paralel hesaplama için desteğin artan öneminden
kaynaklanmaktadır. Yıllardır, bilgisayar endüstrisine Moore Yasası hakim oldu ve bu,
kendilerini her CPU için daha hızlı saat hızları olarak gösteren daha yüksek transistör
yoğunluklarına yol açtı. Moore Yasası geçerliliğini koruyor, ancak CPU saat hızlarının
daha da artmasını engelleyen sınırlara ulaşıldı . Bunun yerine, transistörler, her çipte
daha fazla CPU oluşturmak için kullanılıyor. Microsoft'un Concurrency RunTime
(ConcRT) ve Intel'in Threading Building Blocks (TBB) gibi paralel yürütmeyi başarmak
için yeni programlama modelleri , C++ programlarında paralelliği ifade etmek için
kullanılıyor. Moore Yasasının kırk yıldır hesaplamayı yönettiği yerde, şimdi paralel
hesaplamayı yöneten Amdahl Yasası geleceği yönetecek gibi görünüyor.

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.

B.2.7 Uluslararası Destek


Windows, uluslararası ve çok uluslu kullanım için tasarlanmıştır. Ulusal dil desteği
(NLS) API'si aracılığıyla farklı yerel ayarlar için destek sağlar .
NLS API , tarihleri , saati ve parayı ulusal geleneklere göre biçimlendirmek için özel
rutinler sağlar. Dize karşılaştırmaları, değişen karakter kümelerini hesaba katmak için
uzmanlaşmıştır. UNICODE , Windows'un yerel karakter kodudur. Windows, ANSI
karakterlerini değiştirmeden önce (8 bit - 16 bit dönüştürme) UNICODE karakterlerine
dönüştürerek destekler. Sistem metin dizeleri, sistemi farklı diller için yerelleştirmek
üzere değiştirilebilen kaynak dosyalarında tutulur. Çok dilli bireyler ve işletmeler için
önemli olan birden fazla yerel ayar aynı anda kullanılabilir.

B.2.8 Enerji Verimliliği


Bilgisayarlar için artan enerji verimliliği, dizüstü bilgisayarlar ve netbooklar için pillerin
daha uzun süre dayanmasına neden olur, veri merkezlerinin güç ve soğutması için
önemli işletim maliyetlerinden tasarruf sağlar ve işletmelerin ve tüketicilerin enerji
tüketimini düşürmeyi amaçlayan yeşil girişimlere katkıda bulunur. Bir süredir
Windows, enerji kullanımını azaltmak için çeşitli stratejiler uygulamıştır. CPU'lar ,
mümkün olduğunda, örneğin saat frekansı düşürülerek daha düşük güç durumlarına
taşınır. Ayrıca, bir bilgisayar aktif olarak kullanılmadığında, Windows tüm bilgisayarı
düşük güç durumuna geçirebilir (uyku) veya tüm belleği diske kaydedip bilgisayarı
kapatabilir (hazırda bekletme). Kullanıcı geri döndüğünde, bilgisayar açılır ve önceki
durumundan devam eder, böylece kullanıcının uygulamaları yeniden başlatmasına
ve yeniden başlatmasına gerek kalmaz.
Windows 7, enerji tasarrufu için bazı yeni stratejiler ekledi. Bir CPU ne kadar uzun
süre kullanılmadan kalırsa, o kadar fazla enerji tasarrufu sağlanabilir. Bilgisayarlar
insanlardan çok daha hızlı olduğu için, insanlar düşünürken çok fazla enerji tasarrufu
yapılabilir. Sorun şu ki, sistemde neler olduğunu görmek için çok fazla program
sürekli olarak yoklama yapıyor. Bir dizi yazılım zamanlayıcısı ateşleniyor ve CPU'nun
çok fazla enerji tasarrufu sağlayacak kadar uzun süre boşta kalmasını engelliyor.
Windows 7, saat tiklerini atlayarak, yazılım zamanlayıcılarını daha az sayıda olayda
birleştirerek ve sistemler yoğun şekilde yüklenmediğinde tüm CPU'ları "park ederek"
CPU boşta kalma süresini uzatır.

B.2.9 Dinamik Cihaz Desteği


PC endüstrisi tarihinin başlarında , bilgisayar konfigürasyonları oldukça statikti. Bazen
bilgisayarın arkasındaki seri, yazıcı veya oyun bağlantı noktalarına yeni aygıtlar
takılabilir, ancak hepsi bu kadardı. PC'lerin dinamik konfigürasyonuna yönelik sonraki
adımlar , dizüstü bilgisayar yuvaları ve PCMIA kartlarıydı. Bir PC , bir dizi çevre birimine
aniden bağlanabilir veya bağlantısı kesilebilir. Çağdaş bir bilgisayarda durum
tamamen değişti. PC'ler , kullanıcıların her zaman çok sayıda çevre birimini takıp
çıkarmalarına izin verecek şekilde tasarlanmıştır; harici diskler, flash sürücüler,
kameralar ve benzerleri sürekli gelip gidiyor.
Aygıtların dinamik yapılandırmasına yönelik destek, Windows'ta sürekli olarak
gelişmektedir. Sistem, cihazları olduklarında otomatik olarak tanıyabilir.
Machine Translated by Google

10
Ek B Windows 7

oturum OS/2 Win16 Win32 MS-DOS POSIX


açma işlemi uygulamaları uygulamaları uygulamaları uygulamaları uygulamaları

güvenlik OS/2 Win18 MS-DOS POSIX


alt sistemi alt sistemi VDM VDM alt sistemi

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

aygıt
sürücüleri
sürücüleri

donanım soyutlama katmanı

donanım

Şekil B.1 Windows blok şeması.

takılı ve uygun sürücüleri bulabilir, yükleyebilir ve yükleyebilir - genellikle kullanıcı


müdahalesi olmadan. Aygıtlar fişten çekildiğinde, sürücüler otomatik olarak kaldırılır
ve sistem çalışması diğer yazılımları kesintiye uğratmadan devam eder.

B.3 Sistem Bileşenleri

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.

Bu bölümün geri kalanında bu katmanlar ve alt sistemler açıklanmaktadır.

B.3.1 Donanım-Soyutlama Katmanı


HAL , işletim sisteminin üst düzeylerinden donanım yonga seti farklılıklarını gizleyen
yazılım katmanıdır . HAL , çekirdek gönderici, yönetici ve aygıt sürücüleri tarafından
kullanılan bir sanal donanım arabirimini dışa aktarır . için her aygıt sürücüsünün
yalnızca tek bir sürümü gereklidir.
B.3 Sistem Bileşenleri 11
Machine Translated by Google

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

Windows'un çekirdek katmanının dört ana sorumluluğu vardır: iş parçacığı zamanlaması,


düşük seviyeli işlemci senkronizasyonu, kesme ve istisna işleme ve kullanıcı modu ile
çekirdek modu arasında geçiş yapma. Çekirdek, C dilinde, yalnızca donanım mimarisinin
en düşük seviyesiyle arayüz oluşturmak için kesinlikle gerekli olduğunda montaj dilini
kullanarak uygulanır.
Çekirdek, nesne yönelimli tasarım ilkelerine göre düzenlenmiştir. Windows'taki
nesne türü , bir dizi özniteliğe (veri değerleri) ve bir dizi yönteme (örneğin işlevler veya
işlemler) sahip sistem tanımlı bir veri türüdür. Bir nesne , bir nesne türünün bir
örneğidir. Çekirdek, öznitelikleri çekirdek verilerini depolayan ve yöntemleri çekirdek
etkinliklerini gerçekleştiren bir dizi çekirdek nesnesi kullanarak işini gerçekleştirir.

B.3.2.1 Çekirdek Dağıtıcı

Ç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.

B.3.2.2 İş Parçacıkları ve Zamanlama

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.

Öncelikli iş parçacığının önceliği, gönderici sıralarına geri yerleştirilmeden önce


değiştirilebilir. Öncelikli iş parçacığı değişken öncelik sınıfındaysa, önceliği düşürülür.
Öncelik hiçbir zaman temel önceliğin altına düşürülmez. İş parçacığının önceliğini
düşürmek, hesaplamaya bağlı iş parçacıklarının G/Ç'ye bağlı iş parçacıklarına kıyasla CPU
tüketimini sınırlama eğilimindedir . Bir bekleme işleminden değişken öncelikli bir iş
parçacığı serbest bırakıldığında, sevk programı önceliği artırır. Destek miktarı, iş
parçacığının beklediği cihaza bağlıdır. Örneğin, klavye 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, bir fare ve pencereler kullanarak etkileşimli dizilere
iyi yanıt süreleri verme eğilimindedir. Ayrıca, 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üleri kullanmasına izin verir . Ek olarak, kullanıcının aktif GUI penceresiyle
ilişkilendirilen iş parçacığı, yanıt süresini artırmak için bir öncelik artışı alır.

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

B.3 Sistem Bileşenleri 13

B.3.2.3 Senkronizasyon İlkellerinin Uygulanması Anahtar işletim

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:

• Olay nesnesi , bir olay oluşumunu kaydetmek ve bu oluşumu bazı eylemlerle


senkronize etmek için kullanılır. Bildirim olayları tüm bekleyen dizileri işaret eder ve
senkronizasyon olayları tek bir bekleyen diziyi işaret eder.

• Mutant , sahiplik kavramıyla ilişkili çekirdek modu veya kullanıcı modu karşılıklı
dışlama sağlar.

• Yalnızca çekirdek modunda kullanılabilen muteks, kilitlenmeyen karşılıklı


dışlama.

• 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.

• İş parçacığı nesnesi , çekirdek dağıtıcısı tarafından zamanlanan varlıktır.


Bir sanal adres alanını içine alan bir işlem nesnesi ile ilişkilidir . İş parçacığı nesnesi, iş
parçacığı çıktığında ve işlem nesnesi, işlemden çıktığında bildirilir.

• Zamanlayıcı nesnesi , işlemler çok uzun sürdüğünde ve kesintiye uğratılması


gerektiğinde veya periyodik bir faaliyetin planlanması gerektiğinde süreyi takip etmek
ve zaman aşımlarını bildirmek için kullanılı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

yazılım kesintisi uygular: asenkron prosedür çağrıları (APC'ler) ve ertelenmiş prosedür


çağrıları (daha önce bahsedilen DPC'ler ).
Eşzamansız bir prosedür çağrısı, yürütülen bir iş parçacığına girer ve bir prosedürü çağırır.
APC'ler , yeni iş parçacıklarının yürütülmesini başlatmak, mevcut iş parçacıklarını askıya
almak veya sürdürmek, iş parçacıklarını veya işlemleri sonlandırmak, eşzamansız bir G/
Ç'nin tamamlandığına dair bildirim göndermek ve çalışan bir iş parçacığından CPU
kayıtlarının içeriğini çıkarmak için kullanılır . APC'ler belirli iş parçacıklarına kuyruğa alınır
ve sistemin bir işlemin bağlamında hem sistem hem de kullanıcı kodunu yürütmesine izin verir.
Bir APC'nin kullanıcı modunda yürütülmesi rastgele zamanlarda gerçekleşemez, ancak yalnızca iş
parçacığı çekirdekte beklerken ve uyarılabilir olarak işaretlendiğinde gerçekleşir.
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 . İlgili
yazılım kesintisi, CPU tüm G/Ç cihazı kesintilerinin önceliğinden daha düşük, ancak iş
parçacıklarının çalıştığı öncelikten daha yüksek bir önceliğe sahip olana kadar
gerçekleşmeyecektir. Bu nedenle, DPC'ler diğer cihaz ISR'lerini engellemez . Gönderici,
cihaz kesintisi işlemeyi ertelemeye ek olarak şunları kullanır:
14
Ek B
Machine Translated by Google Windows 7
Zamanlayıcı sona ermelerini işlemek ve zamanlama kuantumunun sonunda iş parçacığı
yürütmesini önlemek için DPC'ler.
DPC'lerin yürütülmesi , iş parçacıklarının mevcut işlemcide programlanmasını önler ve ayrıca
APC'lerin G/Ç'nin tamamlandığını bildirmesini engeller . Bu, DPC rutinlerinin tamamlanmasının
uzun bir zaman almaması için yapılır. Alternatif olarak, gönderici bir çalışan iş parçacığı havuzunu
korur.
ISR'ler ve DPC'ler , iş öğelerini normal iş parçacığı planlaması kullanılarak yürütülecekleri
çalışan iş parçacıklarına sıralayabilir. DPC yordamları, sayfa hatalarını alamamaları (bellek
yetersiz çağrılan), sistem servislerini çağırmamaları veya bir gönderici nesnesinin
sinyallenmesini bekleme girişimiyle sonuçlanabilecek başka herhangi bir eylemde
bulunmamaları için kısıtlanmıştır. APC'lerin aksine , DPC rutinleri, işlemcinin hangi süreç
bağlamını yürüttüğü hakkında hiçbir varsayımda bulunmaz.

B.3.2.5 İstisnalar ve Kesintiler Çekirdek

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:

• Bellek erişimi ihlali • Tamsayı

taşması • Kayan nokta taşması

veya taşması • Tamsayıyı sıfıra bölme • Kayan

noktayı sıfıra bölme • Geçersiz talimat • Veri

yanlış hizalaması • Ayrıcalıklı talimat • Sayfa

okuma hatası

• Erişim ihlali

• Disk belleği dosyası kotası aşıldı

• Hata ayıklayıcı kesme noktası •

Hata ayıklayıcı tek adım

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.3 Sistem Bileşenleri 15

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 .

kesme seviyeleri kesinti türleri

31 makine kontrolü veya veri yolu hatası

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

Şekil B.2 Windows kesme-istek seviyeleri.


Machine Translated by Google

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 .

B.3.2.6 Kullanıcı Modu ve Çekirdek Modu İş Parçacıkları Arasında Geçiş

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.

B.3.3.1 Nesne Yöneticisi

Çekirdek modu varlıklarını yönetmek için Windows, kullanıcı modu programları


tarafından manipüle edilen genel bir arabirimler kümesi kullanır. Windows bu varlık
nesnelerini çağırır ve bunları yöneten yönetici bileşen nesne yöneticisidir. Nesne
örnekleri semaforlar, muteksler, olaylar, süreçler ve iş parçacıklarıdır; bunların hepsi
gönderici nesnelerdir. İş parçacıkları, bu nesnelerden herhangi birinin sinyallenmesini
bekleyen çekirdek göndericisinde engellenebilir. İşlem, iş parçacığı ve sanal bellek
API'leri , üzerinde çalıştırılacak işlemi veya iş parçacığını belirlemek için işlem ve iş
parçacığı tutamaçlarını kullanır. Diğer nesne örnekleri arasında dosyalar, bölümler,
bağlantı noktaları ve çeşitli dahili G/Ç nesneleri bulunur. Dosya nesneleri, dosya ve
aygıtların açık durumunu korumak için kullanılır. Bölümler dosyaları eşlemek için kullanılır.
Yerel iletişim uç noktaları, bağlantı noktası nesneleri olarak uygulanır.
Kullanıcı modu kodu , birçok API tarafından döndürülen , tanıtıcı adı verilen opak
bir değer kullanarak bu nesnelere erişir. Her işlemin, işlem tarafından kullanılan
nesneleri izleyen girişleri içeren bir tanıtıcı tablosu vardır. Çekirdeği içeren sistem
süreci, kullanıcı kodundan korunan kendi tutamaç tablosuna sahiptir. Windows'taki
tutamaç tabloları, 1.024 tutamacı tutmaktan 16 milyonun üzerine kadar genişleyebilen
bir ağaç yapısıyla temsil edilir.
Çekirdek modu kodu, bir tanıtıcı veya başvurulan bir işaretçi kullanarak bir nesneye
erişebilir.
B.3 Sistem Bileşenleri 17
Machine Translated by Google

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.

Nesne yöneticisi, Windows dahili ad alanını korur. Dosya sisteminde sistem ad


alanını köklendiren UNIX'in aksine, Windows soyut bir ad alanı kullanır ve dosya
sistemlerini aygıtlar olarak bağlar . Bir Windows nesnesinin bir adı olup olmadığı
yaratıcısına bağlıdır. İşlemler ve iş parçacıkları, adlar olmadan oluşturulur ve tanıtıcı
veya ayrı bir sayısal tanımlayıcı aracılığıyla başvurulur. Senkronizasyon olaylarının
genellikle adları vardır, böylece ilgisiz işlemler tarafından açılabilirler. Bir isim kalıcı
veya geçici olabilir. Kalıcı ad, herhangi bir işlem erişmese bile kalan disk sürücüsü
gibi bir varlığı temsil eder. Geçici bir ad, yalnızca bir işlem nesneye bir tanıtıcı tutarken
bulunur. Nesne yöneticisi, ad alanındaki dizinleri ve sembolik bağları destekler.
Örnek olarak, MS-DOS sürücü harfleri sembolik bağlantılar kullanılarak uygulanır;
Global? C: Device HarddiskVolume2 cihaz nesnesine sembolik bir bağlantıdır
ve Device dizininde takılı bir dosya sistemi birimini temsil eder .

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.

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:
18 Ek B
Machine Translated by Google Windows 7
1. Bir uygulama, C: foo bar.doc adlı bir dosyanın açılmasını ister.
2. Nesne yöneticisi HarddiskVolume2 aygıt nesnesini bulur, nesnenin türünden
IopParseDevice ayrıştırma prosedürünü arar ve dosya sisteminin kök dizinine
göre dosya adıyla onu çağırır.
3. IopParseDevice() bir dosya nesnesi tahsis eder ve onu birimde C: foo bar.doc'a
nasıl erişileceğinin ayrıntılarını dolduran dosya sistemine iletir.

4. Dosya sistemi döndüğünde, IopParseDevice() , geçerli işlem için tutamaç


tablosundaki dosya nesnesi için bir giriş tahsis eder ve tanıtıcıyı uygulamaya
döndürür.

Dosya başarıyla açılamıyorsa, IopParseDevice() dosyayı siler.


dosya nesnesi tahsis eder ve uygulamaya bir hata göstergesi döndürür.

B.3.3.2 Sanal Bellek Yöneticisi Sanal

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

B.3 Sistem Bileşenleri 19

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.

Bu koruma ayarlarından son ikisine daha yakından bakalım:

• 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 dizini işaretçi tablosu

işaretçi 0 işaretçi 1 işaretçi 2 işaretçi 3

sayfa sayfa sayfa sayfa sayfa sayfa


dizini girişi dizini 0 dizini girişi dizini girişi dizini 3 dizini girişi
0 511 0 511

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

Şekil B.3 Sayfa-tablo düzeni.

ş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

PTR PDE indeksi PTE indeksi sayfa ofseti

Şekil B.4 IA-32'de sanaldan fiziksele adres çevirisi.


B.3 Sistem Bileşenleri 21
Machine Translated by Google
• 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ı, 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.

Fiziksel belleği, gerektiğinde 2 MB'lık sayfaların kullanılabilmesi için yönetmek


zordur, ancak bunlar sürekli olarak 4 KB'lık sayfalara bölünerek belleğin harici olarak
parçalanmasına neden olabileceğinden 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.

• Ücretsiz sayfa, belirli bir içeriği olmayan 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
tarafından yazılmıştır ve diske gönderilmelidir.
başka bir işlem için tahsis edilmeden önce.
• Bekleme sayfası, zaten diskte depolanan bilgilerin bir kopyasıdır . Bekleme
sayfaları, değiştirilmemiş sayfalar, diske önceden yazılmış değiştirilmiş sayfalar
veya yakında kullanılmaları beklendiği için önceden getirilmiş sayfalar olabilir.

• Bir donanım hatası algılandığından bozuk sayfa kullanılamaz. • Diskten


fiziksel belleğe ayrılmış bir sayfa çerçevesine geçiş sayfası yolda.

• 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.

İşlemlerin sayfa tablolarında geçerli sayfalar bulunurken, diğer durumlardaki


sayfalar durum tipine göre ayrı listelerde tutulur. Listeler, her bir fiziksel bellek
sayfası için bir giriş içeren sayfa çerçeve numarası (PFN) veritabanındaki karşılık
gelen girişleri birbirine bağlayarak oluşturulur . PFN girişleri ayrıca referans sayıları,
kilitler ve NUMA bilgileri gibi bilgileri içerir .
PFN veritabanının fiziksel bellek sayfalarını, PTE'lerin ise sanal bellek sayfalarını
temsil ettiğini unutmayın .
Bir PTE'deki geçerli bit sıfır olduğunda, donanım diğer tüm bitleri yok sayar ve
VM yöneticisi bunları kendi kullanımı için tanımlayabilir. Geçersiz sayfalar, PTE'de
bitlerle temsil edilen birkaç duruma sahip olabilir . Hiç sayfa dosyası sayfaları
Machine Translated by Google

B.3 Sistem Bileşenleri 23

63 32

sayfa dosyası ofseti

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.

B.3.3.3 İşlem Yöneticisi

Windows işlem yöneticisi, işlemler, iş parçacıkları ve işler oluşturmak, silmek ve kullanmak


için hizmetler sağlar. Ebeveyn-çocuk ilişkileri veya süreç hiyerarşileri hakkında bilgisi
yoktur; bu iyileştirmeler, sürece sahip olan belirli çevresel alt sisteme bırakılır. Süreç
yöneticisi, süreçler ve iş parçacıkları oluşturulduklarında öncelikleri ve benzerlikleri
belirlemek dışında, süreçlerin zamanlanmasında da yer almaz. İş parçacığı planlaması,
çekirdek göndericisinde gerçekleşir.

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:

1. Bir Win32 uygulaması CreateProcess()'i çağırır .

2. Win32 alt sistemine işlemin oluşturulmakta olduğunu bildiren bir mesaj gönderilir .

3. Orijinal süreçte CreateProcess() daha sonra süreci gerçekten yaratmak için NT


yöneticisinin süreç yöneticisinde bir API'yi çağırır .

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.

Sanal belleği ve iş parçacıklarını işlemeye ve tutamaçları çoğaltmaya yönelik


Windows API'leri , alt sistemlerin gerçekleştirebilmesi için bir işlem tanıtıcısı alır.
B.3 Sistem Bileşenleri 25
Machine Translated by Google

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 .

İşlem yöneticisi , çekirdek katmanı tarafından uygulanan eşzamansız prosedür çağrılarına


(APC'ler) dayanır . APC'ler , iş parçacığı yürütmesini başlatmak, iş parçacıklarını askıya almak ve
devam ettirmek, iş parçacığı kayıtlarına erişmek, iş parçacıklarını ve işlemlerini sonlandırmak ve
hata ayıklayıcıları desteklemek için kullanılır.
İşlem yöneticisindeki hata ayıklayıcı desteği, dizileri askıya almak ve sürdürmek ve askıya
alınmış modda başlayan diziler oluşturmak için API'leri içerir. Bir iş parçacığının kayıt bağlamını
alıp ayarlayan ve başka bir işlemin sanal belleğine erişen işlem yöneticisi API'leri de vardır.
Mevcut süreçte iş parçacıkları oluşturulabilir; başka bir işleme de enjekte edilebilirler. Hata
ayıklayıcı, hata ayıklanan bir işlem içinde kodu yürütmek için iş parçacığı enjeksiyonunu 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.

B.3.3.4 İstemci-Sunucu Hesaplama Tesisleri Windows'un

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.

Bir ALPC kanalı oluşturulduğunda, üç mesaj iletme tekniğinden biri seçilir.

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

Pencere yöneticisi mesajlaşmasının çeşitli avantajları vardır:

• 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ığı,

istemci iş parçacığı başına bir sunucu iş parçacığı olduğundan, hangi istemci iş


parçacığının sunucuyu çağırdığını belirleme ek yükünü ortadan kaldırır.

• Çekirdek, bu özel sunucu iş parçacıklarına zamanlama tercihi verir


performansı artırmak için.

B.3.3.5 G/Ç Yöneticisi G /

Ç yöneticisi , dosya sistemlerini, aygıt sürücülerini ve ağ sürücülerini yönetmekten


sorumludur. Hangi aygıt sürücülerinin, filtre sürücülerinin ve dosya sistemlerinin
yüklendiğini takip eder ve ayrıca G/Ç istekleri için arabellekleri yönetir. Bellek eşlemeli
dosya G/Ç sağlamak için VM yöneticisi ile birlikte çalışır ve tüm G/Ç sistemi için
önbelleğe almayı yöneten Windows önbellek yöneticisini kontrol eder . G /Ç yöneticisi
temelde eşzamansızdır ve bir G/Ç işleminin tamamlanmasını açıkça bekleyerek
eşzamanlı G/Ç sağlar. G / Ç yöneticisi, olayların ayarlanması, çağrı sürecindeki bir
durum değişkeninin güncellenmesi, başlangıç iş parçacıklarına APC'lerin teslimi ve tek
bir diğer birçok iş parçacığından G/Ç tamamlamalarını işlemek için 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.

B.3.3.6 Önbellek Yöneticisi

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

B.3 Sistem Bileşenleri 29

işlem

G/Ç
G/Ç yöneticisi

önbelleğe alınmış G/Ç

önbellek yöneticisi dosya sistemi

veri kopyası önbelleğe alınmamış G/Ç

sayfa hatası
sanal makine yöneticisi disk sürücüsü

Şekil B.6 Dosya G/Ç.

ö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 .

Önbellek yöneticisi, VM yöneticisine önbelleğin içeriğini temizlemesini söylemekten


de sorumludur . Önbellek yöneticisinin varsayılan davranışı geri yazmadır
30 Ek B
Machine Translated by Google Windows 7
önbelleğe alma: 4 ila 5 saniye boyunca yazma biriktirir ve ardından önbellek yazıcısı
dizisini uyandırır. Yazarak önbelleğe alma gerektiğinde, bir işlem dosyayı açarken bir
bayrak ayarlayabilir veya işlem açık bir önbellek temizleme işlevini çağırabilir.
Hızlı yazma işlemi, önbellek yazıcı iş parçacığının uyanıp sayfaları diske aktarma
şansı bulamadan tüm boş önbellek sayfalarını potansiyel olarak doldurabilir.
Önbellek yazıcısı, bir işlemin sisteme taşmasını aşağıdaki şekilde engeller. Boş
önbellek miktarı azaldığında, önbellek yöneticisi veri yazmaya çalışan işlemleri geçici
olarak engeller ve sayfaları diske boşaltmak için önbellek yazıcı iş parçacığını
uyandırır. Hızlı yazma işlemi aslında bir ağ dosya sistemi için bir ağ yeniden
yönlendiricisiyse, onu çok uzun süre engellemek ağ aktarımlarının zaman aşımına
uğramasına ve yeniden iletilmesine neden olabilir. Bu yeniden iletim, ağ bant
genişliğini boşa harcar. Bu tür israfı önlemek için ağ yeniden yönlendiricileri, önbellek
yöneticisine önbellekteki yazmaların biriktirme listesini sınırlaması talimatını verebilir.
Bir ağ dosya sisteminin verileri bir disk 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.

B.3.3.7 Güvenlik Referans Monitörü


Sistem varlıklarının yönetiminin nesne yöneticisinde merkezileştirilmesi, Windows'un
sistemdeki her kullanıcı tarafından erişilebilen varlık için çalışma zamanı erişim
doğrulaması ve denetim kontrolleri gerçekleştirmek için tek tip bir mekanizma
kullanmasını sağlar. Bir işlem bir nesneye bir tanıtıcı açtığında, güvenlik referans
izleyicisi (SRM) , işlemin gerekli erişim haklarına sahip olup olmadığını görmek için
işlemin güvenlik belirtecini ve nesnenin erişim kontrol listesini kontrol eder.
SRM , güvenlik belirteçlerindeki ayrıcalıkları manipüle etmekten de sorumludur.
Kullanıcıların dosya sistemleri, hata ayıklama işlemleri vb. üzerinde yedekleme veya
geri yükleme işlemleri gerçekleştirmesi için özel ayrıcalıklar gereklidir. Belirteçler
ayrıca, çoğu kullanıcının erişebildiği nesnelere erişememeleri için ayrıcalıklarında
kısıtlanmış olarak işaretlenebilir. Kısıtlı belirteçler, öncelikle güvenilmeyen kodun
yürütülmesiyle yapılabilecek hasarı sınırlamak için kullanılır.
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 yetenek mekanizmasıdır.
Diğer izinler ne olursa olsun, bir işlem, işlemde 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.
Internet Explorer gibi dışa dönük yazılımlara başarılı bir şekilde saldıran kodun bir
sistemi ele geçirmesini zorlaştırmak için bütünlük seviyeleri getirildi.
SRM'nin bir diğer sorumluluğu da güvenlik denetimi olaylarını günlüğe
kaydetmektir. Savunma Bakanlığı'nın Ortak Kriterleri (Turuncu Kitap'ın 2005 ardılı),
güvenli bir sistemin, yetkisiz erişim girişimlerini daha kolay izleyebilmesi için sistem
kaynaklarına erişmeye yönelik tüm girişimleri algılama ve kaydetme yeteneğine
sahip olmasını gerektirir. SRM , erişim kontrollerini yapmaktan sorumlu olduğundan ,
güvenlik olay günlüğündeki denetim kayıtlarının çoğunu oluşturur.

B.3.3.8 Tak ve Çalıştır Yöneticisi


İşletim sistemi , donanım yapılandırmasındaki değişiklikleri tanımak ve bunlara
uyum sağlamak için tak ve çalıştır (PnP) yöneticisini kullanır. PnP cihazları, kendilerini
sisteme tanıtmak için standart protokoller kullanır. PnP yöneticisi, kurulu cihazları
otomatik olarak tanır ve sistemdeki gibi cihazlardaki değişiklikleri algılar.
Machine Translated by Google

B.3 Sistem Bileşenleri 31

ç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.

B.3.3.9 Power Manager

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.

B.3.3.10 Kayıt Defteri

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.

Her yapılandırma değişikliği yapıldığında uygulamaları ve hatta sistemi yeniden


başlatmak sıkıntı yaratır. Bunun yerine programlar, sistem yapılandırmasındaki değişiklikler
hakkında bilgi edinmek için PnP ve güç yöneticileri tarafından sağlananlar gibi çeşitli bildirim
türlerine güvenir. Kayıt defteri ayrıca bildirimler sağlar; kayıt defterinin bir bölümünde
değişiklik yapıldığında, iş parçacıklarının bildirilmesini sağlar. Böylece iş parçacıkları, kayıt
defterinde kaydedilen yapılandırma değişikliklerini algılayabilir ve bunlara uyum sağlayabilir.

İş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

Windows PC'nin önyüklemesi, donanım açıldığında ve bellenim ROM'dan yürütülmeye


başladığında başlar . Eski makinelerde, bu bellenim BIOS olarak biliniyordu , ancak
daha modern sistemler , daha hızlı ve daha genel olan ve çağdaş işlemcilerdeki
olanaklardan daha iyi yararlanan UEFI'yi (Birleşik Genişletilebilir Ürün Yazılımı
Arabirimi) kullanır. Ü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 birçoğunu tanımlar ve bunları temiz, açık durumda
başlatır; ve ardından gelişmiş yapılandırma ve güç arabirimi (ACPI) tarafından kullanılan
açıklamayı oluşturur. Ardından, bellenim sistem diskini bulur, Windows bootmgr
programını yükler ve onu yürütmeye başlar.

Hazırda bekletme modundaki bir makinede, daha sonra winresume programı


yüklenir. Çalışan sistemi diskten geri yükler ve sistem hazırda bekletme modundan
hemen önce ulaştığı noktada yürütmeye devam eder. Kapatılmış bir makinede,
bootmgr , sistemin daha fazla başlatılmasını gerçekleştirir ve ardından winload'u
yükler. Bu program hal.dll'yi, çekirdeği (ntoskrnl.exe), ö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.

Ç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

gibi özellikleri uygular


kullanıcıların

• 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 oturumunda çalıştırılır


Bir kullanıcı.

Sistem, sistemin önceki önyüklemelerine dayalı olarak diskteki dosyalardan ön


sayfalama yaparak önyükleme işlemini optimize eder. Önyükleme sırasındaki disk
erişim kalıpları, gerekli G/Ç işlemlerinin sayısını azaltmak için sistem dosyalarını diske
yerleştirmek için de kullanılır . Sistemi başlatmak için gerekli işlemler, hizmetler daha
az işlemde gruplandırılarak azaltılır. Tüm bu yaklaşımlar, sistem önyükleme süresinde
önemli bir azalmaya katkıda bulunur. Elbette, Windows'un uyku ve hazırda bekletme
yetenekleri nedeniyle sistem önyükleme süresi bir zamanlar olduğundan daha az önemlidir.

B.4 Terminal Hizmetleri ve Hızlı Kullanıcı Değiştirme

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.

B.5 Dosya Sistemi

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 .

B.5.1 NTFS Dahili Düzen


NTFS'deki temel varlık bir birimdir. Bir birim, Windows mantıksal disk yönetimi yardımcı
programı tarafından oluşturulur ve bir mantıksal disk bölümünü temel alır.
Bir birim, bir diskin bir bölümünü veya tüm diski kaplayabilir veya birkaç diske yayılabilir.

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.

B.5.1.1 NTFS B+ Ağacı

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 .

B.5.1.2 NTFS Meta Verileri


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, bir
Machine Translated by Google

B.5 Dosya Sistemi 37

MFT'nin ilk 16 girişinin kopyası . Sonraki birkaç dosya da amaca özeldir. Aşağıda açıklanan
dosyaları içerirler.

• Günlük dosyası , dosya sistemine yapılan tüm meta veri güncellemelerini

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

birimdeki hangi kümelerin dosyalara ayrıldığını gösterir


ve hangileri ücretsizdir.

• Ö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.

B.5.4 Hacim Yönetimi ve Hata Toleransı


FtDisk , Windows için hataya dayanıklı disk sürücüsüdür. Kurulduğunda, performansı,
kapasiteyi veya güvenilirliği artırmak için birden çok disk sürücüsünü tek bir mantıksal
birimde birleştirmenin çeşitli yollarını sağlar.
Machine Translated by Google

B.5 Dosya Sistemi 39

disk 1 (2,5 GB) disk 2 (2,5 GB)

disk C: (FAT) 2 GB

LCN'ler 128001– 783361

mantıksal sürücü D: (NTFS) 3 GB


LCN'ler 0– 128000

Şekil B.7 İki sürücüde ayarlanmış birim.

B.5.4.1 Birim Setleri ve RAID Setleri

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.

B.5.4.2 Sektör Yedekleme ve Küme Yeniden Eşleme Kötü

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

B.5.6 Bağlantı Noktaları, Sembolik Bağlantılar ve Sabit Bağlantılar


Bağlantı noktaları, Windows 2000'de tanıtılan NTFS'deki dizinlere özgü bir sembolik
bağlantı biçimidir. Disk birimlerini düzenlemek için genel adların (sürücü harfleri gibi)
kullanımından daha esnek bir mekanizma sağlarlar. 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 destekleyecektir, 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 .

B.5.7 Günlüğü Değiştir


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, değiştirilmesi gereken
dosyaları belirlemek için değişiklik günlüğünü kullanır.
B.6 Ağ Oluşturma 41
Machine Translated by Google
yeniden indekslendi. Dosya çoğaltma hizmeti, ağ üzerinden çoğaltılması gereken
dosyaları belirlemek için bunu kullanır.

B.5.8 Birim Gölge Kopyaları

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.

Windows'un sunucu sürümü, dosya sunucularında depolanan dosyaların eski


sürümlerini verimli bir şekilde korumak için gölge kopyalar kullanır. Bu, kullanıcıların
dosya sunucularında depolanan belgeleri daha önceki zamanlarda var oldukları gibi
görmelerini sağlar. Kullanıcı, bu özelliği, yanlışlıkla silinen dosyaları kurtarmak veya
yalnızca dosyanın önceki bir sürümüne bakmak için, yedekleme ortamını çıkarmadan kullana

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

Windows'ta ağ oluşturmayı tanımlamak için, önce dahili ağ arabirimlerinden ikisinden


bahsetmemiz gerekir: ağ aygıtı arabirimi özelliği (NDIS) ve aktarım sürücüsü arabirimi
(TDI). NDIS arabirimi, 1989'da Microsoft ve 3Com tarafından ağ bağdaştırıcılarını taşıma
protokollerinden ayırmak için geliştirilmiştir , böylece her ikisi de diğerini etkilemeden
değiştirilebilir. NDIS , ISO modelinde veri bağlantısı ve ağ katmanları arasındaki
arabirimde bulunur ve birçok protokolün birçok farklı ağ bağdaştırıcısı üzerinde
çalışmasını sağlar. ISO modeli açısından , TDI , taşıma katmanı (katman 4) ve oturum
katmanı (katman 5) arasındaki arayüzdür. Bu arabirim, herhangi bir oturum katmanı
bileşeninin mevcut herhangi bir aktarım mekanizmasını kullanmasını sağlar. (Benzer akıl
yürütme, UNIX'teki akış mekanizmasına yol açtı . ) TDI , hem bağlantı tabanlı hem de
bağlantısız taşımayı destekler ve her tür veriyi gönderme işlevlerine sahiptir.

B.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.
42
Ek B
Machine Translated by Google Windows 7
B.6.2.1 Sunucu İleti Bloğu Sunucu ileti

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.

B.6.2.2 İletim Kontrol Protokolü/İnternet Protokolü

İ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.

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.

B.6.2.3 Noktadan Noktaya Tünel Protokolü Noktadan

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 .

B.6.2.4 HTTP Protokolü

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 .

B.6.2.5 Web'de Dağıtılmış Yazma ve Sürüm Oluşturma Protokolü Web'de

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ış

Yönlendirmeler 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, böylece farklı sistemlerdeki işlemler arasında
iletişim için de kullanılabilirler.
Kanal adlarının biçimi, tek tip 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.

B.6.2.7 Uzaktan Yordam Çağrıları

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 .

B.6.2.8 Bileşen Nesne Modeli Bileşen nesne

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 .

B.6.3 Yönlendiriciler ve Sunucular


Windows'ta bir uygulama, uzak bilgisayarın Windows tarafından sağlananlar gibi bir CIFS
sunucusu çalıştırıyor olması koşuluyla, uzak bilgisayardaki dosyalara yerelmiş gibi erişmek için
Windows G/Ç API'sini kullanabilir. Aredirector , G/Ç isteklerini bir sunucu tarafından
karşılandıkları uzak bir sisteme ileten istemci tarafı nesnesidir . Performans ve güvenlik için,
yeniden yönlendiriciler ve sunucular çekirdek modunda çalışır.

Daha ayrıntılı olarak, uzak bir dosyaya erişim şu şekilde gerçekleşir:

1. Uygulama, I/O yöneticisini arayarak bir dosyanın şu komutla açılmasını ister:


standart UNC biçiminde bir dosya adı .

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.

6. Yönlendirici, ağ isteğini uzak sisteme gönderir.

7. Uzak sistem ağ sürücüleri, isteği alır ve


sunucu sürücüsü.

8. Sunucu sürücüsü, isteği uygun yerel dosya sistemi sürücüsüne iletir.

9. Verilere erişmek için uygun aygıt sürücüsü çağrılı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 B.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.

B.6.3.1 Dağıtılmış Dosya Sistemi UNC

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.

B.6.3.2 Klasör Yeniden Yönlendirme ve İstemci Tarafında Önbelleğe

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.

B.6.4 Etki Alanları

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.

B.6.5 Aktif Dizin


Active Directory , hafif dizin erişim protokolü (LDAP) hizmetlerinin Windows uygulamasıdır .
Active Directory, etki alanıyla ilgili topoloji bilgilerini depolar, etki alanı tabanlı kullanıcı ve grup
hesaplarını ve parolaları tutar ve Windows grup ilkesi gibi buna ihtiyaç duyan Windows özellikleri
için etki alanı tabanlı bir depo sağlar. Yöneticiler, masaüstü tercihleri ve yazılım için tek tip
standartlar oluşturmak için grup ilkelerini kullanır. Birçok
Machine Translated by Google

46 Ek B Windows 7

kurumsal bilgi teknolojisi grupları, bu tekdüzelik bilgi işlem maliyetini büyük ölçüde
azaltır.

B.7 Programcı Arayüzü

Win32 API , Windows'un yeteneklerinin temel arabirimidir. Bu bölümde Win32


API'nin beş ana yönü açıklanmaktadır : çekirdek nesnelerine erişim, süreçler arasında
nesnelerin paylaşımı, süreç yönetimi, süreçler arası iletişim ve bellek yönetimi.

B.7.1 Çekirdek Nesnelerine Erişim

Windows çekirdeği, uygulama programlarının kullanabileceği birçok hizmet sağlar.


Uygulama programları, bu hizmetleri çekirdek nesnelerini manipüle ederek elde
eder. Bir işlem, bir XXX örneğine bir tanıtıcı açmak için CreateXXX işlevini çağırarak
XXX adlı bir çekirdek nesnesine erişim kazanır . Bu tutamaç, sürece özgüdür. Hangi
nesnenin açıldığına bağlı olarak, Create() işlevi başarısız olursa, 0 veya INVALID
HANDLE VALUE adlı özel bir sabit döndürebilir. Bir işlem, CloseHandle() işlevini
çağırarak herhangi bir tutamacı kapatabilir ve tüm işlemlerde nesneye başvuran
tutamaçların sayısı sıfıra düşerse sistem nesneyi silebilir.

B.7.2 İşlemler Arasında Nesnelerin Paylaşılması

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.

GÜVENLİK ÖZELLİKLERİ sa;


sa.nuzunluk = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = DOĞRU; Bir semafor
işle = CreateSemaphore(&sa, 1, 1, NULL); char komut satırı[132]; ostrstream
ostring(komut satırı, sizeof(komut satırı)); ostring << bir semafor << biter;
CreateProcess("başka bir işlem.exe", komut satırı, . .); BOŞ, BOŞ, DOĞRU, .

Şekil B.8 Bir çocuğun bir tutamacı devralarak bir nesneyi paylaşmasını sağlayan kod.
Machine Translated by Google

B.7 Programcı Arayüzü 47

// İşlem A
...
HANDLE a semaphore = CreateSemaphore(NULL, 1, 1, "MySEM1");
...

// İşlem B
...
KOLU b semaforu = OpenSemaphore(TÜM ERİŞİM SEMAPHORE,
YANLIŞ, "MySEM1");
...

Şekil B.9 Bir nesneyi ad aramasına göre paylaşma kodu.

Alt sürecin hangi tanıtıcıların paylaşıldığını bildiğini varsayarsak, ebeveyn ve


çocuk, paylaşılan nesneler aracılığıyla süreçler arası iletişimi gerçekleştirebilir.
Şekil B.8'deki örnekte, alt süreç ilk komut satırı argümanından tutamaç değerini alır
ve ardından semaforu üst süreçle paylaşır.

Nesneleri paylaşmanın ikinci yolu, bir işlemin nesne oluşturulduğunda nesneye


bir ad vermesi ve ikinci işlemin adı açmasıdır.
Bu yöntemin iki dezavantajı vardır: Windows, seçilen ada sahip bir nesnenin zaten
var olup olmadığını kontrol etmek için bir yol sağlamaz ve nesne türü ne olursa olsun
nesne ad alanı geneldir. Örneğin, iki farklı nesne (muhtemelen farklı türde)
istendiğinde, iki uygulama "foo" adlı tek bir nesne oluşturabilir ve paylaşabilir.

Adlandırılmış nesneler, ilgisiz süreçlerin bunları kolayca paylaşabilme avantajına


sahiptir. İlk işlem CreateXXX işlevlerinden birini çağırır ve parametre olarak bir ad
sağlar. İkinci işlem, Şekil B.9'daki örnekte gösterildiği gibi, aynı adla OpenXXX() (veya
CreateXXX) öğesini çağırarak nesneyi paylaşmak için bir tanıtıcı alır.

Nesneleri paylaşmanın üçüncü yolu DuplicateHandle() işlevidir. Bu yöntem,


çoğaltılan tanıtıcıyı geçmek için başka bir süreçler arası iletişim yöntemi gerektirir.
Bir işleme bir tanıtıcı ve bu süreç içindeki bir tanıtıcının değeri verildiğinde, ikinci bir
süreç aynı nesneye bir tanıtıcı alabilir ve böylece onu paylaşabilir. Bu yöntemin bir
örneği Şekil B.10'da gösterilmektedir.

B.7.3 Süreç Yönetimi

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, İşlem B'ye bir semafora erişim vermek istiyor

// İş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
...

Şekil B.10 Bir nesneyi bir tanıtıcı ileterek paylaşma kodu.

B.7.3.1 Zamanlama Kuralı


Win32 ortamındaki öncelikler, yerel çekirdek (NT) zamanlama modelini temel alır, ancak
tüm öncelik değerleri seçilemez. Win32 API dört öncelik sınıfı kullanır:

1. BOŞTA ÖNCELİK SINIFI (NT öncelik düzeyi 4)

2. NORMAL ÖNCELİK SINIFI (NT öncelik seviyesi 8)

3. YÜKSEK ÖNCELİKLİ SINIF (NT öncelik seviyesi 13)

4. GERÇEK ZAMAN ÖNCELİK SINIFI (NT öncelik seviyesi 24)

İşlemler, işlemin ebeveyni BOŞTA ÖNCELİK SINIFINDA olmadıkça veya CreateProcess


çağrıldığında başka bir sınıf belirtilmedikçe, genellikle NORMAL PRIORITY CLASS'ın
üyeleridir. Bir işlemin öncelik sınıfı, işlemde yürütülen tüm iş parçacıkları için
varsayılandır. SetPriorityClass() işleviyle veya START komutuna bir argüman iletilerek
değiştirilebilir . Yalnızca zamanlama önceliğini artırma ayrıcalığına sahip kullanıcılar, bir
işlemi GERÇEK ZAMAN ÖNCELİKLİ SINIF'a taşıyabilir. Yöneticiler ve yetkili kullanıcılar
varsayılan olarak bu ayrıcalığa sahiptir.

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

B.7 Programcı Arayüzü 49

ön plan işleminde, arka plan işlemlerindeki benzer iş parçacıklarından üç kat daha uzun süre
çalışacaktır.

B.7.3.2 İplik Öncelikleri

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:

• EN DÜŞÜK İPLİK ÖNCELİKLİ: taban 2

• NORMALİN ALTINDA İPLİK ÖNCELİKLİ: baz 1

• İPLİK ÖNCELİK NORMAL: baz + 0

• NORMALİN ÜZERİNDEKİ İPLİK ÖNCELİKLİ: baz + 1

• EN YÜKSEK İPLİK ÖNCELİKLİ: taban + 2

Ö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 .

B.7.3.3 İş parçacığını Askıya Al ve Sürdür Bir 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.

B.7.3.4 İş Parçacığı Senkronizasyonu İş

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 .

B.7.3.5 İplik Havuzu

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

CreateFiber() , oluşturulan fiberi yürütmeye başlamaz. Yürütmeyi


başlatmak için uygulama SwitchToFiber()'i çağırmalıdır. Uygulama,
DeleteFiber()'i çağırarak bir fiberi sonlandırabilir .
Olası uyumsuzluklar nedeniyle standart C kitaplığı işlevleri yerine Win32 API'lerini
kullanan iş parçacıkları için fiberler önerilmez. Win32 kullanıcı modu iş parçacıkları ,
Win32 API'leri tarafından kullanılan çok sayıda iş parçacığı başına alan içeren bir iş
parçacığı ortamı bloğuna (TEB) sahiptir. Elyaflar, üzerinde çalıştıkları ipliğin TEB'sini
paylaşmalıdır. Bu, bir Win32 arabirimi, bir fiber için TEB'e durum bilgisini koyduğunda
ve ardından bilgilerin üzerine farklı bir fiber tarafından yazıldığında sorunlara yol
açabilir . 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.

B.7.3.7 Kullanıcı Modu Zamanlama (UMS) ve ConcRT

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

KT0 KT1 KT2 birincil iş


parçacığı
tuzak kodu
iplik park
çekirdek
kullanıcı

UT tamamlama listesi

kullanıcı modu
UT0 zamanlayıcı

Kullanıcı modunda yalnızca birincil iş parçacığı çalışır


Tuzak kodu park edilmiş KT'ye geçer
>
KT blokları = kullanıcı moduna birincil dönüşler
UT1 UT0
KT engellemeyi kaldırır ve park eder = > UT kuyruğunun tamamlanması

Şekil B.11 Kullanıcı modu zamanlaması.

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 .

B.7.4 Windows Mesajlaşmayı Kullanan IPC


Win32 uygulamaları, süreçler arası iletişimi çeşitli şekillerde işler. Bunun bir yolu,
paylaşılan çekirdek nesnelerini kullanmaktır. Bir diğeri, özellikle Win32 GUI
uygulamaları için popüler olan bir yaklaşım olan Windows mesajlaşma özelliğini
kullanmaktır. Bir iş parçacığı, PostMessage(), PostThreadMessage(), SendMessage(),
SendThreadMessage() veya SendMessageCallback()'i çağırarak başka bir iş
parçacığına veya bir pencereye mesaj gönderebilir . Mesaj göndermek ve mesaj
göndermek şu şekilde farklılık gösterir: post yordamları eşzamansızdır, hemen
geri dönerler ve arayan iş parçacığı mesajın ne zaman geldiğini bilmez.
Machine Translated by Google

B.7 Programcı Arayüzü 53

// adres alanımızın en üstüne 16 MB ayırın void *buf =


VirtualAlloc(0, 0x1000000, MEM REZERVE | MEM TOP DOWN,
SAYFA OKUMA YAZILI);
// ayrılan alanın üst 8 MB'sini taahhüt et
VirtualAlloc(buf + 0x800000, 0x800000, MEM COMMIT, SAYFA OKUMA YAZILI); //
hafızayla bir şeyler yap
...
// şimdi hafızayı devre dışı bırak
VirtualFree(tampon + 0x800000, 0x800000, MEM DECOMMIT); //
tahsis edilen tüm adres alanını serbest bırak
VirtualFree(tampon, 0, MEM YAYINLAMA);

Şekil B.12 Sanal bellek tahsis etmek için kod parçaları.

aslında teslim edilir. Gönderme rutinleri eşzamanlıdır: 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 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.

B.7.5 Bellek Yönetimi


Win32 API , bir uygulamanın belleği kullanması için birkaç yol sağlar: sanal bellek,
bellek eşlemeli dosyalar, yığınlar ve iş parçacığı yerel depolama.

B.7.5.1 Sanal Bellek Bir

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.

Bir işlem, VirtualLock()'u çağırarak taahhüt edilen sayfalarından bazılarını fiziksel


belleğe kilitleyebilir . İşlem , maksimum çalışma kümesi boyutunu artırmak için önce
SetProcessWorkingSetSize() öğesini çağırmadıkça , bir işlemin kilitleyebileceği
maksimum sayfa sayısı 30'dur .

B.7.5.2 Bellek Eşleme Dosyaları Bir

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

// dosyayı açın veya mevcut değilse oluşturun


HANDLE hfile = CreateFile("bir dosya", GENEL OKUMA | GENEL YAZMA,
DOSYA PAYLAŞIMI OKUYUN | DOSYA PAYLAŞIM YAZ, NULL,
HER ZAMAN AÇIK, DOSYA ÖZELLİK NORMAL, NULL);
// 8 MB boyutunda dosya eşlemesi oluşturun
HANDLE hmap = CreateFileMapping(hfile, PAGE READWRITE,
SEC COMMIT, 0, 0x800000, "SHM 1"); // şimdi
boşluk eşlenmiş boşluğun bir görünümünü elde
edin *buf = MapViewOfFile(hmap, FILE MAP ALL ACCESS, 0, 0, 0,
0x800000);
// eşlenen dosyayla bir şeyler yap
...
// şimdi dosyanın eşlemesini kaldır
UnMapViewOfFile(tampon);
CloseHandle(hmap);
CloseHandle(hfile);

Şekil B.13 Bir dosyanın bellek eşlemesi için kod parçaları.

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

// bir değişken için bir yuva ayır


DWORD var index = T1sAlloc(); // onu 10
değerine ayarla
T1sSetValue(var dizini, 10); // değerini
al int var T1sGetValue(var indeks); //
dizini serbest bırak

T1sFree(var dizin);

Şekil B.14 Dinamik iş parçacığı yerel depolaması için kod.

atama sorunu. Windows 7 yığın yöneticisi , uygun şekilde LFH'yi otomatik olarak açar .

B.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 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:

declspec(thread) DWORD doğru konum = 0;

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.

B.3 Bir Windows sistemi için önyükleme sürecini tanımlayın.


B.4 Windows çekirdeğinin üç ana mimari katmanını tanımlayın.
B.5 Nesne yöneticisinin işi nedir?
B.6 Süreç yöneticisi ne tür hizmetler sağlar?
B.7 Yerel prosedür çağrısı nedir?
B.8 I/O yöneticisinin sorumlulukları nelerdir ?
B.9 Windows ne tür ağları destekler? Windows taşıma protokollerini nasıl uygular?
İki ağ protokolünü açıklayın.
B.10 NTFS ad alanı nasıl düzenlenir?
B.11 NTFS veri yapılarını nasıl işler? NTFS bir bilgisayardan nasıl kurtarılır ?
sistem çökmesi? İyileşme gerçekleştikten sonra ne garanti edilir?
B.12 Windows kullanıcı belleğini nasıl tahsis eder?
B.13 Bir uygulamanın, aşağıdakiler aracılığıyla belleği kullanabileceği yollardan bazılarını tanımlayın.
Win32 API'si.

Daha fazla okuma


[Russinovich et al. (2017)], Windows 7'ye genel bir bakış sağlar ve sistem iç bileşenleri
ve bileşenleri hakkında olası teknik ayrıntıları dikkate alır. [Brown (2000)], Windows'un
güvenlik mimarisinin ayrıntılarını sunar.
Microsoft Developer Network Library (http://msdn.microsoft.com) , yayınlanan
tüm API'lerin belgeleri de dahil olmak üzere, Windows ve diğer Microsoft ürünleri
hakkında çok sayıda bilgi sağlar .
[Iseminger (2000)], Windows Aktif Dizini hakkında iyi bir referans sağlar. Win32
API'sini kullanan program yazmaya ilişkin ayrıntılı tartışmalar [Richter (1997)]'de yer
almaktadır.
Windows çekirdeğinin 2005 WRK sürümünün kaynak kodu , slaytlar ve diğer CRK
müfredat materyalleri ile birlikte üniversiteler tarafından kullanılmak üzere
www.microsoft.com/WindowsAcademic adresinden edinilebilir.

bibliyografya

[Brown (2000)] K. Brown, Windows Güvenliğini Programlama, Addison-Wesley


(2000).

[Iseminger (2000)] D. Iseminger, Microsoft Windows için Active Directory Hizmetleri


2000. Teknik Referans, Microsoft Press (2000).
Machine Translated by Google

bibliyografya 57

[Richter (1997)] J. Richter, Gelişmiş Windows, Microsoft Press (1997).


[Russinovich et al. (2017)] M. Russinovich, DA Solomon ve A. Ionescu, Win
dows Internals – Bölüm 1, Yedinci Baskı, Microsoft Press (2017).
Machine Translated by Google
Machine Translated by Google

CEk
BSD UNIX'i

Bu bölüm ilk olarak 1991 yılında yazılmıştır ve zaman içinde güncellenmiştir.

Bölüm 20'de, Linux işletim sisteminin derinlemesine bir incelemesini sunduk. Bu


bölümde, başka bir popüler UNIX sürümünü, UnixBSD'yi inceleyeceğiz.
UNIX işletim sisteminin kısa bir tarihçesini sunarak başlıyoruz . Daha sonra sistemin
kullanıcı ve programcı arayüzlerini tanımlıyoruz. Son olarak, kullanıcı-programcı
arayüzünü desteklemek için FreeBSD çekirdeği tarafından kullanılan dahili veri
yapılarını ve algoritmaları tartışıyoruz .

C.1 UNIX Geçmişi

UNIX'in ilk versiyonu 1969'da Bell Laboratories'deki Araştırma Grubundan Ken


Thompson tarafından aksi halde boşta olan bir PDP-7'yi kullanmak için geliştirildi.
Thomp oğluna kısa süre sonra Dennis Ritchie katıldı ve onlar, Araştırma Grubunun
diğer üyeleriyle birlikte UNIX'in ilk sürümlerini ürettiler.
Ritchie daha önce MULTICS projesinde çalışmıştı ve MULTICS'in yeni işletim
sistemi üzerinde güçlü bir etkisi vardı. UNIX adı bile MULTICS'te bir kelime oyunudur .
Dosya sisteminin temel organizasyonu, bir kullanıcı işlemi olarak komut yorumlayıcısı
(veya kabuğu) fikri, her komut için ayrı bir işlemin kullanılması, orijinal satır
düzenleme karakterleri (# son karakteri silmek için ve @ için tüm satırı sil) ve diğer
birçok özellik doğrudan MULTICS'ten geldi. MIT'nin CTSS'si ve XDS-940 sistemi gibi
diğer işletim sistemlerinden fikirler de kullanıldı.

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.

UNIX geliştikçe Bell Laboratuvarlarında yaygın olarak kullanılmaya başlandı ve


yavaş yavaş birkaç üniversiteye yayıldı. İlk sürüm yaygın olarak kullanılabilir

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.)

1978'de Sürüm 7 dağıtıldı. Bu UNIX sistemi, PDP-11/70 ve Interdata 8/32 üzerinde


çalıştı ve çoğu modern UNIX sisteminin atasıdır . Özellikle, kısa süre sonra diğer
PDP-11 modellerine ve VAX bilgisayar hattına taşındı. VAX'ta bulunan sürüm 32V
olarak biliniyordu. O zamandan beri araştırmalar devam ediyor.

C.1.1 UNIX Destek Grubu 1978'de

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.

C.1.2 Berkeley Geliştirmeye Başlıyor

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

C.1 UNIX Geçmişi 3

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.

Ayrıca Berkeley, UNIX'in tasarımını ve uygulamasını geliştirmek için çağdaş


işletim sistemlerinden birçok özelliği uyarladı . TENEX (TOPS-20) işletim sisteminin
terminal satırı düzenleme işlevlerinin çoğu, yeni bir terminal sürücüsü tarafından
sağlandı. Berkeley'de yeni bir kullanıcı arayüzü (C Shell), yeni bir metin editörü (ex/
vi), Pascal ve LISP için derleyiciler ve birçok yeni sistem programı yazılmıştır. 4.2 BSD
için, VMS işletim sisteminden ilham alınarak belirli verimlilik iyileştirmeleri yapıldı .

Berkeley'in UNIX yazılımı, Berkeley Yazılım Dağıtımlarında (BSD) yayınlandı. 3 BSD'yi 4


BSD olarak takip eden Berkeley VAX UNIX sistemlerine atıfta bulunmak uygundur , ancak
aslında birkaç özel sürüm vardı, özellikle 4.1 BSD ve 4.2 BSD; İlk olarak 1983'te dağıtılan 4.2
BSD, orijinal Berkeley DARPA UNIX projesinin doruk noktasıydı. PDP-11 sistemleri için eşdeğer
sürüm 2.9 BSD idi.

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

C.1.3 UNIX'in Yayılması


UNIX 4 BSD , ilk sürümünden (1979'da) DEC'in BSD uygulaması olan Ultrix'in yayınlanmasına kadar
VAX için tercih edilen işletim sistemiydi . Aslında, 4 BSD birçok araştırma ve ağ kurulumu için hala
en iyi seçimdir.
Bununla birlikte, mevcut UNIX işletim sistemleri seti, Bell Laboratories (şu anda
Lucent Technology'ye aittir) ve Berkeley'den gelenlerle sınırlı değildir. Sun
Microsystems , UNIX'in BSD özelliğini Sun iş istasyonlarına ping göndererek popüler
hale getirmeye yardımcı oldu. UNIX'in popülaritesi arttıkça birçok bilgisayara ve
bilgisayar sistemine taşındı. Çok çeşitli UNIX ve UNIX benzeri işletim sistemleri
oluşturulmuştur. DEC , iş istasyonlarında UNIX'i (Ultrix) destekledi ve Ultrix'i UNIX'ten
türetilen başka bir işletim sistemi olan OSF/1 ile değiştiriyor. Microsoft, Intel 8088
ailesi için UNIX'i yeniden yazdı ve buna XENIX adını verdi ve Windows NT işletim
sistemi, UNIX'ten büyük ölçüde etkilendi . IBM'in bilgisayarlarında , iş istasyonlarında
ve ana bilgisayarlarında UNIX (AIX) vardır . Aslında, UNIX hemen hemen tüm genel
amaçlı bilgisayarlarda bulunur. Apple Macintosh II'lerden Cray II'lere kadar kişisel
bilgisayarlar, iş istasyonları, mini bilgisayarlar, ana bilgisayarlar ve süper bilgisayarlar
üzerinde çalışır. Geniş kullanılabilirliği nedeniyle, akademik ortamlardan askeriyeye
ve üretim süreci kontrolüne kadar değişen ortamlarda kullanılır. Bu sistemlerin çoğu
Sürüm 7, Sistem III, 4.2 BSD veya Sistem V'ye dayanmaktadır.

UNIX'in bilgisayar satıcıları arasındaki geniş popülaritesi, UNIX'i en taşınabilir


işletim sistemi haline getirdi ve kullanıcılar, herhangi bir belirli bilgisayar üreticisinden
bağımsız bir UNIX ortamı bekleyebilirler. Ancak sistemin çok sayıdaki uygulaması,
satıcılar tarafından dağıtılan programlama ve kullanıcı arayüzlerinde dikkate değer
farklılıklara yol açmıştır. Gerçek satıcı bağımsızlığı için uygulama programı
geliştiricilerinin tutarlı arayüzlere ihtiyacı vardır. Bu tür ara yüzler, tüm “UNIX”
uygulamalarının tüm UNIX sistemlerinde çalışmasına izin verir ki bu kesinlikle mevcut
durum değildir. UNIX, veri tabanlarından grafiklere ve ağ oluşturmaya kadar çeşitli
uygulamalar için tercih edilen program geliştirme platformu haline geldiğinden ve
UNIX standartları için güçlü bir pazar talebine yol açtığından bu konu önem
kazanmıştır .
Çeşitli standardizasyon projeleri gerçekleştirilmiştir. İlki , UniForum endüstri
kullanıcı grubu tarafından desteklenen /usr/group 1984 Standardıydı .
O zamandan beri, IEEE ve ISO ( POSIX standardı) dahil olmak üzere birçok resmi
standart kuruluşu bu çabayı sürdürdü . X/Open Group uluslararası konsorsiyumu ,
IEEE arabirim standardını kapsayan bir Ortak Uygulama Ortamı olan XPG3'ü
tamamladı. Ne yazık ki, XPG3 , nihai spesifikasyon yerine ANSI C standardının bir
taslağına dayanmaktadır ve bu nedenle XPG4 olarak yeniden yapılması gerekiyordu.
1989'da, ANSI standartlar kuruluşu, C programlama dilini standartlaştırdı ve satıcıların
hızlı bir şekilde benimsediği bir ANSI C belirtimi üretti.

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

C.1 UNIX Geçmişi 5

USG/USDL/ATTI İlk baskı


1969
Bell Laboratuvarları Berkley
DSG/USO/USL Araştırma Yazılım
Beşinci baskı dağıtımlar
1973
Altıncı Baskı
1976 PDP-11 PDP-11

PWB MERT CB UNIX 1BSD


1977
VAX
1978 UNIX/RT Yedinci Baskı 2BSD
32V
3BSD
1979
3.0 4.0BSD
VAX
1980 XENIX
3.0.1
4.1BSD
1981 4.0.1
4.1aBSD
1982 5.0 Sistem III 2.8BSD
Sekizinci 4.1cBSD
1983 5.2 Sistem V XENIX 3 Baskı 2.9BSD
4.2BSD
1984 Sistem V SunOS
sürüm 2
1985

1986 Mach SunOS 3


Dokuzuncu 4.3BSD
Sistem V
1987 Koro sürüm 3
Baskı 2.10BSD
XENIX 5
1988 4.3BSD
Onuncu
UNIX Baskı Tahoe
1989 Koro Sistem V SunOS4
V3 sürüm 4 Plan 9
4.3BSD
1990 OSF/1 Yenileme

1991

1992 Solaris 4.4BSD

1993 Solaris 2

Şekil C.1 1993'e kadar UNIX sürümlerinin geçmişi.

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 .

C.1.4 FreeBSD'nin Tarihçesi

Bu bölümde kullanılan belirli UNIX sürümü, FreeBSD'nin Intel sürümüdür.


Bu sistem, kümeleme ile talep sayfalama ve ağ oluşturma gibi birçok ilginç işletim
sistemi konseptini uygular. FreeBSD projesi , mevcut yama mekanizması kullanılarak
çözülemeyen sorunları çözmek için 386 BSD'nin anlık görüntüsünü üretmek için 1993'ün
başlarında başladı . 386 BSD , 4.3 BSD-Lite'tan (Net/2) türetilmiştir ve Haziran 1992'de
William Jolitz tarafından piyasaya sürülmüştür.
FreeBSD (David Greenman tarafından oluşturuldu) 1.0 Aralık 1993'te yayınlandı ve
FreeBSD 1.1 Mayıs 1994'te yayınlandı. Her iki sürüm de 4.3 BSD-Lite'a dayanıyordu.
UCB ve Novell arasındaki yasal sorunlar, 4.3 BSD-Lite kodunun artık kullanılmamasını
gerektirdi, bu nedenle son 4.3 BSD-Lite sürümü Temmuz 1994'te yapıldı (FreeBSD 1.1.5.1).
FreeBSD daha sonra eksik olan 4.4BSD-Lite koduna dayalı olarak yeniden icat
edildi. FreeBSD 2.0, Kasım 1994'te piyasaya sürüldü. Daha sonraki sürümler arasında
Haziran 1995'te 2.0.5, Ağustos 1996'da 2.1.5, Şubat 1997'de 2.1.7.1, Nisan 1997'de 2.2.1,
Kasım 1998'de 2.2.8, Ekim 1998'de 3.0 vardı. , Şubat 1999'da 3.1, Mayıs 1999'da 3.2,
Eylül 1999'da 3.3, Aralık 1999'da 3.4, Haziran 2000'de 3.5, Mart 2000'de 4.0, Temmuz
2000'de 4.1 ve Kasım 2000'de 4.2.
FreeBSD projesinin amacı , herhangi bir dizge eklenmeden herhangi bir amaç için
kullanılabilecek bir yazılım sağlamaktır. Buradaki fikir, kodun mümkün olan en geniş
kullanımı alması ve en fazla faydayı sağlamasıdır. Şu anda, Alpha platformları desteklense
de, öncelikle Intel platformlarında çalışıyor. Diğer işlemci platformlarına da taşınması
için çalışmalar sürüyor.

C.2 Tasarım İlkeleri


UNIX , zaman paylaşımlı bir sistem olarak tasarlanmıştır. Standart kullanıcı arayüzü (kabuk)
basittir ve istenirse bir başkasıyla değiştirilebilir. Dosya sistemi, kullanıcıların kendi alt
dizinlerini oluşturmalarına izin veren çok düzeyli bir ağaçtır. Her kullanıcı veri dosyası basitçe
bir bayt dizisidir.
Disk dosyaları ve G/Ç aygıtları mümkün olduğunca benzer şekilde ele alınır. Böylece
cihaz bağımlılıkları ve özellikleri mümkün olduğunca çekirdekte tutulur. Çekirdekte bile
çoğu aygıt sürücüleriyle sınırlıdır.
UNIX , birden çok işlemi destekler. Bir süreç kolaylıkla yeni süreçler yaratabilir.
CPU zamanlaması basit bir öncelik algoritmasıdır. FreeBSD talebi kullanır
7
Machine Translated by Google C.2 Tasarım İlkeleri

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.

UNIX sistemi , programcılar tarafından programcılar için tasarlanmıştır. Bu


nedenle, her zaman etkileşimli olmuştur ve program geliştirme tesisleri her zaman
yüksek önceliğe sahip olmuştur. Bu tür tesisler arasında program yapımı (bir program
için hangi kaynak dosya koleksiyonunun derlenmesi gerektiğini kontrol etmek ve daha
sonra derlemeyi yapmak için kullanılabilir) ve Kaynak Kodu Kontrol Sistemi (SCCS)
(birbirini takip etmek için kullanılan ) bulunur. her adımın tüm içeriğini depolamak
zorunda kalmadan kullanılabilir dosyaların sürümleri). UNIX tarafından kullanılan
birincil sürüm kontrol sistemi , kod üzerinde çalışan ve kullanan çok sayıda geliştirici
nedeniyle Eşzamanlı Sürümler Sistemidir (CVS) .
İşletim sistemi çoğunlukla UNIX'i desteklemek için geliştirilen C ile yazılmıştır,
çünkü ne Thompson ne de Ritchie montaj dilinde programlama yapmaktan hoşlanmaz.
UNIX'in çalıştırılacağı makinelerle ilgili belirsizlik nedeniyle montaj dilinden kaçınılması
da gerekliydi . UNIX'i bir donanım sisteminden diğerine taşıma sorunlarını büyük
ölçüde basitleştirdi .

En başından beri, UNIX geliştirme sistemlerinde tüm UNIX kaynakları çevrimiçi


olarak kullanılabilir durumdaydı ve geliştiriciler, geliştirilmekte olan sistemleri birincil
sistemleri olarak kullandılar. Bu gelişme modeli, eksikliklerin ve bunların düzeltilmesinin
yanı sıra yeni olasılıkların ve bunların uygulanmasının keşfedilmesini büyük ölçüde
kolaylaştırdı. Aynı zamanda bugün var olan çok sayıda UNIX varyantını da teşvik etti ,
ancak faydaları dezavantajlarından daha ağır bastı. Bir şey bozulursa, yerel bir sitede
tamir edilebilir; sistemin bir sonraki sürümünü beklemeye gerek yoktur. Bu tür
düzeltmeler ve yeni tesisler sonraki dağıtımlara dahil edilebilir.

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 .

C.3 Programcı Arayüzü

Ç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ı

çekirdeğe sistem çağrısı arayüzü

sinyaller terminal dosya CPU zamanlama


işleme sistemi takas bloğu G/ sayfası değiştirme
karakteri G/Ç sistemi Ç sistem diski talebi disk belleği
terminal sürücüleri ve teyp sürücüleri sanal bellek

donanıma çekirdek arayüzü

terminal kontrolörleri aygıt denetleyicileri bellek denetleyicileri


terminaller diskler ve bantlar fiziksel bellek

Şekil C.2 4.4BSD katman yapısı.


Machine Translated by Google

C.3 Programcı Arayüzü 9

C.3.1 Dosya Manipülasyonu

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.

Dosyalar ağaç yapılı dizinlerde düzenlenir. Dizinler, diğer dosyaların nasıl


bulunacağına ilişkin bilgileri içeren kendi dosyalarıdır. Bir dosyanın yol adı , dizin yapısı
boyunca dosyaya giden bir yol belirterek bir dosyayı tanımlayan bir metin dizesidir.
Sözdizimsel olarak, eğik çizgi karakteriyle ayrılmış ayrı dosya adı öğelerinden oluşur.
Örneğin, /usr/local/font içinde, ilk eğik çizgi, kök dizin adı verilen dizin ağacının kökünü
gösterir . Sonraki öğe, usr, kökün bir alt dizinidir, yerel , usr'nin bir alt dizinidir ve yazı
tipi , yerel dizindeki bir dosya veya dizindir . Yazı tipinin sıradan bir dosya mı yoksa bir
dizin mi olduğu, yol adı sözdiziminden belirlenemez.

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

konsol harf harf kodlamak

dev
lp0 çöp Kutusu troff

••• •••

ş telnet

çöp Kutusu csh ucb adam

••• •••

çöp Kutusu

libc.a
kitap yerel kitap

•••
•••

/ usr Dahil etmek

jlp
tmac
kullanıcı avi kitap

troff
•••
•••

şifre

grup tmp
vb

içinde

•••

•••

tmp

Şekil C.3 Tipik UNIX dizin yapısı.

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

dizgi /usr/lib/troff/dev202 içinde tutulur. Belirli dosya ve dizinlerin konumuyla ilgili


tüm kurallar, programcılar ve programları tarafından tanımlanmıştır. İşletim sistemi
çekirdeğinin çalıştırılabilmesi için yalnızca terminal işlemlerini başlatmak için
kullanılan /etc/init'e ihtiyacı vardır.
Temel dosya işleme için sistem çağrıları: creat(), open(), read(), write(), close(),
unlink() ve trunc(). Bir yol adı verilen creat() sistem çağrısı, boş bir dosya oluşturur
(veya mevcut bir dosyayı keser). Mevcut bir dosya, bir yol adı ve bir mod (okuma,
yazma veya okuma-yazma gibi) alan ve dosya tanımlayıcı adı verilen küçük bir tamsayı
döndüren open() sistem çağrısı tarafından açılır. Dosya tanımlayıcısı daha sonra
dosyaya veya dosyadan veri aktarımı gerçekleştirmek için (bir arabellek adresi ve
aktarılacak bayt sayısıyla birlikte ) bir read() veya write() sistem çağrısına geçirilebilir.
Bir dosya, dosya tanımlayıcısı close() sistem çağrısına iletildiğinde kapatılır . trunc ()
çağrısı, bir dosyanın uzunluğunu 0'a düşürür.

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.

C.3.2 Proses Kontrolü


İşlem , yürütülmekte olan bir programdır. Süreçler , bir tamsayı olan süreç
tanımlayıcılarıyla tanımlanır . fork() sistemi tarafından yeni bir süreç oluşturulur.
Machine Translated by Google

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.

kabuk işlemi ana süreç kabuk işlemi


çatal Bekle

alt süreç zombi süreci

yürütmek program yürütür


çıkış
program

Ş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 .

Kesinti sinyali, SIGINT, bir komutu o komut tamamlanmadan önce durdurmak


için kullanılır. Genellikle ˆC karakteri (ASCII 3) tarafından üretilir. 4.2BSD'den itibaren,
önemli klavye karakterleri her terminal için bir tablo ile tanımlanır ve kolayca yeniden
tanımlanabilir. Çıkış sinyali, SIGQUIT , genellikle ˆbs karakteri (ASCII 28) tarafından
üretilir. Çık sinyali hem o anda yürütülen programı durdurur hem de mevcut bellek
görüntüsünü geçerli dizinde core adlı bir dosyaya atar. Çekirdek dosya, hata
ayıklayıcılar tarafından kullanılabilir. SIGILL , geçersiz bir talimat tarafından ve
SIGSEGV , bir işlemin yasal sanal bellek alanı dışındaki belleği adresleme girişimi ile
üretilir.
Çoğu sinyalin yok sayılması (etkisi olmaması için) veya çağrılacak kullanıcı
sürecindeki bir rutinin (bir sinyal işleyicisi) için düzenlemeler yapılabilir. Bir sinyal
işleyici, bir sinyali yakalamadan dönmeden önce iki şeyden birini güvenli bir şekilde
yapabilir: exit() sistem çağrısını çağırın veya bir global değişkeni değiştirin. bir sinyal
14 Ek C BSD UNIX
Machine Translated by Google

( ö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.

C.3.4 Süreç Grupları


İlgili süreç grupları, ortak bir görevi gerçekleştirmek için sıklıkla işbirliği yapar. Örneğin,
süreçler borular oluşturabilir ve bunlar üzerinden iletişim kurabilir. Böyle bir süreç
kümesine bir süreç grubu veya bir iş denir . Bir gruptaki tüm işlemlere sinyaller
gönderilebilir. Bir süreç genellikle süreç grubunu üst öğesinden devralır, ancak
setpgrp() sistem çağrısı bir sürecin grubunu değiştirmesine izin verir.
İşlem grupları, birden çok işin çalışmasını kontrol etmek için C kabuğu tarafından
kullanılır. G/Ç için herhangi bir zamanda yalnızca bir işlem grubu bir terminal cihazı
kullanabilir . Bu ön plan işi, o uçbirimde kullanıcının dikkatini çekerken, diğer tüm
bağlanmamış işler (arka plan işleri) işlevlerini kullanıcı etkileşimi olmadan gerçekleştirir.
Terminale erişim, proses grubu sinyalleri tarafından kontrol edilir.
Her işin bir kontrol terminali vardır (yine ebeveyninden miras alınır). Kontrol
terminalinin işlem grubu, bir işlemin grubuyla eşleşirse, bu işlem ön plandadır ve G/Ç
gerçekleştirmesine izin verilir. Eşleşmeyen (arka plan) bir süreç aynı şeyi denerse,
süreç grubuna bir SIGTTIN veya SIGTTOU sinyali gönderilir. Bu sinyal genellikle süreç
grubunun kullanıcı tarafından ön plana çıkana kadar donmasına neden olur, bu
noktada sürecin G/Ç gerçekleştirebileceğini belirten bir SIGCONT sinyali alır. Benzer
şekilde, onu dondurmak için ön plan işlem grubuna bir SIGSTOP gönderilebilir.

C.3.5 Bilgi Manipülasyonu


Hem bir aralık zamanlayıcı (gettimer()/ setitimer()) hem de geçerli saati (gettimeofday()/
settimeofday()) ayarlamak ve döndürmek için sistem çağrıları vardır .
C.4 Kullanıcı Arayüzü 15
Machine Translated by Google

mikrosaniye. Ek olarak, süreçler süreç tanımlayıcılarını (get pid()), grup tanımlayıcılarını


(getgid()), üzerinde çalıştıkları makinenin adını (gethostname()) ve diğer birçok değeri
isteyebilir.

C.3.6 Kütüphane Rutinleri

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.

C.4 Kullanıcı Arayüzü

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 .

ls programı, geçerli dizindeki dosyaların adlarını listeler . 28 seçenekten herhangi


biri, dosyaların özelliklerinin de görüntülenmesini isteyebilir. Örneğin, -l seçeneği
dosya adını, sahibini, korumasını, oluşturma tarihini ve saatini ve boyutunu gösteren
uzun bir liste ister. cp programı, mevcut bir dosyanın kopyası olan yeni bir dosya
oluşturur . Mv programı , bir dosyayı dizin ağacında bir yerden başka bir yere taşır.
Çoğu durumda, bu taşıma yalnızca dosyanın yeniden adlandırılmasını gerektirir. Ancak
gerekirse dosya yeni konuma kopyalanır ve eski kopya silinir. Bir dosya rm programı
tarafından silinir (bu, bir unlink() sistem çağrısı yapar).
16 Ek C BSD UNIX
Machine Translated by Google

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.

C.4.1 Kabuklar ve Komutlar


Hem kullanıcı tarafından yazılan hem de sistem programları normalde bir komut
yorumlayıcısı tarafından yürütülür. UNIX'teki komut yorumlayıcı, diğerleri gibi bir kullanıcı işlemid
Daha önce belirtildiği gibi, buna kabuk denir - çünkü işletim sisteminin çekirdeğini çevreler.
Kullanıcılar kendi kabuklarını yazabilirler ve aslında birkaç kabuk genel kullanımdadır.
Steve Bourne tarafından yazılan Bourne kabuğu, muhtemelen en yaygın olarak kullanılan
veya en azından en yaygın olarak bulunanıdır. Çoğunlukla Sun Microsystems'in kurucusu
Bill Joy'un eseri olan C kabuğu, BSD sistemlerinde en popüler olanıdır. Dave Korn'un Korn
kabuğu, Bourne kabuğunun ve C kabuğunun özelliklerini birleştirdiği için popüler hale
geldi.
Ortak kabuklar, komut dili sözdizimlerinin çoğunu paylaşır. UNIX normalde etkileşimli
bir sistemdir. Kabuk, bir komut istemi yazarak başka bir komutu kabul etmeye hazır
olduğunu belirtir ve kullanıcı tek bir satıra bir komut yazar. Örneğin, satırda

% 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 :

( . /usr/avi/bin /usr/local/bin /bin /usr/bin )

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

C.4 Kullanıcı Arayüzü 17

komut tamamlanana kadar kendi yürütmesi (Şekil C.4). Kabuğun komutun


tamamlanmasını beklememesi gerektiğini belirtmek için basit bir sözdizimi (komut
satırının sonunda bir ve işareti [&]) vardır . Kabuk başka komutları yorumlamaya
devam ederken bu şekilde çalışmaya devam eden bir komutun bir arka plan komutu
olduğu veya arka planda çalıştığı söylenir.
Kabuğun beklediği işlemlerin ön planda çalıştığı söylenir .
FreeBSD sistemlerindeki C kabuğu , daha önce bahsedildiği gibi iş kontrolü
(kısmen çekirdekte uygulanır) adı verilen bir tesis sağlar . İş kontrolü, süreçlerin ön
plan ve arka plan arasında taşınmasına izin verir. İşlemler, kullanıcının terminalinden
girdi isteyen bir arka plan işi gibi çeşitli koşullarda durdurulabilir ve yeniden
başlatılabilir. Bu şema, pencereleme veya katmanlama arayüzleri tarafından sağlanan
işlemlerin çoğunun kontrolüne izin verir, ancak özel bir donanım gerektirmez. İş
kontrolü, MIT'de geliştirilen X Pencere Sistemi gibi pencere sistemlerinde de
yararlıdır . Her pencere, herhangi bir zamanda birden fazla işlemin (pencere başına
bir tane) ön planda olmasına izin veren bir terminal olarak ele alınır. Tabii ki, herhangi
bir pencerede arka plan işlemleri mevcut olabilir. Korn kabuğu ayrıca iş kontrolünü
destekler ve iş kontrolü (ve süreç grupları) muhtemelen UNIX'in gelecekteki
sürümlerinde standart olacaktır.

C.4.2 Standart G/Ç

İş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

emretmek komutanın anlamı

% ls > dosya ls'nin filea dosyasına doğrudan çıktısı

% pr < dosya > dosyab filea'dan girdi ve fileb'ye çıktı

% lpr < dosyab fileb'den giriş

% % program yap > & hatalar hem standart çıktıyı hem de standart
hatayı bir dosyaya kaydedin

Şekil C.5 Standart /io/ yeniden yönlendirme.


Machine Translated by Google

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.

C.4.3 İşlem Hatları, Filtreler ve Kabuk Komut Dosyaları Şekil

C.5'in ilk üç komutu tek komutta birleştirilebilirdi

% 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 .

Standart girdisini standart çıktısına ileten, üzerinde bazı işlemler gerçekleştiren


pr gibi bir komuta filtre denir. Birçok UNIX komutu filtre olarak kullanılabilir. Karmaşık
işlevler, ortak komutların ardışık düzenleri olarak bir araya getirilebilir. Ayrıca, çıktı
biçimlendirme gibi genel işlevlerin çok sayıda komutta yerleşik olması gerekmez,
çünkü hemen hemen her programın çıktısı pr (veya başka bir uygun filtre) aracılığıyla
iletilebilir.
Yaygın UNIX kabuklarının her ikisi de, kabuk değişkenleri ve olağan üst düzey
programlama dili kontrol yapıları (döngüler, koşullar) içeren programlama dilleridir.
Bir komutun yürütülmesi, bir alt program çağrısına benzer. Bir kabuk komut dosyası,
bir kabuk betiği, diğer herhangi bir komut gibi yürütülebilir ve uygun kabuk onu
okumak için otomatik olarak çağrılır. Bu nedenle, kabuk programlama , geleneksel
dillerde herhangi bir programa ihtiyaç duymadan, karmaşık uygulamalar için sıradan
programları uygun bir şekilde birleştirmek için kullanılabilir.

Bu harici kullanıcı görünümü genellikle UNIX'in tanımı olarak düşünülür , ancak


en kolay değiştirilen tanımdır. Oldukça farklı bir sözdizimi ve semantik ile yeni bir
kabuk yazmak, çekirdeği ve hatta programcı arayüzünü değiştirmeden kullanıcı
görünümünü büyük ölçüde değiştirir. UNIX için çeşitli menü odaklı ve ikonik arayüzler
mevcuttur ve X Pencere Sistemi hızla bir standart haline gelmektedir. UNIX'in kalbi
elbette çekirdektir. Bu çekirdeği değiştirmek, kullanıcı arabiriminden çok daha
zordur, çünkü tüm programlar tutarlı kalmak için sağladığı sistem çağrılarına bağlıdır.
Elbette, işlevselliği artırmak için yeni sistem çağrıları eklenebilir, ancak programların
daha sonra yeni çağrıları kullanacak şekilde değiştirilmesi gerekir.

C.5 Süreç Yönetimi

İş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.

C.5.1 Proses Kontrol Blokları


Süreçlerle ilişkilendirilen en temel veri yapısı süreç yapısıdır.
Bir süreç yapısı, benzersiz süreç tanımlayıcısı, zamanlama bilgileri (örneğin, sürecin
önceliği) ve diğer kontrol bloklarına işaretçiler gibi, süreç değiştirildiğinde sistemin
bir süreç hakkında bilmesi gereken her şeyi içerir. Uzunluğu sistem bağlama
zamanında tanımlanan bir dizi süreç yapısı vardır. Hazır süreçlerin süreç yapıları,
zamanlayıcı tarafından çift bağlantılı bir listede (hazır kuyruğu) birbirine bağlı tutulur
ve her süreç yapısından sürecin ebeveynine, yaşayan en küçük çocuğuna ve diğer
çeşitli akrabalara işaretçiler vardır. , aynı program kodunu (metin) paylaşan işlemlerin
listesi gibi.

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.

Paylaşılabilir metinli her işlemin (neredeyse tümü, FreeBSD altında) , işlem


yapısından bir metin yapısına bir işaretçisi vardır. Metin yapısı, süreç yapıları listesine
bir işaretçi de dahil olmak üzere, metin bölümünü kaç işlemin kullandığını ve metin
bölümü için sayfa tablosunun değiştirildiğinde diskte nerede bulunabileceğini
kaydeder. Metin yapısının kendisi her zaman ana bellekte bulunur. Bu tür yapıların
bir dizisi sistem bağlantı zamanında tahsis edilir.
İşlemler için metin, veri ve yığın bölümleri değiştirilebilir. Segmentler değiştirildiğinde,
sayfalanırlar.
Sayfa tabloları , işlemin sanal belleğinden fiziksel belleğe eşlemeyle ilgili bilgileri
kaydeder . İşlem yapısı, işlem ana bellekte bulunduğunda kullanım için sayfa
tablosuna işaretçiler veya işlem değiştirildiğinde takas aygıtındaki işlemin adresini
içerir.
Paylaşılan bir metin bölümü için özel bir ayrı sayfa tablosu yoktur; metin bölümünü
paylaşan her işlemin, işlemin sayfa tablosunda kendi sayfaları için girişleri vardır.
Yalnızca süreç yerleşik olduğunda (yani takas edilmediğinde) ihtiyaç duyulan
süreçle ilgili bilgiler, süreç yapısından ziyade kullanıcı yapısında (veya u yapısında)
tutulur . Bu yapı, kullanıcı işlemlerinin içeriğini okuyabilmesi için kullanıcı sanal adres
alanına salt okunur olarak eşlenir. Çekirdek tarafından yazılabilir. Kullanıcı yapısı ,
işlem çalışmadığında işlemin genel kayıtlarını, yığın işaretçisini, program sayacını ve
sayfa tablosu taban kayıtlarını kaydetmek için burada tutulan işlem kontrol bloğunun
veya PCB'nin bir kopyasını içerir . Sistem çağrısı parametrelerini tutmak ve değerleri
döndürmek için alan vardır.
Süreçle ilişkili tüm kullanıcı ve grup tanımlayıcıları (yalnızca süreç yapısında tutulan
etkin kullanıcı tanımlayıcısı değil) burada tutulur. Sinyaller, zamanlayıcılar ve kotalar
burada veri yapılarına sahiptir. Sıradan olanla daha bariz bir ilgisi olan
Machine Translated by Google

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.

süreç yapısı çekirdek


kullanıcı yapısı yığını

sistem veri yapısı

yığın

veri

Metin
metin yapısı

Kullanıcı alanı
yerleşik tablolar

değiştirilebilir süreç görüntüsü

Şekil C.6 Süreç yapısını kullanarak bir sürecin parçalarını bulma.


C.5 Süreç Yönetimi 21
Machine Translated by Google

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.

C.5.2 CPU Programlama

UNIX'teki CPU zamanlaması , etkileşimli işlemlerden yararlanmak için tasarlanmıştır.


İşlemlere, CPU'ya bağlı işler için döngüsel zamanlamayı azaltan bir öncelik algoritması
tarafından küçük CPU zaman dilimleri verilir.
Her sürecin kendisiyle ilişkili bir zamanlama önceliği vardır; daha büyük sayılar daha
düşük önceliği gösterir. Disk G/Ç veya diğer önemli görevleri gerçekleştiren işlemler
"pzero"dan daha az önceliğe sahiptir ve sinyallerle öldürülemez. Sıradan kullanıcı
süreçlerinin pozitif öncelikleri vardır ve bu nedenle, kullanıcı süreçleri nice komutu
aracılığıyla birbirlerine göre öncelik belirleyebilse de, herhangi bir sistem sürecinden daha
az çalıştırılma olasılığı daha düşüktür .
Bir işlem ne kadar fazla CPU zamanı biriktirirse, önceliği o kadar düşük (daha pozitif)
olur ve bunun tersi de geçerlidir. CPU zamanlamasındaki bu olumsuz geribildirim, tek bir
işlemin tüm CPU zamanını almasını zorlaştırır . Açlığı önlemek için süreç yaşlanması
kullanılır.
Daha eski UNIX sistemleri, döngüsel zamanlama için 1 saniyelik bir kuantum
kullanırdı. FreeBSD , her 0,1 saniyede bir işlemleri yeniden planlar ve her saniye öncelikleri
yeniden hesaplar. Döngüsel zamanlama, saat kesme sürücüsüne belirli bir aralıktan sonra
bir çekirdek alt yordamını aramasını söyleyen zaman aşımı mekanizması tarafından
gerçekleştirilir. Bu durumda çağrılacak alt program, yeniden programlamaya neden olur
ve ardından kendisini tekrar çağırmak için bir zaman aşımı gönderir. Öncelikli yeniden
hesaplama, kendisi için yeniden zaman aşımı gönderen bir alt program tarafından da zamanl
Çekirdekte bir işlemin diğerinden önceliği yoktur. Bir işlem, G/Ç'yi beklediği veya
zaman diliminin süresi dolduğundan CPU'dan vazgeçebilir. Bir süreç CPU'dan vazgeçmeyi
seçtiğinde , bir olayda uyku moduna geçer . Bu amaç için kullanılan çekirdek primitifi
sleep() olarak adlandırılır ( aynı adı taşıyan kullanıcı düzeyindeki kitaplık rutini ile
karıştırılmamalıdır).
Sleep() , kural olarak, bir çekirdek verisinin adresi olan bir argüman alır.
Machine Translated by Google

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.

Örneğin, disk G/Ç'nin tamamlanmasını bekleyen bir işlem, aktarılmakta olan


verilere karşılık gelen arabellek başlığının adresinde uyuyacaktır. Disk sürücüsü için
kesme yordamı aktarımın tamamlandığını not ettiğinde, arabellek başlığında
uyandırma() öğesini çağırır. Kesinti, o sırada çalışmakta olan süreç için çekirdek
yığınını kullanır ve bu sistem sürecinden uyandırma() yapılır.

Gerçekte çalışan süreç, zamanlayıcı tarafından seçilir. Sleep() , bu amaç için


kullanılacak zamanlama önceliği olan ikinci bir argüman alır. Bu öncelik argümanı,
"pzero"dan küçükse, sürecin bir sinyal gibi istisnai bir olay tarafından zamanından
önce uyandırılmasını da engeller.
Bir sinyal üretildiğinde, etkilenen işlemin sistem yarısının sonraki çalışmasına
kadar beklemede kalır. Bu olay genellikle yakında gerçekleşir, çünkü sinyal normalde
işlemin başka bir koşul için beklemesi durumunda uyanmasına neden olur.

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.

C.6 Bellek Yönetimi


UNIX'in ilk geliştirmelerinin çoğu bir PDP-11 üzerinde yapıldı. PDP-11'in sanal adres
alanında yalnızca sekiz bölümü vardır ve her birinin boyutu en fazla 8.192 bayttır .
PDP-11/70 gibi daha büyük makineler, ayrı talimat ve adres alanlarına izin vererek,
adres alanını ve segment sayısını etkin bir şekilde ikiye katlar, ancak bu adres alanı
hala nispeten küçüktür. Ek olarak, çekirdek
Machine Translated by Google

C.6 Bellek Yönetimi 23

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).

BSD Tahoe, referans bitini uygulayan sistemler için destek ekledi.


Bu tür sistemlerde, saat ibresinin bir geçişi referans bitini kapatır ve ikinci bir geçiş,
referans bitleri kapalı kalan sayfaları değiştirilmek üzere serbest listeye yerleştirir.
Tabii ki sayfa kirliyse, ücretsiz listeye eklenmeden önce diske yazılmalıdır. Performansı
artırmak için sayfa çıkışları kümeler halinde yapılır.

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.

Pagedaemon işlemi her uyandığında saat ibresinin süpürülmesi (yani, taranan


çerçeve sayısı, genellikle çağrılan sayıdan daha fazladır), hem lotfree'ye ulaşamayan
çerçevelerin sayısına hem de sayıya göre belirlenir. çeşitli nedenlerle (ne kadar çok
çerçeveye ihtiyaç duyulursa, tarama o kadar uzun sürer) zamanlayıcının belirlediği
çerçevelerin çoğuna ihtiyaç duyulur. Beklenen tarama tamamlanmadan önce serbest
çerçeve sayısı lotfree'ye yükselirse , el durur ve sayfa arka plan programı işlemi uyur.
Saat ibresi aralığını kontrol eden parametreler, sistem başlangıcında ana bellek
miktarına göre belirlenir, öyle ki pagedae mon tüm CPU zamanının yüzde 10'undan
fazlasını kullanmaz .

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.

Her işlemin metin bölümü varsayılan olarak paylaşılır ve salt okunurdur. Bu


şema, sayfalama ile pratiktir, çünkü harici parçalanma yoktur ve daha fazlasını
paylaşarak kazanılan takas alanı, çekirdek sanal alanı büyük olduğu için ihmal
edilebilir miktarda ek yükü dengeler.
CPU zamanlaması, bellek değiştirme ve sayfalama etkileşimlidir. Bir işlemin
önceliği ne kadar düşükse, sayfalarının çağrılması ve bütünüyle değiştirilme olasılığı
o kadar yüksek olur. Değişen süreçleri seçmedeki yaş tercihleri, çöp atmaya karşı
koruma sağlar, ancak sayfalama bunu daha etkili bir şekilde yapar. İdeal olarak,
işlemler boşta olmadıkları sürece değiştirilmeyecektir, çünkü her işlem herhangi bir
zamanda ana bellekte yalnızca küçük bir çalışma sayfa kümesine ihtiyaç duyacaktır
ve sayfa arka plan programı kullanılmayan sayfaları diğer işlemler tarafından
kullanılmak üzere geri alacaktır.
Machine Translated by Google

C.7 Dosya Sistemi 25

İş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.

C.7 Dosya Sistemi

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.

C.7.1 Bloklar ve Parçalar Dosya sisteminin

çoğu , kullanıcıların dosyalarına ne koyduklarını içeren veri blokları tarafından alınır.


Bu veri bloklarının diskte nasıl depolandığını düşünelim.

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)

zaman damgaları (3)


veri
boyut blok sayısı
veri

veri


doğrudan bloklar • •
• veri

• veri
• • veri
tek dolaylı • •
veri • •
çift dolaylı veri


üçlü dolaylı • veri


veri

Şekil C.7 UNIX düğümü.

İnode, dosyanın kullanıcı ve grup tanımlayıcılarını, son dosya değişikliği ve erişim


zamanlarını, dosyaya giden sabit bağlantıların (dizin girişleri) sayısını ve dosyanın
türünü (düz dosya, dizin, sembolik bağlantı, karakter aygıtı, blok aygıtı veya soket).
Ayrıca inode, dosyanın veri içeriklerini içeren disk bloklarına yönelik 15 işaretçi içerir.
Bu işaretçilerin ilk 12'si doğrudan bloklara işaret eder. Yani, dosyanın verilerini içeren
blokların adreslerini içerirler. Böylece, küçük dosyalar için (12 bloktan fazla olmayan)
verilere hemen başvurulabilir, çünkü bir dosya açıkken düğümün bir kopyası ana
bellekte tutulur. Blok boyutu 4 KB ise, doğrudan inode'dan 48 KB'ye kadar veriye
erişilebilir.

Düğümdeki sonraki üç işaretçi dolaylı blokları gösterir. Dosya dolaylı blokları


kullanmak için yeterince büyükse, dolaylı blokların her biri ana blok boyutundadır;
parça boyutu yalnızca veri blokları için geçerlidir. İlk dolaylı blok işaretçisi, tek bir
dolaylı bloğun adresidir. Tek dolaylı blok, veri içermeyen ancak veri içeren blokların
adreslerini içeren bir indeks bloğudur. Ardından, gerçek veri bloklarına işaretçiler
içeren blokların adreslerini içeren bir bloğun adresi olan bir çift dolaylı blok işaretçisi
vardır.
Son işaretçi, üçlü dolaylı bloğun adresini içerecektir ; Ancak buna gerek yoktur.

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.

Sabit bağlantılar, diğerleri gibi basitçe dizin girişleridir. Sembolik bağları


çoğunlukla, aramayı sembolik bağın içeriğinden alınan yol adıyla başlatarak ele alırız.
Bir yol adı araması sırasında karşılaşılan sembolik bağların sayısını sayarak ve bir
sınır (sekiz) aşıldığında bir hata döndürerek sonsuz döngüleri önleriz.

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

Kullanıcı alanı sistem alanı disk alanı

Şekil C.8 Dosya sistemi kontrol blokları.

dosya sistemi performansını büyük ölçüde artıran son dizinden düğüme çeviriler.

C.7.4 Bir Dosya Tanımlayıcısını Bir İnode ile Eşleştirme


Açık bir dosyaya başvuran bir sistem çağrısı, bir dosya tanıtıcısını argüman olarak
ileterek dosyayı belirtir. Dosya tanımlayıcı, çekirdek tarafından, geçerli işlem için
açık dosyaların bir tablosunu indekslemek için kullanılır. Tablodaki her giriş, bir
dosya yapısına yönelik bir işaretçi içerir. Bu dosya yapısı sırayla düğümü gösterir;
bkz. Şekil C.8. Açık dosya tablosu, yalnızca önyükleme sırasında ayarlanabilen sabit
bir uzunluğa sahiptir. Bu nedenle, bir sistemde eşzamanlı olarak açık dosyaların
sayısında sabit bir sınır vardır.
read() ve write() sistem çağrıları , argüman olarak dosyada bir konum almazlar.
Bunun yerine, çekirdek, gerçekte aktarılan veri sayısına göre her read() veya write()
işleminden sonra uygun bir miktarda güncellenen bir dosya ofseti tutar. Ofset,
doğrudan lseek() sistem çağrısı ile ayarlanabilir . Dosya tanımlayıcı, dosya işaretçileri
yerine bir dizi düğüm noktası işaretçisini dizine eklediyse, bu uzaklığın düğümde
tutulması gerekir. Birden fazla işlem aynı dosyayı açabileceğinden ve bu tür her bir
işlemin dosya için kendi ofsetine ihtiyacı olduğundan, ofseti inode'da tutmak uygun
değildir. Böylece, ofseti içermek için dosya yapısı kullanılır. Dosya yapıları, bir çatal()
sonrasında alt süreç tarafından devralınır , bu nedenle birkaç süreç bir dosya için
aynı ofset konumunu paylaşabilir.

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.

C.7.5 Disk Yapıları

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

C.7 Dosya Sistemi 29

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

mantıksal dosya sistemi dosya sistemleri mantıksal aygıtlar fiziksel aygıtlar

Şekil C.9 Bir mantıksal dosya sisteminin fiziksel aygıtlarla eşleştirilmesi.


Machine Translated by Google

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 .

C.7.7 Yerleşim ve Tahsis Politikaları

Ç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

C.7 Dosya Sistemi 31

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.)

4.2BSD dosya sistemi uygulaması, Sürüm 7'den kökten farklıdır. Bu yeniden


uygulama, öncelikle verimliliği ve sağlamlığı artırmak için yapılmıştır ve bu tür
değişikliklerin çoğu, çekirdeğin dışında görünmez . Aynı anda tanıtılan diğer
değişiklikler hem sistem çağrısı hem de kullanıcı seviyelerinde görülebilir; örnekler,
sembolik bağlantıları ve uzun dosya adlarını (255 karaktere kadar) içerir. Ancak bu
özellikler için gereken değişikliklerin çoğu çekirdekte değil, onları kullanan
programlarda yapıldı.
Alan tahsisi özellikle farklıdır. FreeBSD'deki ana yeni konsept silindir grubudur.
Silindir grubu, bir dosyadaki blokların yerelleştirilmesine izin vermek için tanıtıldı.
Her silindir grubu, diskin bir veya daha fazla ardışık silindirini kaplar, böylece silindir
grubu içindeki disk erişimleri minimum disk kafası hareketi gerektirir. Her silindir
grubunun bir süper bloğu, bir silindir bloğu, bir dizi düğüm ve bazı veri blokları
vardır (Şekil C.10).

veri blokları

süper blok
silindir bloğu
düğümler

veri blokları

Şekil C.10 4.3 BSD silindir grubu.


32 Ek C
Machine Translated by Google BSD UNIX
Tüm silindir gruplarındaki süper bloklar aynıdır, böylece disk bozulması durumunda
herhangi birinden bir süper blok kurtarılabilir. Silindir bloğu , belirli silindir grubunun
dinamik parametrelerini içerir.
Bunlar, ücretsiz veri bloklarının ve parçalarının bir bit haritasını ve ücretsiz düğümlerin bir
bit haritasını içerir. Tahsis stratejilerindeki son gelişmelere ilişkin istatistikler de burada
tutulur.
Bir silindir grubundaki (süper blok, silindir bloğu ve düğümler) başlık bilgisi her
zaman grubun başında değildir. Öyle olsaydı, her silindir grubu için başlık bilgisi aynı disk
plakasında olabilir ve tek bir disk kafası çökmesi hepsini silebilirdi. Bu nedenle, her silindir
grubu, grubun başlangıcından farklı bir ofsette başlık bilgisine sahiptir.

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

C.8 G/Ç Sistemi 33

C.8 G/Ç Sistemi

Bir işletim sisteminin amaçlarından biri, belirli donanım aygıtlarının özelliklerini


kullanıcıdan gizlemektir. Örneğin, dosya sistemi, temel alınan disk donanımından
bağımsız, basit, tutarlı bir depolama tesisi (dosya) sunar. UNIX'te, I /O cihazlarının
özellikleri , I/O sistemi tarafından çekirdeğin büyük kısmından da gizlenir . G /Ç sistemi,
bir arabellek önbelleğe alma sistemi, genel aygıt sürücüsü kodu ve belirli donanım
aygıtları için sürücülerden oluşur. Belirli bir aygıtın özelliklerini yalnızca aygıt sürücüsü
bilir. I/O sisteminin ana parçaları Şekil C.11'de gösterilmiştir.

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 _

çekirdek düz dosyasına sistem çağrısı arayüzü

priz pişmiş TTY


pişmiş çiğ ham tty
blok blok arayüzü
protokoller çizgi
arayüzü arayüzü
dosya sistemi disiplini

ağ Arayüzü
blok aygıt sürücüsü karakter aygıtı sürücüsü

donanım

Şekil C.11 4.3 BSD çekirdek G/Ç yapısı.


34 Ek C BSD UNIX
Machine Translated by Google
aygıt numarası , aygıt sürücüsü tarafından örneğin bir mantıksal disk bölümü veya bir terminal
hattı olarak yorumlanır.
Adevice sürücüsü, çekirdeğin geri kalanına yalnızca kendi sınıfı için dizide kaydedilen giriş
noktaları ve ortak arabelleğe alma sistemlerinin kullanımı ile bağlanır.
Bu ayırma, taşınabilirlik ve sistem yapılandırması için önemlidir.

C.8.1 Blok Tampon Önbelleği

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:

• Yakın zamanda kullanılan, LRU sırasına göre bağlanan arabellekler

( LRU listesi) • Yakın zamanda kullanılmayan veya geçerli içeriği olmayan

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.

C.8.2 Ham Cihaz Arayüzleri

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.

Aygıt sürücüsü, kurallı kuyruğu atlayabilir ve karakterleri doğrudan ham kuyruktan


döndürebilir. Bu çalışma modu, ham mod olarak bilinir .
Tam ekran editörler ve her tuş vuruşuna tepki vermesi gereken diğer programlar bu modu
kullanır.

C.9 Süreçler Arası İletişim

İ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.

FreeBSD'de borular , priz mekanizmasının özel bir durumu olarak uygulanmaktadır .


Soket mekanizması, yalnızca bir makinede yerel olan borular gibi tesislere değil, aynı
zamanda ağ oluşturma tesislerine de genel bir arayüz sağlar.
C.9 Süreçler Arası İletişim 37
Machine Translated by Google

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.

• Sıralı paket soketleri. Bu yuvalar, kayıt sınırlarının sağlanması dışında, akış


yuvalarınınki gibi veri akışları sağlar. Bu tip, XEROX AF NS protokolünde kullanılır.
• Datagram soketleri. Bu soketler, değişken boyuttaki mesajları her iki yönde
de iletir. Bu tür mesajların gönderildikleri sırayla ulaşacaklarının veya
tekrarlanmayacaklarının veya hiç ulaşacaklarının garantisi yoktur, ancak orijinal
mesaj (veya kayıt) boyutu, ulaşan herhangi bir datagramda korunur. Bu tür,
İnternet etki alanında UDP tarafından desteklenir.

• 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.

Select() sistem çağrısı , çeşitli dosya tanımlayıcıları ve/veya soket tanımlayıcıları


üzerindeki veri aktarımlarını çoğullamak için kullanılabilir. Hatta bir sunucu işleminin
birçok hizmet için istemci bağlantılarını dinlemesine ve çatal() işlevine izin vermek için kullanılab
C.9 Süreçler Arası İletişim 39
Machine Translated by Google

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 .

C.9.2 Ağ Desteği Hemen hemen

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ı.

Uluslararası Standartlar Organizasyonu'nun (ISO) ağ iletişimi için Açık Sistem


Bağlantısı (OSI) Referans Modeli, yedi katman ağ protokolü ve bunlar arasında katı
iletişim yöntemleri öngörür. Bir protokolün uygulanması, yalnızca aynı katmanda
aynı protokolü konuşan bir eş varlıkla veya aynı sistemde hemen üstündeki veya
altındaki katmandaki bir protokolün protokol-protokol arayüzü ile iletişim kurabilir.
ISO ağ oluşturma modeli, FreeBSD Reno ve 4.4BSD'de uygulanmaktadır.

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 .

FreeBSD'deki ağ oluşturma çerçevesi , ARM ile en yakından ilişkili olmasına


rağmen , ISO modelinden veya ARM'den daha genelleştirilmiştir (Şekil C.12).

Kullanıcı işlemleri, ağ protokolleriyle (ve dolayısıyla diğer makinelerdeki


diğer işlemlerle) soket tesisi aracılığıyla iletişim kurar. Bu tesis , iletişimin
kurulmasından ve kontrolünden sorumlu olduğu için ISO oturum katmanına
karşılık gelir.
Soketler protokoller tarafından desteklenir - muhtemelen birbiri üzerine
katmanlanmış birkaç tane tarafından. Bir protokol, desteklenen soket tipine ve
daha yüksek protokollerin gerektirdiği hizmetlere bağlı olarak güvenilir teslimat,
çift iletimlerin bastırılması, akış kontrolü ve adresleme gibi hizmetler sağlayabilir.
Bir protokol, başka bir protokolle veya ağ donanımı için uygun olan ağ
arabirimiyle iletişim kurabilir. Genel çerçevede, hangi protokollerin diğer
protokollerle iletişim kurabileceği veya kaç tane protokolün üst üste
katmanlanabileceği konusunda çok az kısıtlama vardır. Kullanıcı işlemi, ham
soket tipi aracılığıyla, akışlar gibi diğer soket tiplerinden birini desteklemek için
kullanılan en üstteki herhangi bir protokol katmanından bir ham ağ arayüzüne
kadar doğrudan erişebilir. Bu yetenek, yönlendirme süreçleri tarafından ve
ayrıca yeni protokol geliştirme için kullanılır.
Çoğu zaman, ağ denetleyicisi türü başına bir ağ arabirimi sürücüsü vardır.
Ağ arabirimi, adreslenen yerel ağa özgü özelliklerin işlenmesinden sorumludur.
Bu düzenleme, arayüzü kullanan protokollerin bu özelliklerle ilgilenmesine
gerek kalmamasını sağlar.
Ağ arabiriminin işlevleri, büyük ölçüde ağ için gerekli olan ağ donanımına
bağlıdır. Bazı ağlar

ISO ARPANET
4.2BSD örnek
referans referans
modeli modeli katmanları katmanlama

uygulama kullanıcı programları


süreç telnet
ve kütüphaneler
sunum oturumu
uygulamaları
taşıma prizler sock_stream

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

Şekil C.12 Ağ referans modelleri ve katmanlama.


41
Machine Translated by Google C.10 Özet

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

Daha fazla okuma

[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

[Baldwin (2002)] J. Baldwin, “Çok İş parçacıklı FreeBSD Çekirdeğinde Kilitleme”,


USENIX BSD (2002).

[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.

D.1 Mach Sisteminin Tarihçesi

Mach, atalarının izini Carnegie Mellon Üniversitesi'nde (CMU) geliştirilen Accent


işletim sistemine kadar takip ediyor. Accent bir dizi yeni işletim sistemi konseptine
öncülük etmesine rağmen, faydası UNIX uygulamalarını yürütememe ve tek bir
donanım mimarisine güçlü bağları nedeniyle sınırlıydı ve bu da taşımayı
zorlaştırıyordu. 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örevlerin ve iş
parçacıklarının yönetimi) sıfırdan geliştirilmiştir. Mach çabasının önemli bir amacı,
çok işlemcili desteği sağlamaktı.

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

görevler ve IPC sanal zamanlama


konular hafıza

Mach

Şekil D.1 Mach 3 yapısı.


3
Machine Translated by Google D.2 Tasarım İlkeleri

işletim sistemi sürümü ve Mach üzerine araştırmalar CMU, OSF ve başka yerlerde devam
ediyor.

D.2 Tasarım İlkeleri


Mach işletim sistemi, mevcut işletim sistemlerinin çoğunda eksik olan temel mekanizmaları
sağlamak üzere tasarlanmıştır. Amaç, BSD uyumlu ve ayrıca aşağıdaki alanlarda üstün
olan bir işletim sistemi tasarlamaktır:

• Değişken derecelerde paylaşılan bellek erişimine sahip çoklu işlemciler de dahil


olmak üzere çeşitli mimariler için destek: tek tip bellek erişimi (UMA), tek tip olmayan
bellek erişimi (NUMA) ve uzaktan bellek erişimi yok (NORMA) • Bilgisayarlar arası

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

• Az sayıda soyutlama içeren basitleştirilmiş çekirdek yapısı (sırasıyla bu soyutlamalar,


diğer işletim sistemlerinin Mach'ın üzerine uygulanmasına izin verecek kadar
geneldir.)

• Dağıtılmış operasyon, istemcilere ağ şeffaflığı ve


hem dahili hem de harici olarak nesne yönelimli organizasyon

• İ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

Mach tasarımcıları BSD'den (ve UNIX'ten ) büyük ölçüde etkilenmiştir.


genel olarak), faydaları şunları içerir:

• İyi bir ilkel kümesi ve bir con ile basit bir programcı arayüzü
sistem tesislerine yönelik tutarlı arabirim seti

• Geniş bir tek işlemci sınıfına kolay taşınabilirlik • Kapsamlı

bir yardımcı program ve uygulama kitaplığı • Yardımcı

programları borular aracılığıyla kolayca birleştirme yeteneği

Elbette tasarımcılar, BSD'nin dezavantajları olarak gördüklerini de düzeltmek istediler :

• Birçok gereksiz özelliğin deposu haline gelen bir çekirdek— ve


sonuç olarak yönetilmesi ve değiştirilmesi zor olan

• Çoklu işlemciler, dağıtılmış sistemler ve paylaşılan program kitaplıkları için destek


sağlamayı zorlaştıran özgün tasarım hedefleri (örneğin, çekirdek tek işlemciler için
tasarlandığından, diğer işlemcilerin kullanabileceği kilitleme kodu veya verileri için
hiçbir hükmü yoktur). )
4 Ek D
Machine Translated by Google Mach Sistemi
• Çok fazla benzer, rekabet sağlayan çok fazla temel soyutlama
aynı görevleri başarmak için araçlar Mach'ın gelişimi
büyük bir girişim olmaya devam ediyor. Bununla birlikte, böyle bir sistemin
faydaları eşit derecede büyüktür. İşletim sistemi, mevcut birçok tek işlemcili ve çok
işlemcili mimaride çalışır ve gelecekteki mimarilere kolaylıkla taşınabilir. Bu,
araştırmayı kolaylaştırır, çünkü bilgisayar bilimcileri, kendi özel işletim sistemlerini
yazmak zorunda kalmadan, kullanıcı düzeyinde kod aracılığıyla özellikler ekleyebilirler.
Deney alanları arasında işletim sistemleri, veritabanları, güvenilir dağıtılmış sistemler,
çok işlemcili diller, güvenlik ve dağıtılmış yapay zeka bulunur. Mevcut sürümünde,
Mach sistemi, benzer görevleri gerçekleştirirken genellikle UNIX'in diğer ana
sürümleri kadar verimlidir .

D.3 Sistem Bileşenleri

Mach'ın tasarım hedeflerine ulaşmak için geliştiriciler, işletim sistemi işlevselliğini,


diğer tüm işlevlerin türetilebileceği küçük bir dizi temel soyutlamaya indirgedi. Mach
yaklaşımı, çekirdeğe mümkün olduğunca az yer vermek, ancak orada olanı, diğer
tüm özelliklerin kullanıcı düzeyinde uygulanabilmesi için yeterince güçlü kılmaktır.

Mach'ın tasarım felsefesi, basit, genişletilebilir bir çekirdeğe sahip olmak ve


iletişim olanaklarına odaklanmaktır. Örneğin, çekirdeğe yapılan tüm istekler ve
süreçler arasındaki tüm veri hareketi, tek bir iletişim mekanizması aracılığıyla işlenir.
Bu nedenle Mach, iletişim mekanizmasını koruyarak kullanıcılarına sistem çapında
koruma sağlayabilir. Bu tek iletişim yolunu optimize etmek, önemli performans
kazanımları sağlayabilir ve birkaç yolu optimize etmeye çalışmaktan daha basittir.
Mach genişletilebilir, çünkü geleneksel olarak çekirdek tabanlı birçok işlev, kullanıcı
düzeyinde sunucular olarak uygulanabilir. Örneğin, tüm çağrı cihazları (varsayılan
çağrı cihazı dahil) harici olarak uygulanabilir ve kullanıcı için çekirdek tarafından
çağrılabilir.
Mach, verilerin ve bu verileri işleyen işlemlerin soyut bir nesneye yerleştirildiği
nesne yönelimli bir sistem örneğidir.
Yalnızca nesnenin işlemleri, içinde tanımlanan varlıklar üzerinde hareket edebilir. Bu
işlemlerin nasıl uygulandığına ilişkin ayrıntılar ve dahili veri yapıları gizlidir. Bu
nedenle, bir programcı bir nesneyi yalnızca tanımlanmış, dışa aktarılan işlemlerini
çağırarak kullanabilir. Bir programcı, arayüz tanımını değiştirmeden dahili işlemleri
değiştirebilir, bu nedenle değişiklikler ve optimizasyonlar sistem çalışmasının diğer
yönlerini etkilemez. Mach tarafından desteklenen nesne yönelimli yaklaşım,
nesnelerin kullanıcı için şeffaf bir şekilde Mach sistemlerinden oluşan bir ağda
herhangi bir yerde bulunmasına izin verir. Bu bölümde daha sonra tartışılan bağlantı
mekanizması, tüm bunları mümkün kılar.
Mach'ın ilkel soyutlamaları sistemin kalbidir ve aşağıdaki gibidir:

• 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

D.3 Sistem Bileşenleri 5

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ı , Mach'daki temel nesne başvuru mekanizmasıdır ve çekirdek korumalı


bir iletişim kanalı olarak uygulanır. İletişim, bağlantı noktalarına mesaj göndererek
gerçekleştirilir; iletiler, onları almaya hemen hazır bir iş parçacığı yoksa, hedef bağlantı
noktasında sıraya alınır. Bağlantı noktaları, çekirdek tarafından yönetilen yetenekler
veya bağlantı noktası haklarıyla korunur. Bir görevin bir bağlantı noktasına mesaj
gönderebilmesi için bir bağlantı noktası hakkına sahip olması gerekir. Programcı , o
nesneyle ilişkili bir bağlantı noktasına bir mesaj göndererek bir nesne üzerinde bir
işlem başlatır . Bir bağlantı noktası tarafından temsil edilen nesne mesajları alı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.

Mach, her birinin diğerinin uygulanmasında kullanılmasına izin vererek bellek


yönetimini ve IPC'yi birbirine bağlar . Bellek yönetimi, bellek nesnelerinin kullanımına
dayanır. Bir bellek nesnesi, bir bağlantı noktası (veya bağlantı noktaları) ile temsil edilir ve
nesne üzerindeki işlemleri (örneğin, sayfa girişi, sayfa çıkışı) istemek için bu bağlantı
noktasına IPC mesajları gönderilir . IPC kullanıldığı için, bellek nesneleri uzak sistemlerde
bulunabilir ve şeffaf bir şekilde erişilebilir . Çekirdek, yerel bellekteki bellek nesnelerinin
içeriğini önbelleğe alır. Buna karşılık, mesaj geçişinin uygulanmasında bellek yönetimi
teknikleri kullanılır. Nerede mumkunse,
6
Ek D
Machine Translated by Google Mach Sistemi

metin bölgesi
İleti
konuları

Liman
program
sayıcı

görev

veri bölgesi

bağlantı noktası seti

ikincil depolama
bellek
nesnesi

Şekil D.2 Mach'ın temel soyutlamaları.

Mach, mesajları, nesnelerin kendilerini kopyalamak yerine, işaretçileri paylaşılan


bellek nesnelerine taşıyarak iletir.
IPC , önemli ölçüde sistem ek yükü içerme eğilimindedir. Sistem içi mesajlar için, genellikle
paylaşılan bellek yoluyla gerçekleştirilen iletişimden daha az verimlidir. Mach, mesaj tabanlı bir
çekirdek olduğundan, mesaj işleme verimli bir şekilde gerçekleştirilmelidir. Geleneksel işletim
sistemlerinde mesaj işlemenin verimsizliğinin çoğu, mesajların bir görevden diğerine
kopyalanmasından (bilgisayar içi mesajlar için) veya düşük ağ aktarım hızından (bilgisayarlar
arası mesajlar için) kaynaklanmaktadır. Bu sorunları çözmek için Mach, büyük mesajların
içeriğini aktarmak için sanal bellek yeniden eşlemeyi kullanır. Başka bir deyişle, mesaj aktarımı,
alıcı görevin adres alanını mesaj içeriğinin bir kopyasını içerecek şekilde değiştirir. Verilerin fiili
olarak kopyalanmasını önlemek veya geciktirmek için sanal kopyalama (veya yazma üzerine
kopyalama) teknikleri kullanılır. Bu yaklaşımın birkaç avantajı vardır:

• Kullanıcı programları için bellek yönetiminde artırılmış esneklik •


Sanal kopya yaklaşımının sıkı ve gevşek bağlı bilgisayarlarda kullanılmasına izin
veren daha fazla genellik • UNIX mesaj geçişine göre iyileştirilmiş
performans • Daha kolay görev geçişi (çünkü bağlantı noktaları konumdan
bağımsızdır, bir görevdir ve tüm işlevleri portlar bir makineden diğerine
taşınabilir. Daha önce taşınan görevle iletişim kuran tüm görevler, göreve
yalnızca portları tarafından başvurdukları ve bu portlara mesajlar aracılığıyla
iletişim kurdukları için bunu yapmaya devam edebilir.)
Machine Translated by Google

D.4 Süreç Yönetimi 7

Takip eden bölümlerde süreç yönetimi, IPC ve bellek yönetiminin işleyişini


detaylandırıyoruz. Ardından, Mach'ın birden çok işletim sistemi arabirimini destekleme
konusundaki bukalemun benzeri yeteneğini tartışacağız.

D.4 Süreç Yönetimi

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.

D.4.1 Temel Yapı

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.

Kullanıcı düzeyinde, diziler iki durumdan birinde olabilir:

• Koşu. İş parçacığı ya yürütülüyor ya da bir işlemci atanmayı bekliyor. Bir iş parçacığı,


çekirdek içinde engellenmiş olsa bile çalışıyor olarak kabul edilir (örneğin, bir sayfa
hatasının karşılanması bekleniyor).

• 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.

Mach, iş parçacığı senkronizasyon araçlarının oluşturulabileceği ilkelleri sağlar. Bu


uygulama, Mach'ın mini-malzeme sağlama felsefesiyle tutarlıdır.
Machine Translated by Google

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.

D.4.2 C Konu Paketi


Mach, gösterişli, büyük ve daha kısıtlayıcı işlevler yerine düşük düzeyli ancak esnek
rutinler sağlar. Mach, programcıları bu düşük düzeyde çalıştırmak yerine, C ve diğer
dillerde programlama için birçok üst düzey arabirim sağlar. Örneğin, C iş parçacığı
paketi, birden çok denetim iş parçacığı, paylaşılan değişkenler, kritik bölümler için
karşılıklı dışlama ve senkronizasyon için koşul değişkenleri sağlar. Aslında, C iş
parçacıkları, birçok işletim sisteminin desteklediği POSIX Pthreads standardı üzerindeki
en büyük etkilerden biridir. Sonuç olarak, C iş parçacıkları ve Pthreads programlama
arayüzleri arasında güçlü benzerlikler vardır. İş parçacığı kontrol rutinleri, bu görevleri
gerçekleştirmek için çağrıları içerir:

• 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.

• Çağıran iş parçacığını yok edin ve oluşturan iş parçacığına bir değer

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 .

• Zamanlayıcının bu noktada başka bir iş parçacığı çalıştırabileceğini gösteren bir


işlemcinin verim kullanımı. Bu çağrı, bir iş parçacığının CPU için bir kullanımı yoksa
zaman kuantumu (veya zamanlama aralığı) sona ermeden önce CPU'yu gönüllü
olarak bırakmak için kullanılabileceğinden, önleyici bir zamanlayıcının varlığında
da yararlıdır .

Karşılıklı dışlama, aşağıda tartışıldığı gibi, spinlock'ların kullanılmasıyla sağlanır.


Bölüm 6. Karşılıklı dışlama ile ilgili rutinler şunlardı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

D.4 Süreç Yönetimi 9

C iş parçacığı paketi tarafından garanti edilmez. Bunun yerine, muteks rutinlerini


uygulamak için kullanılan donanım talimatlarına bağlıdır.
• rutin mutex unlock() , bir muteks değişkeninin kilidini açar;
bir semaforun tipik sinyal() işlemi.

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.

• yordam koşulu free() dinamik olarak oluşturulmuş bir koşulu siler


alloc() koşulunun sonucu olarak ayrılan değişken .

• 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 .

C iş parçacığı rutinlerine bir örnek olarak, Bölüm 7.1.1'deki sınırlı arabellek


senkronizasyon problemini düşünün. Üretici ve tüketici, ortak sınırlı arabellek havuzuna
erişen iş parçacıkları olarak temsil edilir. Güncellenirken arabelleği korumak için bir mutex
değişkeni kullanıyoruz. Arabelleğe özel erişimimiz olduğunda, arabellek doluysa üretici iş
parçacığını engellemek ve arabellek boşsa tüketici iş parçacığını engellemek için koşul
değişkenlerini kullanırız. Bölüm 6'da olduğu gibi, arabelleğin her biri bir öğe tutabilen n
yuvadan oluştuğunu varsayıyoruz . Mutex semaforu , arabellek havuzuna erişimler için
karşılıklı dışlama sağlar ve 1 değerine başlatılır. Boş ve dolu semaforlar, sırasıyla boş ve
dolu arabelleklerin sayısını sayar. Boş semafor , n değerine başlatılır ; semafor dolu 0
değerine başlatılır. nonempty koşul değişkeni , arabellekte öğeler varken doğrudur ve
arabellek boş bir yuvaya sahipse nonfull doğrudur. İlk adım, muteks ve koşul değişkenlerinin
tahsisini içerir:

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);

Şekil D.3 Üretici sürecinin yapısı.

D.4.3 CPU Zamanlayıcı

İş 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Ş);

Şekil D.4 Tüketici sürecinin yapısı.


D.4 Süreç Yönetimi 11
Machine Translated by Google

öncelik. Mach, iş parçacığını 32 genel çalıştırma kuyruğundan birine yerleştirmek için


önceliği kullanır. Bu kuyruklar, bir işlemci boşta kaldığında bekleyen iş parçacıkları için
öncelik sırasına göre aranır. Mach ayrıca işlemci başına veya yerel çalıştırma kuyrukları tutar
Tek bir işlemciye bağlı olan iş parçacıkları için yerel bir çalıştırma sırası kullanılır.
Örneğin, tek bir CPU'ya bağlı bir aygıtın aygıt sürücüsü yalnızca o CPU'da çalışmalıdır.

İş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.

D.4.4 İstisna İşleme Mach, standart ve

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

gerçekleştirir. İşleyicinin eylemi, istisnayı temizlemeyi , kurbanın devam etmesine


neden olmayı veya kurban dizisini sonlandırmayı içerir .

BSD programlarının yürütülmesini desteklemek için Mach'ın BSD tarzı sinyalleri


desteklemesi gerekir. Sinyaller, yazılım tarafından oluşturulan kesintiler ve istisnalar sağlar.
Ne yazık ki, çok iş parçacıklı işletim sistemlerinde sinyaller sınırlı işlevselliğe sahiptir. İlk
sorun, UNIX'te, bir sinyalin işleyicisinin, sinyali alma sürecinde bir rutin olması
gerektiğidir. Sinyal, işlemin kendisindeki bir sorundan kaynaklanıyorsa (örneğin, 0'a
bölme), bir işlemin kendi bağlamına sınırlı erişimi olduğundan, sorun giderilemez.
Sinyallerin ikinci, daha sıkıntılı yönü, yalnızca tek iş parçacıklı programlar için tasarlanmış
olmalarıdır. Örneğin, bir görevdeki tüm iş parçacıklarının bir sinyal alması hiçbir anlam
ifade etmez, ancak bir sinyal nasıl yalnızca bir iş parçacığı tarafından görülebilir?

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

D.5 Süreçler Arası İletişim 13

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.

D.5 Süreçler Arası İletişim

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.

Mach IPC'nin iki bileşeni bağlantı noktaları ve mesajlardır. Mach'daki hemen


hemen her şey bir nesnedir ve tüm nesneler iletişim portları aracılığıyla adreslenir.
Nesneleri uygulayan rutinler tarafından nesneler üzerinde işlemleri başlatmak için bu
bağlantı noktalarına mesajlar gönderilir. Mach, tüm iletişim için yalnızca bağlantı
noktalarına ve mesajlara bağlı olarak, nesnelerin konum bağımsızlığını ve iletişim
güvenliğini sağlar. Veri bağımsızlığı, NetMsgServer görevi tarafından sağlanır (Kısım
D.5.3).
Mach, mesaj gönderenlerin ve alıcıların haklara sahip olmasını şart koşarak
güvenliği sağlar. Bir hak, bir bağlantı noktası adından ve bu bağlantı noktasındaki
gönderme veya alma yeteneğinden oluşur ve nesne yönelimli sistemlerdeki bir
yeteneğe çok benzer. Herhangi bir bağlantı noktası için yalnızca bir görev alma
haklarına sahip olabilir, ancak birçok görevin gönderme hakları olabilir. Bir nesne
oluşturulduğunda, yaratıcısı da nesneyi temsil etmek için bir bağlantı noktası tahsis
eder ve bu bağlantı noktasına erişim haklarını alır. Haklar, çekirdek de dahil olmak
üzere nesnenin yaratıcısı tarafından verilebilir ve mesajlarla iletilir. Alım hakkı sahibi
bir mesajda bu hakkı gönderirse, mesajı alan hak kazanır, gönderen kaybeder. Bir
görev, sahip olduğu herhangi bir nesneye veya iletişim için erişime izin vermek için
bağlantı noktaları tahsis edebilir. Bir limanın veya alma hakkı sahibinin yok edilmesi,
o limana ilişkin tüm hakların geri alınmasına neden olur ve istenirse gönderme hakkı sahibi olan görevlere bildirileb

D.5.1 Bağlantı Noktaları

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.

• Bir görevin bağlantı noktasının mevcut

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

D.5 Süreçler Arası İletişim 15

Liman

mesaj kuyruğu İleti İleti

hedef bağlantı noktası


yanıtı bağlantı noktası
boyutu/işlemi salt
yazılan veri bağlantı
Liman noktası hakları hat
dışı veri
•••

mesaj kontrolü

bellek önbellek nesnesi bellek önbellek nesnesi

Şekil D.5 Mach mesajları.

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ı.

Versiyon 3'te bu süreç basitleştirildi. Çekirdek, bir adres haritasının parçası


olsaydı bölgenin bir kopyası olacak bir veri yapısı oluşturur. Alındığında, bu veri
yapısı alıcının haritasına eklenir ve alıcı tarafından erişilebilir bir kopya haline gelir.

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

Bilgisayarlar arasında bir mesaj gönderilebilmesi için, mesajın hedefinin bulunması


ve mesajın hedefe iletilmesi gerekir. UNIX geleneksel olarak bu mekanizmaları,
statik olarak atanmış iletişim uç noktalarının kullanılmasını gerektiren düşük seviyeli
ağ protokollerine bırakır (örneğin,
16
Ek D
Machine Translated by Google Mach Sistemi

A B A B

P1 P1

Bir harita çekirdek haritası B haritası Bir harita çekirdek haritası B haritası

operasyon gönder alma işlemi

Şekil D.6 Mach mesaj aktarımı.

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.

Çekirdek bilgisayarında olmayan bir bağlantı noktasına bir mesaj gönderilmesi


gerektiğinde, çekirdek NetMsgServer'ı kullanır. Mach'ın çekirdek IPC'si , mesajı yerel
NetMsgServer'a aktarmak için kullanılır. NetMsgServer daha sonra mesajı diğer
bilgisayardaki eşine aktarmak için uygun olan ağ protokollerini kullanır. NetMsgServer
kavramı, protokolden bağımsızdır ve NetMsgServer'lar çeşitli protokolleri kullanmak
için oluşturulmuştur. Elbette, bir aktarıma dahil olan NetMsgServer'lar kullanılan
protokol üzerinde anlaşmalıdır. Son olarak, hedef bilgisayardaki NetMsgServer,
mesajı doğru hedef göreve göndermek için bu çekirdeğin IPC'sini kullanır.

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

D.5 Süreçler Arası İletişim 17

orijinal bağlantı noktasına. Bu prosedür, NetMsgServer'ların bir proxy'yi orijinal bağlantı


noktasından ayırt edilemez hale getirmek için nasıl işbirliği yaptığını gösteren bir örnektir.
Mach, heterojen sistemler ağında çalışmak üzere tasarlandığından, sistemlerin hem
gönderici hem de alıcı tarafından anlaşılabilir bir şekilde biçimlendirilmiş verileri göndermesi
için bir yol sağlamalıdır. Ne yazık ki, bilgisayarlar çeşitli veri türlerini depolamak için kullandıkları
biçimlerde farklılık gösterir. Örneğin, bir sistemdeki bir tamsayının saklanması 2 bayt alabilir ve
en önemli bayt, en az anlamlı olandan önce depolanabilir. Başka bir sistem bu sıralamayı tersine
çevirebilir. NetMsgServer bu nedenle, verileri gönderenden alıcının formatına çevirmek için bir
mesajda saklanan tür bilgisini kullanır. Bu sayede tüm veriler hedeflerine ulaştıklarında doğru
bir şekilde temsil edilmektedir.

Belirli bir bilgisayardaki NetMsgServer, NetMsgServer'ın ad hizmetine ağ bağlantı noktaları


ekleyen, arayan ve kaldıran RPC'leri kabul eder. Bir güvenlik önlemi olarak, bir bağlantı noktası
için bir ekleme isteğinde sağlanan bir bağlantı noktası değeri, bir bağlantı noktası adının
veritabanından kaldırılmasını istemek için bir iş parçacığının kaldırma isteğindekiyle eşleşmelidir.

NetMsgServer'ın çalışmasına bir örnek olarak, A düğümündeki bir iş parçacığının, B


düğümündeki bir görevde olan bir bağlantı noktasına mesaj gönderdiğini düşünün. Program,
gönderme hakkına sahip olduğu bir bağlantı noktasına yalnızca bir mesaj gönderir. Mesaj ilk
önce çekirdeğe iletilir ve bu onu ilk alıcısı olan A düğümündeki NetMsgServer'a teslim eder.
NetMsgServer daha sonra (veritabanı bilgileri aracılığıyla) B düğümündeki NetMsgServer ile
bağlantı kurar ve mesajı gönderir.
B düğümündeki NetMsgServer, mesajı B düğümü için uygun yerel bağlantı noktasıyla çekirdeğe
sunar. Çekirdek, son olarak, bu görevdeki bir iş parçacığı bir msg alıcı() çağrısı yürüttüğünde
mesajı alan göreve sağlar.
Bu olaylar dizisi Şekil D.7'de gösterilmiştir.
Mach 3.0, NORMA çoklu işlemcileri için geliştirilmiş desteğinin bir parçası olarak
NetMsgServer'a bir alternatif sunar . Mach 3.0'ın NORMA IPC alt sistemi, NetMsgServer'a benzer
işlevleri doğrudan sunucuda uygular.

sistem A sistem B

kullanıcı kullanıcı

işlem işlem

NetMsg NetMsg
sunucu sunucu

çekirdek çekirdek

gönderen alıcı

Şekil D.7 NetMsgServer tarafından ağ IPC yönlendirmesi.


Machine Translated by Google

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.

D.5.4 IPC Yoluyla Senkronizasyon

IPC mekanizması son derece esnektir ve Mach boyunca kullanılır. Örneğin, iş


parçacığı senkronizasyonu için kullanılabilir. Bir bağlantı noktası, bir senkronizasyon
değişkeni olarak kullanılabilir ve kendisine n kaynak için gönderilen n mesaja sahip olabilir.
Bir kaynak kullanmak isteyen herhangi bir iş parçacığı, o bağlantı noktasında bir
alma çağrısı yürütür. Kaynak mevcutsa, iş parçacığı bir mesaj alır. Aksi takdirde,
orada bir mesaj gelene kadar portta bekleyecektir. Kullanımdan sonra bir kaynağı
döndürmek için iş parçacığı bağlantı noktasına bir mesaj gönderebilir. Bu bağlamda,
alma, wait() semafor işlemine eşdeğerdir ve gönderme, sinyal() ile eşdeğerdir. Bu
yöntem, aynı görevdeki iş parçacıkları arasında semafor işlemlerini senkronize etmek
için kullanılabilir, ancak görevler arasında senkronizasyon için kullanılamaz, çünkü
yalnızca bir görev bir bağlantı noktasına alma haklarına sahip olabilir. Daha genel
amaçlı semaforlar için, aynı yöntemi uygulamak üzere basit bir arka plan programı yazılabilir.

D.6 Bellek Yönetimi


Mach'ın nesne yönelimli doğası göz önüne alındığında, Mach'taki temel soyutlamanın
bellek nesnesi olması şaşırtıcı değildir. Bellek nesneleri, ikincil depolamayı yönetmek
için kullanılır ve genellikle okuma ve yazma için sanal belleğe eşlenen dosyaları,
boruları veya diğer verileri temsil eder (Şekil D.8). Bellek nesneleri, diğer işletim
sistemlerinde bulunan daha geleneksel çekirdek içeren sanal bellek çağrı cihazının
yerini alan kullanıcı düzeyindeki bellek yöneticileri tarafından desteklenebilir.
Çekirdeğin ikincil depolamayı yönetmesine yönelik geleneksel yaklaşımın aksine,
Mach ikincil depolama nesnelerini (genellikle dosyalar) sistemdeki diğer tüm nesneler
gibi ele alır. Her nesnenin kendisiyle ilişkilendirilmiş bir bağlantı noktası vardır ve
bağlantı noktasına gönderilen mesajlar tarafından manipüle edilebilir. Bellek
nesneleri, monolitik, geleneksel çekirdeklerdeki bellek yönetimi rutinlerinden farklı
olarak, yeni bellek işleme algoritmalarıyla kolay deneyler yapılmasına olanak tanır.

D.6.1 Temel Yapı

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ış

sayfalar orada mahsup


ikincil
depolama için
bağlantı noktası harita girişi

sanal bellek
nesne

Şekil D.8 Mach sanal bellek görev adres haritası.

adres alanından kaldırıldığında, adres alanında ayrılmamış bellek delikleri görünür.


adres alanı.
Mach, bir görev olmasına rağmen adres alanını sıkıştırmaya çalışmaz.
adres alanında istenen bölge için yer yoksa başarısız olabilir (veya çökebilir).
Adres alanlarının 4 GB veya daha fazla olduğu göz önüne alındığında, bu sınırlama şu anda bir
sorun. Ancak, 4 GB'lık bir adres alanı için normal bir sayfa tablosunu sürdürmek
her görev için, özellikle de içinde delikler olan bir görev için aşırı miktarda
bellek (1 MB veya daha fazla). Seyrek adres alanlarının anahtarı, o sayfa tablosudur.
alan yalnızca şu anda tahsis edilmiş bölgeler için kullanılır. Bir sayfa hatası oluştuğunda,
çekirdek, sayfa tablosuna indekslemek ve girişi kontrol etmek yerine, sayfanın geçerli bir
bölgede olup olmadığını kontrol etmelidir. Her ne kadar sonuçta
arama daha karmaşıktır, azaltılmış bellek depolama gereksinimlerinin faydaları
ve daha basit adres alanı bakımı, yaklaşımı değerli kılar.
Mach ayrıca, sanal belleğin tahsisi, serbest bırakılması ve kopyalanması dahil olmak
üzere standart sanal bellek işlevini desteklemek için sistem çağrılarına sahiptir.
Yeni bir sanal bellek nesnesi tahsis ederken, iş parçacığı bir
nesnenin adresi veya çekirdeğin adresi seçmesine izin verebilir. Bu nesnedeki sayfalara
erişilene kadar fiziksel bellek tahsis edilmez. Nesnenin desteği
depo, varsayılan çağrı cihazı tarafından yönetilir (Bölüm D.6.2). Sanal bellek nesneleri
Machine Translated by Google

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).

D.6.2 Kullanıcı Düzeyinde Bellek Yöneticileri


İkincil depolama nesnesi genellikle bir görevin sanal adres alanına eşlenir. Mach, diğer
sanal bellek uygulamalarında olduğu gibi, eşlenen tüm nesnelerin bellekte yerleşik
sayfalarının önbelleğini tutar. Ancak, bir iş parçacığı yerleşik olmayan bir sayfaya
eriştiğinde meydana gelen bir sayfa hatası, nesnenin bağlantı noktasına bir mesaj
olarak yürütülür. Bir bellek nesnesinin çekirdek dışı görevler tarafından
oluşturulabileceği ve hizmet verebileceği kavramı (örneğin, yalnızca çekirdek tarafından
oluşturulan ve bakımı yapılan iş parçacıklarının aksine) önemlidir. Sonuç olarak,
geleneksel anlamda bellek, kullanıcı tarafından yazılan bellek yöneticileri tarafından çağrılabilir.
Nesne yok edildiğinde, değiştirilen sayfaları ikincil depolamaya geri yazmak bellek
yöneticisine bağlıdır. Mach, bellek nesnelerinin içeriği veya önemi hakkında hiçbir
varsayımda bulunmaz, bu nedenle bellek nesneleri çekirdekten bağımsızdır.

Bazı durumlarda, kullanıcı düzeyinde bellek yöneticileri yetersizdir.


Örneğin, yeni bir sanal bellek bölgesi tahsis eden bir görev, o bölgeye atanmış bir
bellek yöneticisine sahip olmayabilir, çünkü bu bir ikincil depolama nesnesini temsil
etmez (ancak disk belleğine alınması gerekir) veya bir bellek yöneticisi sayfa çıkışı
gerçekleştiremeyebilir. Mach'ın kendisinin de bellek ihtiyaçlarını karşılamak için bir
bellek yöneticisine ihtiyacı vardır. Bu durumlar için Mach, varsayılan bir bellek yöneticisi sağlar.
Mach 2.5 varsayılan bellek yöneticisi, 4.3 BSD'de olduğu gibi ayrı bir takas alanı
gerektirmek yerine, diske yazılması gereken verileri depolamak için standart dosya
sistemini kullanır . Mach 3.0'da (ve OSF/1), varsayılan bellek yöneticisi, ya standart bir
dosya sistemindeki ya da ayrılmış disk bölümlerindeki dosyaları kullanabilir. Varsayılan
bellek yöneticisi, kullanıcı düzeyindekilere benzer bir arabirime sahiptir, ancak bazı
uzantılar, kullanıcı düzeyindeki yöneticiler bunu başaramadığında sayfa çıkışı
gerçekleştirmek için güvenilebilecek bellek yöneticisi rolünü desteklemek için bazı uzantılara sahiptir.
Pageout ilkesi, pageout arka plan programı olan dahili bir çekirdek iş parçacığı
tarafından uygulanır. Değiştirilecek sayfaları seçmek için ikinci şansa sahip FIFO'ya
dayalı bir sayfalama algoritması (Bölüm 10.4.5) kullanılır. Seçilen sayfalar, gerçek sayfa
çıkışı için uygun yöneticiye (kullanıcı düzeyi veya varsayılan) gönderilir. Kullanıcı
düzeyindeki bir yönetici, varsayılan yöneticiden daha akıllı olabilir ve desteklediği
nesneye uygun farklı bir çağrı algoritması uygulayabilir (yani, başka bir sayfa seçip
zorla sayfalayarak). Kullanıcı düzeyindeki bir yönetici, çekirdek tarafından istendiğinde
yerleşik sayfa kümesini azaltamazsa, varsayılan bellek yöneticisi çağrılır ve kullanıcı
düzeyindeki yöneticinin yerleşik küme boyutunu küçültmek için kullanıcı düzeyindeki
yöneticinin sayfalarını çıkarır. Kullanıcı düzeyindeki yönetici, kendi sayfa çıkışlarını
gerçekleştirmesini engelleyen sorundan kurtulursa, bu sayfalara dokunur (çekirdeğin
yeniden sayfa açmasına neden olur) ve daha sonra uygun gördüğü şekilde bunları
sayfadan çıkarabilir.
Bir iş parçacığının bir bellek nesnesindeki (örneğin bir dosya) verilere erişmesi
gerekiyorsa, vm map() sistem çağrısını çağırır. Bu sistem çağrısına, nesneyi tanımlayan
bir bağlantı noktası ve bundan sorumlu olan bellek yöneticisi dahildir.
Machine Translated by Google D.6 Bellek Yönetimi 21

bölge. Çekirdek, veriler o bölgede okunacağı veya yazılacağı zaman bu bağlantı


noktasında çağrıları yürütür. Ek bir karmaşıklık, çekirdeğin bu çağrıları eşzamansız
olarak yapmasıdır, çünkü çekirdeğin kullanıcı düzeyinde bir iş parçacığında beklemesi
makul olmaz. Sayfa çıkışı durumundan farklı olarak, isteği harici bellek yöneticisi
tarafından karşılanmazsa, çekirdeğin herhangi bir rücu hakkı yoktur. Çekirdek, bir
nesnenin içeriği veya bu nesnenin nasıl manipüle edilmesi gerektiği hakkında hiçbir
bilgiye sahip değildir.
Bellek yöneticileri, farklı makinelerdeki görevler tarafından eşlenen bir bellek
nesnesinin içeriğinin tutarlılığından sorumludur. (Tek bir makinedeki görevler, eşlenmiş
bir bellek nesnesinin tek bir kopyasını paylaşır.) İki farklı makinedeki görevlerin bir
nesnenin aynı sayfasını aynı anda değiştirmeye çalıştığı bir durumu düşünün. Bu
değişikliklerin serileştirilmesi gerekip gerekmediğine yönetici karar verir. Sıkı bellek
tutarlılığı uygulayan muhafazakar bir yönetici, aynı anda yalnızca bir çekirdeğe yazma
erişimi vererek değişiklikleri seri hale getirmeye zorlar. Daha sofistike bir yönetici, her
iki erişimin de aynı anda devam etmesine izin verebilir (örneğin, yönetici iki görevin
sayfa içindeki farklı alanları değiştirdiğini ve gelecekteki bir zamanda değişiklikleri
başarıyla birleştirebileceğini bilseydi). Mach için yazılmış çoğu harici bellek yöneticisi
(örneğin, eşlenmiş dosyaları uygulayanlar), bu tür mantığın karmaşıklığı nedeniyle,
birden çok çekirdekle uğraşmak için mantık uygulamaz.

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

değiştirilmiş veya çekirdeğin yerleşik bellekten (örneğin sayfa yaşlanması nedeniyle)


kaldırması gereken herhangi bir "değerli sayfa", bellek nesnesi veri yazma() yoluyla
bellek nesnesine gönderilir . Kıymetli sayfalar , üzerinde değişiklik yapılmamış ancak
bellek yöneticisinin artık bir kopyasını tutmaması nedeniyle aksi takdirde olacağı için
atılamayan sayfalardır. Bellek yöneticisi bu sayfaların değerli olduğunu beyan eder
ve bunlar bellekten kaldırıldığında çekirdeğin onları geri döndürmesini bekler.
Değerli sayfalar, gereksiz çoğaltma ve bellek kopyalamadan tasarruf sağlar.

Geçerli sürümde, Mach, harici bellek yöneticilerinin sayfa değiştirme algoritmasını


doğrudan etkilemesine izin vermez. Mach, örneğin en son kullanılan sayfayı seçmek
için harici bir görev için gerekli olacak bellek erişim bilgilerini dışa aktarmaz. Bu tür
bilgileri sağlama yöntemleri şu anda araştırılmaktadır. Bununla birlikte, bir harici
bellek yöneticisi çeşitli nedenlerle hala yararlıdır:

• Daha iyi bir candi biliyorsa, çekirdeğin yeni kurbanını reddedebilir.


tarih (örneğin, MRU sayfa değişimi).
• Desteklediği bellek nesnesini izleyebilir ve bellek kullanımı Mach'ın sayfa çıkış
arka planını başlatmadan önce sayfaların çağrılmasını isteyebilir.
• Bölüm D.6.3'te gösterdiğimiz gibi, çoklu işlemcilerdeki iş parçacıkları için ikincil
depolamanın tutarlılığının sağlanmasında özellikle önemlidir. • Veritabanı
yönetim sistemleri tarafından talep edilen tutarlılık kısıtlamalarını uygulamak için
ikincil depolamadaki işlemlerin sırasını kontrol edebilir. Örneğin, işlem
günlüğünde, işlemler veritabanı verilerini değiştirmeden önce diskteki bir
günlük dosyasına yazılmalıdır. • Eşlenen dosya erişimini kontrol edebilir.

D.6.3 Paylaşılan Bellek

Mach, çeşitli sistem olanaklarının karmaşıklığını azaltmak ve bu özellikleri verimli


bir şekilde sağlamak için paylaşılan belleği kullanır. Paylaşılan bellek genellikle
işlemler arası son derece hızlı iletişim sağlar, dosya yönetimindeki fazla yükü azaltır
ve çoklu işlem ve veritabanı yönetimini desteklemeye yardımcı olur. Ancak Mach,
tüm bu geleneksel paylaşılan bellek rolleri için paylaşılan belleği kullanmaz. Örneğin,
bir görevdeki tüm iş parçacıkları o görevin belleğini paylaşır, bu nedenle bir görev
içinde resmi bir paylaşılan bellek tesisine ihtiyaç yoktur.
Ancak, Mach, UNIX fork() sistem çağrısı gibi diğer işletim sistemi yapılarını
desteklemek için hala geleneksel paylaşılan bellek sağlamalıdır .
Birden fazla makinedeki görevlerin belleği paylaşması ve veri tutarlılığını
sürdürmesi açıkça zordur. Mach bu sorunu doğrudan çözmeye çalışmaz; daha
ziyade, sorunun çözülmesine izin verecek olanaklar sağlar. Mach, yalnızca bellek,
belleği paylaşan işlemcilerde çalışan görevler tarafından paylaşıldığında tutarlı
paylaşılan belleği destekler. Bir ana görev, hangi bellek bölgelerinin çocukları
tarafından miras alınacağını ve hangilerinin okunabilir – yazılabilir olacağını
bildirebilir. Bu şema, her bir görevin değiştirilen sayfaların kendi kopyasını
bulundurduğu yazma üzerine kopyalama mirasından farklıdır. Her görevin adres
haritasından yazılabilir bir nesne adreslenir ve tüm değişiklikler aynı kopyada yapılır.
Görevler içindeki iş parçacıkları, bellekteki değişiklikleri koordine etmekten
sorumludur, böylece birbirleriyle karışmazlar (yazarak).
D.7 Programcı Arayüzü 23
Machine Translated by Google

aynı yerde aynı anda). Bu koordinasyon, normal senkronizasyon yöntemleriyle


yapılabilir: kritik bölümler veya karşılıklı dışlama kilitleri.
Ayrı makineler arasında paylaşılan bellek durumunda, Mach, harici bellek
yöneticilerinin kullanılmasına izin verir. Bir dizi ilgisiz görev belleğin bir bölümünü
paylaşmak isterse, görevler aynı harici bellek yöneticisini kullanabilir ve bunun
aracılığıyla aynı ikincil depolama alanlarına erişebilir. Bu sistemin uygulayıcısının
görevleri ve harici çağrı cihazını yazması gerekir. Bu çağrı cihazı gerektiği kadar basit
veya karmaşık olabilir. Basit bir uygulama, bir sayfa yazılırken hiçbir okuyucuya izin
vermez. Herhangi bir yazma girişimi, çağrı cihazının o anda erişmekte olan tüm
görevlerde sayfayı geçersiz kılmasına neden olur. Çağrı cihazı daha sonra yazmaya
izin verecek ve okuyucuları sayfanın yeni versiyonuyla yeniden doğrulayacaktır.
Okuyucular, sayfa tekrar kullanılabilir hale gelene kadar bir sayfa hatasını bekleyecekti.
Mach böyle bir bellek yöneticisi sağlar: Ağ Bellek Sunucusu (NetMemServer). Çoklu
bilgisayarlar için, Mach 3.0'ın NORMA konfigürasyonu, çekirdeğin standart bir parçası
olarak benzer bir destek sağlar. Bu XMM alt sistemi, çok bilgisayarlı sistemlerin,
birden çok çekirdekle uğraşmak için mantık içermeyen harici bellek yöneticilerini
kullanmasına izin verir. XMM alt sistemi , belleği paylaşan ve bu çekirdeklerin bellek
yöneticisine tek bir çekirdek gibi görünmesini sağlayan birden çok çekirdek arasında
veri tutarlılığını korumaktan sorumludur. XMM alt sistemi , yönettiği eşlenmiş
nesneler için sanal kopya mantığını da uygular. Bu sanal kopya mantığı, hem çok
bilgisayarlı çekirdekler arasında referans üzerine kopyalamayı hem de karmaşık
yazma üzerine kopyalama optimizasyonlarını içerir.

D.7 Programcı Arayüzü

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.

• Birçok bellek modelini ve paralel ve dağıtılmış hesaplamayı destekleyen modern


bir işletim sistemine sahip olun.
• 4.3 BSD'den daha basit ve değiştirilmesi daha kolay bir çekirdek tasarlayın .

Gösterdiğimiz gibi, Mach bu hedeflere ulaşma yolunda ilerliyor.


Mach 2.5, çekirdeğinde ihtiyaç duyulan öykünmeyi sağlayan ancak çekirdeği
büyüten 4.3 BSD'yi içerir. Bu 4.3 BSD kodu, aynı 4.3 işlevselliğini sağlamak, ancak
Mach ilkellerini kullanmak için yeniden yazılmıştır. Bu değişiklik, 4.3 BSD destek
kodunun bir Mach 3.0 sisteminde kullanıcı alanında çalışmasına izin verir.
Machine Translated by Google

Daha fazla okuma 25

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 .

Daha fazla okuma


Accent işletim sistemi [Rashid ve Robertson (1981)] tarafından tanımlanmıştır.
Daha da eski bir sistem olan RIG'den Accent'ten Mach'a ilerlemenin tarihsel
bir özeti [Rashid (1986)] tarafından verilmiştir. Mach modeliyle ilgili genel
tartışmalar [Tevanian et al. (1989)].
[Accetta et al. (1986)] Mach'ın orijinal tasarımına genel bir bakış sundu.
Mach programlayıcı [Tevanian et al. (1987a)] ve [Black (1990)]. Mach paylaşımlı
hafıza ve hafıza haritalama sisteminin erken bir versiyonu sunuldu [Tevanian
et al. (1987b)].

bibliyografya

[Accetta et al. (1986)] M. Accetta, R. Baron, W. Bolosky, DB Golub, R. Rashid, A. Tevanian


ve M. Young, “Mach: A New Kernel Foundation for UNIX Geliştirme”, Proceedings of
the Summer USENIX Konferans (1986), sayfa 93-112.

[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.

[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) ).

[Tevanyan et al. (1987b)] A. Tevanian, Jr., RF Rashid, MW Young, DB Golub, MR Thompson,


W. Bolosky ve R. Sanzi, “A UNIX Interface for Shared
Machine Translated by Google

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

4 bayt sayfa, 363, 364 zorunlu, 684-685 rol


32 bayt bellek, 363, 364 tabanlı, 683-684
yüzde 50 kuralı, 359 64 bit erişim kontrol listeleri (ACL'ler), 552, 555,
bilgi işlem, 383 826 erişimli bit, 437 erişim maskesi, 849
erişim matrisi, 675-685 tanımlı, 675
A uygulama, 679-682 ve zorunlu erişim
kontrolü, 684-685 ve erişim haklarının
ABI (uygulama ikili arayüzü), 78-79 iptal iptali, 682-683 ve rol tabanlı erişim
işlemleri, 342 mutlak kod, 352 mutlak yol kontrolü, 683-684
adı, 546 soyut veri türü (ADT), 277-278
erişim, 539-541 anonim, 605 kontrol,
552-554 doğrudan (göreli) , 539-541 etkin erişim hakları, 534, 673, 680, 682-683
erişim süresi, 397-398 çekirdek nesnesi, muhasebe, 110, 659, 788
884-885 hafif dizin erişim protokolü, 607, ACG (Keyfi Kod Koruması), 827 alındı
884 bellek, 15, 18, 19, 418-419, 498-500 paketi, 748
işlem geçişi için, 753 ve koruma, 551 ACL'ler, erişim kontrol listelerine bakın
rastgele erişimli cihazlar, 502 rastgele ACPI (gelişmiş yapılandırma ve güç arayüzü),
erişim süresi, 450 okuma, 292 göreli, 516 etkinleştirme kaydı, 107 aktif
539-540 dizin, 607, 884 döngüsel olmayan grafik, 547
döngüsel olmayan grafik dizini, 547-549 ek
referans-bit algoritması, 409-410

ek duyu kodu, 512 ek duyu


kodu nitelemesi , 512 adres(ler):
tanımlı, 496 doğrusal, 380, 382
Uzaktan Erişim Aracı, 625 mantıksal, 353, 379
uzak dosya, 764-767
güvenlik erişim belirteçleri,
662 sıralı, 539, 541 kablosuz MAC, 745
erişim noktası, 736 yazma, fiziksel, 354, 379
292 erişim kontrolü: isteğe güvenilir, 638
bağlı, Linux'ta 684, 816-818 sanal, 354 adres
bağlama, 352-353 adres
eşleme, 456-457 adres
MAC adresi, 745 çözümleme protokolü (ARP), 745

965
966 dizin
Machine Translated by Google

adres alanı: süreç hiyerarşisi, 122-123


mantıksal ve fiziksel, 353-355 koruma alanı, 675 RPC,
sanal, 390, 391, 799-800 151-153 iş parçacığı havuzu,
adres alanı tanımlayıcısı (ASID'ler), 366 178 TrustZone, 670, 671
adres alanı düzeni rastgeleleştirme anormallik algılama, 656
(ASLR), 656, 827 anonim erişim, 605 anonim
Adres Penceresi Uzantısı (AWE) bellek, 399, 469 anonim boru,
bellek, 894-895 141-145 AOT (öncesinde) zaman)
giriş-kontrol algoritmaları, 230 derleme, 89, 90 APC (eşzamansız
ADT (soyut veri türü), 277-278 prosedür çağrıları), 189-190, 846 APFS (Apple
gelişmiş yapılandırma ve güç arabirimi Dosya Sistemi), 592 API (uygulama programı
(ACPI), 516 arayüzü), 63-66. Ayrıca , dosya
gelişmiş şifreleme standardı (AES), 640 ekleme belirli türlere bakın 551 Apple Dosya
gelişmiş yerel prosedür çağrısı (ALPC), 138, Sistemi (APFS), 592 uygulama ikili arabirimi
834 ileri teknoloji eki (ATA) veriyolu, (ABI), 78-79 uygulama bileşeni,
456 öneri dosya kilitleme mekanizması, 535 151-152 Uygulama Kapsayıcısı, 868 uygulama
kapsamı, 703, 718-719 uygulama çerçeveleri
katmanı (macOS ve iOS) ), 87 uygulama
AES (gelişmiş şifreleme standardı), 640 arayüzü (I/O sistemleri), 500-508
afinite , eskitme,
işlemci, 225-226 yaş, sayfa,
213 önceden (AOT)800
derleme,
89, 90 uyarılabilir iş parçacığı, 846 ayırma:

buddy-system, 427, 428 blok ve karakter cihazları, 503-504 saat


taahhüt, 852 bitişik, ve zamanlayıcılar, 505-506 ağ cihazları,
356-360, 570-573 eşit, 414 504-505 blokajsız ve asenkron G/Ç,
çerçeve, öncesi ve sonrası 506-507 uygulama katmanı (OSI
413-419 boş çerçeve, 364 modeli), 742 uygulama programı
global, 415-418 indeksli, 575-577 (uygulamalar), 4, 75, 823 uyumluluğu,
çekirdek belleği, 426-430 bağlantılı, 830-831 dezenfeksiyonu, 658 paketli, 859
573-575 yerel, 415-418 aşırı, 401 güvenliği, 624 özgüllüğü, 77-79 sistem
orantılı, 414-415 kaynak, 57 ikincil hizmetleri, 75 kullanıcı kimliği, 675
depolama, 570-578 levha, 427-430, uygulama programı arabirimi (API),
797-798 63-66. Ayrıca bkz. belirli uygulama
proxy yangınları tüm türleri, 660
uygulama durumu, 378 Aqua arabirimi,
59, 87 Arbitrary Code Guard (ACG), 827
mimari(ler), 15-21 AMD64, 382 ARMv8,
383-384, 671, 672 büyük. LITTLE,
Tahsis (veri yapısı), 335, 336, 339 tahsis 226-227 kümelenmiş sistemler, 19-21
problemi, 358, 540, 571 IA-32, 379-382 IA-64, 382 çok işlemcili,
ALPC (gelişmiş yerel prosedür çağrısı), 124 çok işlemcili sistemler, 16-19
138, 834 rakım, 863

AMD64 mimarisi, 382


Amdahl Yasası, 164
AMD sanallaştırma teknolojisi
(AMD-V), 710-711
amplifikasyon yazma, 462
analitik değerlendirme, 245
Andrew dosya sistemi (OpenAFS), 759
Android işletim sistemi, 89-91
dizin 967
Machine Translated by Google

NFS, 614 ve şifreleme, Linux'ta


tek işlemcili sistemler, 15-16 von 641-644, 816 çok faktörlü,
Neumann, 12 x86-64, 382 653 iki faktörlü, 652
kullanıcı, 648-653 otomatik
Arduino, 70 çalışma seti kırpma, 438
argüman vektörü, 787 otomatik montaj özelliği, 763 otomatik
zırhlı virüs, 634 sonda, 785 kullanılabilirlik, ihlal, 622
ARMv8 mimarisi, 383-384, 671, 672
ARP (adres çözümleme protokolü), 745
diziler: yedekli, bkz. RAID [yedek pahalı Mevcut (veri yapısı), 334, 336, 338
olmayan disk dizileri] depolama, 472-473, 481 AWE bellek, 894-895

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

kümeleme, 19, 20, 438 sıkıştırma, 360, 572


CLV (sabit doğrusal hız), 456-457 karşılaştırma ve takas() talimatı, 267-269
CMT (chip multithreading), 222, 223 iri bölümlendirme, 669 derleyici tabanlı zorlama,
taneli multithreading, 222 koaksiyel 691-693 derleme zamanı, 352
kablolar, 736
Kakao çerçevesi, 87 Tamamen Adil Kuyruğa Alma (CFQ)
Cocoa Touch, 87 planlayıcısı, 461, 811
kodu: mutlak, 352 Tamamen Adil Zamanlayıcı (CFS), 236, 237,
ek duyu, 512 790 karmaşık mesaj, 136
bayt-, 727 hata
düzeltme, 462-463 Bileşen Nesne Modeli (COM), 882 sıkıştırma,
enjeksiyon, 628-631 425-426, 757, 858, 878-879 sıkıştırma oranı,
çekirdek, 261 mesaj 426 sıkıştırma birimi, 878 hesaplama
doğrulama, 643 konumdan çekirdeği, 833 hesaplama geçişi, 752
bağımsız, 803 yeniden girişli hesaplama hızlandırma, 123, 735, 753
(saf), 370 yeniden yerleştirilebilir , bilgisayar programı, uygulamaya bakın
353 kod enjeksiyon saldırısı,
628-631 kod bütünlüğü modülü
(Windows 10), 828 kod yeniden programlar
kullanım saldırısı, 827 kod inceleme, 627, 628 bilgisayar sistemi(ler):
kod imzalama, 644, 690 kod sözcüğü, 697 mimarisi, 15-21
kümelenmiş sistemler,
19-21 çok işlemcili sistemler,
16-19 tek işlemcili sistemler, 15-16
COM (Bileşen Nesne Modeli), 882 com (üst dağıtık sistemler, 35-36 güvenlik
düzey etki alanı), 739 birleşik şema dizin duvarı koruması, 659-660
bloğu, 576 komut yorumlayıcısı, 58-59 I/O yapısı, 14-15 işletim
komut satırı arabirimi (CLI), 56 taahhüt sistemi tarafından görüntüleniyor,
ayırma, 852 5 kuruluş, 7-15 kesinti, 8-11

Ortak Kriterler, 869 ortak G/Ç yapısı, 14-15


İnternet dosya sistemi (CIFS), 607, 880 depolama yapısı, 11-14
süreç yönetimi, 27-28 koruma,
ortak ad, 647 33-34 gerçek zamanlı gömülü
iletişim(ler): doğrudan, sistemler, 45-46 güvenli, 622 güvenlik
128 dolaylı, 129 girişi, 33-34 depolama alanı, 11- 14
bilgisayarlar arası, depolama yönetimi, 30, 32 tehdit,
522 işlemler arası, 634-637 bilgi işlem sunucusu sistemi,
bkz. işlemler arası iletişim [IPC] 42-43 bilgi işlem: 64-bit, 383 bulut,
ağı, 738-749 44-45, 706 yüksek performans, 20
mobil, 41-42 eşler arası eş, 43-44 güvenli,
iletişim protokolleri, 741-745 ve 658 ince istemci, 874-875 geleneksel,
adlandırma/ad çözümlemesi, 738-741 40-41
TCP/IP örneği, 745-746
UDP ve TCP taşıma protokolleri,
746-749
işletim sistemi hizmeti olarak, 57
güvenli, simetrik şifrelemeli, 639,
640
sistem programları, 74
iletişim bağlantısı, 128 iletişim bilgi işlem ortamları, 40-46 istemci-
portu, 138 iletişim protokolü, sunucu bilgi işlem, 42-43 bulut
741-745 iletişim sistemi çağrısı, 72-73 bilgi işlem, 44-45 mobil bilgi
işlem, 41-42

You might also like