İÇİNDEKİLER. İşletim Sistemleri
|
|
- Berk Cevahir
- 8 yıl önce
- İzleme sayısı:
Transkript
1 İşletim Sistemleri Dr. Binnur Kurt Omega Eğitim ve Danışmanlık 1 S a y f a
2 İÇİNDEKİLER 1. İşletim Sistemi 2. Kabuk 3. Prosesler Prosesler Arası İletişim 6. İş Sıralama 7. Ölümcül Kilitlenme 8. Çok İplikli Programlama 9. Bellek Yönetimi 10. Dosya Sistemi 11. Soket Haberleşme 2 S a y f a
3 BÖLÜM 4 Bölümün Amacı Bölüm sonunda aşağıdaki konular öğrenilmiş olacaktır: İplik Modeli Linux da PTHREAD Kütüphanesi kullanarak çok iplikli uygulama geliştirmek C++11 de çok iplikli uygulama geliştirmek Java da çok iplikli uygulama geliştirmek 3 S a y f a
4 4.1 Giriş de prosesler gibi birden fazla görevi yerine getirmek için kullanılır. de prosesler gibi işlemciyi zamanda paylaşarak kullanılırlar. Eğer birden fazla işlemci ya da çekirdek varsa çekirdek sayısı kadar iplik ya da proses gerçekten paralel olarak çalışabilir. proseslere göre daha hafif sıklet bir çözüm sunar. Yeni bir iplik yaratıldığında sadece yığın için yer ayrılır. Ait olduğu prosesin heap ve text alanlarını diğer ipliklerle beraber paylaşır. ile veri ve görev paralelliği daha ince ölçekte gerçeklenebilir. Proses fork sistem çağrısı kullanılarak yaratılır: #include <unistd.h> pid_t fork(void); Çağrıyı yapan prosesin bellek görüntüsü birebir kopyalanarak çocuk proses yaratılır. Bu yüzden fork ile proses yaratmak maliyetlidir. Eğer çocuk proses ebeveyn prosesin bellek alanında bir değişiklik yapmayacaksa, Linux işletim sisteminde, fork sistem çağrısına göre daha hızlı çalışan vfork sistem çağrısını kullanmak gerekir: #include <unistd.h> pid_t vfork(void); vfork paylaşılan bellek alanına yazma yapıldığında kopyalama yapar. Bu en iyileme literatürde copy-on-write olarak adlandırılmaktadır. Özellikle çocuk proses exec sistem çağrılarından birini kullanacaksa, fork yerine vfork kullanılmalıdır. İplik yaratmak için ise clone sistem çağrısı kullanılır: #include <sched.h> int clone(int (*fn)(void *), void *child_stack,int flags, void *arg,...); Aşağıda clone sistem çağrısı kullanılarak yaratılmış bir ipliğin yer aldığı örnek bir uygulama bulunmaktadır: Kod 4.1: #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sched.h> #define CHILD_STACK_SIZE int var; int do_something(void *) { printf("i am in thread. Assigning 42 to the variable.\n"); var = 42; int main(int argc, char *argv[]) { void **child_stack; var = 9; child_stack = (void **) malloc(child_stack_size); printf("i am in the process! The variable was %d\n", var); clone(do_something, child_stack+child_stack_size/sizeof(void**), 4 S a y f a
5 CLONE_SIGHAND CLONE_FS CLONE_VM CLONE_FILES, NULL); sleep(1); printf("i am in the process. The variable is %d\n", var); return 0; CLONE_VM sabiti ipliğin prosesin bellek uzayını paylaşmasına neden olur. var değişkenine P prosesi tarafından CLONE_VM seçeneği ile yaratılan tüm iplikler erişebilir (Şekil-4.1). P var t 1 t 2 t 3 Şekil-4.1 Proses ve ipliklerin bellek erişimleri 3.2 PTHREAD Kütüphanesini Kullanarak İplik Yaratmak clone gibi sistem çağrılarını kullanarak iplik programlamak güçtür. İplik programlamayı bu nedenle POSIX Thread Kütüphanesi gibi bir üst düzey API kullanarak gerçekleştiriyoruz. Yaratılan her ipliğe o ipliğin çalıştırmasını istediğimiz fonksiyonun adresini ve parametresini veriyoruz. PThread Kütüphanesi kullanarak iplik yaratmak için pthread_create fonksiyonunu kullanıyoruz: #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void*(*start_routine)(void*), void *arg) Burada birinci parametre ipliğin kimliğini saklamak istediğimiz bellek gözünün adresini ve ikinci parametre ise yaratmak istediğimiz ipliğin özelliklerini almaktadır. Üçüncü parametre ile ipliğin çalıştırmasını istediğimiz fonksiyonun adresini ve dördüncü parametre ile bu fonksiyona geçirmek istediğimiz parametrenin değerini veriyoruz. PTHREAD kütüphanesindeki tüm fonksiyonlar ve veri yapıları pthread_ ön eki ile başlar. Aşağıdaki uygulamada (Kod-4.2) 5 adet iplik yaratılmaktadır. çalışmaya başladıktan sonra ekrana bir ileti gönderip uyutulmaktadır. Ebeveyn proses ise bu beş ipliğin işini bitirmesini beklemek üzere pthread_join çağrısı yapmaktadır. Yaratılan her ipliğe ulaşmak üzere pthread_t tipinde bir veri yapısı iliştirilir. Tüm PTHREAD kütüphane fonksiyonlarda iplik üzerinde işlem yapmak amacı ile referans olarak bu değer kullanılır. 5 S a y f a
6 Yaratılan ipliğin yürüteceği fonksiyon herhangi bir tipten değer alabilir ve benzer şekilde herhangi bir tipten değer döndürebilir. Parametre aktarımı pthread_create çağrısı ile iplik yaratılırken gerçekleşir: pthread_create( &tid[i], NULL, sleeping, (void *)(SLEEP_TIME+2*i) ); İpliğin döndürdüğü değere ise pthread_join çağrısı üzerinden erişilir: pthread_join( tid[i], (void **)&return_value); Kod 4.2: #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <iostream> using namespace std; #define NUM_THREADS 5 #define SLEEP_TIME 10 pthread_t tid[num_threads]; void* sleeping(void *); void thread_start() { for (int i = 0; i < NUM_THREADS; i++) { pthread_create( &tid[i], NULL, sleeping, (void *)(SLEEP_TIME+2*i)); void thread_wait() { int return_value; for (int i = 0; i < NUM_THREADS; i++) { pthread_join( tid[i], (void **)&return_value); cout << "Thread " << i << " joins...!" << endl ; void* sleeping(void * arg) { int sleep_time= *((int*)(&arg)); cout << endl << "Sleeping for " << sleep_time << " seconds" << endl ; sleep(sleep_time); 6 S a y f a
7 return ((void *)sleep_time); int main() { thread_start(); thread_wait(); return 0; Bazen iplik fonksiyonu birden fazla parametre alması ya da birden fazla değer döndürmesi gerekebilir. Bu durumda parametre ya da dönüş değeri için struct ile bir tip tanımlanır. Birden fazla değer struct alanları olarak tanımlanır: struct problem { long *begin; long *end; problem(long *_begin,long *_end): begin(_begin), end(_end){ ; Aşağıdaki örnekte yüz milyon elemanlı bir dizinin elemanları toplamı, çekirdek sayısı kadar iplik yaratılarak, paralel olarak çözülmeye çalışılmaktadır: Kod 4.3: #include <iostream> #include <pthread.h> #include <time.h> using namespace std; const long PROBLEM_SIZE= ; const int NUMBER_OF_CORE= pthread_num_processors_np(); struct problem { long *begin; long *end; problem(long *_begin,long *_end): begin(_begin), end(_end){ ; long numbers[problem_size]; void init_array(long *array,long size){ for (long i=0,*p=array;i<size;++i,++p) *p=i; void * parallel_sum(void* _problem){ problem* prob= (problem*) _problem; long sum=0; for (long *q=prob->begin;q!=prob->end;++q) { 7 S a y f a
8 sum += *q; return new long(sum); void serial_sum(long *array,int size){ long sum=0l; long* end=array+size; for (long *p=array;p!=end;++p) sum += *p; cout << "Sum (serial): " << sum << endl; int main(){ init_array(numbers,problem_size); pthread_t threads[number_of_core]; problem **probs= new problem*[number_of_core]; long per_thread= PROBLEM_SIZE / NUMBER_OF_CORE; long* beg= numbers; long* end= beg + per_thread; for (int i=0;i<number_of_core;++i){ probs[i]= new problem(beg,end); beg = beg + per_thread; end= end + per_thread; for (int i=0;i<number_of_core;++i){ pthread_create( threads+i, 0L, parallel_sum, (void*)probs[i] ); long sum=0l; for (int i=0;i<number_of_core;++i){ int *result; pthread_join(threads[i], (void**)&result); sum += *result; delete result; cout << "Sum (parallel): " << sum << endl; for (int i=0;i<number_of_core;++i){ delete probs[i]; delete[] probs; serial_sum(numbers,problem_size); 8 S a y f a
9 3.3 C++11 de İplik Yaratmak C++, 2011 yılında çıkan yeni sürümü ile günümüz modern programlama dillerinde bulunan birçok ileri düzey özelliğe kavuşmuştur. Nihayet paralel programlama için kullandığımız iplikler işletim sistemine bağımlı olmaktan kurtuldu ve dilin bir parçası haline geldi. C++11 de thread kütüphanesi ile gelen thread adında yeni bir sınıf yer alır. C++11 de iplik yaratmanın 3 farklı yolu vardır. 1. Fonksiyon kullanımı thread sınıfının kurucu fonksiyonu ilk parametre olarak çalıştırılacak fonksiyonu alır (Kod 4.4). Aşağıdaki örnekte t1 ve t2 adında iki iplik yaratılır. Bu iplikler hello fonksiyonunu çalıştırırlar. Kod 4.4: #include <iostream> #include <thread> using namespace std; void hello(){ cout << "Hello Mars!" << endl ; int main(){ thread t1(hello); thread t2(hello); t1.join(); t2.join(); cout << "Done." << endl; 2. struct Kullanımı Burada ilk önce, () operatörüne işlev yüklenen bir struct tasarlanır. thread sınıfının kurucu fonksiyonu ilk parametre olarak tasarlanan bu struct bir nesne alır (Kod 4.5). Aşağıdaki örnekte t1 ve t2 adında iki iplik yaratılır. Bu iplikler struct içinde tanımlı void operator()() fonksiyonunu çalıştırırlar. Kod 4.5: #include <iostream> #include <thread> using namespace std; struct fun { void operator()(){ cout << "Hello Mars!" << endl ; ; 9 S a y f a
10 int main(){ thread t1((fun())); thread t2((fun())); t1.join(); t2.join(); cout << "Done." << endl; 3. İfadesi Kullanımı C++11 ile birçok yenilik geldi. Bu yeniliklerden bir diğeri, C++11 de artık fonksiyonel programlama yapılabiliyor olmamızdır. thread sınıfının kurucu fonksiyonu ilk parametre olarak artık ifadesi alabiliyor (Kod 4.6). Aşağıdaki örnekte t1 ve t2 adında iki iplik yaratılır. Bu iplikler run ve gun isimli ifadelerini çalıştırırlar. Kod 4.6: #include <iostream> #include <thread> using namespace std; int main(){ function<void()> run =[](){ cout << "Run forrest run!" << endl; ; auto gun = [](){ cout << "Hello Mars!" << endl; ; thread t1(gun); thread t2(run); t1.join(); t2.join(); cout << "Done." << endl; İplik fonksiyonuna parametre aktarmak mümkündür. Bunun için basitçe thread sınıfının yapıcısına çalıştırılacak fonksiyondan sonra sırayla parametre değerleri geçilir (Kod 4.7): thread t1(f,4) ve thread t2(f,8). Kod 4.7: #include <thread> #include <iostream> using namespace std; struct fun { void operator()(int value){ cout << "value= " << value << endl; 10 S a y f a
11 ; int main(){ fun f; thread t1(f,4); thread t2(f,8); t1.join(); t2.join(); Aşağıdaki örnekte yüz milyon elemanlı bir dizinin elemanları toplamı, çekirdek sayısı kadar iplik yaratılarak, paralel olarak çözülmeye çalışılmaktadır (Kod 4.8). PTHREAD kullanılarak verilen çözüm ile karşılaştırıldığında C++11 de daha az kod yazılarak çözüme ulaşıldığı görülebilir. Kodda karşılaştığınız auto, async ve future C++11 ile gelen yenilikler. async ile yarattığımız ipliğin ürettiği sonuca future üzerinden asenkron bir şekilde erişilebilir. future sınıfının get çağrısını yapan proses, eğer iplik sonlanmamış ise bloke olmasına neden olur. Bloke olan proses iplik tamamlandığında kaldığı yerden devam eder. Eğer get çağrısı yapıldığında iplik sonlanmış ise çağrıyı yapan proses bloke olmadan sonucu ulaşır. Kodda üretken programlamanın (=Generic Programming) gücü hissediliyor. Aynı testi std::vector ile kodda neredeyse hiçbir değişiklik yapmadan gerçekleştirebiliriz. Kod 4.8: #include <iostream> #include <thread> #include <future> #include <algorithm> using namespace std; const int SIZE= ; int numbers[size]; template <typename iter> void init_problem(iter beg,iter end){ int i=1; for (iter p=beg;p!=end;p++,++i) *p= i; template <typename iter> int parallel_sum(iter begin, iter end){ long len= distance(begin,end); if (len <= ){ return accumulate(begin,end,int()); iter mid= begin + len /2; auto handle_left= async(launch::async,parallel_sum<iter>,begin,mid); auto handle_right= async(launch::async,parallel_sum<iter>,mid,end); 11 S a y f a
12 return handle_left.get()+ handle_right.get(); int main(){ init_problem(numbers,numbers+size); int sum= parallel_sum(numbers,numbers+size); cout << "Sum (parallel): " << sum << endl ; 3.4 Java 8 de İplik Yaratmak Java 8 platformu üzerinde veri paralelliğini üç yöntemle gerçeklemek mümkündür. 1. Callable, Future ve Executor Kullanımı Java programlama dili ilk çıktığından itibaren ipliklerle programlama için bir çözüm sunuyor. Runnable arayüzünü gerçekleyen bir sınıf tasarlamakla işe başlıyoruz: public class HelloRunner implements Runnable public void run(){ System.out.println("Hello Mars!"); Ardından HelloRunner sınıfından bir nesne yaratıyoruz: HelloRunner runner= new HelloRunner(); Son olarak Thread sınıfından bir nesne yaratıyoruz ve Thread kurucusuna runner nesnesini parametre olarak veriyoruz: Thread t= new Thread(runner); C++11 deki thread sınıfından farklı olarak, Java da Thread sınıfından nesne yaratmak, ipliğin çalışması için yeterli değildir. Son olarak start metodunun çalıştırılması gerekir: t.start(); Runnable ipliklerin en kötü yönü run() metodunun herhangi bir parametre alamaması ve ipliğin bir değer döndürememesidir. Bu yüzden görevi yaratan iplik ile sonucu üretecek iplik arasında mutlaka bir eş güdüm oluşturmak gerekir. Java SE 5 ile gelen Callable arayüzü ile artık sonucu call() metodundan dönmek ve Future arayüzünün get() çağrısı ile bu sonuca asenkron bir şekilde ulaşmak mümkündür. C++11 in future sınıfı ile Java nın Future sınıfı aynı işlevi sunmaktadır. Java SE 5 ile gelen yeniliklerden biri de İplik havuzudur (=Thread Pool). Farklı havuz türleri ihtiyaca göre seçilebilir: Her zaman sabit sayıda ipliğin yer aldığı Fixed Thread Pool, Parlamalı çalışma modu için Cached Thread Pool, Yığın işler için Single Thread Pool, Periyodik işler için Scheduled Thread Pool. Ancak buradaki tüm yapılar alt düzeydedir. Bu yüzden bu yapı üzerinde uygulama geliştirmek vakit alır, test etmesi zordur, yarış durumları (=race conditions) ve ölümcül kilitlenme (=deadlock) gibi durumların iyi düşünülmüş olması gerekir. Örnek uygulama için kullanılan alan sınıfı Kod 4.9 da verilmiştir. Burada amacımız 60 milyon Programmer nesnesi arasından, 40 yaşın üstünde "en bilgili" Java programcısını bulmaktır. 12 S a y f a
13 Kod 4.9: public class Programmer implements Serializable { private int id; private String name; private String surname; private int age; private ProgrammingLanguage programminglanguage;... public class ProgrammingLanguage implements Serializable { private String name; private int level;... Önce seri çözüme bir bakalım. Seri çözümde liste içindeki Programmer sınıfı nesnelerini teker teker ziyaret edip en deneyimli Java programcısını tek bir iplik kullanarak bulmaya çalışıyoruz (Kod 4.10). Kod 4.10: private static Programmer serialsolve(list<programmer> list) { Programmer oldest = null; for (Programmer programmer : list) { if (programmer.getage() > 40 && programmer.getprogramminglanguage().getname().equalsignorecase("java")) { if (oldest == null) { oldest = programmer; else if (programmer.getprogramminglanguage().getlevel() > oldest.getprogramminglanguage().getlevel()) { oldest = programmer; return oldest; Callable iplik kullanılan çözüm ise Kod 4.11 de verilmiştir. Kod 4.11: private static long callablethread(list<programmer> list) throws InterruptedException { Programmer oldest = null; int numberofsegments = DATA_SIZE / SERIAL_THRESHOLD; ExecutorService es = Executors.newFixedThreadPool( Runtime.getRuntime().availableProcessors()); List<Callable<Programmer>> callables = new ArrayList<>(numberOfSegments); for (int i = 0, j = 0; 13 S a y f a
14 i < numberofsegments; ++i, j += SERIAL_THRESHOLD) { callables.add( new ProcessingThread(j, SERIAL_THRESHOLD, list) ); List<Future<Programmer>> partialsolutions = es.invokeall(callables); try { oldest = partialsolutions.get(0).get(); for (int i = 1; i < partialsolutions.size(); ++i) { Programmer programmer = partialsolutions.get(i).get(); if (programmer.getprogramminglanguage().getlevel() > oldest.getprogramminglanguage().getlevel()) { oldest = programmer; catch (InterruptedException ExecutionException ex) { System.err.println(ex.getMessage()); es.shutdown(); return oldest; public class ProcessingThread implements Callable<Programmer> { private final int start; private final int length; private final List<Programmer> list; public ProcessingThread(int start, int length, List<Programmer> list) { this.start = start; this.length = length; this.list = public Programmer call() throws Exception { Programmer oldest = list.get(start); Programmer programmer; for (int i = start + 1, j = 1; j < length; ++j, ++i) { programmer = list.get(i); if (programmer.getage() > 40 && programmer.getprogramminglanguage().getname().equalsignorecase("java")) { if (programmer.getprogramminglanguage().getlevel() > oldest.getprogramminglanguage().getlevel()) { oldest = programmer; return oldest; 14 S a y f a
15 2. Fork/Join Çatısının (=Framework) Kullanımı Geliştirdiğimiz uygulamaların yüksek başarımla çalışması hepimizin arzu ettiği bir durum. Ancak bu her zaman ulaşılması kolay bir hedef olmayabilir. Özellikle günümüzde yazılımdan beklentilerin sürekli arttığı göz önüne alındığında, bu hedefe ulaşmak daha da zorlaşmaktadır. Başarımı iyileştirmeyi mutlaka yazılım geliştirme sürecinin (müşteriden isteklerin alınması, sistem çözümleme, detaylı tasarım, mimari tasarım, gerçekleme, sınama, bakım) bir parçası haline getirmeliyiz. Başarımı en iyilemek yazılım ortaya çıktıktan sonra yapılan bir etkinlik olmamalı. Java uygulamalarının başarımının en iyilenmesi ise farklı katmanlarda çalışmayı gerektirir. Donanım katmanı, İşletim sistemi katmanı, Java Sanal Makinası (JSM) katmanı ve elbette uygulama katmanı. Burada yer alan her bir katmandaki başarımı artırmak için ne yazık ki elimizde sihirli bir değnek bulunmuyor. Donanım katmanındaki gelişmeler elimizi güçlendiriyor: Çok çekirdekli mimariler, büyük bellekli bilgisayar sistemleri, daha yüksek kapasiteli cep bellekler (L0, L1, L2, L3), katı hal diskler, daha hızlı ara bağlaşım birimleri, çok çekirdekli yüksek başarımlı ekran kartı işlemcileri. İşletim sistemleri bu donanım kaynaklarını uygulamalar ve kullanıcılar arasında verimli bir şekilde dağıtmaktan ve yönetmekten sorumlu çok sayıda servisten oluşuyor: proses sıralayıcı, sanal bellek yönetimi, giriş/çıkış yönetimi, kullanıcı yönetimi, dosya sistemi, pencereleme sistemi. Linux (Red Hat, Suse), Unix (Oracle Solaris, IBM AIX, HP-UX), Microsoft Windows gibi işletim sistemleri bu güncel sistem kaynaklarını iyi yönettikleri söylenebilir. Yine de genel amaçlı işletim sistemi olmalarından kaynaklanan bazı darboğazlar yaşıyorlar. Java uygulamaları doğrudan işletim sistemi üzerinde çalışmazlar. Bir sanal makinaya ihtiyaç duyarlar: Java Sanal Makinası (JSM). JSM'nin görevi, kabaca, Java uygulamalarını oluşturan bytecode olarak isimlendirilen makina komutlarını, üzerinde çalıştığı işletim sisteminin ve işlemcinin anlayacağı ve çalıştırabileceği forma çevirmektir. Java platformunun en güçlü tarafının JSM olduğu söylenebilir. JSM bu dönüşümü yaparken devingen en iyileme yapabilmektedir. C/C++'da kod yazdığınızda ise derleyici ancak durağan en iyileme yapabilir. Durağan en iyileme ise başarımda kısıtlı bir iyileşme sağlayabilir. JSM içinde başarımı belirlemede önemli işlevi olan iki bileşen yer alır: Tam Anında Derleme ve Çöp Toplayıcı. Java uygulamaları çalışmaya başladıklarında yorumlamalı olarak çalışırlar. JSM uygulamayı çalıştırırken kesitini de alır. Eğer bir iyileştirme görüyorsa sınıf metotlarını bytecode'dan işlemcinin doğrudan çalıştırabileceği doğal komutlara dönüştürür. JSM satın alabileceğiniz, üretebileceğiniz bir işlemci tanımlar. Bu işlemcinin bir komut kümesi, yığın temelli adresleme kipleri, saklayıcı kümesi, yığın göstergesi, program sayacı, bellek modeli vardır. Çoğu zaman JSM'yi yazılımsal olarak ediniriz. Oracle, hemen hemen tüm işletim sistemleri için bir JSM yayınlıyor. Bu adresten elinizdeki işletim sistemi için bir JRE ya da JDK indirebilirsiniz. Eğer amacınız sadece Java uygulamalarını çalıştırmak ise Java Runtime Environment (JRE) yeterli olacaktır. Eğer uygulama geliştirmek isterseniz Java Geliştirme Çantasını (Java Development Kit, JDK) indirmeniz gerekir. Bu yazının yazıldığı tarihte, Java nın 8 sürümü vardı. Her yeni sürümde dilde bazı eklentiler, mevcut API'lerde değişiklikler ve yeni API'ler ile tanışıyoruz. Bu arada yeni sürümlerde bazen JSM'de de değişiklikler olabiliyor. Şu ana kadar ki yeni sürümlerde Java 1.2 ve Java SE 5'de dilde ciddi sayılabilecek yenilik geldi. Java 7 ile dilde gelen yenilikler daha çok geliştiricinin kodlama başarımını iyileştiren 15 S a y f a
16 türden. Java 7 de, Böl/Katıl çatısı olarak adlandırılan çok çekirdekli sistemlerde uygulama geliştirmek için yeni bir çözüm bulunuyor. Bu çözüm, Concurrency API ile gelen yeni bir iş parçası havuzu olan ForkJoinPool ve bu havuza atayacağımız iş parçacıklarını tanımladığımız RecursiveAction ve RecursiveTask sınıflarını kullanmaktadır. Fork/Join çatısı 1'e göre kodlaması daha kolay olsa da hala alt düzey bir API sunmaktadır. Üstelik problemi iki alt parçaya ayırmak ile seri olarak çözümü arasında genellikle veri boyutu üzerinden verilmesi gereken bir karar vardır. Fork/Join çatısı kullanılarak elde edilen çözüm ise Kod 4.12 de verilmiştir. Kod 4.12: private static long forkjoin(list<programmer> list) { long start = System.nanoTime(); ForkJoinPool pool = new ForkJoinPool(); ForkListProcessing flp = new ForkListProcessing(0, list.size(), list); Programmer oldest = pool.invoke(flp); System.err.println("Oldest [FJ]: " + oldest); long stop = System.nanoTime(); return (stop - start); public class ForkListProcessing extends RecursiveTask<Programmer> { private final int start; private final int length; private final List<Programmer> list; private static final int SERIAL_THRESHOLD = 5_000_000; public ForkListProcessing(int start, int length, List<Programmer> list) { this.start = start; this.length = length; this.list = public Programmer compute() { if (length <= SERIAL_THRESHOLD) { return serialsolver(); else { int startleft = start; int lengthleft = length / 2; int startright = start + lengthleft; int lengthright = length - lengthleft; RecursiveTask<Programmer> left = new ForkListProcessing(startLeft, lengthleft, list); RecursiveTask<Programmer> right = new ForkListProcessing(startRight, lengthright, list); left.fork(); right.fork(); Programmer leftsolution = left.join(); Programmer rightsolution = right.join(); if (leftsolution.getprogramminglanguage().getlevel() >= 16 S a y f a
17 rightsolution.getprogramminglanguage().getlevel()) { return leftsolution; else { return rightsolution; private Programmer serialsolver() { Programmer oldest = list.get(start); Programmer programmer; for (int i = start + 1, j = 1; j < length; ++j, ++i) { programmer = list.get(i); if (programmer.getage() > 40 && programmer.getprogramminglanguage().getname().equalsignorecase("java")) { if (programmer.getprogramminglanguage().getlevel() > oldest.getprogramminglanguage().getlevel()) { oldest = programmer; return oldest; 3. Dönüştür-İndirge (=Map-Reduce) Çatısının Kullanımı Dönüştür-İndirge çatısı Java SE 8 ile gelmiştir ve alt tarafta Fork/Join çatısını kullanır. Collection API ile hazır olarak gelen paralel kaplar ve Dönüştür-İndirge çerçevesi kullanılarak, çekirdek sayısına göre ölçeklenebilir çözümlere hızlıca ulaşabilir. Dönüştür-İndirge çerçevesi kullanılarak elde edilen çözüm ise Kod 4.13 de verilmiştir. Koddan görüldüğü gibi Java 8 soyutlama düzeyini en üst düzeye çıkarıyor. Hiç iplik kullanmadan aynı problemi paralel olarak çözmeyi başardık. Bunu sağlayan Java 8 ile birlikte gelen Stream API sidir. Stream bir iş hattı gibi düşünülebilir. İş hattından sadece Programmer sınıfından nesneler akıyor. Bu nesneler akarken yapılacak işleri bir metot zinciri olarak verebiliyoruz: filter() ve reduce(). filter() ile akan nesneler arasından seçim yapabiliyoruz. İş hattından, sadece verdiğimiz koşula uyan programcıların akmasını sağlıyoruz. 17 S a y f a
18 Kod 4.13: private static Programmer mapreduce(list<programmer> list) { long start = System.nanoTime(); Programmer oldest = list.parallelstream().filter( (Programmer prg) -> prg.getage() > 40 && prg.getprogramminglanguage().getname().equalsignorecase("java") ).reduce( (left, right) -> left.getprogramminglanguage().getlevel() >= right.getprogramminglanguage().getlevel()? left : right ).get(); return oldest; 18 S a y f a
İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri
İş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ı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ı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ı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ı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ıGiriş. geleneksel işletim sistemlerinde her prosesin. aynı adres uzayında birden fazla akış kontrolü gerekebilir
3 İPLİKLER Giriş geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü var. aynı adres uzayında birden fazla akış kontrolü gerekebilir aynı adres uzayında çalışan paralel
DetaylıBMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama
BMS-302 İleri Web Programlama İş Parçacığı (Thread) ve Soket (Socket) Programlama İş Parçacıkları (Threads) Ana programa paralel çalışan işler oluşturmak için kullanılır Makine birden fazla çekirdeğe sahipse
DetaylıC++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié
Kullanılacak kaynak: http://www.cplusplus.com/doc/tutorial/ Published by Juan Soulié C++ Nedir? Arttırılmış C demektir ve C dilinin geliştirilmiş halini yansıtır. C++ öğrenmeden önce herhangi bir programlama
DetaylıC++ Dersi: Nesne Tabanlı Programlama
C++ Dersi: Nesne Tabanlı Programlama Bölüm 11: Bileşim, Arkadaş ve Diğer Araçlar İçerik Bileşim Arkadaş Fonksiyonlar ve Sınıflar Arkadaş Fonksiyonlar Arkadaş Sınıflar Sabit Nesneler Sabit Üye Fonksiyonlar
DetaylıBM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü
BM-209 Nesne Yönelimli Programlama Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü Java Programlama Dili Java bayt kodları Java Sanal Makineleri üzerinde
Detaylıİş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ıNesne İşaretçileri. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik
Binnur Kurt kurt@ce.itu.edu.tr Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi Sınıf Yapısı Kalıtım Çok Şekillilik Nesneye Dayalı Programlama 2 1 İşaretçiler, veri değil, verinin yerleşik bulunduğu
DetaylıGiriş. İplik Modeli. geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü var.
Giriş 3 İPLİKLER geleneksel işletim sistemlerinde her in özel adres uzayı ve tek akış kontrolü var. aynı adres uzayında birden fazla akış kontrolü gerekebilir aynı adres uzayında çalışan paralel ler gibi
DetaylıAndroid e Giriş. Öğr.Gör. Utku SOBUTAY
Android e Giriş Öğr.Gör. Utku SOBUTAY Android İşletim Sistemi Hakkında 2 Google tarafından geliştirilmiştir. Dünyada en çok kullanılan mobil işletim sistemidir. 2018 itibariyle Dünyada Android; %78.65,
DetaylıAkıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların
Akıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların bilgilerini saklamalarına, program yüklemelerine izin
DetaylıİŞ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ıJava da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )
Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism ) BBS-515 Nesneye Yönelik Programlama Ders #9 (16 Aralık 2009) Geçen ders: Java Applet lerde bileşen yerleştirme türleri ( applet layouts
Detaylı1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.
1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız. [10 puan] int param = 30; int result = 300; if (param > 45) result
DetaylıSunum İçeriği. Programlamaya Giriş 22.03.2011
Programlamaya Giriş Nesne Tabanlı Programlamaya Giriş ve FONKSİYONLAR Sunum İçeriği Nesne Tabanlı Programlama Kavramı Fonksiyon tanımlama ve kullanma Formal Parametre nedir? Gerçel Parametre nedir? Fonksiyon
Detaylıİşletim Sistemleri. Dr. Binnur Kurt binnur.kurt@gmail.com. Omega Eğitim ve Danışmanlık http://www.omegaegitim.com. İşletim Sistemleri
İş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. 6. Prosesler
Detaylı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ı1 PROGRAMLAMAYA GİRİŞ
İÇİNDEKİLER IX İÇİNDEKİLER 1 PROGRAMLAMAYA GİRİŞ 1 Problem Çözme 1 Algoritma 1 Algoritmada Olması Gereken Özellikler 2 Programlama Dilleri 6 Programlama Dillerinin Tarihçesi 6 Fortran (Formula Translator)
Detaylı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ı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ıKOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ
KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ ELEKTRONİK VE HABERLEŞME MÜHENDİSLİĞİ Nesneye Yönelik Programlama C++ ile Beaglebone Black de Bluetooth Haberleşmesi Danışman: Yrd. Doç. Dr. Mehmet YAKUT Sinan
DetaylıİŞ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ı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ı4. Bölüm Programlamaya Giriş
4. Bölüm Programlamaya Giriş Algoritma ve Programlamaya Giriş Dr. Serkan DİŞLİTAŞ 4.1. C# ile Program Geliştirme Net Framework, Microsoft firması tarafından açık internet protokolleri ve standartları
Detaylı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ıC++ Dersi: Nesne Tabanlı Programlama
C++ Dersi: Nesne Tabanlı Programlama Bölüm 14: Çoklu İşlev İçerik Çoklu İşlevin Gerçekleştirilmesi Saf Sanal Fonksiyonlar ve Soyut Sınıflar Sanal Yıkıcı Fonksiyonlar Statik ve Dinamik Bağlama 2 Çoklu İşlev
DetaylıDiziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU
Diziler Yrd.Doç.Dr.Bülent ÇOBANOĞLU Dizi (Array) Nedir? Bellekte sürekli yer kaplayan artarda sıralanmış aynı türden verilerin oluşturduğu kümeye dizi (array) denir. Dizi, çok fazla miktardaki tek tip
DetaylıBilgisayar İşletim Sistemleri BLG 312
Bilgisayar İşletim Sistemleri BLG 312 İşletim Sistemlerine Giriş Bilgisayar Sistemi uygulama programları derleyici editör komut yorumlayıcı işletim sistemi makina dilinde programlar mikroprogram (ROM da)
DetaylıNESNEYE YÖNELİK PROGRAMLAMA
NESNEYE YÖNELİK PROGRAMLAMA İŞARETÇİ ELEMANLI SINIFLAR REFERANSLAR OPERATÖRLERİN AŞIRI YÜKLENMESİ ATAMA OPERATÖRÜ Özlem AYDIN Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü İşaretçi Elemanlı Sınıflar
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 Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu bulunmaktadır; Performans:
DetaylıYrd. Doç. Dr. Caner ÖZCAN
Yrd. Doç. Dr. Caner ÖZCAN Fonksiyonu Referans ile Çağırma (Call by Reference) Bir fonksiyona gönderilen parametrenin normalde değeri değişmez. Fonksiyon içinde yapılan işlemlerin hiçbiri argüman değişkeni
DetaylıSınav tarihi : Süre : 60 dak.
Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Final Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 31.05.2016 Süre : 60 dak. 1. Ekranda ne görüntülenir? int i =
DetaylıBĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ http://www.cplusplus.com/doc/tutorial/ Published by Juan Soulié
BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ http://www.cplusplus.com/doc/tutorial/ Published by Juan Soulié DERSİN WEB SİTESİ: http://nucleus.istanbul.edu.tr/~bilprog2/ DeğiĢkenler ve Data Türleri
DetaylıYZM 2105 Nesneye Yönelik Programlama
YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 5 Nesneye Yönelik Programlamaya Giriş Bu
DetaylıBölüm 9. Altprogramlar ISBN
Bölüm 9 Altprogramlar ISBN 0-321-49362-1 Giriş Bu bölümde, programlarda sıkça kullanılan işlemlerin bir araya gruplanması ile oluşturulan altprogramlar incelenecektir. Altprogramlar sayesinde bir programda
DetaylıBölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN 0-321-49362-1
Bölüm 11 Soyut veri tipleri ve kapsülleme kavramları ISBN 0-321-49362-1 11. Bölüm konuları Soyutlama kavramı Veri soyutlamasına giriş Soyut veri tipleri için tasarım konuları Dil örnekleri Parametreli
Detaylı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ı// hataları işaret eden referans
System sınıfı java.lang.object java.lang.system public final class System extends Object System sınıfı, java.lang paketi içindedir. Platformdan bağımsız olarak sistem düzeyindeki eylemleri belirleyen dingin
Detaylı/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/
Ana Main Kodları /*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/ package javaapplication1; public class JavaApplication1 public static void
DetaylıSüreç 1 Kavramı ve Oluşturma Yöntemleri
İçindekiler Süreç Kavramı ve Oluşturma Yöntemleri...2 UNIX / Linux Sistemlerinde fork ve exec Sistem Çağrıları İle Süreç Kopyalama ve Çalıştırma...3 Thread Kavramı...7 Thread lerin İşletim Sistemleri Tarafından
DetaylıBİL132 Bilgisayar Programlama II
BİL132 Bilgisayar Programlama II 8. Olağandışı durumlar (exceptions) Hacettepe Üniversitesi Bilgisayar Mühendisliği Bölümü Yüksel Tarhan Olağandışı durum Kütük bulunamadı Diskte yer kalmadı Nesne referans
DetaylıC++ ile Nesneye Dayalı Programlama
Nesne İşaretçileri Binnur Kurt kurt@cs.itu.edu.tr Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi C++ ile Nesneye Dayalı Programlama 1 Sınıf Yapısı Kalıtım Nesneİşaretçileri Çok Şekillilik
DetaylıTEMPLATES. Binnur Kurt kurt@cs.itu.edu.tr. Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1
PARAMETRİKÇOKŞEKİLLİLİK: TEMPLATES Binnur Kurt kurt@cs.itu.edu.tr Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi C++ ile Nesneye Dayalı Programlama 1 Sınıf Yapısı Kalıtım Çok Şekillilik Templates
DetaylıTemel Bilgisayar Bilimleri Ders Notu #4-2. kısım
Nisan 2009 9031150 - Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım Referans: Bugün: 1. Ders Notları. Ders #4.1 Tekrar Dowhile ve for döngüleri Diziler Göstergeler 1. Tekrar for döngüleri Genel yazılımı
Detaylıİsimler ve Kapsam. 24 Şubat 2011. Programlama Dilleri - Pamukkale Üniversitesi 1
İsimler ve Kapsam Tanım: Bir değişkenin kapsamı (scope) değişkenin görülebilir olduğu komutların alanıdır. Görülebilir olduğu alan, bir komut içinde belirlenen değerle kullanılabildiği alandır. Tanım:
DetaylıJava 2 Standart Edition SDK Kurulum ve Java ya Giriş
Kurulum için ilk önce Sun Microsystems in sitesinden uygun J2SE sürümünü indirin. Ben J2SE v1. 4. 2_16 Windows Installer paketini kullandım J2SE SDK Kurulumu aşağıdaki gibi başlayacaktır. 1 Kurulum tamamlandıktan
DetaylıEclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2
1 Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2 Eclipse Mimarisi 4 Java Teknolojisine Genel Bir Bakış 6 Taşınabilirlik 6 Java Derleyicisi ve Bytecode 6 Java Sanal Makinası (Java Virtual Machine - JVM)
DetaylıC++0x - Sağ Taraf Değerine Bağlanan Referanslar (Rvalue References)
C++0x - Sağ Taraf Değerine Bağlanan Referanslar (Rvalue References) Kaan Aslan 25 Ağustos 2008 C++ a eklenmesine karar verilen yeni bir özellik de sağ taraf değerine bağlanan referanslardır. C++0x standart
Detaylıİşletim Sistemleri. Dr. Binnur Kurt binnur.kurt@gmail.com. Omega Eğitim ve Danışmanlık http://www.omegaegitim.com. İşletim Sistemleri
İş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. 4. İplikler 5. Arası İletişim 6. İş
Detaylıİşletim Sistemleri. Dr. Binnur Kurt binnur.kurt@gmail.com. Omega Eğitim ve Danışmanlık http://www.omegaegitim.com. İşletim Sistemleri
İş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 İçindekiler 1. 2. Kabuk 3. Prosesler 4. İplikler 5. Prosesler Arası İletişim
DetaylıLecture 11: Generics
BLM202E Data Structures Lecture 11: Generics Bilgisayar Mühendisliği Bölümü Öğr. Gör. Musa AYDIN 2014 2015 (Bahar) BLM202E Data Structures - 2015 Spring Java programlama dilinin güçlü özelliklerinden biri
DetaylıOperatörlere Yeni İşlevler Yüklenmesi (Operator Overloading)
Operatörlere Yeni İşlevler Yüklenmesi (Operator Overloading) C++ da hazır olarak var olan operatörlere (+, -, *, /,!,
DetaylıPORT HABERLEŞME SERİ PORT FARUK BOZAN
PORT HABERLEŞME SERİ PORT FARUK BOZAN farukbozan@javatiryakileri.com bozanfaruk@gmail.com Merhaba değerli Java dostları. Bu yazımızda port haberleşme konusuna değineceğiz. Yalnız şu noktaya dikkatinizi
DetaylıQt ile Bir Ağ Uygulaması
Qt ile Bir Ağ Uygulaması Aykut Aksoy aykutaksoy@myway.com sürüm 1.0 Özet Bu belge Qt ile hazırlanmış bir ağ uygulamasını anlatır. C++ bilinmesi beklenir. Bu belgede "QProcess.h" kütüphanesine ağırlık verilmiştir.
DetaylıBTEP243 Ders 3. class Yazım Kuralı:
BTEP243 Ders 3 Sınıflar ve Nesneler Nesne tabanlı programlamada, programlamanın temeli sınıflardır (class). Nesnelerin yaratılmasında taslak (blueprint) görevi görür. Sınıflar; o Nesnelerin özelliklerinin
DetaylıC++ Dersi: Nesne Tabanlı Programlama
C++ Dersi: Nesne Tabanlı Programlama Bölüm 9: Sınıf İçerik Sınıf Tanımı Nesne Tanımı İkili Kapsam Çözme Operatörü UML ile Sınıfların Gösterimi 2 Sınıf kavramı, nesne-tabanlı programlamanın temelini oluşturur.
DetaylıFonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {
Fonksiyonlar Kendi içinde bağımsız olarak çalışabilen ve belli bir işlevi yerine getiren program modülleridir. C programları bu modüllerden (fonksiyonlar) oluşurlar. Fonksiyonların yazılmasındaki temel
Detaylı10/17/2007 Nesneye Yonelik Programlama 3.1
Procedure-Based Programming in C++ Çoğu gerçek dünya problemleri binlerce kod satırı gerektirir ( MS Windows NT 5.0 25 million dan fazla kod satırından oluşmaktadır). Yazılımın tasarımı, kodlanması ve
DetaylıNESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR Özlem AYDIN Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü Not: Bu sunumda Prof. Dr. Yılmaz KILIÇASLAN ın Nesneye Yönelik Programlama dersi sunumlarından faydalanılmıştır.
DetaylıNESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş
Özlem AYDIN NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü C DİLİNİN BİR ÜST-KÜMESİ OLARAK C++ Genel olarak, C de mevcut olan her şey C++ da da vardır. C dilinde
DetaylıString ve Karakter Dizileri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü
String ve Karakter Dizileri #include Temel giriş çıkış akımları nesnelerinin tanımlandığı kütüphanedir. cin,cout,cerr,clog, wcin,wcout,wcerr,wclog nesneleri içerir. using namespace std; //std
DetaylıC de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma
C de Detaylı Üs Alma Programı Bu uygulama yazısında C de pow() fonksiyonunu kullanmadan üs hesabı yapan programı yazmaya çalıştım. Başta tanımladığım float tipinde 2 fonksiyon sayesinde + lı ve li üs değerleriyle
DetaylıBil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi
Bil101 Bilgisayar Yazılımı I Bilgisayar Yüksek Mühendisi Editör Disk 1)Kaynak kodlar editör aracılığı ile oluşturulur. (.c) Kaynak dosya Önişleyici Disk 2)Önişleyici kodlar içerisindeki ilk işleme işini
DetaylıBBS515 Nesneye Yönelik Programlama. Ders 1 Zümra Kavafoğlu
BBS515 Nesneye Yönelik Programlama Ders 1 Zümra Kavafoğlu Dersin Amacı Nesneye Yönelik Programlama Kavramını Java Dili Üzerinden Öğrenmek Nesneye yönelik programlama ile ilgili nesne, sınıf, kalıtım, çok
DetaylıGörsel Programlama DERS 11. Görsel Programlama - Ders11/ 1
Görsel Programlama DERS 11 Görsel Programlama - Ders11/ 1 ÇOKLU KULLANIM(Multi Threading) Günümüz işletim sistemleri çok görevli(multi tasking) dir. Aynı anda farklı programlar çalışmakta, görevler yerine
DetaylıBLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)
1 BLM 112- Programlama Dilleri II Hafta 5 İşaretçiler (Pointers) Dr. Öğr. Üyesi Caner Özcan Hiç hata yapmayan insan, hiçbir şey yapmayan insandır. Ve hayatta en büyük hata, kendini hatasız sanmaktır. ~Y.
DetaylıBİLG Dr. Mustafa T. Babagil 1
BİLG214 20.10.2009 Dr. Mustafa T. Babagil 1 Yapısal bilgi türlerinin tanımlanması. (C++ daki struct yapısı. ) Daha önce öğrenmiş olduğumuz bilgi tipleri char, int ve float v.b. değişkenler ile dizi (array)
DetaylıPROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.
PROGRAMLAMAYA GİRİŞ Öğr. Gör. Ayhan KOÇ Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay., 2007 Algoritma ve Programlamaya Giriş, Ebubekir YAŞAR, Murathan Yay., 2011
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 KONU BAŞLIKLARI 1. Yazılım Mimarisi nedir? 2. Yazılımda Karmaşıklık 3. Üç Katmanlı Mimari nedir? 4. Üç Katmanlı Mimari
Detaylıİş Parçacıkları Thread(s)
İş Parçacıkları Thread(s) Bir çok geliştirici programlarını doğrusal(linear) bir şekilde oluşturmaktadır. Böyle bir durumda tek bir processin işini bitirmesi beklenmekte ve ardından bir sonraki kod parçasına
DetaylıBMH-303 Nesneye Yönelik Programlama
BMH-303 Nesneye Yönelik Programlama Kurucu metotlar (constructors) ve statik deyimi Dr. Musa ATAŞ Siirt Üniversitesi Bilgisayar Mühendisliği Kurucu Metotlar (Constructors) Kurucu metot çeşitleri Varsayılan
Detaylıişlemler bittikten sonra dosyaların kapatılması uygun olacaktır. Bunun için, fclose(fin);
case 2 : C = 0.5088-0.0011*(B-135); break; case 3 : C = 0.4978-0.0010*(B-145); break; case 4 : C = 0.4878-0.0009*(B-155); break; default : printf("yanlış seçenek\n");} cout
Detaylıpublic class SalesLineItem // Java { private int quantity; private ProductSpecification description; public Money getsubtotal() {...
Kodlama Sınıf tanımları yazılım sınıflarının diyagramlarından yararlanılarak oluşturulur. Karmaşık veri tiplerine (örneğin sınıf) sahip üyeler referans ya da işaretçi olarak yaratılmalılar. Basit nitelik
Detaylıİş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ıC++ Dersi: Nesne Tabanlı Programlama
C++ Dersi: Nesne Tabanlı Programlama Bölüm 6: Diziler İçerik Diziler Dizi Elemanlarına İlk Atama Diziler ve Fonksiyonlar İki Boyutlu Diziler İki Boyutlu Dizi Tanımı İki Boyutlu Dizi Elemanlarına Erişim
DetaylıPointers (İşaretçiler)
Pointers (İşaretçiler) Pointers (İşaretçiler) Verilerin bilgisayar hafızasında tutulduğu fiziki alan adres olarak tanımlanabilir. Adres, hem donanımla hem de yazılımla ile ilişkilidir. Donanımsal açıdan
DetaylıBinnur Kurt binnur.kurt@ieee.org. İstanbul Teknik Üniversitesi Bilgisayar MühendisliM
İşletim Sistemleri Binnur Kurt binnur.kurt@ieee.org İstanbul Teknik Üniversitesi Bilgisayar MühendisliM hendisliği i BölümüB İşletim Sistemleri Copyright 2005 1 Version 0.0.1 About the Lecturer BSc İTÜ,
DetaylıOperator Aşırı Yükleme (Operator OverLoading)
Operator Aşırı Yükleme (Operator OverLoading) Operator Aşırı Yükleme Operatör metotları bir nesnenin ifadeler içinde operatörlerle kullanıldığı zaman davranışını belirler. Temel veri türleri için operatörler
DetaylıPROGRAMLAMAYA GİRİŞ FONKSİYONLAR
PROGRAMLAMAYA GİRİŞ FONKSİYONLAR Fonksiyonlar C programlama dili fonksiyon olarak adlandırılan alt programların birleştirilmesi kavramına dayanır. Bir C programı bir ya da daha çok fonksiyonun bir araya
Detaylıİsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI
BLG339 PROGRAMLAMA DİLLERİ KAVRAMI Hafta 4 Ders 2 Yrd. Doç. Dr. Melike Şah Direkoğlu Alındığı kaynak: Addison-Wesley s Programming Language Concepts slaytları ve Prof. Dr. Tuğrul Yılmaz ın ders notlarından
DetaylıNesneye Dayalı Programlama Laboratuvarı
2013 2014 Nesneye Dayalı Programlama Laboratuvarı Ders Sorumlusu: Yrd. Doç. Dr. Salih GÖRGÜNOĞLU Laboratuvar Sorumluları: M. Zahid YILDIRIM İÇİNDEKİLER Deney 1: Visual Studio ve C++'a Giriş Uygulamaları...
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ü Bu dersin sunumları, Abraham Silberschatz, Greg Gagne, Peter B. Galvin, Operating System Concepts 9/e, Wiley,
DetaylıVeri Yapıları Lab Notları 1
C++ Programlama Dili Veri Yapıları Lab Notları 1 C++ dili, hızlı ve düşük seviye özelliklere erişmek isteyen uygulamaların yazılması için popüler bir dildir. C programlama diline birçok ekstra özellik
DetaylıÖrnek1: #include <iostream> #include <string> using namespace std;
BTEP243 Ders 5 Nesne İşaretçileri İşaretçiler, bildiğiniz gibi bir değişkenin bellekte tutuldukları yerin adresini tutarlar. Nesne işareçtileri konusundaki işaretçiler, nesnelerin bellek üzerinde bulundukları
DetaylıÜst Düzey Programlama
Üst Düzey Programlama Servlet Üst Düzey Programlama-ders01/ 1 Servlet Nedir? Web sayfaları ilk başlarda durağan bir yapıya sahipti ve kullanıcıdan bilgi alarak işlemler yapmıyordu. Zamanın geçmesiyle kullanıcıya
DetaylıKurucu Fonksiyonlar (Constructors)
Kurucu Fonksiyonlar (Constructors) Kurucu fonksiyonlar üyesi oldukları sınıftan bir nesne yaratılırken kendiliğinden canlanırlar. Bu tür fonksiyonlar bir nesnenin kurulması aşamasında yapılması gereken
Detaylıpublic static int Toplam int x, int y
static Kavramı 1 İçinde bulunduğu sınıftan nesne oluşturulmadan veya hiç bir nesneye referans olmadan kullanılabilen üyeler static olarak nitelendirilir. Metotlar ve alanlar static olarak tanımlanabilir.
DetaylıStatik veri üyeleri sınıf dosyası içerisinde, ancak sınıf bildirimi dışında başlatılmalıdır. Statik üye fonksiyonları
Statik Veri Üye ve Metotlar Genel olarak bir sınıfa ait nesnelerin verileri bellekte farklı bölgelerde yer alır. Ancak bazı durumlarda, belirli bir üyenin ortak bir alanda tek bir kopyasının bulunması
DetaylıOpenGL Uygulamaları. 1. Giriş. 2. OpenGL. Deney 2
Deney 2 OpenGL Uygulamaları 1. Giriş Günümüzde yazılım ve donanımın gelişmesi ile birlikte bilgisayar grafikleri alanında oldukça önemli gelişmeler kaydedilmektedir. Bu gelişmelere paralel olarak yazılım
Detaylıİşletim Sistemleri-II
EGE ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ İşletim Sistemleri-II Ödev-II Barış Taşkend 05090000006 16.02.2012 İçindekiler 1. Barrier... 2 1.1. Giriş... 2 1.2. Barrier Nedir ve Nasıl Çalışır?... 2 1.2.1.
DetaylıUzaktan Eğitim Uygulama ve Araştırma Merkezi
JAVA PROGRAMLAMA DİLİ Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Programlama Diline Giriş Java Platform Çeşitleri Java nın Kodlama ve Çalışma Adımları Java Derleyicisi, Java Yorumlayıcısı Java Çöp Toplayıcısı
DetaylıProgramlama Dili Prensipleri. Lab Notları 1
Programlama Dillerinin Tarihçesi: Programlama Dili Prensipleri Lab Notları 1 1. Derleme Bir Programın derlenme süreci 1 Lexical: Sözdizimsel analiz. Lexeme: Bir programlama dilindeki en düşük düzeyli sözdizimsel
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.
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-141 Bilgisayar Programlama I (Java)
1 BİL-141 Bilgisayar Programlama I (Java) Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Not: Bu dersin sunumları, Java Bilgisayar Programlamaya Giriş, A. Yazıcı, E. Doğdu,
DetaylıNESNEYE YÖNELİK PROGRAMLAMA
NESNEYE YÖNELİK PROGRAMLAMA Metotlar Şu ana kadar yaptığımız örneklerde hep önceden hazırlanmış ReadLine(), WriteLine() vb. gibi metotları kullandık. Artık kendi metotlarımızı yapmanın zamanı geldi. Bilmem
DetaylıJAVA API v2.0 Belge sürümü: 2.0.2
JAVA API v2.0 Belge sürümü: 2.0.2 1. İçindekiler 1. İÇİNDEKİLER... 2 2. BU BELGENİN AMACI... 3 3. BELGE SÜRÜMLERİ... 3 4. SİSTEM GEREKSİNİMLERİ... 3 5. KULLANIM ŞEKLİ... 4 5.1. GENEL... 4 5.2. UYARILAR...
Detaylı