Süreç 1 Kavramı ve Oluşturma Yöntemleri

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

Download "Süreç 1 Kavramı ve Oluşturma Yöntemleri"

Transkript

1 İç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 Desteklenmesi...8 Çekirdek Thread leri (Kernel Threads)...8 Kullanıcı Thread leri (User Threads)...8 Çoklu Thread Modelleri/Mekanizmaları...8 Çoktan Bire Çoklu Thread Mekanizması...8 Birebir Çoklu Thread Mekanizması...9 Çoktan Çoğa Çoklu Thread Mekanizması...9 Linux Thread leri...10 Pthreads...11 pthread_create...13 pthread_t...13 pthread_join...13 Thread Senkronizasyonu...14 Kaynaklar / 16

2 Süreç 1 Kavramı ve Oluşturma Yöntemleri Süreç, programın çalışmakta olan haline denmektedir. Yani disk üzerinde pasif halde duran yapıya program, bu yapının belleğe yüklenerek çalıştırılmasıyla ortaya çıkan yeni yapıya ise süreç denmektedir. Bilindiği gibi Von Neumann mimarisine sahip tüm bilgisayarlarda herhangi bir program çalışabilmesi için belleğe yüklenmek zorundadır. Bir süreç çalışması esnasında işletim sisteminin sunduğu sistem çağrılarını kullanarak yeni yeni süreçler yaratabilmektedir. Bu konuda izlenecek stratejiler, süreçlerin aynı anda çalışıp çalışmamasına ve yeni sürecin adres alanına göre farklılıklar gösterebilmektedir. Burada adres alanı (adress space) ile kastedilen bir sürecin bellekte sahip olduğu alandır. (İleride süreç kopyalama konusunda bu tanımdan bolca faydalanılacaktır.) Şekilsel olarak aşağıdaki gibi gösterilebilir. RAM Süreç Sürecin adres alanı Şekil 1. Adres Alanı Yeni süreç(ler) yaratan sürece ebeveyn (parent), yeni süreçlere ise çocuk (child) denilmektedir. Süreçlerin aynı anda çalışıp çalışmaması konusunda iki yaklaşım söz konusudur; 1. Ebeveyn süreç çocuk(lar) ile aynı anda çalışmaya devam edebilir. 2. Ebeveyn bazı ya da bütün çocukları bitene kadar bekleyebilir. Adres alanı konusunda da iki yaklaşım söz konusudur; 1. Çocuğun adres alanı ebeveynin tam bir kopyası olabilir. 2. Çocuk süreç, belleğe yüklenen ayrı bir süreç olabilir. 1 Süreç kelimesi İngilizce process kelimesi yerine kullanılmaktadır ve yazının devamında da bu şekilde kullanılmaya devam edilecektir. 2 / 16

3 UNIX / Linux Sistemlerinde fork ve exec Sistem Çağrıları İle Süreç Kopyalama ve Çalıştırma Klasik olarak UNIX/Linux sistemlerinde süreç kopyalamak için fork sistem çağrısı kullanılmaktadır. En eski fork çağrıları ebeveyn sürecin birebir kopyasını çıkararark bu işlemi yapmaktaydılar. Yani bellek gösterimi aşağıdaki gibi olmaktaydı. RAM Ebeveyn süreç Kopyalanan çocuk süreç Şekil 2. fork işlemi sonucu oluşan bellek görüntüsü Ancak bilindiği gibi her bir program kod, veri, yığıt (stack) gibi bölümlerden oluşmaktadır. Durum aşağıdaki şekil ile daha iyi anlaşılabilir. Kod Veri Yığıt ve diğer bölümler Şekil 3. Bir programın/sürecin bölümleri Daha da açık söylemek gerekirse Şekil 1 ve 2 de adres alanı ve süreç olarak gösterilen bellek bölgelerinin detaylı görüntüsünün bu şekilde olduğunu söyleyebiliriz. Bir sürecin bellekte kopyasının çıkartılması demek ise tüm bu bölümlerin kopyasının çıkarılması demektir. Tahmin edilebileceği gibi bellekte kopya çıkarma işlemi hem zaman olarak hem de bellek alanı olarak maliyetli bir iştir ve bir şekilde bu kopya çıkarma işleminden kurtulunabilirse ya da geciktirilebilirse daha yüksek performans elde edilebilir. İlk olarak 3 / 16

4 açıkladığımız en eski ve kötü kopya çıkarma işlemine dayanan fork mekanizması artık günümüz UNIX/Linux sistemlerinde terkedilmiştir. Onun yerine kullanılan mekanizma devam eden kısımda açıklanmaktadır. Şekil 3 te görülen bölümlerin bazıları sadece okunur özelliktedir. Dolayısıyla sadece okunabilen bir bölümde değişiklik yapılamaz. Bu durumda bu özelliği gösteren bir bölümün tekrar tekrar kopyasını çıkarmak yerine bir tanesini ebeveyn ve çocuk süreçler arasında bölüştürmek daha kolay ve tasarruflu olacaktır. Buna en güzel örnek kod bölümüdür. Çalışmakta olan bir programın kod bölümü program çalışmakta iken değiştirilemez ve dolayısıyla (bellek yönetim tekniği olarak sayfalama kullanılan bir sistemde) sadece okunabilir sayfa özelliği ile bellekte saklanabilir. Yukarıda açıklanan sadece okunabilen ve değişmeyen kısımların dışında üzerinde değişiklik yapılabilen kısımlar için de hemen kopya çıkarma işlemi aslında geciktirilebilir. Ebeveyn süreç ve kopyası olan çocuk süreç, ikisinden biri herhangi bir veri üzerinde bir değişiklik yapmadıkları sürece aynı verileri aynı değerler ile kullanmaktadırlar. Bu durumda herhangi bir güncelleme işlemi yapılana kadar tüm alanlar ebeveyn ve çocuk süreçler arasında ortak olarak kullanılabilir ve kopya çıkarmanın gereği kalmaz. Böylece fork işlemi de hızlı biçimde gerçekleştirilebilir. Ancak çocuk ya da ebeveyn süreçlerden herhangi biri, bir veri üzerinde değişiklik yaptığı anda verinin içinde bulunduğu bölümün (veri ya da yığıt gibi) kopyasının çıkarılması gerekir. Günümüz UNIX/Linux sistemleri bu metodu kullanmakta ve buna da yazma olunca kopyalama tekniği (copy-on-write) denilmektedir. Bu noktaya kadar teorik olarak anlatılan yapı kod olarak aşağıdaki gibidir. #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { pid_t pid; if ((pid = fork()) > 0) { // EBEVEYN SÜREÇ KODU. Ebeveyn süreç bu kısmı çalıştıracaktır. else if (pid == 0) { // ÇOCUK SÜREÇ KODU. Çocuk süreç bu kısmı çalıştıracaktır. else { // pid < 0 // fork işlemi başarısız return 0; fork sistem çağrısı geriye adına pid_t denilen bir tür ile dönmektedir. UNIX/Linux sistemlerinde her sürecin süreç tanımlayıcı (process identifier) denilen ve her süreç için farklı olan değerler vardır. Aslında fork sistem çağrısının geri dönüş değeri de bu süreç tanımlayıcı değerdir. pid_t türü <sys/types.h> içinde süreç tanımlayıcı değerleri tutmak üzere bildirilmiştir. Ebeveyn sürece sistem tarafından çocuk sürecin pid_t değeri verilir, çocuk sürece verilen pid_t değeri ise 0 dır. Dolayısıyla her iki process in kodları tamamen aynı olsa bile fork sistem çağrısının geri dönüş değeri iki sürece ayrı ayrı verilmiştir. Bu durumdan faydalanarak if else blokları yardımıyla ebeveyn ve çocuk süreçlere ne yaptırılmak isteniyorsa uygun yerlere kodlanabilirler. Eğer fork işlemi herhangi bir sebep ile başarılı olmazsa ebeveyn sürece pid_t değeri sıfırdan küçük bir değer olarak döndürülür. Durumu yeni bir örnek kod ile açıklamak gerekirse aşağıdaki kod parçası kullanılabilir. 4 / 16

5 #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { pid_t pid; if ((pid = fork()) > 0) { // EBEVEYN printf("i am parent\n"); printf("my child's id is %d\n", pid); wait(null); else if (pid == 0) { // ÇOCUK printf("i am child\n"); printf("press any key to exit...\n"); getchar(); exit(0); else { perror("fork error"); exit(1); return 0; Burada ekrana ebeveyn ve çocuk süreçlerin yazdıkları yazılar çıkacaktır. Ebeveyn sürecin kod kısmına dikkat edilirse wait(null) biçiminde bir fonksiyon çağırması görülecektir. Bir ebeveyn süreç oluşturduğu çocuk süreçlerin bitmesini bu fonksiyonla bekleyerek onların normal biçimde sonlanmalarını sağlar. Eğer bir ebeveyn wait ile beklemezse ve çocuk süreç önce biterse çocuk süreç zombi (zombie) süreç durumuna düşer ve ps komutu ile bakıldığında yan tarafında Z harfi ile belirlenir. Belli bir çocuk sürecin beklenmesini sağlayan waitpid biçiminde bir fonksiyon daha mevcuttur. Genel olarak fork sistem çağrısının hemen arkasından execxxx biçiminde bir sistem çağrısı yapılır. exec sistem çağrıları parametrik yapılarına göre sonda X ile gösterdiğimiz bazı ekler alabilmektedirler. (Anlatımda kolaylık sağlaması için bu durum şimdilik gözardı edilip exec çağrısı biçiminde kullanılacaktır.) Önce fork ve hemen ardından exec çağrısı ile sistemde kopyalanan süreç yerine istenilen başka bir sürecin belleğe yüklenerek çalıştırılması sağlanır. Yani bir süreç fork ile kendisinin kopyası olan başka bir süreç oluşturur. Ancak biz bu çocuk süreç için ayrılan alana istediğimiz başka bir programı yükleyerek çalıştırabiliriz. Örneğin önce fork dedikten sonra hemen ardından UNIX/Linux sistemlerinde ls komutunu çalıştırmak için exec çağrılarından birinden faydalanabiliriz. Durumun kodlanmış hali aşağıdaki gibidir; #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { pid_t pid; if ((pid = fork()) > 0) { // EBEVEYN SÜREÇ printf("i am parent\n"); printf("my child's id is %d\n", pid); wait(null); 5 / 16

6 else if (pid == 0) { // ÇOCUK SÜREÇ execlp("ls", "ls", "-l", (char*)0); else { perror("fork error"); exit(1); return 0; Burada da çocuk süreç hemen exec çağırması yaparak ls komutunu çalıştırmaktadır. Böylesi bir durumda ebeveyn sürecin kopyasını çıkarmanın hiç gereği yoktur çünkü çocuk süreç derhal başka bir programı kendi yerine yükleyerek çalıştırmaktadır. Bu gibi durumlar için UNIX/Linux sistemlerine vfork isimli bir fonksiyon eklenmiştir. Bu fonksiyon hemen arkadan exec çağırması yapılacağı durumlarda kullanılmak üzere tasarlanmıştır ve ebeveyn sürecin kopyasını çıkarmadan çalışmaktadır. Bir diğer nokta ise exec çağırması biçiminde genellediğimiz exec foknsiyonlarının PATH çevre değişkenine (environment variable) bakan, komut satırı argümanlarını dizi olarak alan ve diziden farklı biçimde alan, çevre değişkenleri (environment variables) aktaran ve aktarmayan versiyonları bulunmaktadır. int execl(const char *path, const char *arg,...); int execlp(const char *file, const char *arg,...); int execle(const char *path, const char *arg,..., char * const envp[]); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); int execve(const char *filename, char *const argv [],char *const envp[]); Burada p harfini PATH çevre değişkenine bakma, e harfini çevre değişkenleri aktarma, v harfini komut satırı argümanlarını vektör biçiminde aktarma olarak algılamak gerekir. 6 / 16

7 Thread 2 Kavramı Threadi, programlama olarak akış diye düşünülebilir. Bilindiği gibi programlar çalıştırılmaya başlandığı zaman (fonksiyon çağırmaları vb. dallanmaları göz önüne almazsak) komutlar satır satır icra edilir edilir ve yukarıdan aşağıya doğru bir akış gibi işlem görür. İşte thread ler de bu şekilde çalıştırılan küçük programcıklar olarak değerlendirilebilir. Çünkü ilerleyen kısılarda da görüleceği gibi bir thread, aslında bir fonksiyon olarak hazırlanmakta ve işletim sisteminin sağladığı bir sistem çağrısı ile çalıştırılmaya başlamaktadır. Bu durum ileride örnekler ile daha iyi anlaşılacaktır. Daha önce süreç kavramı verilmişti. Burada şunu söylemek yerinde olacaktır. Bir süreç en az bir thread den oluşmaktadır. Yani işletim sistemi thread mekanizmasını desteklemiyorsa bile en azından programı tek parça halinde çalıştıracaktır. Klasik olarak DOS işletim sistemi bir zamanda bir programı çalıştırabiliyordu. Dolayısıyla bir C programı main den başlayarak gerekli fonksiyon çağırmalarını yapıp bitiyordu. Bu durumu sürecin tek thread den oluşması olarak düşünebiliriz. Ancak işletim sistemi thread mekanizmasını bir biçimde destekliyorsa bir süreç en az bir, en fazla ise sistemin desteklediği kadar thread den oluşur. Bu duruma da çoklu thread mekanizması (multithreading) denilmektedir. Çoklu thread mekanizmasının da farklı türleri bulunmaktadır ve ilerleyen bölümlerde ele alınacaktır. Thread ile süreç arasındaki en önemli fark ise süreçlerin kendlerine ait ayrı birer adres alanlarının olması thread lerin ise aynı adres alanı içinde çalışmalarıdır. Dolayısıyla aynı sürece ait thread ler sürecin kod, veri bölümleri ve diğer bazı kaynakları ortak olarak kullanmaktadırlar. Örneğin sürecin global verisini o sürece ait tüm thread ler görüp kullanabilmektedir. RAM RAM Süreç1 Süreç2 Süreç1 in adres alanı Süreç2 nin adres alanı Süreç1 T 1 T 2 T n Süreç1 ve threadlerine ait adres alanı 2 İngilizce thread kelimesinin Türkçe kelime karşılığı iplikçik olarak verilebilir ancak programlama açısından çok da anlamlı bir çağrışım yapmadığı için yazımızın devamında thread olarak kullanmaya devam edeceğiz. 7 / 16

8 Thread lerin İşletim Sistemleri Tarafından Desteklenmesi Thread mekanizması işletim sistemleri tarafından iki biçimde desteklenebilmektedir. Bunlardan ilki çekirdek thread leri (kernel threads) ikincisi ise kullanıcı thread leridir (user threads) Çekirdek Thread leri (Kernel Threads) Bilindiği gibi çekirdek bir işletim sistemindeki bellek yönetimi, süreçler arası geçiş gibi en alt seviye ve en önemli işlemleri yerine getiren parçasıdır. Bu sebeple çekirdek tarafından desteklenen thread mekanizması için işletim sistemi tarafından doğrudan destekleniyor diyebiliriz. Windows 95 ve sonrası Microsoft sistemleri, BeOS, Solaris 2 gibi işletim sistemleri çekirdek therad lerini desteklemektedir. Bu thread lerin yaratılması, zamanlama (scheduling) işleminin yapılması ve yönetimi bizzat çekirdek tarafından yapılır. Çekirdek thread lerinin yaratılması ve yönetimi genel olarak kullanıcı thread lerine göre daha yavaştır ancak herhangi bir biçimde bir thread bloke olursa çekirdek başka bir thread i çalıştırmaya başlayarak yoluna devam edebilir. Kullanıcı Thread leri (User Threads) Burada thread mekanizması için destek, işletim sisteminin çekirdeği tarafından verilmemekte onun yerine kullanıcı alanında çalışacak olan bir fonksiyon kütüphanesi tarafından verilmektedir. Bu durumda thread oluşturulması, zamanlaması ve yönetimi kullanıcı alanında çalışmakta olan fonksiyon kütüphanesi tarafından yapılmaktadır ve işletim sistemi çekirdeğinin thread mekanizmasından haberi yoktur. Burada kullanıcı alanı ile çekirdek alanı diye iki kavramın verilmesinin yerinde olacağını düşünüyoruz. İşletim sisteminin çekirdeği de sisteme ilişkin veriler tutmakta ve bunun için bir bellek alanı kullanmaktadır. Bu bellek kısmına çekirdek alanı (kernel space) denir. Tabi bu bellek alanında sadece çekirdek kodları işlem yapabilmekte herhangi bir uygulama programı ya da kullanıcı programının bu alana girmesine ve veriler üzerinde değişiklik yapmasına izin verilmemektedir. Kullanıcı alanı (user space) ise bellekte kalan ve diğer bütün programların kullanmasına izin verilen alan olarak düşünülebilir. Kullanıcı thread leri çekirdek thread lerine göre daha hızlı biçimde oluşturulabilir ancak burada çekirdeğin durumdan haberdar olmaması sebebi ile bir dezavantaj vardır. Eğer bir thread bloke olmaya sebep olacak bir işlem yaparsa çekirdek başka bir thread e geçiş yapamayabilir ve o threadin ait olduğu sürecin bloke olmasına sebep olabilir. Çünkü kernel thread mekanizmasından habersizdir. Kullanıcı thread kütüphaneleri için en güzel örnek UNIX/Linux sistemlerindeki POSIX pthreads kütüphanesi, Mach C-threads ve Solaris 2 UI-threads verilebilir. Yazımızda POSIX pthreads örnekleri verilecektir. Çoklu Thread Modelleri/Mekanizmaları Burada işletim sistemlerinde thread mekanizması ister kullanıcı ister çekirdek thread leri olarak desteklensin kurulabilecek çoklu thread mekanizmaları anlatılacaktır. Başlıca üç farklı sistem bulunmaktadır. Bunlar sırasıyla çoktan bire, birebir ve çoktan çoka biçimindedir. Çoktan Bire Çoklu Thread Mekanizması Burada işletim sisteminin çekirdeği çoklu thread mekanizmasından habersizdir. Yani kullanıcı thread leri aracılığı ile mekanizma kurulmuştur. İşletim sistemi bir süreci ya da 8 / 16

9 thread i çalıştırdığını sanmaktadır. Ancak kullanıcı alanı thread kütüphanesi sayesinde birden fazla thread oluşturulabilmekte ve kullanılabilmektedir. Şekilsel olarak ise aşağıdaki gibidir. (Şekil konu anlatımında da faydalanılan Operating System Concepts, 6th Edition kitabına aittir.) Linux pthreads kütüphanesi de bu gruba girmektedir. Burada işletim sistemi sadece bir işle uğraştığını sanmakta ancak thread kütüphanesi tarafından thread ler arası geçişler yapılmaktadır. (Yukarıdaki şekilde düğüm gibi görünen kısım kullanıcı alanında yer alan thread kütüphanesini göstermektedir.) Bu şekilde işletim sistemine çoklu thread mekanizması eklenmiş olmaktadır. Birebir Çoklu Thread Mekanizması Oluşturulan her bir thread için kernel tarafından bir thread oluşturulur. Bu durum Microsoft grubu işletim sistemlerinde olduğu gibi çekirdek tarafından thread mekanizması desteklendiğinde ortaya çıkmaktadır. Şekilsel gösterimi aşağıdaki gibidir. Çoktan Çoğa Çoklu Thread Mekanizması Burada kernel tarafından çoklu thread mekanizması desteklenmektedir ancak birebirde olduğu gibi her bir kullanıcı thread ine karşılık bir tane kernel thread i oluşturulmak zorunda değildir. N tane kullanıcı thread ine karşılık M tane (M =< N) kernel thread i oluşturulmakta 9 / 16

10 ve gerekirse kullanıcı thread i ile önce X kernel thread i ilgileniyorken daha sonra Y kernel thread i ilgilenebilir. Yani kullanıcı için açılan thread değiştirilebilir. Solaris 2, IRIX, HP-UX, ve Tru64 UNIX gibi sistemler bu yöntemi kullanmaktadırlar. Şekilsel olarak ise aşağıdaki gibidir. Linux Thread leri Linux çekirdeği 2.2 versiyonu ile beraber thread deteği vermeye başlamıştır. Geleneksel fork, exec mekanizmasının yanında clone isimli bir sistem çağrısı ile thread oluşturulmasına da izin verilmiştir. clone, fork gibi ayrı bir süreç yaratsa da çocuk süreç ebeveyn süreç ile aynı adres alanını paylaşmaktadır. Adres alanı paylaşıldığı için de bu yeni süreç ayrı bir thread gibi düşünülebilir. clone ile yeni bir thread/süreç tanımlandığında sistem çağrısının bazı flag değerleri ebeveyn süreç ile nelerin paylaşılacağını belirlemekte kullanılmaktadır. Aslında Linux süreçler ile thread ler arasında ayrım yapmamakta ve hepsine birden iş (task) demektedir. clone sistem fonksiyonu dışında, Linux çoklu thread mekanizmasını da desteklememektedir. Bununla birlikte kullanıcı seviyesinde çoklu thread mekanizmasını desteklemek için çeşitli pthreads gerçeklemeleri bulunmaktadır. clone fonksiyonunun parametrik yapısı aşağıdaki gibidir. int clone(int(*fn)(void*), void* child_stack, int flags, void* args); Fonksiyonun ilk parametresi bir fonksiyon pointer'ıdır. Yani çocuk süreç olarak çalıştırılacak olan fonksiyondur. Fonksiyonun geri dönüş değeri int, aldığı parametre ise türü olmayan bir poineter'dır. clone fonksiyonun 4. parametresi fn ile gösterilen fonksiyona aktarılacak olan parametredir. Daha önce söylendiği gibi aynı sürece ait thread'ler aynı kod ve veri alanını kullanırlar fakat yığıtı kullanamazlar. Dolayısıyla her thread'in kendine ait bir yığıtı olmalıdır. Bu sebeple de clone fonksiyonunun 2. parametresi ile yığıt olarak kullanılacak olan bu alan belirlenmektedir. clone fonksiyonunun 3.parametresi ise daha önce sözünü ettiğimiz flag değerleridir ve CLONE_XXX biçiminde bazı öntanımlı değerleri vardır. Bu değer, birbirleri ile mantıksal VEYA işlemine tabi tutularak birden fazla flag'i içerecek biçimde verilebilir. Fonksiyonun prototipi ve bu değerler <sched.h> dosyası içindedir. Aşağıda çok basit bir clone örneği bulunmaktadır. Örnekte amaç yeni bir sürecin fork ile oluşturulması ve clone'un kullanımı arasındaki farkın gösterilmesidir. 10 / 16

11 #include <stdio.h> #include <sched.h> #include <sys/types.h> #include <sys/wait.h> #include <malloc.h> #include <signal.h> int args[1] = {13; /* 64 KB */ #define STACK_SIZE int my_thread(void* p) { int *params = (int*)p; int i; printf("thread..: %d\n", params[0]); return 0; int main(void) { int pid_thread; void* stack; stack = malloc(stack_size); if (stack == NULL) { printf("malloc hatasi!!!\n"); exit(1); pid_thread = clone(my_thread, stack, CLONE_FS CLONE_FILES, (void*) args); if (pid_thread == -1) { printf("thread olusturulamadi!!!\n"); exit(1); waitpid(pid_thread, 0, 0); printf("clone deneme :)\n"); return 0; Daha önceki örneklerde akış fork işleminin hemen alt satırından devam etmekte idi. Burada ise açıklandığı gibi belirtilen fonksiyon çalıştırılmak sureti ile yeni bir thread/süreç oluşturulmuştur. Pthreads Bu noktaya kadar adı bolca geçen pthreads ile kastedilen aslında POSIX standardı tarafından belirlenen thread oluşturma ve senkronizasyonu için gerekli API tanımlamalarıdır. Yani pthreads sadece bir belirlemedir, fonksiyonların ne iş yapacağı ve parametrik yapılarının ne olacağı bilgilerini içerir. Kodlama yoluyla belirtilen fonksiyonların yazılması işlemi, işletim sistemi tasarımcıları ve kodlamacılarına kalmıştır ve istedikleri biçimde bunu gerçekleştirebilirler. Yazımızda gitgide daha da yaygınlaşan POSIX pthread kütüphanesi örnekleri yer alacaktır. 11 / 16

12 pthread fonksiyonlarının hepsi pthread_ öneki ile başlamaktadır. Bu bir fonksiyon kütüphanesi olduğu için pthread fonksiyonlarının kullanıldığı C programlarının Linux ortamında libpthread.so veya libpthread.a kütüphanesi ile beraber bağlama (link) işlemine sokulması gerekmektedir. Bunun içinde -lpthread biçiminde bir seçenek derleme esnasında kullanılmalıdır. Yani gcc o output_file lpthread source.c biçiminde #include <stdio.h> #include <pthread.h> #include <unistd.h> #define MAX 10 int g_arr[max]; int g_i; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t fir = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t sec = PTHREAD_MUTEX_INITIALIZER; void* ThreadProc1(void* pvarg) { int i; while (g_i < MAX) { pthread_mutex_lock(&fir); pthread_mutex_lock(&mutex); g_arr[g_i] = *((int*)pvarg); g_i++; pthread_mutex_unlock(&mutex); pthread_mutex_unlock(&sec); //sleep(1); void* ThreadProc2(void* pvarg) { int i; while (g_i < MAX) { pthread_mutex_lock(&sec); pthread_mutex_lock(&mutex); g_arr[g_i] = *((int*)pvarg); g_i++; pthread_mutex_unlock(&mutex); pthread_mutex_unlock(&fir); //sleep(1); int main(void) { pthread_t tid1, tid2; int first, second; int i; g_i = 0; first = 1; second = 2; pthread_mutex_lock(&sec); 12 / 16

13 pthread_create(&tid1, NULL, ThreadProc1, (void*)&first); pthread_create(&tid2, NULL, ThreadProc2, (void*)&second); pthread_join(tid1, NULL); pthread_join(tid2, NULL); for (i = 0; i < MAX; i++) printf("%d. %d\n", i + 1, g_arr[i]); return 0; Program her yerden erişilebilen (global) bir diziye (g_arr) tek ve çift sayıları (aslında sadece 1 ve 2) yerleştiren iki thread oluşturmaktadır. Diziye eleman eklenirken hangi indeks üzerinde işlem yapılacağını da yine her yerden erişilebilen bir tamsayı değişken göstermektedir(g_i). Thread lerden biri 0, 2, 4, 6 gibi indekslere 1 yazmakta diğeri ise 1, 3, 5, 7 gibi indekslere 2 yazmaktadır. Daha önce de söylendiği gibi thread ler aynı sürece aitseler aynı global verileri kullanbilirler. Ancak burada ortaya çıkan başka bir sorun vardır. O da thread lerin birbirleri ile senkronize çalışabilmeleri. Çünkü her iki thread de aynı veriyi kullandığı için biri, veri üzerindeki işlemini bitirmeden diğeri araya girebilir ve bu durumda verinin uygun olmayan bir değerde kalmasına sebep olabilir. Bu konu da kod/fonksiyonlar açıklanırken senkronizasyon ile ilgili başlık altında açıklanacaktır. Kullanılan fonksiyonlar ve açıklamaları aşağıdaki gibidir. pthread_create int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg); Thread oluşturmak için kullanılan fonksiyondur. Thread in tanımlayıcı değerinin yerleştirilmesi için kullanılacak olan pthread_t türünde değişkenin adresini, thread e ilişkin özel belirlemeler varsa onları, thread biçiminde çalıştırılacak olan fonksiyonu ve bu fonksiyona aktarılacak olan parametre(leri) vererek çağırılır. pthread_t Daha önce fork işleminde olduğu gibi ebeveyn sürece oluşturulan thread in tanımlayıcısı pthread_create in ilk parametresi olan değer ile döndürülmektedir. Bir thread e ilişkin bütün işlemler bu değer üzerinden yürütülebilir. POSIX styandartlarındaki herhangi bir değişmeye karşı pthreads.h dosyasında tanımlı olan pthread_t türünün bu işlem için tercih edilmesi gerekmektedir. pthread_join int pthread_join(pthread_t thread, void **value_ptr); fork işleminde olduğu gibi thread oluşturan sürecin oluşturduğu thread lerin bitmesini beklemesi için kullanılmaktadır. Fonksiyonun ilk parametresi hangi thread olduğunu gösterir, ikinci parametresi thread in geri dönüş değerini almak için kullanılır. Ancak örneğimizde NULL geçilmiş yani bu değer alınmamıştır. Eğer bir thread pthread_exit fonksşyonu kullanılarak sonlandırılırsa bu fonksiynun tek parametresi olan değer pthread_join fonksiyonundan dönüşte thread in geri döndürdüğü değer olarak alınır. 13 / 16

14 Thread Senkronizasyonu Aynı sürece ait thread lerin o sürece ait global verileri ortaklaşa kullanımı sırasında bazı problemlerin olabileceğini daha önce belirtmiştik. Bu durumu örneğimiz üzerinden açıklayacağız. Aynı sürece ait thread lerin ortak kullandıkları verilere eriştikleri kod parçasına kritik bölge denmektedir. Thread lerin özellikle bu kod parçalarında senkronize çalışması yani bir tanesi böylesi bir kritik bölgede iken diğerinin gelip çalışmayı bölmemesi gerekir. Bunu sağlayan mekanizmaya ise senkronizasyon denilmektedir. Örneğimizde de g_arr ve g_i biçiminde gösterilen veriler bütün thread leri için ortaktır. Önce g_arr[g_i] ile gösterilen değer değiştirilmekte sonra da g_i++ işlemi ile bir indeks arttırma işlemi yapılmaktadır. İşte bu kod parçası kritik bölgedir. Her iki thread de de aşağıdaki gibidir. g_arr[g_i] = *((int*)pvarg); g_i++; Önce senkronizasyon olmadığını düşünelim. Birinci thread 0 indeksindeki elemana 1 yerleştirdikten sonra global veri olan indeksi arttırmadan evvel thread ler arası geçiş olursa ve ikinci thread gelirse indek güncellenmemiş olacağı için birinci thread in 1 yazdığı yere 2 yazabilir. Bu durumda genel olarak işlemlerin karmakarışık yürümesine neden olabilir. 1.THREAD 2.THREAD g_arr[g_i] = *((int*)pvarg); TAM BU NOKTADA THREADLER ARASI GEÇİŞ g_arr[g_i] = *((int*)pvarg); g_i++; Yukarıdaki senaryo ile anlattığımız durum gerçekleşecek ve ikinci thread birinci thread in verilerini bozacak, istenmeyen durumlar ortaya çıkacaktır. Bu durumu engellemek için bir thread kritik bölgede iken diğerinin kritik bölge kodlarını çalıştıramaması gerekir. Bunu engellemek için de mekanizmalar vardır ve mutex (İngilizce MUTual EXclusion ın kısa hali) bunlardan biridir. Sözlük karşılığı olarak karşılıklı olarak birbirini dışlama yani her iki tarafın da birbirini istememesi durumu diyebileceğimiz bu mekanizma ile kritik bölgeye girerken başka bir thread in bu verilere erişmemesi için bir hazırlık işlemi yapılmakta sonra kritik bölgeye girilmekte, kritik bölgeden çıkınca da artık başka bir thread in bu verileri kullanabilmesi için bir bitirme işlemi uygulamaktadır. Böylece senkronizasyon sağlanmaktadır. Örnek programımızda senkronizasyon iki kademeli olarak kullanılmıştır. Öncelikle mutex isimli senkronizasyon nesnesi tam olarak yukarıda anlatılan işemin yapılmasını sağlamıştır. Yani bir thread global verileri kullanırken ikinci bir thread kullanamamaktadır. pthread_mutex_lock(&mutex); /* Hazırlık işlemi*/ g_arr[g_i] = *((int*)pvarg); g_i++; pthread_mutex_unlock(&mutex); /* Bitiş işlemi*/ Buradaki hazırlık ve bitiş işlemi sanki bir kilitleme ve o kilidi açma gibi de düşünülebilir. Zaten fonksiyon isimleri de standartlar tarafından bu şekilde verilmiştir. Mutex sisteminden faydalanarak thread leri sıraya sokma işlemi de kodumuzda gerçekleşmiştir. Burada hangi thread çalışıyorsa kendine ilişkin anhtarı/mutex i açmakta, diğer thread e ilişkin mutex i ise kapatmaktadır. Dolayısıyla ilk işlem ile sadece biri kritik bölgede çalışabilirken ikinci işlem ile sıralı biçimde çalışmaları sağlanmıştır. 14 / 16

15 1.THREAD pthread_mutex_lock(&fir); pthread_mutex_lock(&mutex); g_arr[g_i] = *((int*)pvarg); g_i++; pthread_mutex_unlock(&mutex); pthread_mutex_unlock(&sec); 2.THREAD pthread_mutex_lock(&sec); pthread_mutex_lock(&mutex); g_arr[g_i] = *((int*)pvarg); g_i++; pthread_mutex_unlock(&mutex); pthread_mutex_unlock(&fir); 15 / 16

16 Kaynaklar 1 UNIX/Linux Sistem Programlama Kurs Notları, C ve Sistem Programcıları Derneği. 2 - Operating System Concepts 6 th Ed., Abraham Silberschatz, Peter Baer Galvin, Greg Gagne, Wiley. 3 Pthreads Programming, Bradford Nichols, Dick Buttlar, and Jacqueline Proulx Farrell, O'Reilly. 4 Linux man sayfaları. 16 / 16

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ı

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

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ı

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

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ı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Kapsülleme (Erişim Denetleyiciler) Java da Sınıf Oluşturmak Java da Nesne Oluşturmak Java da Constructor Kavramı Java da This Kavramı Java da Constructor

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ı

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ı

İŞLETİM SİSTEMLERİ (POSIX THREADS v1)

İŞLETİM SİSTEMLERİ (POSIX THREADS v1) YILDIZ TEKNİK ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ İŞLETİM SİSTEMLERİ (POSIX THREADS v1) ARŞ. GRV. UĞUR ÇEKMEZ Multi Thread Programlama Thread Çalışma Mantığı Basit manada threadler, bir prosesin içinde

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;

Detaylı

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları Diziler Temel Bilgisayar Programlama Final Sınavı Çalışma Notları (Dr. Övünç ÖZTÜRK, Dr. Tahir Emre KALAYCI) (İnşaat Mühendisliği ve Gıda Mühendisliği Grupları İçin) Diziler aynı türden bilgileri saklamak

Detaylı

ELN1001 BİLGİSAYAR PROGRAMLAMA I

ELN1001 BİLGİSAYAR PROGRAMLAMA I ELN1001 BİLGİSAYAR PROGRAMLAMA I DEPOLAMA SINIFLARI DEĞİŞKEN MENZİLLERİ YİNELEMELİ FONKSİYONLAR Depolama Sınıfları Tanıtıcılar için şu ana kadar görülmüş olan özellikler: Ad Tip Boyut Değer Bunlara ilave

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ı

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı Ders 7 LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ 1 LINUX Yapısı LINUX işletim sisteminin diğer işletim sistemleri gibi kendine özgü bir yapısı vardır. LINUX yapısı ve bileşenleri aşağıdaki

Detaylı

BİLG Dr. Mustafa T. Babagil 1

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ı

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ı

İşletim Sistemlerinde Proseslerin Çevre Değişkenleri

İşletim Sistemlerinde Proseslerin Çevre Değişkenleri İşletim Sistemlerinde Proseslerin Çevre Değişkenleri Kaan Aslan 21 Temmuz 2008 Modern işletim sistemlerinde her prosesin bir çevre değişken bloğu vardır. Prosesin çevre değişken bloğu çevre değişkenlerinden

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ı

NESNEYE YÖNELİK PROGRAMLAMA

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ı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları DİZİLER Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar

Detaylı

Teknikleri. Önsöz. iskender atasoy

Teknikleri. Önsöz. iskender atasoy Linux Altı nda Grafik Programlama Teknikleri Önsöz Linux atında yazılım geliştirmeyi düşünüyorsunuz veya geliştiriyorsunuz.artık programlarınızı görsel bileşenler ile süslemek istiyorsanız bu doküman sizlere

Detaylı

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar Değer Döndüren Fonksiyonlar Çok Parametreli Fonksiyonlar Değişken Kapsamları Çok Fonksiyonlu Programlar Fonksiyon Tanımı Karmaşıkveuzunprogramları,

Detaylı

İşletim Sistemleri-II

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

Fonksiyonlar (Altprogram)

Fonksiyonlar (Altprogram) Fonksiyonlar (Altprogram) 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 gelmesi ile oluşur.

Detaylı

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

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ı

Sistem Programlama. Kesmeler(Interrupts): Kesme mikro işlemcinin üzerinde çalıştığı koda ara vererek başka bir kodu çalıştırması işlemidir.

Sistem Programlama. Kesmeler(Interrupts): Kesme mikro işlemcinin üzerinde çalıştığı koda ara vererek başka bir kodu çalıştırması işlemidir. Kesmeler(Interrupts): Kesme mikro işlemcinin üzerinde çalıştığı koda ara vererek başka bir kodu çalıştırması işlemidir. Kesmeler çağırılma kaynaklarına göre 3 kısma ayrılırlar: Yazılım kesmeleri Donanım

Detaylı

PROGRAMLAMAYA GİRİŞ DERS 2

PROGRAMLAMAYA GİRİŞ DERS 2 PROGRAMLAMAYA GİRİŞ DERS 2 Program editörde oluşturulur ve diske kaydedilir Tipik Bir C Programı Geliştirme Ortamının Temelleri 1. Edit 2. Preprocess 3. Compile 4. Link 5. Load 6. Execute Önişlemci programı

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ı

Yrd. Doç. Dr. Caner ÖZCAN

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ı

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

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ı

Temel Bilgisayar Programlama

Temel Bilgisayar Programlama BÖLÜM 11: : Birçok programda, bazı verilerin disk üzerinde saklanmasına gerek duyulur. Bütün programlama dillerinde, sabit disk sürücüsü (Hard Disk Drive, HDD) üzerindeki verileri okumak veya diske veri

Detaylı

Sınav tarihi : Süre : 60 dak.

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ı

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ı

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1 Programlama Dilleri C Dili Programlama Dilleri-ders02/ 1 Değişkenler, Sabitler ve Operatörler Değişkenler (variables) bellekte bilginin saklandığı gözlere verilen simgesel isimlerdir. Sabitler (constants)

Detaylı

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance Önemli noktalar Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance public class Test { // çalışır İnsan insan = new Çiçekçi();

Detaylı

Hafta 12 Karakter Tutan Diziler

Hafta 12 Karakter Tutan Diziler BLM111 Programlama Dilleri I Hafta 12 Karakter Tutan Diziler Yrd. Doç. Dr. Caner ÖZCAN Katar (String) Tanımlama Dizileri ve çok boyutlu dizileri gördük. Katar dediğimiz şey de aslında bir dizidir. Değişken

Detaylı

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI 10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI İkincil bellekte tanımlanmış bölgelere dosya denir. Her dosyanın bir ismi vardır. Ancak dosyaların isimlendirme kuralları sistemden sisteme göre değişebilmektedir. Dosya

Detaylı

Eln 1002 Bilgisayar Programlama II

Eln 1002 Bilgisayar Programlama II Eln 1002 Bilgisayar Programlama II C»de Dosya ğşleme : S¹ral¹ EriŞim Ne ÖĆreneceĆiz? Dosyalar ve Streamler Sequential (sıralı) erişim dosyaların yaratılması Sıralı Erişim Dosyalarından Veri Okuma Sıralı

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ı

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ 3. Hafta YAPILAR Farklı veri tipindeki bilgilerin bir araya gelerek oluşturdukları topluluklara yapı (structure) denir. Yani yapılar, birbiriyle ilişkili değişkenlerin

Detaylı

Bölüm 10: PHP ile Veritabanı Uygulamaları

Bölüm 10: PHP ile Veritabanı Uygulamaları Bölüm 10: PHP ile Veritabanı Uygulamaları -231- Öğr.Gör. Serkan DİŞLİTAŞ 10.1. PHP PHP, platformdan bağımsız sunucu taraflı çalışan betik bir web programlama dilidir. PHP programlama dili ile MySQL, MSSQL,

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları Konsol Uygulaması Oluşturma Konsol uygulaması oluşturmak için program açıldıktan sonra Create: Project ya da New Project seçeneği tıklanabilir. New Project penceresini açmak için farklı yollar da vardır.

Detaylı

C Dersleri Bölüm 3 : Program akışı

C Dersleri Bölüm 3 : Program akışı İzmir Ekonomi Üniversitesi Bilgisayar Topluluğu www.ieubt.org C Dersleri Bölüm 3 : Program akışı Sorularınız için : programlama@ieubt.org Hazırlayan : Görkem PAÇACI (gorkem.pacaci@std.ieu.edu.tr) C Program

Detaylı

WebInstaller. 1. Kurulum Đçin Gereksinimler

WebInstaller. 1. Kurulum Đçin Gereksinimler WebInstaller Ürün Grubu [X] Fusion@6 [X] Fusion@6 Standard Kategori [X] Yeni Fonksiyon Versiyon Önkoşulu @6 Uygulama E-Netsis.Net uygulamasının kurulumu Netsis\ENetsis.Net\Kurulum dizininde bulunan NetsisWebInstall.exe

Detaylı

Bigisayar Programlama

Bigisayar Programlama Bigisayar Programlama (GÜZ 2015) DERS-02: C de Programlamaya Giriş Yrd. Doç Dr. Yakup EMÜL Cumhuriyet Üniv., Teknoloji Fakültesi Yazılım Mühendisliği Bölümü yakupemul@cumhuriyet.edu.tr Ofis Saatleri :

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 - 3 Bu bölümde, Proses Kavramı Proses Üzerindeki Bilgiler

Detaylı

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

ELN1002 BİLGİSAYAR PROGRAMLAMA 2 ELN1002 BİLGİSAYAR PROGRAMLAMA 2 DOSYALAMA Sunu Planı Veri Hiyerarşisi Dosyalar ve Akımlar(streams) Sıralı Erişim (Sequential Access) dosyalarının oluşturulması Sıralı Erişim Dosyalarından Veri Okuma Rasgele

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ı

Pointer Kavramı. Veri Yapıları

Pointer Kavramı. Veri Yapıları Pointer Kavramı Veri Yapıları Pointer Kavramı- Pointer Nedir? Göstericiler, işaretçiler ya da pointer adı da verilmektedir. Gösterici (pointer); içerisinde bellek adresi tutan değişkenlerdir. Şu ana kadar

Detaylı

Mantıksal Kontrol ve Döngü Komutları

Mantıksal Kontrol ve Döngü Komutları Mantıksal Kontrol ve Döngü Komutları Prof.Dr. Bahadır AKTUĞ JFM212 Python ile Mühendislik Uygulamaları *Kaynakça bölümünde verilen kaynaklardan derlenmiştir. Mantıksal Karşılaştırmalar Python, koşullu

Detaylı

int faktoriyel(int sayi) { int sonuc = 1; for(int i=sayi;i>0;i--) sonuc*=i; return sonuc; } int main() { int sayi = faktoriyel(5); }

int faktoriyel(int sayi) { int sonuc = 1; for(int i=sayi;i>0;i--) sonuc*=i; return sonuc; } int main() { int sayi = faktoriyel(5); } FONKSİYONLAR Fonksiyon, programcı tarafından seçilen bir kod bloğuna isim vermek için kullanılan araçtır. Fonksiyon ismi program içerisinde çağrıldığında fonksiyonun temsil ettiği kod çalıştırılır. Örneğin

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ı

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ı

Algoritmalar ve Programlama. Algoritma

Algoritmalar ve Programlama. Algoritma Algoritmalar ve Programlama Algoritma Algoritma Bir sorunu / problemi çözmek veya belirli bir amaca ulaşmak için gerekli olan sıralı mantıksal adımların tümüne algoritma denir. Algoritma bir sorunun çözümü

Detaylı

C++ Dersi: Nesne Tabanlı Programlama

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ı

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2) BLM-112 PROGRAMLAMA DİLLERİ II Ders-3 İşaretçiler (Pointer) (Kısım-2) Yrd. Doç. Dr. Ümit ATİLA umitatila@karabuk.edu.tr http://web.karabuk.edu.tr/umitatilla/ Dinamik Bellek Yönetimi Bir program çalıştırıldığında

Detaylı

BULANIK MANTIK VE SİSTEMLERİ 2014 2015 BAHAR DÖNEMİ ÖDEV 1. Müslüm ÖZTÜRK 148164001004 Bilişim Teknolojileri Mühendisliği ABD Doktora Programı

BULANIK MANTIK VE SİSTEMLERİ 2014 2015 BAHAR DÖNEMİ ÖDEV 1. Müslüm ÖZTÜRK 148164001004 Bilişim Teknolojileri Mühendisliği ABD Doktora Programı BULANIK MANTIK VE SİSTEMLERİ 2014 2015 BAHAR DÖNEMİ ÖDEV 1 Müslüm ÖZTÜRK 148164001004 Bilişim Teknolojileri Mühendisliği ABD Doktora Programı Mart 2015 0 SORU 1) Bulanık Küme nedir? Bulanık Kümenin (fuzzy

Detaylı

Bölüm 3: İşlemler Operating System Concepts with Java 8th Edition 3.1 Silberschatz, Galvin and Gagne 2009

Bölüm 3: İşlemler Operating System Concepts with Java 8th Edition 3.1 Silberschatz, Galvin and Gagne 2009 Bölüm 3: İşlemler 3.1 Silberschatz, Galvin and Gagne 2009 Bölüm 3: İşlemler İşlem Kavramı İşlem Zamanlaması (Process Scheduling) İşlemler Üzerindeki Faaliyetler İşlemler Arası İletişim (Interprocess Communication)

Detaylı

Bölüm 3: İşlemler Operating System Concepts with Java 8th Edition 3.1 Silberschatz, Galvin and Gagne 2009

Bölüm 3: İşlemler Operating System Concepts with Java 8th Edition 3.1 Silberschatz, Galvin and Gagne 2009 Bölüm 3: İşlemler 3.1 Silberschatz, Galvin and Gagne 2009 Bölüm 3: İşlemler İşlem Kavramı İşlem Zamanlaması (Process Scheduling) İşlemler Üzerindeki Faaliyetler İşlemler Arası İletişim (Interprocess Communication)

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 6.2 Bu bölümde, Mutex ve Semafor Farkları Klasik Senkronizasyon

Detaylı

Gereksiz Kodlar. burada if deyiminin else bölümüne gerek var mı? İfade doğruysa zaten fonksiyon geri dönüyor. Bu aşağıdakiyle tamamen eşdeğerdir:

Gereksiz Kodlar. burada if deyiminin else bölümüne gerek var mı? İfade doğruysa zaten fonksiyon geri dönüyor. Bu aşağıdakiyle tamamen eşdeğerdir: Gereksiz Kodlar Kaan Aslan 9 Temuz 1997 Kapalı spor salonu, durak yeri, taşıt aracı, en optimum, geri iade etmek, davranış biçimi Bu ifadelerde bir gariplik var, değil mi? Açık spor salonu göreniniz var

Detaylı

8. İŞARETCİLER (POINTERS)

8. İŞARETCİLER (POINTERS) 8. İŞARETCİLER (POINTERS) Verilerin bilgisayar hafızasında tutulduğu fiziki alan adres olarak tanımlanabilir. Adres, hem donanımla hem de yazılımla ilişkilidir. Donanımsal açıdan adres bellekte yer gösteren

Detaylı

1.1. Yazılım Geliştirme Süreci

1.1. Yazılım Geliştirme Süreci Kazanımlar Bu bolümde; Yazılım geliştirme sureci konusunda bilgi sahibi olacak, Yazılım geliştirme surecinde gerekli olan araçları tanıyacak, Python dilinde program geliştirme ortamlarını inceleyebileceksiniz.

Detaylı

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Kalıtım Kavramı Java da Çok Biçimlilik Kavramı Fonksiyonların Çok Biçimliliği Yapıcı Fonksiyonun Çok Biçimliliği Java da Kalıtım Kavramı 4 Kalıtım;

Detaylı

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0 Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Bitirme Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 01.06.2017 Süre : 60 dak. 1. t değişkeni hakkında aşağıdakilerden

Detaylı

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

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ı

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach() (LOOPS) while(), do-while(), for(), foreach() Döngüler (loops) while do-while for foreach while ( koşul ) işlemler; do işlemler; while (koşul ); for (başlangıç ; koşul ; arttırma) işlemler; foreach ( tip

Detaylı

Ders Adı Kodu Yarıyılı T+U Saati Ulusal Kredisi AKTS

Ders Adı Kodu Yarıyılı T+U Saati Ulusal Kredisi AKTS DERS BİLGİLERİ Ders Adı Kodu Yarıyılı T+U Saati Ulusal Kredisi AKTS İşletim Sistemleri BIL252 4 4+0 4 5 Ön Koşul Dersleri Yok Dersin Dili Dersin Seviyesi Dersin Türü Türkçe Lisans Zorunlu / Yüz Yüze Dersin

Detaylı

BLM 111 ALGORİTMA VE PROGRAMLAMA I

BLM 111 ALGORİTMA VE PROGRAMLAMA I 1 BLM 111 ALGORİTMA VE PROGRAMLAMA I DİZİLER (ARRAYS) Kullanıcıdan N tane tamsayı, xi, alalım ve 1. Bu sayıların ortalamasını hesaplamak isteyelim ort = 0; for (i=0; i

Detaylı

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir. İST 205 Bilgisayar Programlama III C Programlamaya Giriş ve Matematiksel-İstatistiksel Uygulamalar Y.Doç.Dr. Levent Özbek Ankara Üniversitesi Fen Fakültesi İstatistik Bölümü Tel: 0.312.2126720/1420 ozbek@science.ankara.edu.tr

Detaylı

Linux ta komutlar hakkında yardım almak için aşağıdaki komutlar kullanılır : - man - info - whatis - apropos

Linux ta komutlar hakkında yardım almak için aşağıdaki komutlar kullanılır : - man - info - whatis - apropos Yardım Komutları Linux ta komutlar hakkında yardım almak için aşağıdaki komutlar kullanılır : - man - info - whatis - apropos Yardım Komutları man komut Parametre olarak aldığı komut hakkında bilgiyi ekranda

Detaylı

man komut man ls (ls komutu hakkında bilgi verir.) man pwd (pwd komutu hakkında bilgi verir.)

man komut man ls (ls komutu hakkında bilgi verir.) man pwd (pwd komutu hakkında bilgi verir.) Yardım Komutları man komut Parametre olarak aldığı komut hakkında bilgiyi ekranda gösterir. man ls (ls komutu hakkında bilgi verir.) man pwd (pwd komutu hakkında bilgi verir.) Komut çalıştırıldığında uzun

Detaylı

UNIX/Linux Sistemlerinde exec İşlemleri

UNIX/Linux Sistemlerinde exec İşlemleri UNIX/Linux Sistemlerinde exec İşlemleri Kaan Aslan 10 Temmuz 2008 UNIX/Linux sistemlerinde fork fonksiyonu prosesin yeni ve özdeş bir kopyasını oluşturmaktadır. Yani fork işlemi sonrasında alt ve üst prosesler

Detaylı

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir. PROGRAMLAMAYA GİRİŞ Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir. C de yazılan bir programın çalışması için çoğunlukla aşağıdaki

Detaylı

Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net

Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net Bilgisayar Programlama Ders 6 Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net Fonksiyon Prototipleri Fonksiyon Prototipleri Derleyici, fonksiyonların ilk hallerini (prototiplerini)

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ı

Öğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1

Öğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1 Öğr. Gör. Serkan AKSU http://www.serkanaksu.net http://www.serkanaksu.net/ 1 JavaScript JavaScript Nedir? Nestcape firması tarafından C dilinden esinlenerek yazılmış, Netscape Navigator 2.0 ile birlikte

Detaylı

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Dosya İşlemleri (Rastgele Erişim)

Detaylı

C Programlama Dilininin Basit Yapıları

C Programlama Dilininin Basit Yapıları Bölüm 2 C Programlama Dilininin Basit Yapıları İçindekiler 2.1 Sabitler ve Değişkenler......................... 13 2.2 Açıklamalar (Expresions)........................ 14 2.3 İfadeler (Statements) ve İfade

Detaylı

Linux Assembly Programlamaya Giriş

Linux Assembly Programlamaya Giriş Linux Assembly Programlamaya Giriş Barış Metin Konular gcc / gas / ld Intel ve AT&T söz dizimleri gdb INT 80H C kütüphane fonksiyonları Stack Frame Örnek

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ı

SIMAN KULLANIM KILAVUZU

SIMAN KULLANIM KILAVUZU SIMAN KULLANIM KILAVUZU Önder Öndemir SIMAN Simülasyon programı Model Çatı ve Deneysel Çatı olmak üzere iki kısımdan oluşur. Model çatı genel itibariyle modullerin ve işlem bloklarının yazıldığı kısımdır.

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

Üst Düzey Programlama

Üst Düzey Programlama Üst Düzey Programlama JSP Üst Düzey Programlama-ders04/ 1 JSP JSP durağan HTML ile dinamik oluşturulan içeriği birleştirmeyi sağlar. Bir web sayfası tasarlama programı ile web sayfasını tasarlar daha sonra

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 İŞ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ı

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ı

C Konsol ve Komut Satırı

C Konsol ve Komut Satırı C Konsol ve Komut Satırı Öğr. Gör. M. Ozan AKI Rev 1.0 C:\> Konsol ekranı, işletim sistemi ve dosya yönetiminin metin tabanlı yönetilebilmesini sağlayan arabirimdir. Windows işletim sistemi ortaya çıkmadan

Detaylı

for döngüsü for (başlangıç değeri; şart; artım) ifade; for (başlangıç değeri; şart; artım) { ifadeler; }

for döngüsü for (başlangıç değeri; şart; artım) ifade; for (başlangıç değeri; şart; artım) { ifadeler; } for döngüsü for (başlangıç değeri; şart; artım) ifade; for (başlangıç değeri; şart; artım) ifadeler; Başlangıç değeri; koşul içinde tanımladığımız değişkene ilk değerin atanmasını sağlar. Koşul: Döngünün

Detaylı

Yazılım Kodlama ve İ simlendirme Standartları v1.0

Yazılım Kodlama ve İ simlendirme Standartları v1.0 Yazılım Kodlama ve İ simlendirme Standartları v1.0 İçerik Yazılım Kodlama ve İsimlendirme Standartları... 2 1. Amaç... Hata! Yer işareti tanımlanmamış. 2. Kapsam... Hata! Yer işareti tanımlanmamış. 3.

Detaylı

Pardus 2013 te Metin Editörleri

Pardus 2013 te Metin Editörleri METİN EDİTÖRLERİ Pardus 2013 te Metin Editörleri Editör metin düzenleyicisi demektir. Linux işletim sistemlerinde, metin oluşturma ya da düzenleme işlemleri için farklı metin düzenleyici programları vardır.

Detaylı

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Yapılar ve Birlikler enum Deyimi

Detaylı

Dosya Yönetim Sistemi Hazırlayan : mustafa kaygısız Kaynak: megep.meb.gov.tr

Dosya Yönetim Sistemi Hazırlayan : mustafa kaygısız Kaynak: megep.meb.gov.tr Dosya Yönetim Sistemi Hazırlayan : mustafa kaygısız Kaynak: megep.meb.gov.tr İşletim sisteminin dosyaları organize etme ve yönetme için ne kullandığını gösteren ifadedir. Dosya verilerin toplandığı birimlerdir

Detaylı

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI İÇİNDEKİLER IX İÇİNDEKİLER 1 GİRİŞ 1 Kitabın Amacı 1 Algoritmanın Önemi 2 Bilgisayarın Doğuşu ve Kullanım Amaçları 3 Programlama Dili Nedir? 3 Entegre Geliştirme Ortamı (IDE) Nedir? 4 2 ALGORİTMA VE AKIŞ

Detaylı

Assembly Dili Nedir? Assembly dili biliyorum derken hangi işlemci ve hangi işletim sistemi için olduğunu da ifade etmek gerekir.

Assembly Dili Nedir? Assembly dili biliyorum derken hangi işlemci ve hangi işletim sistemi için olduğunu da ifade etmek gerekir. Assembly Dili Nedir? Assembly dili biliyorum derken hangi işlemci ve hangi işletim sistemi için olduğunu da ifade etmek gerekir. Bunun için X86 PC Assembly dili, Power PC Assembly dili veya 8051 Assembly

Detaylı

Operatörlere Yeni İşlevler Yüklenmesi (Operator Overloading)

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ı

Sunum İçeriği. Programlamaya Giriş 22.03.2011

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ı

$ rm dosya1 dosya2 dosya3 dosya4 dosya5 dosya6 dosya7 dosya8

$ rm dosya1 dosya2 dosya3 dosya4 dosya5 dosya6 dosya7 dosya8 Joker karakterler Günlük Linux kullanımında çok defa bir operasyonu tek seferde birden fazla nesne için çalıştırmak isteyebileceğiniz (rm gibi) durumlarla karşılaşabilirsiniz. Böyle durumlarda, aşağıdaki

Detaylı

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO while(), do-while(), for() Döngü (loop) : Bir koşul sağlandığı (true olduğu) sürece bir veya birden çok komutun tekrarlanması işlemidir. Java Döngüler (loops) While() do-while() for ( ) while ( koşul )

Detaylı

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers) 5. İşaretç iler (pointers) C dilinin öyle bir özelliği vardır ki, programlama dilleri arasında kendisini diğerlerinden ayıran bir fark olarak sunulur: işaretçiler. Aslında, bazı diğer dillerde de direkt

Detaylı