Çok İşlemcili ve Dağıtık Sistemlere Giriş Yetmeyen Yetemeyen Berimleme Kudreti • Günümüzdeki bilgisayarlar ENIAC’ tan milyon kez daha hızlıdır ancak hala her geçen gün daha fazlası istenmektedir. • İklimi analiz etmek, genleri açığa çıkarmak, protein katlamak, kitle imha silahları üretmek, evreni anlamak vb. devasa ölçekteki süreçler muazzam berimleme gücü gerekir. • Bir dönem bu gücü arttırmak, sadece işlemci saatini hızlı çalıştırarak yapılabiliyordu. Limitler • Saat çarpanı konusunda limitlere yıllar önce erişilmiştir. • Bilgisayarları oldukça küçültmek mümkündür ancak ısı yayılımı sıkıntısı söz konusudur. • 1 MHz mertebesinden 1GHz’ e çıkmak çip üretimindeki mühendislikle ilgiliyken 1 THz çok daha fazlasını istemektedir. Paralel Bilgisayarlar • İşlemci hızını arttırmaktansa normal hızda çalışan CPU içeren ve birbirleriyle paralel çalışan bilgisayarlar programlanabilir. • 1000 işlemcili bilgisayarlar halihazırda kullanılmaktadır. • Hız artışı için bilgisayarların paralel kullanılması önemli bir meseledir. • Programlama genelde seri bir iştir, paralel programlama çözüm bekleyen şu sorunlar içerir. • Farklı bilgisayarlar arası bilgi nasıl paylaşılacaktır? • İşleme koordinasyonu nasıl sağlanacaktır? • İşletim sistemleri nasıl bu mantığa uyarlanacak veya oluşturulacaktır? Çok İşlemcili Sistemler a) Paylaşımlı bellekli çok sayıda işlemci b) Mesaj geçen çok sayıda bilgisayar c) Geniş alana dağıtılmış sistem Paylaşımlı Bellekli Çok İşlemcili Sistemler • Bütün işlemciler paylaşımlı belleği okuyabilir ve belleğe yazabilir. • İşlemciler arası iletişim paylaşımlı bellek üzerindendir. • Bu sistemlerde başka bir sürecin müdahalesi nedeniyle işlemci belleğe yazdığı değerden farklı bir değer okuyabilir. Veri Yolu Tabanlı Mimari ile Paylaşımlı Bellek Kullanan İşlemciler • Önbellek olmadan • Önbellekli • Önbellekli ve özel bellekli Veri Yolu Tabanlı Mimari ile Paylaşımlı Bellek Kullanan İşlemciler • Her işlemci belleğe erişmeden önce veri yolunun meşgul olup olmadığını kontrol etmek zorundadır. • 3-4 CPU için uygundur ancak 32 CPU varken bant genişliği sıkıntı olacaktır. Çözüm olarak her işlemciye önbellek eklenebilir. • Bu durumda da önbellek uyumluluk protokolü gerekir, eğer bir işlemci bir veya daha fazla önbellekteki bir kelimeyi yazmaya kalkarsa, «kirli» önbellekler yazma öncesi belleğe yazılmalı ve «temiz» önbellekler geçersizleştirilmelidir. • Daha iyi bir çözüm olarak her işlemci yerelde özel bir bellek kullanır ve paylaşımlı belleğe sadece paylaşımlı değişkenler kaydeder. Bu sayede çakışmalar en aza indirilebilir. Derleyici yardımına ihtiyaç vardır. Çaprazlayıcı Anahtar Kullanan UMA (Tekdüze Bellek Erişimi) Çok İşlemciler • Tek veri yollu sistemlerden daha iyi bağlantı performansına sahiptir. • Bellek başına bir bağlantı garantidir. • Ancak bu sistemler tamamen ölçeklenebilir nitelikte değildir. Çok Çekirdekli Çipler • Moore Yasası’ na göre bir çipe yerleştirilebilen transistör sayısı 18 ayda bir iki katına çıkacaktır. Bu yasa 300 milyon civarı transistör içeren Intel Core 2 Duo çipleri için de geçerli olmuştur. • Bütün bu transistörlerle çalışmak için önbelleği büyütmek performansı çok az arttıracaktır. (şu anki boyut 25 MB) • Bir diğer seçenek de aynı çipe iki veya daha fazla çip yerleştirmektir. • Günümüzde mobil sistemler bile 4 çekirdekli işlemciler kullanmaktadır. • Intel i7-6950X CPU 10 çekirdek içerirken bu sayı GPU’larda çok daha fazladır. (örn. 2584 CUDA çekirdeği ile nVidia GeForce GTX 1080Ti) • Çok daha fazla çekirdekli çipler üzerinde AR-GE devam etmektedir. Çok Çekirdekli Çipler • Paylaşımlı L2 önbelleği kaynak paylaşımı açısından iyidir ancak açgözlü çalışan çekirdekler diğerlerinin işleyişini bozabilir. • Intel işlemcilerde (a) çekirdekler L2 önbelleğini paylaşırken AMD’ de (b) ise her çekirdeğe ayrı L2 alanı verilir. (a) (b) Çok İşlemcili İşletim Sistemi Türleri • Bir çok işlemcide CPU kaynağının çok sayıda kopyası olur. • Fakat bu durum işletim sistemi tasarımını karmaşıklaştırır zira işlemciler koordine çalışmak durumundadır. • Her işlemcinin kendi işletim sisteminin olduğu yapılar • Efendi-Köle (Master-Slave) çok işlemciler • Simetrik çok işlemciler olmak üzere üç ana tür vardır. Her İşlemcinin Kendi İşletim Sisteminin Olması • Bellek statik olarak bölümlere ayrılır ve her işlemciye kendine özel bellek ve İS kopyası verilir. • n işlemci n ayrı bilgisayar gibi çalışır. Bu yaklaşım işletim sistemi veri yapılarını paylaşmadan İS kodunu paylaşarak optimize edilebilir. • n bilgisayara sahip olmaktan iyidir zira bütün diskler ve G/Ç aygıtları paylaşımlıdır. • Farklı işlemcilerde çalışan süreçler arası iletişim bellek üzerinden sağlanabilir. • Çok işlemci belleği dört CPU arasında paylaştırılmış lakin İS kodu ortak kullanılmaktadır. Data kutuları işletim sisteminin her CPU için özel olan verileridir. Veri yolu Her İşlemcinin Kendi İşletim Sisteminin Olması • Bir süreç bir sistem çağrısı yaptığında bu çağrı sürecin yer aldığı İS kopyası içindeki veri yapılarını kullanan CPU tarafından ele alınır. • Süreçler paylaşılmaz. Her CPU kendi zamanlamasını yapar. • Eğer bir kullanıcı 1. CPU’ ya giriş yaparsa bütün süreçleri 1. CPU’ da çalışır. • Sayfalar paylaşılmaz. 1. CPU ha bire sayfalama yaparken 2. CPU’ da boş sayfalar olması mümkündür. • Eğer bütün işletim sistemleri az önce kullanılan disk bloklarının bir tampon önbelleğini barındırırsa tutarsız sonuçlar oluşabilir. Tampon önbellekleri devre dışı bırakılabilir ama başarıma zarar verir. • Hızlı taşıma için iyi olsa da günümüzde kullanımı çok nadirdir. Efendi-Köle Çok İşlemciler • 1. CPU işletim sistemi ve veri yapılarını çalıştırır. Bir CPU boşta beklerken işlemek üzere işletim sisteminden süreç talep edebilir. • Sayfalar bütün süreçler arasında dinamik olarak tahsis edilebilir. Sadece bir tampon önbelleği vardır, tutarsızlık oluşmaz. • Bütün sistem çağrıları işlenmek üzere 1. CPU’ ya yönlendirilir. 1. CPU bu çağrılarla dolabilir. Bu yapı az CPU için iyidir ancak ölçeklenemez. Veri yolu Simetrik Çok İşlemciler • Bellekte işletim sisteminin bir kopyası vardır ama bütün işlemciler bunu çalıştırabilir. • Bir sistem çağrısı yapıldığında o CPU çekirdeğe tuzak açar ve işletir. • İS veri yapıları paylaşıldığından süreçler ve belleği dinamik olarak dengeler. Efendi CPU darboğazı aşılmış olur. Lakin senkronizasyon şarttır. Veri yolu Kilitler Simetrik Çok İşlemciler • İki CPU çalıştırmak için aynı süreci seçerse veya iki süreç aynı boş bellek sayfasını isterse senkronizasyon sıkıntısı çıkar. • Senkronizasyon temel bileşenleri kullanılabilir. İS ile bir karşılıklı dışlama (mutex) kilidi tanımlanarak İS kodu devasa bir kritik bölge olarak tanımlanabilir. • Her CPU bir anda bir kez olmak üzere çekirdek (kernel) modunda çalışabilir. İşe yarar ama efendi-köle kadar kötü bir çözümdür. • İşletim sistemlerinin çoğu bölümü birbirinden bağımsızdır. Bir CPU zamanlayıcıyı çalıştırırken diğeri bir dosya sistemi çağrısıyla, bir üçüncüsü de sayfa hatasıyla ilgilenebilir. • İşletim sistemini çok sayıda birbirine karışmayan bağımsız kritik bölgelere ayırmak gerekir. Her kritik bölgenin kendine ait kilidi olabilir. • Lakin süreç tabloları (zamanlama ve fork() için) gibi bazı tablolar birden fazla kritik bölge tarafından kullanılmaktadır. Simetrik Çok İşlemciler • Buradaki sıkıntı böyle bir bilgisayar için İS kodu yazmaktan ziyade İS kodunu farklı işlemciler tarafından koşut zamanlı çalıştırılabilen kritik bölgelere ayırmaktır. • Çok sayıdaki kritik bölgeler tarafından kullanılan bütün tablolar bir mutex ile ilişkilendirilmelidir ve tabloyu kullanan bütün kodlar mutex’i doğru kullanmalıdır. • Ölümcül kilitlenmeler büyük bir tehdit unsurudur. Eğer iki kritik bölge aynı anda A ve B tablolarına ihtiyaç duyarlarsa eninde sonunda ölümcül kilitlenme yaşanacaktır. Bunu önlemek için tablolar numaralandırılır ve süreçler tarafından artan sırayla elde edilir. Çok İşlemcili Senkronizasyon • Çok işlemciler için bir zarurettir. (örn. çekirdek veri yapılarına erişmek için mutex kullanmak) • Tek işlemcili bilgisayarlarda senkronizasyon zordur. CPU kesmeleri devre dışı bırakabilir. Çok işlemcilerde ise bundan sadece bir CPU etkilenir. • Test_and_set komutu ile bellekten bir kelime okunur ve bir yazmaça kaydedilir. Bu komut eş zamanlı olarak bellek kelimesine 1 yazar. Bellekten okuma ve belleğe yazma için iki çevrim (cycle) gerekir. • Tek işlemcili bilgisayarda sorun olmamakla birlikte, çok işlemcili bilgisayarda ek desteğe ihtiyaç duyulur. Çok İşlemcili Senkronizasyon • Donanım TSL talimatının diğer işlemcilerin erişimini engelleyerek veri yolunu kilitlemesini, ardından her iki bellek erişimini yapmasını ve veri yolunu serbest bırakmasını desteklemelidir. • Karşılıklı dışlama garantilenir ancak diğer işlemciler dönen kilitli bırakılarak yalnızca CPU zamanını israf etmekle kalmaz, aynı zamanda veri yolu ve belleğe yük bindirir. TSL talimatı eğer veri yolu kilitlenemezse başarısız olabilir. Şekildeki dört adım ile böyle bir durum gösterilmektedir. Veri yolu Çok İşlemcili Senkronizasyon • Önbellekleme üzerinden veri yolu yükü artış problemi çözülebilir mi? • Teoride CPU kilit kelimesini okuduğu zaman önbelleğinde bir kopya oluşturmalıdır. Peşi sıra gelen bütün okumalar bu önbellekten elde edilebilir. Önbellekte dönen kilitle bekleme veri yolu yükünü serbest bırakır. • Kilidi tutan CPU kilide yazdığı zaman, diğer bütün CPU önbelleklerindeki kopyalar geçersiz hale gelir. Diğer CPU’lar yeni bir kopya istemek zorunda kalır. Dönmek mi Değiştirmek mi? • Bir kilit için dönmek tek seçenek değildir. • Çok işlemcili bir sistemde CPU bir kilit için dönmek yerine çalıştırmak için başka bir ipliğe geçmeye karar verebilir. • Bunun da cezası ek bir değişiklik yükü (context switch) ve geçersiz kılınan önbellek olur. • Her iki seçenek de pekala yapılabilir. Ancak ne zaman hangisinin yapılacağı ayrı bir araştırma konusudur. Çok İşlemcili Zamanlama • Tek işlemcili zamanlamada zamanlayıcı sonraki adımda hangi ipliğin çalışacağını seçer. • Çok işlemcili zamanlamada iplikle birlikte hangi CPU’ nun kullanılacağı da seçilmelidir. • Mevzuyu karıştıran başka bir etmen de iplik ilişkileridir. • Çok kullanıcılı zaman paylaşımlı ortamlarda olduğu üzere alakasız iplikler veya beraber çalışan bazı uygulamaların (örn. derleyicilerin make komutu) iplikleri gibi alakalı iplikler. • Alakasız iplikler için zaman paylaşımı, alakalı iplikler için mekan paylaşımı ve çete zamanlama (gang scheduling) algoritmaları vardır. Sanallaştırma • Bir bilgisayar sisteminde her biri farklı işletim sistemi çalıştıran sanal makineler yönetilebilmesidir. • Aslında 40 yıldan fazladır (IBM/370) bilinse de kullanımı son zamanlarda yaygınlaşmıştır. • Yazılım hatalarına karşı dayanıklılık sağlar. Ayrıca mevcut donanım ve işletim sisteminin desteklemediği uygulamalar çalıştırılabilir. • Sunucu barındıran bütün kurum ve kuruluşlarda farklı makineler kullanılır. • Ancak artan ihtiyaçlar donanım, enerji tüketimi ve bakım masraflarını da beraberinde getirir. • Farklı işletim sistemleri için yazılım geliştirmede kolaylık sağlar. Sanal Makineler • Mantıksal değerlendirmesine katmanlı bir yaklaşım izler. Donanım ve işletim sistemi çekirdeğine hepsi donanımmış gibi davranır. • Donanıma denk bir arayüz sağlar. • İşletim sistemi her biri kendi işlemcisinde kendi (sanal) belleğiyle çalışan çoklu süreç illüzyonunu oluşturur. • VMWare, Sun VirtualBox, QEMU Java Sanal Makinesi Sanallaştırma Meseleleri • Ev sahibi İS sayfalamasını sanal İS sayfalamasına nasıl entegre edilir? • Sanal İS veya ev sahibi İS aygıt sürücülerinin hangileri kullanılır? • Her çekirdek (core) belli bir sayıda sanal makine çalıştırabilir. Bunlar arası bellek paylaşımı nasıl olur? • Bazı yazılımlar CPU başına lisanslanmaktadır. Sanal makinelerde bu durum nasıl ele alınır? Dağıtık Sistemler • Bir iletişim ağıyla birbirine bağlanan gevşek bağlı işlemciler bütünüdür. • Bu sistemlerde işlemcilere düğüm, bilgisayar, makine veya sunucu da denmektedir. İşlemcinin konumuna site (alan) denir. • Genellikle sunucular farklı bir sitedeki istemci düğümün kullanmak istediği kaynaklara sahiptir. Dağıtık Sistemler Nesne Çok Sayıda İşlemci Çok Sayıda Bilgisayar Dağıtık Sistem Düğüm konfigürasyonu CPU CPU, RAM, ağ arayüzü Bütün bilgisayar Düğüm donanımı Hepsi paylaşımlı Disk vb. dışında paylaşımlı Düğüm başına bütün set Konum Aynı kart veya rak Aynı oda Dünya çapında olabilir Düğümlerarası iletişim Paylaşımlı RAM Birbirine bağlı ve atanmış Geleneksel ağlar İşletim sistemleri Bir ve paylaşımlı Çok sayıda, aynı Muhtemelen hepsi farklı Dosya sistemleri Bir ve paylaşımlı Bir ve paylaşımlı Her düğümün kendine ait Yönetim Bir kuruluş Bir kuruluş Çok sayıda kuruluş Üç farklı çoklu CPU sisteminin karşılaştırılması 29 Niye Kullanılır? • Uzak alanlarda dosya paylaşma ve yazdırma, dağıtık veritabanında bilgi işleme ve uzak kullanım için özelleştirilmiş donanım aygıtlarını kullanma olmak üzere kaynak paylaşımı • Yük paylaşımı veya iş göçü (migration) ile hesaplama hızını arttırma • Alandaki başarısızlığı tespit ve sistemi kurtarma, fonksiyon transferi ve çalışmayan alanı tekrar sisteme dahil etme şeklinde güvenilirliği arttırma • Bağımsız bir sistemin bütün yüksek seviye işlevleri dağıtık bir sistemi kapsayacak ölçüde genişletilebilir. • Bilgisayarlar geniş sistemlerin, çok sayıda küçük sisteme bölünmesiyle daha esnek hale gelecek şekilde küçültülebilir. Bu sayede daha iyi kullanıcı arayüzleri ve kolay bakım sağlanabilir. Aracı Yazılım (Middleware) • Aracı yazılım katmanı uzaklara yayılmış makinelerdeki süreç ve kullanıcıların tutarlı bir şekilde birlikte çalışmalarına imkan veren çeşitli veri yapıları ve işlemleri sağlamaktadır • Bir bakıma bir dağıtık sistemin işletim sistemi gibidir. • Şekilde bir dağıtık sistemde aracı yazılımın konumlandırılması gösterilmektedir. Doküman Tabanlı Aracı Yazılım • Internet ağı (WWW) devasa bir hiperbağlantılı dökümanlar bütünü olarak görülebilecek bir dağıtık sistemdir. • Temelde bir istemci-sunucu sistemidir. Doküman Tabanlı Aracı Yazılım Bir tarayıcı http://www.minix3.org/doc/faq.html sayfasına ulaşırken • Tarayıcı sitesinin www.minix3.org sitesinin IP adresini DNS’ ten ister. • DNS 130.37.20.20 karşılığını verir. • Tarayıcı 130.37.20.20 üzerindeki 80. bağlantı noktasına bir TCP bağlantısı yapar. • Ardından doc/faq.html dosyasını isteyen bir talep gönderir. • www.acm.org sunucusu doc/faq.html dosyasını gönderir. • TCP bağlantısı serbest bırakılır. • Tarayıcı doc/faq.html içindeki bütün metni gösterir. • Tarayıcı doc/faq.html içindeki bütün resimleri çeker ve gösterir. 33 Koordinasyon Tabanlı Aracı Yazılım • Linda, iletişim ve senkronizasyon için kullanılan bir sistemdir. • Bağımsız süreçler soyut bir sıralı ikili, üçlü.. uzayı aracılığıyla iletişime geçer. • Bir sıralı ikili, üçlü.. her biri ana dil taraşından desteklenen bazı türler için bir değer olan bir veya daha fazla alandan oluşan bir yapıdır. Figure 8-40. Three Linda tuples. İkilileri, Üçlüleri… (Tuple)Eşleştirme • Şablon ve tüple aynı sayıda alana sahipse • Karşılık gelen alanların türler aynıysa • Şablondaki her sabit veya değişken tuple alanıyla eşleşiyorsa • Bir eşleşme/uyuşma söz konusudur. Jini Apache River olarak da bilinen modüler birlikte çalışan hizmetler biçiminde dağıtık sistemlerin inşası için bir ağ arayüzüdür. Jini istemci ve sunucuları Linda tuple uzayında modellenen JavaSpaces kullanarak iletişime geçer ve senkronize olur. JavaSpace içinde tanımlanan metodlar: 1.Yazma: JavaSpace içine yeni bir girdi koyar. 2.Okuma: JavaSpace dışındaki bir şablona uyan bir girdiyi kopyalar. 3.Alma: Bir şablona uyan bir girdiyi kopyalar ve siler. 4.Bildirme: Eşleşen bir girdi yazıldığında çağırana bildirim yapar. Şebekeler (Grids) • Bir şebeke özel bir ağ veya Internet ile birbirine bağlı ve kullanıcılarına belli hizmetler sunan, geniş, coğrafik olarak ayrılmış ve genelde heterojen makineler koleksiyonudur. • Bir şebeke oluşturma ihtiyacı bir kuruluşun ihtiyaç duymadığı berimleme gücünü başka bir kuruluşun kullanımına verebilmesinden kaynaklanabilir. • Şebeke dünyasındaki popüler bir aracı yazılım, Globus araç takımıdır. (toolkit) Globus; bilgisayarları, dosyaları ve diğer kaynakları paylaştırarak dağıtık uygulamalar oluşturmak için bir çerçeve yapı (framework) sağlar. Hata Tespiti • Donanım hatasını tespit etmek güçtür. • Bir bağlantı hatasını tespit için kalp atışı protokolü kullanılabilir. • Birbirine bağlı A ve B alanları belli aralıklarda birbirlerine «Ben buradayım» mesajı gönderir. • Eğer A alanı bu mesajı almazsa diğer sitenin göçtüğünü veya mesajın kaybolduğunu kabul eder. • Bu durumda A alanı «Orada mısın» mesajı gönderir. Cevap gelmezse ya mesajı tekrarlar ya da B alanına giden başka bir yol dener. • Eğer hiçbir şekilde bir cevap alamazsa B alanı göçmüş, A ve B arası doğrudan veya dolaylı bağlantı kopmuş veya mesaj kaybolmuştur. A alanı hatanın tam olarak neden kaynaklandığını bilemez. Yeniden Ayarlama • A alanı bir hata olduğunu belirlediğinde sistemi yeniden ayarlamalıdır. • A ve B bağlantısı koptuysa sistemdeki bütün alanlara yayınlanmalıdır. • Bir alan göçtüyse, diğer bütün alanlara göçen sitenin sunduğu hizmetlerin artık kullanılamayacağı bildirilmelidir. • Bağlantı veya alan tekrar müsait olursa, bu bilgi bütün alanlara tekrar yayınlanmalıdır. Tasarım Meseleleri • Transparanlık: Dağıtık sistem kullanıcıya konvansiyonel ve merkezileşmiş bir sistem olarak görünmelidir. • Hata Toleransı: Dağıtık sistem başarısızlıkla karşılaştığında çalışmaya devam etmelidir. • Ölçeklenebilirlik: İhtiyaçlar arttığında sistem, artan talebi karşılamak üzere yeni kaynakların eklenmesini kolayca kabul etmelidir. • Hadoop açık kaynaklı programlama arayüzü ile (Google arama indeksine dayanan) dağıtık ortamlardaki geniş veri kümeleri işlenebilmektedir. • Kümeler: Tek bir sistem gibi davranan yarı otonom makineler koleksiyonudur.