KUDA: GPU Hızlandırılmış Ayrık Yarış Durumu Denetleyici

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "KUDA: GPU Hızlandırılmış Ayrık Yarış Durumu Denetleyici"

Transkript

1 KUDA: GPU Hızlandırılmış Ayrık Yarış Durumu Denetleyici Ü. Can Bekar 1, Tayfun Elmas 2, Semih Okur 3, Serdar Taşıran 1 1. Bilgisayar Mühendisliği Bölümü Koç Üniversitesi {ucbekar, 2. Bilgisayar Mühendisliği Bölümü University of California, Berkeley, USA elmas@cs.berkeley.edu 3. Bilgisayar Mühendisliği Bölümü University of Illinois at Urbana-Champaign, USA okur2@illinois.edu Özetçe Bu bildiride özgün bir çalışma zamanı doğrulama çerçevesini sunuyoruz. Yaklaşımımızdaki ana amaç, geleneksel yarış durumu denetleyicilerindeki işletim yüklerini ayırıp, bilgisayarlarımızda bulunan donanımsal olanakları kullanarak, halihazırdaki çalışma zamanına koşut çalışan, koşutlu doğrulama yapmaktır. Bu yüzden çerçevemizi çok çekirdekli işlemcilere (CPU) ve grafik işlemcisine (GPU) sahip kişisel bilgisayarlara herhangi bir donanım eklemesi gerekmeksizin gerçekleştirdik. Çalışmamızdaki ana yenilik, koşutzamanlı bir programın güvenilirlik özelliklerinin grafik işlemcideki iş parçacıklarında denetlenmesinin ilk olarak öne sürülmesi ve bunun için gerekli tekniklerin ve algoritmaların tasarlanmasıdır. Daha önce bu denetlemenin tamamı merkezi işlem ünitesi üzerinde gerçekleşmekteydi, ve denetleyicinin iş parçacıklarının denetlenen programın iş parçacıklarıyla aynı işlemci üzerinde koşması programın başarımını önemli ölçüde düşürmekteydi. Denetleyicilerdeki işletim yükünü ikiye ayırıyoruz: (i) gözlemleme ve (ii) denetleme yükleri. Detaylı inceleyeceğimiz bu yazılım çerçevesi, ayırdığımız iki işletim yükünü farklı işlemcilere paylaştırmaktadır. Sonuç olarak, denetlenen koşutzamanlı programın başarımı, yalnızca gözlemleme ve bu gözlemin öteki işlemciye aktarımından kaynaklanan işletim yüklerinden dolayı etkilenir. Bazı ek donanım destekleriyle gözlemleme yükünü hafifleten benzer çalışmalar da literatürde bulunmaktadır. Sunacağımız çerçevenin ön ürünü olan KUDA birimlerimizle yaptığımız deneylerimiz, farklı işlemcideki iş parçalarında koşut zamanda yarış durumlarını (data race) denetlemek, denetlenen koşutzamanlı program ile çok yakın zamanlı (birkaç milisaniye mertebesinde gecikmeyle) çalıştığını göstermektedir. Bu sonuç ile, çerçevemizin yarış durumlarını denetlemekten de öte, hatadan geri dönmek için kullanılabilmesinin mümkün olduğunu anlıyoruz. KUDA da henüz yarış durumlarına odaklandık, ancak ileride koşut zamanlı programların diğer koşut zaman hataları ve bellek hataları gibi farklı güvenilirlik özelliklerini de denetlemesini sağlayabiliriz. Çerçevemizde merkezi işlem ünitesinde çalışan koşut zamanlı programın gözlenmesi ile iş parçacıklarından toplanan çalışma izi bloklamayan bir veri yapısında biriktirilip grafik işlemcisine aktaran bir iş parçası çalıştırıp, çok sayıda görüntü işlemcisi çekirdeği kullanan koşut zamanlı denetleme birimlerimizde denetliyoruz. KUDA, koşutzamanlı çalışan 2 popüler denektaşı takımlarındaki tüm uygulamalarda yaşanmakta olan başarım kaybını (yalnızca bir denektaşı programı hariç tutulması kaydıyla) en az 3 kat azaltmaktadır. 1. Giriş yıl öncesine kadar belirli kullanım alanlarının dışında pek rastlanamayan koşutzamanlı programlar, donanım bazlı teknolojik ilerlemelerin fiziksel sınırlara ulaşması ve bilişim sektörünün süregelen taleplerini zorlamaya başlamasından kaynaklanan başarım problemlerine cevaben kısa sürede yaygınlaşmıştır. Günümüzde koşutzamanlı (concurrent) programlar artık her alanda karşımıza çıkmaktadır. Fakat koşutzamanlı programların uzun süre kısıtlı alanlarda (örneğin işletim sistemi çekirdekleri) kullanılıp uygulama programları pazarına çıkmamasının çok geçerli bir sebebi vardı. Koşutzamanlı çalışmaya özgü hatalardan arınmış koşutzamanlı programlar yazmak zordu. Bu hatalardan en çok karşımıza çıkanı yarış durumlarıdır (data race). Bazı çok özel durumlar hariç, genelde bütün yarış durumları, programlayıcının niyeti dışında oluşur. Bir programın iş parçacıkları (thread), çalıştığı işletim sisteminin zaman planı uygulayıcısının (scheduler) farklı çalışma zamanlarında farklı sıralamalar uygulamasından ötürü koşutzamanlı hatalar, sıralı programlardaki hataların aksine, tekrar ettirilip sebebi bulunsa dahi ayıklanması oldukça güç hatalardır. Koşutzamanlı programların güvenilirliğini doğrulamanın bir yolu yarış durumlarını dinamik denetlemektir. Dinamik denetleyiciler yalnızca çalışma zamanında oluşan hataları denetleyebilir. Yarış durumu, çalışma zamanında iki veya daha çok iş parçacığının tek bir bellek konumuna, en az bir yazma işlemi yapmaları ve bu işlemlerin sırasının hata oluşmayacak şekilde zamanlanmamış olmasından dolayı oluşur. Günümüzde yaygın olarak kullanılan, ticari dinamik yarış durumu denetleyicilerinin çalışmakta olan koşutzamanlı programların başarımına etkisinin 300 kat yavaşlamalara kadar erişmesi beklenmedik bir durum değildir. Bizim yaklaşımımızdaki ana amaç, geleneksel yarış durumu denetleyicilerindeki işletim yüklerini ikiye ayırıp, ana işlemcide çalışan programı gözlemlerken bilgisayarlarımızda bulunan grafik işlemcisinde (GPU veya GİB) yarış durumlarını denetlemektir. Bu amacın temelinde iki hedefimiz vardı: (i) denetlenen programın iş parçacıklarının başarımını asgari etkilemesi ve (ii) denetleme birimlerimizin denetlenen programla eş hızlarda çalışması, yani aradaki oluşan farkın tahammül edilebilir olması. İlk hedefimizin temelinde, öne sürdüğümüz yaklaşımımızın modern denetleyicilere nazaran daha verimli bir çerçeve olduğunu özel donanım desteği kullanmadan olduğunu göstermek; ikinci hedefin temelinde ise, çerçevemizin sadece yarış durumlarını denetlemekten de öte, hatadan geri dönme için kullanılabilmesinin mümkün olduğunu göstermiş olmaktır. Eğer ikinci hedefimiz hiç olmasaydı, toplanacak olan çalışma izinin birikmesine izin verip, program sonlandıktan sonra grafik işlemcisine

2 yollayabilirdik; yani ikinci hedefimizi tutturmak için yapmamız gereken bu çalışma izinin birikmesini beklemeden işleme alabilmektir. Çerçevemizde denetlenen program ve denetleme programları farklı işlemci ve iş parçalarında çalışmaktadır. İki program birbiriyle paylaşımlı bellek ve mesajlaşma ile haberleşmektedir. Denetlenecek program sunduğumuz programlama arayüzünü kullanarak dinamik olarak çerçevemize özel gözlemleme fonksiyonlarını çağırır. Bunun için program kodu Pin gibi araçlar kullanılarak çalışma sırasında dinamik olarak değiştirilir. Gözlemleme fonksiyonlarımız içinde çalışma izlerini oluşturan olayların iletişimini sağlayan fonksiyonlar bulunur. Dolayısıyla gözlemleme fonksiyonlarıyla donatılan iş parçacıkları aynı zamanda gözlemlenecek olayları bloklamayan (nonblocking) veri yapısına koymakla yükümlüdür. İşlenenecek olayların birikimini asgariye indirebilmek için bu çalışma izlerini bloklara bölüp, çerçeve dediğimiz sabit uzunluktaki parçalarda denetleme yapıyoruz. Bu çerçeveler sırayla grafik işlemcisine aktarılıp olabildiğince koşutlu olarak denetleyici birimlerde, birbirlerinden bağımsız olarak kullanılır. Çerçevelerin birbirlerinden bağımsız olarak denetlenmesi, denetlememizin doğruluğunun (tüm hataları yakalayabilmesi) çerçevelerin uzunluğuyla ters orantılı olarak etkilenmesi riskini doğurmaktadır. Ancak denemelerimizde kullandığımız uzunluktaki çerçevelerde denetleme doğruluğunun düşmediği görülmektedir. Böylece modern yarış denetleyicilerin aksine, denetleme ve gözlemleme işletim yüklerinin ayrık ve koşutlu olması, denetlenen programın başarımının artarken denetimin hatalara hassasiyetinden feragat edilmesine ihtiyaç duyulmadığı anlamına gelmektedir. Modern denetleme programları, geleneksel olanlara nazaran, oldukça karmaşık olabilir, ancak bu işlem yükü başka bir işlemciye yüklendiğinden denetlenen programın başarımı daha fazla etkilenmemiş olur. Bu konuda yapılabilecek önemli bir gözlem, gözlemleme ve iletişim işletim yüklerinin özel donanım desteğiyle beraber göz ardı edilebilir mertebelere indirilebileceğidir [1]. Gösterge olması açısından geleneksel Eraser [2] ile modern Goldilocks [3] algoritmalarını çerçevemize uyarladık. Şaşırtıcı olarak, şimdiye dek kullanıcıların sıralı olarak (sequential) olarak çalıştırdığı bu algoritmaların grafik işlemcilerde çalıştırılan koşutzamanlı varyasyonları eskiden olduğundan daha basit bir hal aldı. Bunun sebebi çerçevelerin birbirinden bağımsız olması, dolayısıyla her denetleyicinin birbiriyle haberleşmeye veya eşzamanlı çalışmasına ihtiyaç duymamasıydı. Her denetleyici birim işlediği çerçeveye ayırdığı belleği çerçeveyi denetledikten sonra geri kullandığından bellek işletimine ve karmaşık veri yapılarının paylaşılmasına gerek kalmamıştır. Bu çerçeveyi Kuda adını verdiğimiz bir araçla gerçekleştirdik. Kuda aracı açık kaynaklı olup bağlantısında herkesin kullanımına açıktır. Koşutzamanlı programları dinamik olarak gözlemek için Pin [4] kütüphanesini kullanıyoruz, gözleme fonksiyonlarımız birer Pin aracı olarak gerçekleştirilmiştir. Denetleme birimlerimiz ise CUDA [5] kütüphanesiyle NVIDIA CUDA-destekli grafik işlemcilerde çalışmaktadır. Deneylerimizde denetlediğimiz koşutzamanlı program olarak PARSEC [6] ve SPLASH-2 [7] denektaşı program takımlarını kullandık. Denetleyici olarak Eraser ve Goldilocks yarış durumu tespit algoritmalarını seçtik, çünkü Eraser denetleyicisi basit ancak kesin (precise) olmayan, Goldilocks ise tam aksine kesinlik sunan ancak karmaşık olan bir denetleyicidir. Deneylerimizde iki ayrı yaklaşımı daha karşılaştırdık: (i) geleneksel yolla, yani denetlenen programla aynı merkezi işlemcide ve iş parçacıklarında çalışan Eraser denetleyicisi ve (ii) çerçevemiz kapsamında farklı işlemcide çalışan Goldilocks denetleyicisi. 2. Çalışma zamanı gözlemlemedeki zorluklar Bu bölümün amacı çalışma zamanında durum denetleyicilerinin tasarımındaki, özellikle koşutzamandan (concurrency) kaynaklanan başlıca zorlukları göstermektir. Bu zorlukları en kolay şekilde gösterebilmek için öncelikle meşhur ve basit bir yarış durumu denetleyicisini tanıtacağız Eraser yarış durumu denetleyici algoritması Eraser yaygın kullanılan bir kilit kümesi (lockset) tabanlı dinamik yarış durumu denetleme algoritmasıdır. Bu bölümde anlatımı basitleştirmek için kilit kümelerinin elemanlarını okuma ve yazma diye ayırt etmeyeceğiz. Yarış durumu, iki veya daha çok iş parçacığının (thread) tek bir bellek konumuna, en az bir yazma işlemi olmak üzere ulaşmaları ve bu işlemlerin sırasının hata oluşmayacak şekilde zamanlanmamış olmasından dolayı oluşur. Eraser ise bu durumu denetleyebilmek için program süresince paylaşılan her değişken x için ortak bir kilit zorlamaktadır. Eraser algoritması çalışma zamanında paylaşılan her x değişkeninin korunuyor gözüktüğü tüm kilitleri LS(x) adında kilit kümesi ve ayrıca her t iş parçacığının o an içinde tutmakta olduğu kilitler için de LH(t) kilit kümesini tutar. Yani LH(t) kümeleri yalnızca t iş parçacığının bir kilidi açması veya kapamasıyla güncellenir. Algoritma, x değişkenini korumakta olan kilitlerin varlığını, herhangi bir t iş parçacığının x e erişiminde LH(t) LS(x) işleminin sonucunu LS(x) e eşitleyerek tutar. LS(x) x e ilk erişimden önce tanımsızdır ve denetlenmekte olan koşutzamanlı programın bir iş parçacığı x e ilk erişim yaptığında evrensel kilit kümesine eşit olacak şekilde ilklenir. LS(x) i boş kümeye eşitleyen bir erişim sonrasında yarış durumu tespit edilmiş olur Çalışma zamanı gözlemlemenin işletim yükleri Eraser algoritmasının uygulanmasında (i) çalışma izini oluşturan olayları, kaynak kodu veya makina kodu gözlem araçlarıyla gözlemlemek ve (ii) bu gözlemden toplanan olayların kilit kümesi veri yapılarını güncellemesini yapmak ve bu yapıları bazı özelliklere uyduğunu devamlı kontrol etmek gerekir (örneğin, LS(x) kümesi boş küme mi?). (i) işi iki şekilde uygulanabilmektedir, (a) olay oluştuğunda derhal Eraser fonksiyonlarının çağırılması ve ya (b) olayların oluştukça, daha sonra denetlenmek üzere geçici olarak bağlı listeye kaydedilmesi. Denetleyici uygulamaların başarımını etkileyen iki ana işletim yükünden bahsedebiliriz: (i) Gözlemleme yükü, yani çalışma olay takibi ve (b) ye özel bu olayların bağlı listeye kaydının toplam yükü. Eraser algoritmasında, her paylaşımlı bellek olayları (shared memory operation) ve eşzamanlı olaylarını gözlemlemek gerekir. Olayların sayısı ve turu arttıkça gözlemleme yükü artar, dolayısıyla olayların frekansı arttıkça olağan çalışmanın aksamasına ve olayların kendi başlarına az zaman almasına rağmen başarım kaybına sebep olur. 5. bölümdeki deneylerimizin sonuçları gösteriyor ki başlı başına

3 koşutzamanlı programı gözlemleme (denetleme yükü yokken) işletim yükü 1.6 dan 7.1 e kadar ek yük bindirebilmektedir. (ii) Denetleme yükü, yani algoritma bazlı veri yapılarının güncellenip kontrol edilmesinin toplam yükü. Çalışma zamanı denetleme algoritmaları genellikle çalışma izinin tutulması/işlenmesi için denetlenen programın iş parçacıkları arasında paylaşılan bazı veri yapıları kullanır. Eraser algoritmasında kullanılan yapı kilit kümeleriydi. Diğer algoritmalar ise: bir değişkene erişen son iş parçasına imleç tutabilir ve buna ek olarak her iş parçası tarafından kullanılmak üzere her kilit için sanal saat vektörü (vector clock) de tutabilir. Bu veri yapılarına yapılacak koşutzamanlı erişimler ve işlemler oldukça yüksek frekansta olabilir, dolayısıyla eniyilenmemiş bir veri yapısı farklı denektaşı programlarında oldukça fazla başarım farkına yol açabilir. Eraser için düşünürsek, denetleme yapacak iş parçalarının kilit kümelerine erişmesi için öteki iş parçacıklarıyla paylaşılmakta olan kilit veya kilitleri açması gerekir. Bu da uzun kritik bölümlere (bölünmeden çalışması gereken olaylar dizisi) sebebiyet verir ve programın başarımını ciddi şekilde düşürür. Sonuç olarak, Eraser gibi basit ve hafif çalışma yüküne sahip bir yarış durumu denetleme algoritması bile oldukça düşük çalışma hızı ve bellek boyutu başarımlarina sahiptir. Düşük başarıma sebep olacak yazılım çerçeveleri de hiçbir zaman son tüketicinin kullanacağı programlara uygulanamaz. Yarış durumlarının en belirgin özelliği eğer denetlenmezler ise tekrar açığa çıkması için aynı program, aynı ortamda milyonlarca defa tekrar calistirilsa dahi tekrar gozlemlenmeyebilir. Bu da bilgisayarlarının başındaki kullanıcılara sebepsizce kapanan programlar olarak yansımaktadır. Biz, denetlemeden kaynaklanan işletim yükünü düşürebilmek için, öncelikle denetleyici algoritmaların iş yükünü denetlenen programın iş parçacıklarından ayırıp başka iş parçacıklarında, hatta başka işlemcilerdeki iş parçacıklarına yüklüyoruz. Çerçevemizde işlemci olarak grafik işlemcisine ait yüzlerce çekirdeği kullanmaktayız. Bu orijinal düşünceye sahip çerçevemizi gerçekleştirirken grafik işlemcisinde çalışacak olan denetleme algoritmalarının kaynak kodunun şaşırtıcı olarak geleneksel uyarlamalarına göre oldukça basitleştiğini gördük. Son yıllarda yarış durumu denetleyicilerinin işletim yükünü düşürmek için çok sayıda oldukça başarılı girişimler oldu. Bu girişimler sanal makinelerde basarım adına kullanılan ara dillerini tam zamanında (just-in-time) derlenmeden önce denetlemekten [8,9], merkezi işlem ünitesinin basarım sayaçlarını gözlemleme için kullanmaya [10] ve çekirdek program çağrılarının örneklenmesine kadar [11] değişiklik ve orijinallik göstermektedir. Kazanılan basarım, denetlenen programlarda %1 yavaşlama gibi değerlere varabilmektedir. Ancak bu çalışmaların sonucunda yaşanan duyarlılık kayıpları, Şekil 1: Çerçevemizin bileşenleri yanlış ret hataları göz ardı edilmektedir. Koşutzamanlı programların gözetleme işletim yükünü düşürmek için de çok sayıda başarılı girişimler oldu, özelleştirilmiş donanım desteği kullanılarak, dinamik denetleme aracı kullanmaya gerek olmadan, yüksek başarımlı çalışma izi toplama yaklaşımını örnek verebiliriz [12]. Bizim çerçevemizde, henüz yaygın olmayan donanım destekleri kullanmamayı hedefledik. İleride işletim yükünü eniyilemek için böyle bir araştırma yönü düşünülebilir. 3. Yaklaşımımız 1: Genel Sistem Önceki bolümde anlatılan zorluklara binaen ana amacımız çalışma zamanı denetleme çerçevesi oluştururken denetlenecek programın başarımını asgari etkilenmesidir. Çerçevemizdeki anahtar tasarım ve orijinallik, denetleme algoritmasını fiziksel olarak ayrık bir işlemcide koşutzamanlı olarak çalıştırmamızdır. Kuda projesi kapsamında, denetleme algoritması yarış durumlarını denetler, ayrık işlemci ise grafik işlemcisidir. Merkezi işlemci biriminde koşmakta olan uygulama iş parçacıklarına yalnızca (kendi olaylarını) gözlemleme ve bu gözlemleri paylaşımlı bir veri yapısına iletme yüklerini ayrıca yüklüyoruz. Bu görevlerin nasıl paylaşıldığının detayını Şekil 1 de görebilirsiniz. Bu bölümde çalışma izinin kaydını, paylaşımlı veri yapısını ve grafik işlemcisiyle iletişiminde kullandığımız tekniklerimizi anlatacağız. Bir sonraki bolum ise yalnızca grafik işlemcisindeki çekirdek (kernel) programa odaklanacak Çalışma izinin gözlemlenmesi Çalışma izini gözlemlerken kullanacağımız tekniği seçerken, gerçekleşen olayların olabildiğince hızlı ve etkin bir şekilde veri yapısında dizilmesine önem verdik. Çalışma izinin çerçevelere bölünmesi ve veri yapısının dönüşsel bağlı liste kullanarak tutmamızın sebebi bir uçtan boş çerçevelerin doldurularak öteki uçtan grafik işlemcisine çerçeve yollanabilmesi, dolayısıyla çalışma izinin son derece etkin şekilde kullanılmasıydı. Deneylerimiz sonucunda çerçevenin tuttuğu olay sayısı, diğer bir deyişle çerçeve boyutu (FRAMESIZE), 1024 olay olarak eniyilenmiştir. Grafik işlemcisindeki denetleyici programın iş parçacıkları her çerçeveyi ayrı bir girdi olarak algılar ve çerçevelerin birbirlerinden bağımsız olarak işler. Denetleyici iş parçacıklarının farklı çerçeveleri denetlerken belleklerinde tuttuğu tek bilgi sonraki çerçevelerde aynı değişkenleri denetlememek için- denetlediği yarış durumlarına sebep olan değişkenlerdir. Çerçevenin denetlenmesi bitince, eski çerçevenin üstüne yeni çerçeve kopyalanır ve aynı iş parçacıkları tekrar denetlemeye başlar.

4 Çalışma izinin çerçevelere bölünmesi ve birbirinden bağımsız denetlenmesi tabiatıyla, teorik olarak bazı yarış durumlarının kaçırılmasına sebep olur. Bu çerçevede eğer yarış durumuna sebep olan olaylar birbirinden 1024 olaydan fazla ayrılmış ise yarış durumlarını denetleyemiyoruz. Ancak çerçeve boyutunun büyütülmesi ve bundan doğacak başarım kaybı ile daha güvenilir (sound) yarış durumu denetleyebiliriz. e 1 cerceve Kafa 2 i AtomicGetAndIncrement(cerceve.boyutu) 3 i F ramesize 4 cerceve = Kuyruk 5 cerceve cerceve.next 6 i AtomicGetAndIncrement(cerceve.boyutu) 7 8 cerceve[i] e Kafa 9 i = F ramesize 1 Kafa Kafa.next 1 2 Kafa 6= Kuyruk 3 cerceve Kuyruk cerceve 4 cerceve 5 Kuyruk 6 cerceve.boyutu 0 7 Kuyruk cerceve.next Kod parçası 1 Çerçevemiz bu mühendislik tercihini kullanıcının ayarlayabilmesine olanak sağlamaktadır. Bu bildiri kapsamında henüz çerçeveleme tekniğinden dolayı kaçırılan yarış durumlarının analizini yapmadık, yapılan çalışmalarımız yalnızca çerçevemizin başarım artırımı kapsamında elverişliliğini göstermek adınaydı. Keza, konu üzerinde çalışan araştırmacıların çalışmalarında sunulan deneyler gösteriyor ki, koşut zamandan kaynaklanan hataların çoğu az sayıdaki iş parçasının çalışmalarının çok kısa bir parçasında oluşmaktadır [13]. Şekil 2 de çalışma izinin dönüşsel bağlı listede nasıl tutulduğunu görebilirsiniz. Bu bağlı listede her FRAMESIZE adetinde olayın farklı çerçevede tutulabildiği sabit sayıda çerçeve vardır. Aşağıda anlatıldığı gibi, dönüşsel bağlı liste veri yapısı çalışma izinin hızlı ve etkin biçimde kullanılmasını sağlar. Kod parçası 1 de olayların çerçevelere doldurulması (OlayKaydı) ve dolu çerçevelerin işlenmesini Şekil 2: Çerçeve listesinde kullanılan veri yapısı detayları (ÇerçeveDenetle) anlatan yalancı kodları gösteriyor. OlayKaydı denetlenen programın iş parçacıkları tarafından, ÇerçeveDenetle işe bu iş için yaratılmış ayrı bir iş parçacığı tarafından, merkezi işlemcide yürütülür. Çerçeve listesi bloklamayan algoritmalar ve birkaç bölünmez yönerge (instruction) ile kullanılır; yani iş parçacıklarının erişmesi veya çalışma izinin grafik işlemcisine yollanması için özellikle kilit açmalarına gerek yoktur. Listenin kullanımı boyunca iki adet veri imleci (pointer) tutuyoruz: Kafa ve Kuyruk imleçleri. Dönüşsel bağlı listede çalıştıklarından dolayı Kafa ve Kuyruk değerleri her türlü (liste için ayrılan) bellek değerlerine denk gelebilir; Kafa ve Kuyruk aynı yönde ilerletilir. Şekil 2 de Kafa nın sağından Kuyruk a kadar, boş çerçeveler vardır (beyaz renkli). Kafa nın bulunduğu çerçeve işe o anda doldurulmakta, Kuyruk ise boşaltılacak olan çerçeveyi temsil eder. Gri çerçeveler dolmuştur ve GİB e (Grafik İşlem Birimi) gönderilmek için Kuyruk un Kafa ya yetişmesini beklerler. Çerçeve listesi ilk oluşturulduğunda Kafa ve Kuyruk aynı çerçeveyi gösterir. Çerçeve tamamen dolduğunda Kafa bir sonraki boş çerçeveye ilerletilir, çerçeve GİB e gönderildiğinde Kuyruk bir sonraki dolu (veya dolmakta olan) çerçeveye ilerletilir. Kafa ve Kuyruk çerçeve okumaları sırasında oluşacak yarış durumlarını önlemek için Kafa ve Kuyruk imleçlerini bölünmez yönergelerle kullanıyoruz Olayların Kaydedilmesi (Kod parçası 1: OlayKaydı) Her çerçeve sabit bir boyuta sahiptir ve bu sayıda olay tutmaktadır. Bir uygulama iş parçası olay kaydetmek istediğinde, listeyi Kafa dan başlayarak tarar (1-7 numaralı satırlar). Bölünmesiz (atomic) yönergelerle olmak üzere, çerçevedeki olay sayısını okunur ve bu sayı bir arttırılır (2-6 numaralı satırlar). Eğer okunan olay sayısı çerçeve boyutundan (FRAMESIZE) küçükse, kayıt edilecek olay çerçevenin o indeksine kaydedilir (8. satır). Eğer o sayı çerçeve boyutuna eşit veya büyükse (eğer büyükse Kafa ilerletilemeden birden fazla iş parçacığı aynı ve dolu çerçeveye yazmak istemiş demektir), kayıt için çalışan iş parçacığı bir sonraki çerçeveye bakar (3-7 numaralı satırlar). İş parçası Kafa çerçevesinin son indeksine olay kaydetmiş ise Kafa yı ilerletir (9. satır). Eğer bir iş parçacığı bir sonraki çerçeveye kayıt için çalışırken bu çerçevenin Kuyruk çerçevesi olduğunu görürse, tekrar Kafa'dan taramaya başlar (1. satır). Bu duruma aç kalma (starvation) durumu diyoruz. Deneylerimizde 64 adet çerçeveyle oluşturulan listede hiçbir aç kalma durumu gözlemlemedik, bu da çerçevelerin denetiminin, olay kaydı hızından ortalama olarak daha hızlı olduğunu gösteriyor Çerçeve İşlenmesi (Kod parçası 1: ÇerçeveDenetle) Çerçeveleri Kuyruk tan kopyalayıp grafik işlemcisine yollamak için oluşturulan bir iş parçası olduğundan

5 bahsetmiştik. Kuyruk imleci önceki bölümde bahsedildiği gibi, çerçeve listesinde ilk dolmuş olan çerçeveyi gösterir. Yani grafik işlemcisine gönderilecek ilk çerçeve Kuyruk çerçevesidir (Şekil 2 de en sağdaki çerçeve). Bunu etkin şekilde yapması için, iş parçası, denetlenen program sonlanmadığı (sonlandıysa bile Kuyruk un Kafa yı yakalamadığı) sürece dönen bir döngü içindedir. Her döngüde ilk olarak Kafa ve Kuyruk un farklı çerçeveye bakmasını (listede dolu çerçeve oluşmasını) bekler (2. satır). Bu durum oluştuğunda, Kuyruk çerçevesi GİB e yollanır. (3. satır). Bölüm 4.1 de 4-5 ve 8-9 numaralı satırların detayını ve GİB deki çalışan denetleme algoritmasını Kod parçası 2 de bulabilirsiniz. GİB deki çekirdek program asenkron olduğu için, iş parçası bu süre içinde gönderilen çerçeveyi boşaltır (6. satır) ve Kuyruk u bir ilerletir (7. satır). Çekirdek programlar sonlanıncaya kadar bekleyip (8. satır), denetleme sonuçlarını (Kuda kapsamında yarış durumlarını) GİB (Grafik İşlem Birimi) belleğinden MİB (Merkezi İşlem Birimi) belleğine kopyalar (9. satır). Çerçevemiz, yapılanışı değiştirilerek, yarış durumlarının görüldüğü anda veya denetlenen programın sonlanması durumunda hata bildirimi yapabilir. 4. Yaklaşımımız 2: Çerçevelerin GİB de denetlenmesi 3. bölümde çerçevemizin MİB de koşan parçalarına odaklandık, bu bölümde ise GİB de çalışan çekirdek programları ve koşutzamanlı yarış zamanı denetim algoritmalarına odaklanacağız. Öncelikle kısaca GİB programlama konseptini ve bu alanda karşılaşılan zorlukları anlatacağız. Ardından Eraser ve Goldilocks algoritmalarının bu konsepte nasıl uydurduğumuzu anlatacağız CUDA kullanarak GİB programlama CUDA modeli programlamacıya, C programlama dilinin bir uzantısı olan CUDA programlarını derleyen bir derleyici ve C programlarından çağırılabilecek uygulama programlama arabirimi sağlamaktadır. Ayrıca fiziksel katmanının yazılım katmanından ayrı, etkin bir şekilde yürütülmesini sağlar, böylece aynı CUDA programı farklı CUDA grafik işlemcilerinde sorunsuzca çalışabilir. GİB de koşacak her kod parçası, C/C++ dilinde yazılmış ve MİB de koşan bir programdan çağrılan bir çekirdek program çağrısı aracılığıyla koşturulur. Yani çerçevemizde kullandığımız denetleme algoritmaları birer CUDA çekirdek programı olarak yazılmıştır ve bu programlar da Kod parçası 1 deki ÇerçeveDenetle fonksiyonu içinden çağırılır. MİB ve GİB iş parçacıkları fiziksel olarak izoledir, eşzamanlama yalnızca bir iş parçacığının çekirdek programları çağırıp, denetlenecek çerçeveyi iletmesi ve ardından fark edilen yarış durumlarını MİB e kopyalaması sırasında olur, bunun dışında iki işlemci asenkron çalışmaktadır. Denetlenen program ise hiç bir şekilde GİB deki çekirdek programlar ile eşzamanlama ihtiyacı duymaz. Asenkron çalışabilmek için denetlenecek çerçevenin GİB e kopyalanabilmesi gerekir, bunun için de program başlatılmadan önce GİB de özel bellek konumu ayrılmaktadır. Çekirdek programlarda oluşan ara sonuçları ve sonuçları da tutabilmek için ayrıca fazladan bellek ayrılır. Bu bellek konumlarını gösteren imleçler çekirdek program çağrılarında GİB e parametre olarak iletilir. MİB de koşan, çerçeve iletişimi ve çekirdek program çağrılarından sorumlu olan iş parçacığı aşağıdaki adımları izlerken CUDA uygulama programlama arabirimi çağrılarını kullanır: Denetlenecek çerçevenin GİB e kopyalanması Çekirdek programların gerekli parametreler ile çağrılması (SIMD (tek program-çoklu veri) stili ile çalışmaktadır) Çekirdek programların sonucunu MİB e kopyalamak için eşzamanlama GİB programlamadaki zorluk, işlenecek verilerin yukarıda da anlatıldığı gibi MİB den aktarılması ve verilerin geri alımı sırasındaki eşzamanlamadan ötürü kaybedilen başarımın koşutzamandan dolayı telafi edilebilir olup olmamasıdır. Denetleme algoritmalarımızda her iş parçası kendine düşen olayda geçen değişken üzerinde yarış durumu denetimi yapmaktadır. Yani kilit kümeleri gibi denetleme veri yapıları her iş parçasına yerel olarak, paylaşımsız yaratılıp kullanılır. Bu da çekirdek programların birbiriyle asenkron çalışmasını sağlar. Çekirdek programları bağlantısından inceleyebilirsiniz. Ancak GİB programlamadaki tek zorluk zaman değildir; oldukça kısıtlı olabilen bellek boyutları, çekirdek programların paylaştığı çerçeve sadece okunduğundan geniş paylaşımlı belleğe konulabilmektedir. Ancak denetleme sırasında kullanılacak denetleme veri yapıları için de önceden yer ayırmak gerektiğinden, bu veri yapılarını sınırlandırdık. Eraser ve Goldilocks programlarında bu veri yapılarını bloom filtreleri ile gösteriyoruz. Bloom filtre veri yapıları, bellek konumu kümelerini sabit boyuttaki bit kümelerinde tutabilir. Tek bir denetleme için gereken veriler sınırlı sayıda, yerel olarak ve geçici şekilde kullanıldığından dinamik şekilde yaratılan diğer objelerin bellek boyutunu zorlaması söz konusu olmamaktadır. 5. Deneyin Değerlendirilmesi Çerçevemizin elverişliliğini göstermek için iki hedefi tutturduğumuzu doğrulamamız gerekiyordu: Gözlemleme ve denetleme yüklerini iki ayrı işlemci birimine ayırmak, eklenen çalışma izi tutma ve çalışma izinin iletişimi yüklerine rağmen, denetleyici programları hızlandırabilir. GİB de kosan denetleyici programın MİB de kosan denetlenen program ile çok yakın zamanlı (birkaç milisaniye mertebesinde gecikmeyle) çalışabilir. Başka bir deyişle, program sonlandıktan kısa bir süre içinde denetleyici program da sonlanabilir. Çerçevemizin bu hedeflere ulaştığını gösterebilmek için ön ürün olarak KUDA yi yarattık ve iki koşutzamanlı çalışan denektaşı takımıyla sınadık. Toparlamak gerekirse, KUDA da iki ana parça bulunmaktadır: 1. Koşutzamanlı program iş parçacıklarının olaylarının işletimini çerçevelerle sağlayan ve bu çerçevelerin GİB de yarış durumlarını denetleyen çekirdek programdan oluşan işletim içi bağlamalı program. Biz çekirdek programlarını yazmak ve çağırmak için CUDA 4.0 kütüphanesini [5] kullanıyoruz. Deneylerimizde GİB belleği olarak genel paylaşımlı bellek modelini kullansak bile, çerçevemizi sabit veya doku bellek modellerini kullanacak şekilde eniyilememiz mümkün. Çünkü denetlenen çerçevelerin yüzlerce iş parçacığı tarafından yalnızca okunması buna imkan kılıyor. 2. Denetlenecek olan koşutzamanlı programdaki paylaşımlı bellek okuma/yazma, iş parçacığı yaratma/birleştirme ve iş parçacığı eş zamanlama

6 Benchmark Description Lines #Threads #Events #Frames PARSEC blackscholes (L) Black-Scholes partial di erential equations M 224K bodytrack (L) tracking human body with multiple cameras M 2.6M canneal (L) cache-aware simulated annealing M 449K dedup (M) data stream compression M 1.9M fluidanimate (L) simulating incompressible fluid M 2.3M raytrace (S) optimized ray tracing >6K 9 332M 316K streamcluster (S) online clustering problem M 166K swaptions (L) monte carlo simulation M 2.6M x264 (M) H.264/AVC video encoder M 1.4M SPLASH-2 barnes Barnes-Hut for N-body problem M 2.9M cholesky blocked sparse cholesky factorization M 254K fmm adaptive fast multipole for N-body problem M 1.5M fft complex 1D FFT M 556K lu blocked LU decomposition M 1M ocean large-scale ocean simulation M 510M radix integer radix sort M 287K raytrace optimized ray tracing M 316K water-nsquared water simulation w/out spatial data structure M 7.2M water-spatial water simulation with spatial data structure M 701K Tablo 1: Denektaşları, açıklamaları, iş parçacık sayıları ve ortalama olay/çerçeve sayıları Table gibi 1. Description POSİX iş parçacık of our standardına benchmarks, (pthreads and number of events and frames generated Her çerçevede 128 GIB iş parçacığı çağırılır. at a typical kütüphanesi) run. dahil Forçağrıların the PARSEC ve genel olayların benchmarks the Her çerçevede input size 128 is sıralı given olay dizisi in parantheses yollanır (her iş dinamik olarak gözlemlenmesini sağlayan bir Pin ((S):simsmall, (M):simmedium, (L):simlarge), parçacığına and for bir the çerçeve SPLASH-2 düşüyor) benchmarks aracı [4]. we used the default inputs except that some values are taken from 6. Sonuçlar Table 1 of [1] Deney Düzeneği Tablo 2 deki deney sonuçları gösteriyor ki koşutzamanlı bir aprototypetoolcalledkuda and applied Kuda programın onpin aaracıyla collection boş gözlemleme of multithreaded fonksiyonlarının Denektaşları benchmarks. Kuda consists of two parts: çağrılması dahi 1.6 ile 7.1 kat arasında başarım kaybına sebep Deneylerimizde KUDA yı 2 denektaşı takımıyla sınadık, olmaktadır. PARSEÇ 1. Adynamiclibrarycontainingthecorefunctionalityincludingtheroutines [6] ve SPLASH-2 [7]. Bu denektaşları C/C++ Kendi yaklaşımımız ile geleneksel yaklaşımlar arasındaki dilinde, pthread modelini kullanarak koşutzamanlı çalışan başarım farkını karşılaştırabilmek için Eraser algoritmasının programlardır. for recording Ortalama bir events, çalışmada bu managing denektaşları birkaç event frames, yanında saat andvektörü running tabanlı the iki modern race detection yarış durumu yüz milyon olay, dolayısıyla yüz binlerce çerçeve yaratılmakta denetleyicisini, DJIT+ [14] ve Fasttrack [15], Pin aracıyla kernels on the GPU. We use the CUDA 4.0 library [8] to write and call kernels ve her dolu çerçeve de grafik işlemcisinde denetlenmektedir. çalışacak şekilde C/C++ dilinde geliştirdik. Bu geliştirilen Daha detaylı for analyzing bilgi için Tablo frames 1 e bakınız. and to manage the destek GPUprogramlar resources orijinal (e.g., bildirilerdeki transferring kadar eniyilenmemiş data olmakla beraber, göreceli başarımları hakkında fikir to/from Donanım the GPU device memory). While verebilmektedir. our experiments are performed using the global memory, our system can use constant and texture memory. The fact that event frames are only read by the kernel enables us to make use of the constant and texture memory, which are cached for fast read-only access. 2. APin[6]tooltodynamicallyinstrumentx86binariesinordertocallbackthe routines in our dynamic library on certain events (shared memory read/write, thread creation/join, and inter-thread synchronization). Our Pin tool supports multithreaded programs written using the pthreads library (for thread creation and join, and synchronization primitives including mutex and readers/writer locks). Deneylerimizi HP xw9300 model iş istasyonunda, Ubuntu Linux bit çekirdekli işletim sisteminde gerçekleştirdik. MİB olarak çift çekirdekli, 2600 MHz saat frekanslı, 128 KB L1, 1 MB L2 on bellekli, 400 MHz de çalışan 8 GB bellekli AMD Opteron dur. GİB olarak ise Fermi uyumlu GeForce GTX 465 ekran kartını kullandık. Bu grafik işlemcisinde 1.21 GHz saat frekanslı, 1.23 GB bellekli 352 adet CUDA çekirdeği bulunmaktadır. Bu da iki işlemci arasında 1.4 GB/sn., grafik işlemcisi içinde ise 71.3 GB/sn. bellek bant genişliğine denk gelmektedir Yapılanış Farklı yapılanışlarda gözlemlediğimiz yüzlerce denektaşı koşusunda şu değerlerin KUDA nın başarımını en üst noktaya çıkardığı kanaatine vardık: 5.1 Çerçeve Experiments boyutu (FRAMESIZE): 1024 olay Çerçeve sayısı: 8192 çerçeve MİB deki bellek izdüşümü: 8192 çerçeve * 1024 olay * 8 bayt (her olay) = 64 MB Yaptığımız destekleyici deneylerde DJIT+ ve Fasttrack denetleyicilerinin başarımı Eraser denetleyicisinin başarımından oldukça düşüktü. Dolayısıyla Eraser denetleyicisi, geleneksel yarış durumu denetleyicileri içinde en basiti olmakla beraber göreceli olarak daha hızlı çalışan bir denetleyicidir. Ancak Eraser denetleyicisinin en az 31.4 kat başarım kaybına yol açtığını unutmamak gerekir. Sonuç olarak, geleneksel yarış durumu denetleyicilerinin birkaç yüz kat başarım yavaşlattıklarını gözlemledik. Diğer denetleyicilerin avantajı ise Eraser algoritmasına göre daha güvenilir çalışmalarıdır. Örneğin Fasttrack denetleyicisinde, Eraser denetleyicisinin aksine yanlış kabul hatası (false positive error) oluşmaz. Goldilocks ve Fasttrack yarış durumu denetleyicileri eksiksizdir, ne yanlış kabul ne de yanlış ret hatası verir. KUDA da geliştirdiğimiz denetleyici çekirdek programları iki tanedir: Eraser ve Goldilocks algoritmaları. Deneylerimizde Eraser çekirdek programıyla koşan KUDA, Goldilocks gibi karmaşık bir denetleyici programıyla koşan Benchmarks. We applied our tool Kuda on a collection of multithreaded programs from PARSEC [2] and SPLASH-2 [11] benchmark suites. The names, brief descriptions, sizes (lines of code) of these programs are listed in Table 1. The table also gives, for each benchmark, the number of threads, events, and frames generated in a representative execution of the benchmark. Notice that, in a typical execution, our benchmarks generate a few hundreds of millions of events and hundreds of thousands of frames, each of which is checked on the GPU. KUDA dan yalnızca biraz daha yüksek başarıma sahiptir. KUDA nın iki farklı versiyonunda da denetleme programları,

7 13 Benchmark Uninstr. Only Instrumented Eraser on CPU Only with Events Goldilocks on GPU Runtime Runtime Slowdown Runtime Slowdown Runtime Slowdown Runtime Slowdown PARSEC blackscholes X X X X bodytrack X X X X canneal X X X X dedup X X X X fluidanimate X X X X raytrace X >30min >123.7X X X streamcluster X X X X swaptions X X X X x X X X X SPLASH-2 barnes X X X X cholesky X X X X fmm X X X X fft X X X X lu X X X X ocean X X X X radix X X X X raytrace X >30min >122.2X X X water-nsquared X X X X water-spatial X X X X Tablo 2: Deneylerimizin sonuçları. Yürütüm süreleri saniye cinsindendir. Table 2. Results from our experiments. Running times are given in seconds. denetlenen programın sonlanmasından ortalama 2.5 milisaniye sonra sonlanmaktadır. Tekrar hatırlatmak gerekir ki, KUDA da sabit sayıda çerçeve vardır (8192), çerçeveler kullanıldıkça yeni çerçeve yaratılması yerine eski çerçeveler geri kullanılır. Bu durum ve iki işlemcinin asenkron şekilde yalnızca 2.5 milisaniye farkla programın sonuna gelmelerinden, iki ayrı çalışma zamanının birbirine çok yakın olduğunu, kısacası GİB in MİB den arkada kalmadığını gösteriyor. Tablo 2 deki sonuçlar açıkça gösteriyor ki, koşutzamanlı bir programın güvenilirlik özelliklerinin grafik işlemcideki iş parçacıklarında denetlenmesi, geleneksel çalışma zamanı doğrulama tekniklerinin başarımını çarpıcı olarak arttırmaktadır. MİB de yarış durumu denetleme ile GİB de bizim çerçevemizle yarış durumu denetleme arasında en kötü 3.3, en iyi 14.7 kat başarım artımı gözlemledik. Denektaşlarından yalnızca streamcluster programının MİB de yarış durumu denetlemek GİB de denetlemekten daha hızlı oldu, bunun nedeni ise denektaşının yüzbinlerce bariyer eşzamanlama mekanizması kullanmasıdır. Raytrace denektaşlarının ise MİB deki yarış durumu denetlemeleri yarım saatten daha fazla sürdüğünden dolayı yarıda kaldı; ancak bu denektaşlarının sonlanmasına izin verseydik kat hızlanma gözlemlemiş oluyorduk. Son olarak, Only with Events ile Goldilocks on GPU sütunlarındaki oldukça düşük farka dikkat etmeliyiz. Bu farktaki düşüklük bize, programın gözlemleme, olay kaydı, çerçeve listesinin GİB e gönderilmesinin çerçevemizdeki zamanın çoğunu aldığını göstermiş olmaktadır. Aradaki başarım oranı en fazla blackscholes denektaşındadır, o da yalnızca 5.2 Results 1.4 tur. Olayların (yazılımsal) kaydının bu kadar yavaş olmasına rağmen GİB de koşan denetleyicinin ön ürün olmasına rağmen yalnızca %40 yavaşlamaya sebep olması, ilerideki araştırmalarımız için son derece cesaretlendiricidir. Araştırmamıza dair daha detaylı bilgiyi İngilizce teknik raporumuzda [16] bulabilirsiniz. 7. Kaynakça Hardware. We performed our experiments on a HP xw9300 Workstation running Ubuntu Linux bit kernel. Our machine has two (single-core) AMD Opteron processors with 2600 MHz clock frequency, 128 KB L1 cache, 1 MB L2 cache, and 8 GB memory (400 MHz). We used a GeForce GTX 465 GPU card with Fermi chipset. Our card provides 352 cores (11 processors with 32 cores each) with 1.21GHz clock rate, 1.23 GB of memory space with 1.4 GB/sec host-to-device memory bandwidth and 71.3 GB/sec in-device memory bandwidth. Configuration parameters. For the experiments, we chose the following parameters that gave the best results in terms of runtime and memory overhead. We selected the event frame size (FrameSize) tobe1024 events. We initialize the cyclic list in Fig. 2 with 2048 frames. Thus, our system requires only 2048 frames * 1024 events (each frame) * 8 bytes (each event) = 16 MBytes of memory space to store the events for the CPU. We run 128 GPU threads over each event frame. In order to get the maximum benefit from the GPU device s concurrent computing functionality, we collect and send to the GPU 128 consecutive event frames at a time. In this way we aim to utilize the high parallelism on the GPU to analyze multiple frames simultaneously. [1] Poletti Francesco, Poggiali Antonio ve Paul Marchal, Flexible hardware/software support for message passing on a distributed shared memory architecture, DATE, Washington, DC, USA, 2005, s [2] Stefan Savage, Michael Burrows, Greg Nelson, Patrick Sobalvarro ve Thomas Anderson, Eraser: a dynamic data race detector for multithreaded programs, ACM Trans. Comput. Syst., vol. 15, no. 4, s , [3] Tayfun Elmas, Shaz Qadeer ve Serdar Tasiran, Goldilocks: a race ve transaction-aware java runtime, PLDI, 2007, s [4] Chi-Keung Luk, Robert Cohn, Robert Muth, Harish Patil, Artur Klauser, Geoff Lowney, Steven Wallace, Vijay Janapa Reddi ve Kim Hazelwood, Pin: building customized program analysis tools with dynamic instrumentation, PLDI, 2005, s [5] NVIDIA Corporation, NVIDIA CUDA Programming Guide v4.0, NVIDIA Corporation, [6] Christian Bienia, Sanjeev Kumar, Jaswinder Pal Singh ve Kai Li, The parsec benchmark suite: Characterization ve architectural implications, Tech. Rep. TR , Princeton University, Ocak [7] Steven Cameron Woo, Moriyoshi Ohara, Evan Torrie, Jaswinder Pal Singh ve Anoop Gupta, The splash-2 programs: characterization and methodological considerations, ISCA, 1995, s [8] Christoph von Praun ve Thomas R. Gross, Object race detection, OOPSLA, New York, NY, USA, 2001, s [9] Yuan Yu, Tom Rodeheffer ve Wei Chen, Racetrack: efficient detection of data race conditions via adaptive tracking, SOSP, 2005, s [10] Tianwei Sheng, Neil Vachharajani, Stephane Eranian, Robert Hundt, Wenguang Chen ve Weimin Zheng, Racez: a lightweight and noninvasive race detection tool Table 2 gives the runtime measurements for several configurations we run for each benchmark. The column Uninstr. lists the running time of the benchmark without any instrumentation. For other columns, we report on both the running time of the program and the slowdown in the execution over the uninstrumented runtime. The running times for all columns are given in seconds. Whencomputingthe slowdown for the columns Eraser on CPU, Only with Events and Goldilocks on GPU, we subtract the instrumentation cost (i.e., Only Instrumented - Uninstr. ) from the runtime before dividing it to the running time of Uninstr.

8 for production applications, Proceedings of the 33rd International Conference on Software Engineering, New York, NY, USA, 2011, ICSE '11, s , ACM. [11] John Erickson, Madanlal Musuvathi, Sebastian Burckhardt ve Kirk Olynyk, Effective data-race detection for the kernel, Proceedings of the 9th USENIX conference on Operating systems design and implementation, Berkeley, CA, USA, 2010, OSDI'10, s. 1-16, USENIX Association. [12] Shimin Chen, Phillip B. Gibbons, Michael Kozuch ve Todd C. Mowry, Log-based architectures: using multicore to help software behave correctly, SIGOPS Oper. Syst. Rev., vol. 45, s , Şubat [13] Madanlal Musuvathi, Shaz Qadeer, Thomas Ball, Gerard Basler, Piramanayagam Arumuga Nainar ve Iulian Neamtiu, Finding and reproducing heisenbugs in concurrent programs, OSDI, 2008, s [14] Eli Pozniansky ve Assaf Schuster, Multirace: Efficient on-the-fly data race detection in multithreaded c++ programs, Concurr. Comput. : Pract. Exper., vol. 19, no. 3, s , [15] Cormac Flanagan ve Stephen N. Freund, Fasttrack: efficient and precise dynamic race detection, PLDI, 2009, s [16] Tayfun Elmas, Semih Okur ve Serdar Tasiran, Rethinking runtime verification on hundreds of cores: Challenges and opportunities, Tech. Rep. UCB/EECS , EECS Department, University of California, Berkeley, Jun 2011.

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu bulunmaktadır; 1. Performans: İşletim sistemi, makine

Detaylı

İşletim Sistemlerine Giriş

İşletim Sistemlerine Giriş İşletim Sistemlerine Giriş Süreçler ve İş Parçacıkları(Thread) İşletim Sistemlerine Giriş - Ders03 1 Süreç -Tüm modern bilgisayarlarda bir çok iş aynı anda yapılabilir. *kullanıcı programları çalışır *disk

Detaylı

PARALEL HESAPLAMA ÇAĞRI GİDER ENES BİLGİN

PARALEL HESAPLAMA ÇAĞRI GİDER ENES BİLGİN PARALEL HESAPLAMA ÇAĞRI GİDER 13011016 ENES BİLGİN - 13011004 Paralel Hesaplama Nedir? Paralel Hesaplamanın Avantajları Paralel Hesaplamanın Kullanım Alanları Paralel Hesaplama Yöntemleri, Donanım ve Yazılım

Detaylı

BM-311 Bilgisayar Mimarisi. Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

BM-311 Bilgisayar Mimarisi. Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü BM-311 Bilgisayar Mimarisi Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Konular Bilgisayar Bileşenleri Bilgisayarın Fonksiyonu Instruction Cycle Kesmeler (Interrupt lar) Bus

Detaylı

İşletim Sistemi. BTEP205 - İşletim Sistemleri

İşletim Sistemi. BTEP205 - İşletim Sistemleri İşletim Sistemi 2 İşletim sistemi (Operating System-OS), bilgisayar kullanıcısı ile bilgisayarı oluşturan donanım arasındaki iletişimi sağlayan ve uygulama programlarını çalıştırmaktan sorumlu olan sistem

Detaylı

İŞLETİM SİSTEMLERİNE GİRİŞ - 2. Sistem, sistem kaynaklarını belli bir hiyerarşi içinde kullanıcının hizmetine

İŞLETİM SİSTEMLERİNE GİRİŞ - 2. Sistem, sistem kaynaklarını belli bir hiyerarşi içinde kullanıcının hizmetine İŞLETİM SİSTEMLERİNE GİRİŞ - 2 Kaynakların Paylaşımı (Resource Sharing) Sistem, sistem kaynaklarını belli bir hiyerarşi içinde kullanıcının hizmetine sunar. Bir işletim sisteminde paylaşılan kaynaklar

Detaylı

BM-311 Bilgisayar Mimarisi

BM-311 Bilgisayar Mimarisi 1 BM-311 Bilgisayar Mimarisi Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Konular Bilgisayar Bileşenleri Bilgisayarın Fonksiyonu Instruction Cycle Kesmeler (Interrupt lar)

Detaylı

İşletim Sistemleri (Operating Systems)

İşletim Sistemleri (Operating Systems) İşletim Sistemleri (Operating Systems) 1 İşletim Sistemleri (Operating Systems) Genel bilgiler Ders kitabı: Tanenbaum & Bo, Modern Operating Systems:4th ed., Prentice-Hall, Inc. 2013 Operating System Concepts,

Detaylı

İŞ İSTASYONU SEÇİM REHBERİ

İŞ İSTASYONU SEÇİM REHBERİ İŞ İSTASYONU SEÇİM REHBERİ Tasarım programları yapıları gereği çalışırken kompleks hesaplamalar yaparak ekrana en doğru ve gerçekçi görüntüyü getirmeye çalışır. Bu sebeple bilgisayar seçimi çalışma performansınızı

Detaylı

İşletim Sistemlerine Giriş

İşletim Sistemlerine Giriş İşletim Sistemlerine Giriş İşletim Sistemleri ve Donanım İşletim Sistemlerine Giriş/ Ders01 1 İşletim Sistemi? Yazılım olmadan bir bilgisayar METAL yığınıdır. Yazılım bilgiyi saklayabilir, işleyebilir

Detaylı

Yrd.Doç.Dr. Celal Murat KANDEMİR

Yrd.Doç.Dr. Celal Murat KANDEMİR Bilgisayar Mimarisi Ara Bağlantı Yapıları ve Bus Kavramı Yrd.Doç.Dr. Celal Murat KANDEMİR ESOGÜ Eğitim Fakültesi - BÖTE twitter.com/cmkandemir Ara Bağlantı Yapıları Bir bilgisayar sistemi MİB, bellek ve

Detaylı

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar) Öğr.Gör. Dr. Dr. Şirin KARADENİZ

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar) Öğr.Gör. Dr. Dr. Şirin KARADENİZ İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar) Öğr.Gör. Dr. Dr. Şirin KARADENİZ Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu bulunmaktadır; Performans:

Detaylı

ÇOK ÇEKİRDEKLİ İŞLEMCİLER VE PARALEL YAZILIM GELİŞTİRME OLANAKLARI HAKKINDA BİR İNCELEME

ÇOK ÇEKİRDEKLİ İŞLEMCİLER VE PARALEL YAZILIM GELİŞTİRME OLANAKLARI HAKKINDA BİR İNCELEME ÇOK ÇEKİRDEKLİ İŞLEMCİLER VE PARALEL YAZILIM GELİŞTİRME OLANAKLARI HAKKINDA BİR İNCELEME Ecem İren Halilcan Can Akince Aylin Kantarcı Bilgisayar Müh. Bölümü Bilgisayar Müh. Bölümü Bilgisayar Müh. Bölümü

Detaylı

İŞLEMCİLER (CPU) İşlemciler bir cihazdaki tüm girdilerin tabii tutulduğu ve çıkış bilgilerinin üretildiği bölümdür.

İŞLEMCİLER (CPU) İşlemciler bir cihazdaki tüm girdilerin tabii tutulduğu ve çıkış bilgilerinin üretildiği bölümdür. İŞLEMCİLER (CPU) Mikroişlemci Nedir? Mikroişlemci, hafıza ve giriş/çıkış birimlerini bulunduran yapının geneline mikrobilgisayar; CPU' yu bulunduran entegre devre çipine ise mikroişlemci denir. İşlemciler

Detaylı

Multicore/Multithread Programlama

Multicore/Multithread Programlama Multicore/Multithread Programlama Onur Tolga Şehitoğlu Bilgisayar Mühendisliği 7 Şubat 2008 Başlıklar 1 Gereksinimi Dal ile Süreç Çok İşlemci ve Dal Modelleri Neden Çoklu Dal Programlama? 2 Çok İşlemci/Çok

Detaylı

Bölüm 4: İş Parçacıkları. Operating System Concepts with Java 8 th Edition

Bölüm 4: İş Parçacıkları. Operating System Concepts with Java 8 th Edition Bölüm 4: İş Parçacıkları 14.1 Silberschatz, Galvin and Gagne 2009 Bölüm 4: İş Parçacıkları Genel Bakış Çoklu İş Parçacığı Modelleri İş Parçacığı Kütüphaneleri İş Parçacıkları ile İlgili Meseleler İşletim

Detaylı

DERS 3 MİKROİŞLEMCİ SİSTEM MİMARİSİ. İçerik

DERS 3 MİKROİŞLEMCİ SİSTEM MİMARİSİ. İçerik DERS 3 MİKROİŞLEMCİ SİSTEM MİMARİSİ İçerik Mikroişlemci Sistem Mimarisi Mikroişlemcinin yürüttüğü işlemler Mikroişlemci Yol (Bus) Yapısı Mikroişlemci İç Veri İşlemleri Çevresel Cihazlarca Yürütülen İşlemler

Detaylı

Bilgisayar Mimarisi ve Organizasyonu Giriş

Bilgisayar Mimarisi ve Organizasyonu Giriş + Bilgisayar Mimarisi ve Organizasyonu Giriş Bilgisayar Mimarisi Bilgisayar Organizasyonu Programcının görebileceği bir sistemin nitelikleri Bir programın mantıksal yürütülmesi üzerinde direk bir etkisi

Detaylı

BİLGİSAYAR MİMARİSİ. << Bus Yapısı >> Özer Çelik Matematik-Bilgisayar Bölümü

BİLGİSAYAR MİMARİSİ. << Bus Yapısı >> Özer Çelik Matematik-Bilgisayar Bölümü BİLGİSAYAR MİMARİSİ > Özer Çelik Matematik-Bilgisayar Bölümü Veri yolu (BUS), anakarttaki tüm aygıtlar arası veri iletişimini sağlayan devrelerdir. Yani bilgisayarın bir bileşeninden diğerine

Detaylı

DONANIM. 1-Sitem birimi (kasa ) ve iç donanım bileşenleri 2-Çevre birimleri ve tanımlamaları 3-Giriş ve çıkış donanım birimleri

DONANIM. 1-Sitem birimi (kasa ) ve iç donanım bileşenleri 2-Çevre birimleri ve tanımlamaları 3-Giriş ve çıkış donanım birimleri DONANIM 1-Sitem birimi (kasa ) ve iç donanım bileşenleri 2-Çevre birimleri ve tanımlamaları 3-Giriş ve çıkış donanım birimleri DONANIM SİSTEM BİRİMİ ÇEVREBİRİMLERİ Ana Kart (Mainboard) Monitör İşlemci

Detaylı

BM-311 Bilgisayar Mimarisi

BM-311 Bilgisayar Mimarisi 1 BM-311 Bilgisayar Mimarisi Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Konular Giriş Donanım performans kriterleri Eş zamanlı çalışma Güç tüketimi Yazılım performans kriterleri

Detaylı

İŞ SIRALAMA. İş Sıralamanın Amaçları. İş Sıralama Türleri - 1. İş Sıralama. İş Sıralama Türleri - 2

İŞ SIRALAMA. İş Sıralamanın Amaçları. İş Sıralama Türleri - 1. İş Sıralama. İş Sıralama Türleri - 2 İş Sıralamanın Amaçları İŞ SIRALAMA İşleri zaman içinde işlemciye yerleştirmek Sistem hedeflerine uygun olarak: İşlemci verimi Cevap süresi (response time) Debi (throughput) 23 İş Sıralama İş Sıralama

Detaylı

İŞLETİM SİSTEMİ İşletim sistemi kullanıcıyla bilgisayar donanımı arasında iletişim sağlayan programdır.

İŞLETİM SİSTEMİ İşletim sistemi kullanıcıyla bilgisayar donanımı arasında iletişim sağlayan programdır. İŞLETİM SİSTEMİ İşletim sistemi kullanıcıyla bilgisayar donanımı arasında iletişim sağlayan programdır. Programların ve donanımların kullanılması için bir çalıştırılması platformu oluşturur. Sistemin yazılım

Detaylı

İşletim Sistemlerine Giriş

İşletim Sistemlerine Giriş İşletim Sistemlerine Giriş Bellek Yönetimi (Memory Management) İşletim Sistemlerine Giriş - Ders10_02 1 Yazılım ile LRU Benzetimi Donanım kullanmadan LRU algoritmasının yazılım ile gerçekleştirimidir.

Detaylı

PR362009 24 Kasım 2009 Yazılım, PC-tabanlı kontrol Sayfa 1 / 5

PR362009 24 Kasım 2009 Yazılım, PC-tabanlı kontrol Sayfa 1 / 5 Yazılım, PC-tabanlı kontrol Sayfa 1 / 5 IT standartları otomasyonu geliştiriyor: Microsoft Visual Studio entegrasyonlu TwinCAT programlama ortamı TwinCAT 3 extended Automation Beckhoff, otomasyon dünyasını

Detaylı

İşlem Yönetimi (Process Management)

İşlem Yönetimi (Process Management) İşlem Yönetimi (Process Management) 2 Bir işletim sisteminde, temel kavramlardan bir tanesi işlemdir. İş, görev ve süreç kelimeleri de işlem ile eşanlamlı olarak kullanılabilir. Bir işlem temel olarak

Detaylı

Proses. Prosesler 2. İşletim Sistemleri

Proses. Prosesler 2. İşletim Sistemleri 2 PROSESLER Proses Bir işlevi gerçeklemek üzere ardışıl bir program parçasının yürütülmesiyle ortaya çıkan işlemler dizisi Programın koşmakta olan hali Aynı programa ilişkinbirdenfazlaprosesolabilir. Görev

Detaylı

Java Temel Özellikleri

Java Temel Özellikleri Java Temel Özellikleri Java Programlama Dili Java programlama dili şu anda dünyadaki en popüler programlama dillerinden biri haline gelmiştir. Java SUN bilgisayar şirketince elektrikli ev aletlerinin birbiriyle

Detaylı

REALTIME LINUX. 3. Linux ve Özgür Yazılım Şenliği Murat Demirten, 16 Mayıs 2004, Ankara

REALTIME LINUX. 3. Linux ve Özgür Yazılım Şenliği Murat Demirten, 16 Mayıs 2004, Ankara REALTIME LINUX 3. Linux ve Özgür Yazılım Şenliği Murat Demirten, 16 Mayıs 2004, Ankara Bu belgeyi, Free Software Foundation tarafından yayınlanmış bulunan GNU Genel Kamu Lisansının 2 ya da daha sonraki

Detaylı

İşletim Sistemlerine Giriş

İşletim Sistemlerine Giriş İşletim Sistemlerine Giriş Bellek Yönetimi (Memory Management) İşletim Sistemlerine Giriş - Ders08 1 Bellek Yönetimi Bellek önemli bir kaynaktır ve dikkatli yönetilmelidir. İşletim sistemlerinde bellek

Detaylı

Merkezi İşlem Birimi (CPU)

Merkezi İşlem Birimi (CPU) Merkezi İşlem Birimi (CPU) Giriş Birimleri İşlem Birimi Çıkış Birimleri Bellek Birimleri Merkezi İşlem Birimi (CPU) Bilgisayarınızın beynidir. Bilgisayarlardaki bütün aritmetik, matematik ve mantık hesaplamalarının

Detaylı

Windows'da çalışırken pek çok durumda bir işe başlamadan önce işletim sisteminin o işe ilişkin bilgileri depolayacağı bir alan yaratması gerekir.

Windows'da çalışırken pek çok durumda bir işe başlamadan önce işletim sisteminin o işe ilişkin bilgileri depolayacağı bir alan yaratması gerekir. Handel Kavramı: Windows'da çalışırken pek çok durumda bir işe başlamadan önce işletim sisteminin o işe ilişkin bilgileri depolayacağı bir alan yaratması gerekir. Alanın yaratıldığı bölge Windows'un kendi

Detaylı

Bölüm 5: İşlemci Zamanlaması. Operating System Concepts with Java 8 th Edition

Bölüm 5: İşlemci Zamanlaması. Operating System Concepts with Java 8 th Edition Bölüm 5: İşlemci Zamanlaması 5.1 Silberschatz, Galvin and Gagne 2009 Temel Kavramlar Çoklu programlama sayesinde CPU kullanımının optimize edilmesi CPU I/O İşlem Döngüsü Bir işlemin çalıştırılması birbirlerini

Detaylı

Bilgisayarım My Computer

Bilgisayarım My Computer My Computer Elbistan Meslek Yüksek Okulu 2012 2013 Bahar Yarıyılı 12-13 Mar. 2012 Öğr. Gör. Murat KEÇECİOĞLU Bilgisayarım (my computer) simgesine sağ tıklar ve özellikler (properties) seçeneğini seçeriz.

Detaylı

BM-311 Bilgisayar Mimarisi

BM-311 Bilgisayar Mimarisi 1 BM-311 Bilgisayar Mimarisi Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Konular Giriş Mikro işlemler Fetch cycle Indirect cycle Interrupt cycle Execute cycle Instruction

Detaylı

Sunucu Bilgisayarlarda Kullanılan CISC ve RISC İşlemcilerin Performans Karşılaştırımı

Sunucu Bilgisayarlarda Kullanılan CISC ve RISC İşlemcilerin Performans Karşılaştırımı Sunucu Bilgisayarlarda Kullanılan CISC ve RISC İşlemcilerin Performans Karşılaştırımı Aylin Kantarcı Ege Üniversitesi Akademik Bilişim 2015 Eskişehir, 2015 GİRİŞ CISC işlemciler Geriye uyumluluk Karmaşık

Detaylı

William Stallings Computer Organization and Architecture 9 th Edition

William Stallings Computer Organization and Architecture 9 th Edition William Stallings Computer Organization and Architecture 9 th Edition Bölüm 4 Cache Bellek Bilgisayar Hafıza Sisteminin Ana Karakteristikleri Table 4.1 Key Characteristics of Computer Memory Systems Bilgisayar

Detaylı

Bilgisayar İşletim Sistemleri BLG 312

Bilgisayar İşletim Sistemleri BLG 312 Prosesler Bilgisayar İşletim Sistemleri BLG 312 Prosesler ve Proses Yönetimi bilgisayar sisteminde birden fazla iş aynı anda etkin olabilir kullanıcı programı diskten okuma işlemi yazıcıdan çıkış alma

Detaylı

T E M E L K AV R A M L A R. Öğr.Gör. Günay TEMÜR / Teknoloji F. / Bilgisayar Müh.

T E M E L K AV R A M L A R. Öğr.Gör. Günay TEMÜR / Teknoloji F. / Bilgisayar Müh. B İ L G İ S AY A R M Ü H E N D İ S L İ Ğ İ N E G İ R İ Ş T E M E L K AV R A M L A R BAŞLAYALIM BİLGİSAYAR (COMPUTER) NEDİR? Bilgisayar, kullanıcıdan aldığı verilerle aritmetiksel ve mantıksal işlemler

Detaylı

Sanal Makineler ve Linux Konteynerlerin Performans Karşılaştırması

Sanal Makineler ve Linux Konteynerlerin Performans Karşılaştırması Sanal Makineler ve Linux Konteynerlerin Performans Karşılaştırması Emre Can YILMAZ 1, Recai OKTAŞ 2 1 Ondokuz Mayıs Üniversitesi, Fen Bilimleri Enstitüsü, Bilgisayar Mühendisliği Anabilim Dalı, Samsun

Detaylı

Bilgisayar İşletim Sistemleri BLG 312

Bilgisayar İşletim Sistemleri BLG 312 Bilgisayar İşletim Sistemleri BLG Çok prosesli ortamda birden fazla proses çalışmaya hazır şekilde bellekte yer alır MİB zamanının prosesler arasında paylaştırılması:zaman paylaşımlı çalışma iş sıralama:bir

Detaylı

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ Ders 10 LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ LINUX de Programlama LINUX işletim sistemi zengin bir programlama ortamı sağlar. Kullanıcılara sistemi geliştirme olanağı sağlar.

Detaylı

PROSESLER. Proses. Proses

PROSESLER. Proses. Proses Proses 2 PROSESLER Bir işlevi gerçeklemek üzere ardışıl bir program parçasının yürütülmesiyle ortaya çıkan işlemler dizisi Programın koşmakta olan hali Aynı programa ilişkin birden fazla proses olabilir.

Detaylı

BM-311 Bilgisayar Mimarisi

BM-311 Bilgisayar Mimarisi 1 BM-311 Bilgisayar Mimarisi Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Konular Giriş Donanım performans kriterleri Eş zamanlı çalışma Güç tüketimi Yazılım performans kriterleri

Detaylı

İşletim Sistemlerine Giriş

İşletim Sistemlerine Giriş İşletim Sistemlerine Giriş Girdi/Çıktı (I/O) İşletim Sistemlerine Giriş - Ders11 1 Girdi/Çıktı (I/O) İşletim sisteminin temel fonksiyonlarından biride bilgisayardaki tüm I/O aygıtlarını kontrol etmesidir.

Detaylı

BİL 542 Paralel Hesaplama. Dersi Projesi. MPJ Express Java Paralel Programlama

BİL 542 Paralel Hesaplama. Dersi Projesi. MPJ Express Java Paralel Programlama BİL 542 Paralel Hesaplama Dersi Projesi MPJ Express Java Paralel Programlama Recep Ali YILMAZ 131419106 Fen Bilimleri Enstitüsü Bilgisayar Mühendisliği Bölümü Bilgisayar Mühendisliği Yüksek Lisans Programı

Detaylı

Bölüm 2 : ANAHTARLAMA : DEVRE ANAHTARLAMA. MESAJ ANAHTARLAMA. PAKET ANAHTARLAMA.

Bölüm 2 : ANAHTARLAMA : DEVRE ANAHTARLAMA. MESAJ ANAHTARLAMA. PAKET ANAHTARLAMA. Bölüm 2 : ANAHTARLAMA : DEVRE ANAHTARLAMA. MESAJ ANAHTARLAMA. PAKET ANAHTARLAMA. Türkçe (İngilizce) karşılıklar Devre Anahtarlama (circuit switching) Mesaj Anahtarlama (message switching) Paket Anahtarlama

Detaylı

Bilgisayar İşletim Sistemleri BLG 312

Bilgisayar İşletim Sistemleri BLG 312 Giriş Bilgisayar İşletim Sistemleri BLG 312 İplikler geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü vardır bazı durumlarda, aynı adres uzayında birden fazla akış kontrolü

Detaylı

İŞ SIRALAMA. İş Sıralama 6. İşletim Sistemleri

İŞ SIRALAMA. İş Sıralama 6. İşletim Sistemleri 6 İŞ SIRALAMA İş Sıralama Çok programlı ortamlarda birden fazla proses belirli bir anda bellekte bulunur Çok programlı ortamlarda prosesler: işlemciyi kullanır bekler giriş çıkış bekler bir olayın olmasını

Detaylı

ARDIŞIL DİYAGRAM YAPI DİYAGRAMI. Sistem Analizi ve Tasarımı Dersi

ARDIŞIL DİYAGRAM YAPI DİYAGRAMI. Sistem Analizi ve Tasarımı Dersi ARDIŞIL DİYAGRAM YAPI DİYAGRAMI Sistem Analizi ve Tasarımı Dersi İçindekiler Ardışıl Diyagram Nedir ve Neden Kullanılır... 3 Ardışıl Diyagram Elemanları... 3 MS Visio ile Ardışıl Diyagram Çizimi... 5 Violet

Detaylı

Gezgin Etmen Sistemlerinin Başarım Ölçümü: Benzetim Tekniği

Gezgin Etmen Sistemlerinin Başarım Ölçümü: Benzetim Tekniği Gezgin Etmen Sistemlerinin Başarım Ölçümü: Benzetim Tekniği Gürol Erdoğan 1, Mustafa Yıldız 1, Mehmet Erdem Türsem 2, Selahattin Kuru 1 1 Enformatik Uygulama ve Araştırma Merkezi, Işık Üniversitesi, İstanbul

Detaylı

İŞLETİM SİSTEMLERİ. (Operating Systems)

İŞLETİM SİSTEMLERİ. (Operating Systems) İŞLETİM SİSTEMLERİ (Operating Systems) İşletim Sistemi Tanımı, Görevleri, Bilinen İşletim Sistemleri Çok Kullanıcılı Sistemler, Bellek Yönetim Birimi Linux ve Windows Ailesi, Bilinen İşletim Sistemleri

Detaylı

Çekirdek Nedir? Ne yapar?

Çekirdek Nedir? Ne yapar? Çekirdek Nedir? Ne yapar? Erkan Esmer Nisan, 2014 İçindekiler 1 Giriş.................................................... 2 2 Çekirdek Tipleri.............................................. 3 2.1 Mikrokernel............................................

Detaylı

İşletim Sistemlerine Giriş 2. Kaynakların Paylaşımı. Öğr.Gör. Dr. Şirin KARADENİZ

İşletim Sistemlerine Giriş 2. Kaynakların Paylaşımı. Öğr.Gör. Dr. Şirin KARADENİZ İşletim Sistemlerine Giriş 2 Kaynakların Paylaşımı Öğr.Gör. Dr. Şirin KARADENİZ Kaynakların Paylaşımı Sistem, sistem kaynaklarını belli bir hiyerarşi içinde kullanıcının hizmetine sunar. Bir işletim sisteminde

Detaylı

DGridSim Gerçek Zamanlı Veri Grid Simülatörü. Yazılım Tasarımı Dokümanı v 1.0.1 01.08.2011. Mustafa Atanak Sefai Tandoğan Doç. Dr.

DGridSim Gerçek Zamanlı Veri Grid Simülatörü. Yazılım Tasarımı Dokümanı v 1.0.1 01.08.2011. Mustafa Atanak Sefai Tandoğan Doç. Dr. DGridSim Gerçek Zamanlı Veri Grid Simülatörü Yazılım Tasarımı Dokümanı v 1.0.1 01.08.2011 Mustafa Atanak Sefai Tandoğan Doç. Dr. Atakan Doğan 1. Sistem Mimarisi DGridSim katmanlı bir yapı göz önünde bulundurularak

Detaylı

Donanımlar Hafta 1 Donanım

Donanımlar Hafta 1 Donanım Donanımlar Hafta 1 Donanım Donanım Birimleri Ana Donanım Birimleri (Anakart, CPU, RAM, Ekran Kartı, Sabit Disk gibi aygıtlar, ) Ek Donanım Birimleri (Yazıcı, Tarayıcı, CD-ROM, Ses Kartı, vb ) Anakart (motherboard,

Detaylı

İşletim Sistemleri. İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık

İşletim Sistemleri. İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri Dr. Binnur Kurt binnur.kurt@gmail.com Omega Eğitim ve Danışmanlık http://www.omegaegitim.com 1 S a y f a İÇİNDEKİLER 1. İşletim Sistemi 2. Kabuk 3. Prosesler 4. İplikler 5. İplikler

Detaylı

Bölüm 4: Threads (İş Parçaları)

Bölüm 4: Threads (İş Parçaları) Bölüm 4: Threads (İş Parçaları) Mehmet Demirci tarafından çevrilmiştir. Silberschatz, Galvin and Gagne 2013 Bölüm 4: Threads (İş Parçaları) Genel bakış Çok çekirdekli programlama Çok iş parçalı modeller

Detaylı

Sistem Programlama. (*)Dersimizin amaçları Kullanılan programlama dili: C. Giriş/Cıkış( I/O) Sürücülerinin programlaması

Sistem Programlama. (*)Dersimizin amaçları Kullanılan programlama dili: C. Giriş/Cıkış( I/O) Sürücülerinin programlaması Sistem Programlama Sistem programlama bilgisayar mühendisliğinin bir alanı olup karmaşık sistemlerin ve bu sistemlerin parçalarının ile ilgilenir. İşletim Sistemlerinin Programlaması Giriş/Cıkış( I/O)

Detaylı

Sanal Bellek (Virtual Memory)

Sanal Bellek (Virtual Memory) Sanal Bellek (Virtual Memory) Bellek yönetim tekniklerinde belleğin zaman içinde parçalanması ve işlemlerin boyutunun fiziksel belleğin boyutuyla sınırlı olması sorunları vardır. Ana belleğin yetersiz

Detaylı

Linux Sistemlerde Süreç Zamanlama Algoritmaları (Scheduler Algorithms) ÜMİT İŞGÜDER

Linux Sistemlerde Süreç Zamanlama Algoritmaları (Scheduler Algorithms) ÜMİT İŞGÜDER Linux Sistemlerde Süreç Zamanlama Algoritmaları (Scheduler Algorithms) ÜMİT İŞGÜDER 21/03/07 İşletim Sistemleri 1 Linux 2.6.8.1 Zamanlayıcısının Temelleri Linux 2.5.x 'in geliştirilmesi sırasında yeni

Detaylı

Kablosuz Algılayıcı Ağları İçin TinyOS İle Uygulama Geliştirme

Kablosuz Algılayıcı Ağları İçin TinyOS İle Uygulama Geliştirme Kablosuz Algılayıcı Ağları İçin TinyOS İle Uygulama Geliştirme Kasım Sinan YILDIRIM AKADEMİK BİLİŞİM 2010 10-12 Şubat 2010 Muğla Üniversitesi, Muğla Ege Üniversitesi Bilgisayar Mühendisliği Bölümü İzmir,

Detaylı

Görüntü Bağdaştırıcıları

Görüntü Bağdaştırıcıları Görüntü Bağdaştırıcıları Görüntü Bağdaştırıcıları (Ekran Kartları) Ekrandaki Görüntü Nasıl Oluşur? Monitörünüze yeteri kadar yakından bakarsanız görüntünün çok küçük noktalardan oluştuğunu görürsünüz.

Detaylı

OMNET++ 4.2.2. Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları. GYTE - Bilgisayar Mühendisliği Bölümü

OMNET++ 4.2.2. Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları. GYTE - Bilgisayar Mühendisliği Bölümü Bilgisayar Mühendisliği Bölümü OMNET++ 4.2.2 Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları OMNET++ OMNET++ (Objective Modular Network Testbed in C++), nesneye yönelik (objectoriented)

Detaylı

İŞLETİM SİSTEMLERİNE GİRİŞ. Modern bilgisayar çalışma prensipleri, Von Neumann ın 1945 de geliştirdiği

İŞLETİM SİSTEMLERİNE GİRİŞ. Modern bilgisayar çalışma prensipleri, Von Neumann ın 1945 de geliştirdiği İŞLETİM SİSTEMLERİNE GİRİŞ Von Neumann Mimarisi Modern bilgisayar çalışma prensipleri, Von Neumann ın 1945 de geliştirdiği mimariyi temel almaktadır. Merkezi İşlem Birimi Aritmetik ve Mantık Birimi Kontrol

Detaylı

O P C S T A N D A R D I

O P C S T A N D A R D I O P C S T A N D A R D I ASP OTOMASYON LTD. Sadık ŞENOL İsmail YAKIN 12/08/2008 OPC Standardı İnsan gücüne dayalı üretimden otomasyona dayalı, daha kontrollü bir üretime geçiş endüstride üretim hızını ve

Detaylı

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü İşletim Sistemleri Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Bu dersin sunumları, Abraham Silberschatz, Greg Gagne, Peter B. Galvin, Operating System Concepts 9/e, Wiley,

Detaylı

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015 Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015 KONU BAŞLIKLARI 1. Yazılım Mimarisi nedir? 2. Yazılımda Karmaşıklık 3. Üç Katmanlı Mimari nedir? 4. Üç Katmanlı Mimari

Detaylı

İşletim Sistemlerine Genel Bakış

İşletim Sistemlerine Genel Bakış İşletim Sistemlerine Genel Bakış 1.1 Silberschatz, Galvin and Gagne 2009 İşletim Sistemi Nedir? Bilgisayar donanımı ile bilgisayar kullanıcısı arasında bir ara katman olarak aracılık etmek İşletim sisteminin

Detaylı

Bilgisayarım My Computer. Elbistan Meslek Yüksek Okulu 2013 2014 Bahar Yarıyılı

Bilgisayarım My Computer. Elbistan Meslek Yüksek Okulu 2013 2014 Bahar Yarıyılı Bilgisayarım My Computer Elbistan Meslek Yüksek Okulu 2013 2014 Bahar Yarıyılı Öğr.Gör. Murat KEÇECİOĞLU 11-12 Mar. 2014 Bilgisayarım (my computer) simgesine sağ tıklar ve özellikler (properties) seçeneğini

Detaylı

4. HAFTA KBT104 BİLGİSAYAR DONANIMI. KBUZEM Karabük Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

4. HAFTA KBT104 BİLGİSAYAR DONANIMI. KBUZEM Karabük Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 4. HAFTA KBT104 BİLGİSAYAR DONANIMI Karabük Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 2 Konu Başlıkları Merkezî İşlem Birimi Mikroişlemci(CPU) Çok Çekirdekli Kavramı Çoklu Çekirdek Tasarımı

Detaylı

İŞLETİM SİSTEMLERİNE GİRİŞ. Modern bilgisayar çalışma prensipleri, Von Neumann ın 1945 de geliştirdiği

İŞLETİM SİSTEMLERİNE GİRİŞ. Modern bilgisayar çalışma prensipleri, Von Neumann ın 1945 de geliştirdiği İŞLETİM SİSTEMLERİNE GİRİŞ Von Neumann Mimarisi Modern bilgisayar çalışma prensipleri, Von Neumann ın 1945 de geliştirdiği mimariyi temel almaktadır. Merkezi İşlem Birimi Aritmetik ve Mantık Birimi Kontrol

Detaylı

DİSK DEPOLAMA ALANLARI

DİSK DEPOLAMA ALANLARI DİSK DEPOLAMA ALANLARI 1. Giriş İşlemci hızı ve hafıza kapasitesinin disk hızından çok daha hızlı bir gelişim içinde bulunduğu göz önüne alınırsa, disk kullanımında teorik ilgi ve uygulamanın önemliliği

Detaylı

YZM 3102 İşletim Sistemleri

YZM 3102 İşletim Sistemleri YZM 3102 İşletim Sistemleri Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği BÖLÜM - 5 Bu bölümde, Thread (İş Parçacığı) Thread lerin Faydaları

Detaylı

PARALEL GÖRÜNTÜ FİLTRELEME İÇİN ÇOK ÇEKİRDEKLİ BİLGİSAYAR ÜZERİNDE BAŞARIM ANALİZİ

PARALEL GÖRÜNTÜ FİLTRELEME İÇİN ÇOK ÇEKİRDEKLİ BİLGİSAYAR ÜZERİNDE BAŞARIM ANALİZİ İleri Teknoloji Bilimleri Dergisi Cilt 2, Sayı 1, 76-83, 2013 Journal of Advanced Technology Sciences Vol 2, No 1, 76-83, 2013 PARALEL GÖRÜNTÜ FİLTRELEME İÇİN ÇOK ÇEKİRDEKLİ BİLGİSAYAR ÜZERİNDE BAŞARIM

Detaylı

Dağıtık Sistemler CS5001

Dağıtık Sistemler CS5001 Dağıtık Sistemler CS5001 Th. Letschert Çeviri: Turgay Akbaş TH Mittelhessen Gießen University of Applied Sciences Biçimsel model nedir Biçimsel model matematiksel olarak tanımlanmış olan bir modeldir.

Detaylı

(Random-Access Memory)

(Random-Access Memory) BELLEK (Memory) Ardışıl devreler bellek elemanının varlığı üzerine kuruludur Bir flip-flop sadece bir bitlik bir bilgi tutabilir Bir saklayıcı (register) bir sözcük (word) tutabilir (genellikle 32-64 bit)

Detaylı

Background (Arka Plan)

Background (Arka Plan) Bölüm 9: Sanal Bellek Operating System Concepts with Java 8 th Edition 9.1 Silberschatz, Galvin and Gagne 2009 Background (Arka Plan) Sanal Bellek Kullanıcı mantıksal hafızanın, fiziksel hafızadan ayrılması.

Detaylı

Bölüm 8: Ana Bellek. Operating System Concepts with Java 8 th Edition

Bölüm 8: Ana Bellek. Operating System Concepts with Java 8 th Edition Bölüm 8: Ana Bellek 8.1 Silberschatz, Galvin and Gagne 2009 Bölüm 8: Ana Bellek Arka Plan Bilgisi Yer Değiştirme (Swapping) Bitişik Bellek Yerleşimi (Contiguous Memory Allocation) Sayfalama (Paging) Sayfa

Detaylı

İşletim Sistemleri (Operating Systems)

İşletim Sistemleri (Operating Systems) İşletim Sistemleri (Operating Systems) 1 Thread (İşlemcik) Thread (İşlemcik) Nedir? Thread (işlemcik-iplik); Belli bir process e bağlıdır. Bağlı bulundukları process in adres uzayını kullanırlar, Thread

Detaylı

Bilgisayarların Gelişimi

Bilgisayarların Gelişimi Bilgisayarların Gelişimi Joseph Jacquard (1810) Bilgisayar tabanlı halı dokuma makinesi Delikli Kart (Punch Card) Algoritma ve Programlama 6 Bilgisayar Sistemi 1. Donanım fiziksel aygıtlardır. 2. Yazılım

Detaylı

void setup() fonksiyonu: Bu fonksiyon program ilk açıldığında bir kere çalışır ve gerekli kalibrasyon, setup komutlarını buraya yazarız.

void setup() fonksiyonu: Bu fonksiyon program ilk açıldığında bir kere çalışır ve gerekli kalibrasyon, setup komutlarını buraya yazarız. ARDUİNO PROGRAMLAMA fonksiyonu: Bu fonksiyon program ilk açıldığında bir kere çalışır ve gerekli kalibrasyon, setup komutlarını buraya yazarız. fonksiyonu: Diğer programlama dillerinden alışık olduğumuz

Detaylı

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan BİLGİ TEKNOLOJİLERİ YÖNETİMİ EĞİTİM MODÜLLERİ Tarih Saat Modül Adı Öğretim Üyesi 01/05/2018 Salı Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan Bu dersin amacı, bilgisayar bilimlerinin temel kavramlarını

Detaylı

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler C# Programlama Dili İlk programımız Tür dönüşümü Yorum ekleme Operatörler 1 İlk Programımız Bu program konsol ekranına Merhaba dünya! yazıp kapanır. Programı geçen derste anlatıldığı gibi derleyin, sonra

Detaylı

Paralel Programlama Ortamları

Paralel Programlama Ortamları Paralel Programlama Ortamları Elis Soylu ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ esoylu@ogu.edu.tr Paralel Programlama Ortamları Paralel Programlama Tanımı İş Parçacığı Tabanlı Yöntemler Java Thread ile Paralel

Detaylı

BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi GÜVENLİK VE İZİNLER. BLM401 Dr.Refik SAMET

BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi GÜVENLİK VE İZİNLER. BLM401 Dr.Refik SAMET BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi GÜVENLİK VE İZİNLER BLM401 Dr.Refik SAMET 1 GİRİŞ (1/3) Güvenlik, verilerin veya bilgilerin saklanması, kullanılması ve taşınması esnasında bilgilerin

Detaylı

Özyineleme (Recursion)

Özyineleme (Recursion) C PROGRAMLAMA Özyineleme (Recursion) Bir fonksiyonun kendisini çağırarak çözüme gitmesine özyineleme (recursion), böyle çalışan fonksiyonlara da özyinelemeli (recursive) fonksiyonlar denilir. Özyineleme,

Detaylı

Windows Eski Sürümleri Bellek Yapısı

Windows Eski Sürümleri Bellek Yapısı Windows Eski Sürümleri Bellek Yapısı -Intel 8086/8088 mimarili işlemciler//640k RAM -Segment Modeli(Segmented Model) -Her segment 64K uzunluğunda -Intel 80286,640K dan daha fazla RAM i destekledi -Windows

Detaylı

Dicle Üniversitesi Bilgi İşlem Online Talep Takip Sistemi

Dicle Üniversitesi Bilgi İşlem Online Talep Takip Sistemi Dicle Üniversitesi Bilgi İşlem Online Talep Takip Sistemi Cengiz Coşkun 1, Abdullah Baykal 2 1 Dicle Üniversitesi Bilgi İşlem Daire Başkanlığı, Diyarbakır 2 Dicle Üniversitesi Fen Fakültesi, Matematik

Detaylı

VERİ YAPILARI VE PROGRAMLAMA (BTP104)

VERİ YAPILARI VE PROGRAMLAMA (BTP104) VERİ YAPILARI VE PROGRAMLAMA (BTP104) Yazar: Doç.Dr. İ. Hakkı CEDİMOĞLU S1 SAKARYA ÜNİVERSİTESİ Adapazarı Meslek Yüksekokulu Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi ne aittir.

Detaylı

Yazılım Mühendisliğine Giriş 2018 GÜZ

Yazılım Mühendisliğine Giriş 2018 GÜZ Yazılım Mühendisliğine Giriş 2018 GÜZ 1 İşletim Sistemi (Operating System) 2 Unix İşletim Sistemi Unix AT&T çalışanları tarafından Bell Laboratuvarlarında 1969 yılında geliştirilmiştir. Farklı platformlar

Detaylı

Ders - 1. BİL 221 Bilgisayar Yapısı GİRİŞ. Ders Hakkında. Ders İzlencesi

Ders - 1. BİL 221 Bilgisayar Yapısı GİRİŞ. Ders Hakkında. Ders İzlencesi Ders - 1 BİL 221 Bilgisayar Yapısı GİRİŞ Ders Hakkında Ders İzlencesi Bilgisayar Sınıfları Kişisel Bilgisayarlar$ Genel amaçlı, çok çeşitli yazılımlar$ Performans - maliyet ödünleşmesi hedeflenir$ Sunucular$

Detaylı

Bilgisayar Donanım 2010 BİLGİSAYAR

Bilgisayar Donanım 2010 BİLGİSAYAR BİLGİSAYAR CPU, bellek ve diğer sistem bileşenlerinin bir baskı devre (pcb) üzerine yerleştirildiği platforma Anakart adı verilmektedir. Anakart üzerinde CPU, bellek, genişleme yuvaları, BIOS, çipsetler,

Detaylı

Genel Programlama II

Genel Programlama II Genel Programlama II 22.03.2011 1 Yapılar ( Structures ) Yapılar ( structures ); tam sayı, karakter vb. veri tiplerini gruplayıp, tek bir çatı altında toplar. Bu gruplandırma içinde aynı ya da farklı veri

Detaylı

Bölüm 13: Giriş-Çıkış (I/O) Sistemleri

Bölüm 13: Giriş-Çıkış (I/O) Sistemleri Bölüm 13: Giriş-Çıkış (I/O) Sistemleri Mehmet Demirci tarafından çevrilmiştir. Silberschatz, Galvin and Gagne 2013 Bölüm 13: Giriş-Çıkış (I/O) Sistemleri Genel bakış I/O donanımı Uygulama I/O arayüzü Çekirdek

Detaylı

PROCESS YARATIMI (TEKRAR):

PROCESS YARATIMI (TEKRAR): PROCESS YARATIMI (TEKRAR): Gecen haftaki dersten hatırlayabileceğiniz üzere, bir process başka bir process yaratabilmesi için UNIX sistemlerinde fork() sistem çağrısı kullaılıyordu. Başka bir process yaratan

Detaylı

Büyük, Dağıtık, Veri Yoğunluklu Uygulamalarda Programlama Paradigmaları

Büyük, Dağıtık, Veri Yoğunluklu Uygulamalarda Programlama Paradigmaları Büyük, Dağıtık, Veri Yoğunluklu Uygulamalarda Programlama Paradigmaları Güven Fidan AGMLAB Bilişim Teknolojileri 18/10/11 GRID ÇALIŞTAYI 2007 1 MapReduce Nedir? Büyük data kümelerini işlemek ve oluşturmak

Detaylı

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş Yard. Doç. Dr. Alper Kürşat Uysal Bilgisayar Mühendisliği Bölümü akuysal@anadolu.edu.tr Ders Web Sayfası: http://ceng.anadolu.edu.tr/ders.aspx?dersid=101

Detaylı

BM-311 Bilgisayar Mimarisi

BM-311 Bilgisayar Mimarisi 1 BM-311 Bilgisayar Mimarisi Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Konular Çok işlemcili sistemler Simetrik çok işlemciler Önbellek tutarlılığı MESI protokolü Multithreading

Detaylı

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN Yrd. Doç. Dr. Caner ÖZCAN Diziler ile Pointer Arası İlişki Bir dizi adı sabit bir pointer gibi düşünülebilir. Diziler ile pointer lar yakından ilişkilidir. Pointer lar değişkenleri gösterdikleri gibi,

Detaylı