Unix/Linux Sistem Programlama


KURSA ÖN KAYIT YAPMAK İÇİN TIKLAYINIZ

Açıklama: Bu kurs UNIX sistemlerinin üzerinde sistem programlama faaliyetlerini yürütecek kişilere yöneliktir. Konular genel olarak tüm UNIX sistemlerini içerecek biçimde ele alınıp açıklanmakta ve sistemler arasındaki farklılıklar ayrıca değerlendirilmektedir.

Temel Kavramlar

  • Kurs için gereken temel kavramların gözden geçirilmesi
  • Kaynak yöneticisi olarak işletim sistemleri
  • İşletim sistemlerinin tarihsel gelişimi
  • UNIX türevi sistemlerin tarihsel gelişimi
  • Özgür Yazılım ve Açık Kaynak Kod akımları
  • UNIX türevi sistemlere yönelik standartlar
  • Dağıtım (distribution) kavramı.
  • Belli başlı Linux dağıtımları ve bu dağıtımlar arasındaki ilişkiler
  • Proses kavramı
  • Proseslerin kontrol blokları
  • Çok prosesli (multiprocessing) çalışma ve zaman paylaşımlı (time sharing) CPU kullanımı
  • Preemptive işletim sistemlerinin temel özellikleri
  • Kavramsal olarak POSIX fonksiyonları, Standart C Fonksiyonları ve işletim sisteminin sistem fonksiyonları
  • POSIX fonksiyonlarında başarısızlık durumunun tespit edilmesi ve eele alınması

Login İşlemleri

  • Sisteme giriş ve login işlemi
  • Kullanıcı ve grup kavramları
  • Kullanıcı ve grup isimleri
  • Login sırasında yapılan kontroller
  • Linux dizin yapısının incelenmesi (/bin dizini, /lib dizini, /usr dizini, /mnt dizini, …)

Temel Dosya İşlemleri

  • Proseslerin kullanıcı ve grup id’leri
  • Proseslerin ek grup id’leri (supplemantary group ids)
  • Kullanıcı ve grup bilgilerinin elde edilmesi
  • Yol ifadelerinin anlamı, mutlak ve göreli yol ifadeleri
  • Prosesin çalışma dizininin (current working directory) anlamı, elde edilmesi ve değiştirilmesi
  • UNIX/Linux sistemlerinde dosya işlemleri ve temel POSIX dosya fonksiyonları (open, read, write, lseek, close)
  • Dosyaların ve dizinlerin erişim hakları ve anlamları
  • Ayrıcalıklı (root) erişim hakkına sahip prosesler
  • Dosya bilgilerinin elde edilmesi ve stat fonksiyonları
  • Yardımcı dosya fonksiyonları (chmod, remove, chown, …)
  • Dizinler üzerinde işlemler (dizinlerin yaratılması, yok edilmesi, dizinlerin erişim özellikleri, …)
  • Dizin içerisindeki girişlerin elde edilmesi
  • Dizin ağacının özyinelemeli olarak dolaşılması

Önbellek (cache) Kavramı ve Linux Çekirdeğinin Uyguladığı Önbellek Mekanizmaları

  • Önbellek sistemleri
  • Linux çekirdeğinde “buffer cache” ve page cache” sistemleri
  • Kullanıcı modundaki (user mode) dosya işlemlerinde gerçekleştirilen ön bellek (tampon) sistemleri
  • C Programlama Dilinin stdio kütüphanesi tarafından uygulanan önbellek mekanizması
  • stdin, stdout ve stderr dosyalarının kullanıcı düzeyinde önbelleklenmesi
  • Linux çekirdeğinin “page cache”“dentry cache” ve “i-node cache” sistemleri

Dosya Yönlendirmeleri

  • Dosya betimleyicilerinin (file descriptors) anlamı
  • Linux çekirdeğinde dosya nesneleri ve dosyalara ilişkin veri yapıları
  • Dosya yönlendirmesinin yapılması (dup ve dup2 fonksiyonlarının kullanımı)
  • stdin, stdout ve stderr dosyalarının yönlendirilmesi

İşlemcilerin Koruma Mekanizmaları ve KullanıcıModu (User Mode) / Çekirdek Modu (KernelMode) Proses Kavramı

  • Koruma mekanizmasının anlamı
  • Bellek ve komut korumaları
  • Proseslerin bellek izolasyonu hakkında temel bilgiler
  • Çekirdeğin kendini kullanıcı modundaki (user mode) prosesler tarafından koruması
  • Kullanıcı modu (user mode) ve çekirdek modu (kernel mode) kavramları
  • Prosesin kullanıcı modundan çekirdek moduna geçmesi ve geri dönmesi (user mode/kernel mode transition)

İşlemcilerin Sayfalama (Paging) Mekanizmları ve Sanal Bellek (Virtual Memory) Kullanımı

  • İşlemcilerin sayfalama mekanizması
  • Intel ve ARM işlemcilerinde sayfalama mekanizması
  • Sayfa tabloları (page tables)
  • Çok prosesli çalışmalarda sayfa tablolarının organizasyonu
  • Sayfalama için kullanılan içsel kesmeler
  • Sanal bellek mekanizması
  • Linux çekirdeğinin sanal bellek gerçekleştirimi hakkında temel bilgiler
  • 32 bit ve 64 bit Linux proseslerinin sanal belleğe yüklenmesi
  • Linux sistemlerinde proseslerin bellek alanlarının izole edilmesi

Proseslerin Yaratılması ve Proseslerle İlgili Temel İşlemler

  • Üst (parent) ve alt proses (child) kavramları
  • Proseslerin id değerleri
  • fork fonksiyonunun kullanımı
  • fork işleminin çekirdek tarafından gerçekleştirilmesi
  • fork işleminde üst prosesten alt prosese aktarılan bilgiler
  • exec işleminin anlamı
  • exec fonksiyonları
  • fork ve exec fonksiyonlarının birlikte kullanılması
  • Prosesler üzerine işlemler yapan POSIX fonksiyonları
  • Proseslerin exit kodları ve anlamı
  • Alt proseslerin beklenmesi ve wait fonksiyonları
  • init prosesi
  • Hortlak (zombie) prosesler, hortlaklığın nedeni ve ortadan kaldırılması
  • Öksüz (orphan) prosesler
  • Proseslerin kod, data ve stack alanları

Proseslerin Çevre Değişkenleri (Environment Variables)

  • Proseslerin çevre değişkenlerinin anlamı ve önemi
  • Çevre değişkenlerinin değerlerinin elde edilmesi ve değiştirilmesi
  • Prosesin çevre değişken listesinin elde edilmesi
  • Çevre değişkenlerinin Linux çekirdeği tarafından organize edilme biçimleri
  • Çevre değişkenlerinin alt proseslere aktarılması

Prosesler Arası Haberleşmeler (Interprocess Communications)

  • Prosesler arası haberleşmenin anlamı ve önemi
  • İsimli ve isimsiz boru haberleşmeleri (named/unnamed pipes)
  • Boru haberleşmeleri yoluyla client/server tarzı uygulamalar
  • Linux çekirdeğinin boru haberleşmesini sağlama biçimi
  • Paylaşılan bellek alanları (shared memory) yoluyla prosesler arası haberleşme
  • Paylaşılan bellek alanlarının System 5 ve modern POSIX fonksiyonlarıyla oluşturulması
  • Paylaşılan bellek alanlarının Linux çekirdeği tarafından gerçekleştirimi
  • Paylaşılan bellek alanlarında senkronizasyon sorunu
  • Bellek tabanlı dosyalar (memory mapped files)
  • Mesaj kuyrukları yöntemi
  • Mesaj kuyruklarının System 5 ve modern POSIX fonksiyonlarıyla oluşturulması ve kullanılması
  • Aynı makinenin prosesleri arasında haberleşmede kullanılan diğer yöntemler

Thread’lerle İşlemler

  • Genel olarak thread kavramı
  • Thread’lerin kullanılma gerekçeleri
  • POSIX’in pthread kütüphanesinin tanıtımı
  • Thread’lerin yaratılması ve ve sonlanması
  • Thread’lerin özellikleri (thread attributes)
  • Thread’lerin sonlanmasının beklenmesi
  • Thread’lerin yok edilmesi (therad cancellation)
  • Thread’lerin bloke olması
  • Çok thread’li uygulamalar
  • Thread’ler arası haberleşmeler
  • Thread senkronizasyonun anlamı
  • Mutex senkronizasyon nesnelerinin kullanımı
  • Mutex özelliklerinin değiştirilmesi
  • Semaphore senkronizasyon nesnelerinin kullanımı
  • Farklı proseslerin thread’leri arasında senkronizasyon
  • Okuma/yazma kilitleri
  • Koşul Değişkenleri condition variables)
  • Interlock işlemleri
  • Kilitlenmeye yol açmayan veri yapıları (lock-free data sturctures) hakkında temel bilgiler
  • Thread’e özgü alanlar (thread specific data)
  • Fonksiyonların thread güvenliliği (thread safety)
  • Linux çekirdeğinin thread gerçekleştirimi
  • POSIX thread çizelgelemesi ve thread öncelikleri
  • Linux sistemlerinde thread çizelgelemesinin ayrıntıları
  • Thread havuzları (thread pools) ve thread havuzlarının gerçekleştirimleri

Sinyal (Signal) İşlemleri

  • Sinyal kavramı
  • POSIX sinyallerinin tanıtımı
  • Sinyallerin oluşması ve proseslere gönderilmesi
  • Sinyallerin ele alınması, signal ve sigaction fonksiyonlarının kullanımı
  • Proseslere sinyal gönderilmesi ve kill fonksiyonun kullanımı
  • Sinyallerin bloke edilmesi
  • Sinyaller ve thread’ler
  • Gerçek zamanlı sinyaller
  • Sinyaller yoluyla proses senkronizasyonu
  • Sinyaller tarafından kesilen sistem fonksiyonlarının yeniden başlatılması

Proseslere İlişkin Ayrıntılar

  • Proses grupları
  • Terminal Kavramı
  • Oturum (session) kavramı
  • İş (job) kavramı ve iş kontrol sinyalleri

Proseslerin Kaynak Kullanımı

  • Proseslerin kullandığı kaynaklar
  • Proseslerin kaynak limitlerinin elde edilmesi ve değiştirilmesi
  • Proseslerin kaynak kullanımlarının sınırlandırılması

Daemon Prosesler (Linux Servis Programları)

  • Daemon kavramı ve daemon proseslerin aşağı seviyeli incelenmesi
  • Daemon’ların yazımı ve kullanımı
  • Daemon’lara ilişkin ayrıntılı işlemler

Linux Sistemlerinde Proseslere İlişkin Yetenekler (Process Capabilities)

  • Linux sistemlerinde proses yetenekleri (process capabilities) kavramı
  • Proses yeteneklerinin listesi ve anlamı
  • Proses yeteneklerinin set edilmesi ve üst prosesten alt prosese aktarılması

Sistemlerinde Tarih ve Zaman İşlemleri

  • Tarih ve zaman işlemleri yapan standart C fonksiyonları ve POSIX fonksiyonları
  • Bölgesel ayarlar ve locale işlemleri
  • Linux çekirdeğinde zamanlama işlemleri
  • Sistem zamanının güncellenmesi

Sistemlerinde Statik ve Dinamik (Shared) Kütüphaneler

  • Kütüphane (library) kavramı
  • Statik ve dinamik kütüphaneler arasındaki farklılıklar
  • Statik kütüphanelerin yaratılması ve kullanılması
  • Dinamik kütüphanelerin yaratılması ve kullanılması
  • Dinamik kütüphanelerin yüklenmesi
  • Konumdan bağımsız kod (position independent code) kavramı
  • Dinamik kütüphanelerde versiyonlama
  • Dinamik kütüphane kullanan uygulamaların konuşlandırılması
  • Dinamik kütüphanelerin programın çalışma zamanı sırasında dinamik biçimdeyüklenmesi ve kullanılması
  • Dinamik kütüphaneler konusunda kullanılan yardımcı programlar

İleri Dosya İşlemleri

  • Proseslerin kök dizinleri
  • Dosya özelliklerinin değiştirilmesi
  • Dosyaların kilitlenmesi (file locks)
  • Dosya sistemi üzerinde gerçekleşen olayların ele alınması
  • Asenkron dosya işlemleri
  • select ve poll fonksiyonlarının kullanımı
  • Dosya delikleri (file holes)
  • Dosya tamponlarının yönetilmesi
  • Dosya sisteminin mount edilmesi
  • Otomatik mount işlemleri
  • Linux çekirdeğinin mount işlemlerini ele alma biçimi

UNIX/Linux Sistemlerinde Soket Programlama

  • Bilgisayar ağları hakkında temel bilgiler
  • Haberleşme protokollerine kısa bir bakış
  • IP protokol ailesi
  • OSI katmanları ve IP protokol ailesi katmanları
  • Berkeley soket arayüzü ve soket kütüphanesinin kullanımı
  • TCP/IP client/server programlama
  • Client/server programlamadaki mesa formatları
  • Çok client’lı uygulamalar ve çok client’lı uygulamalarda izlenecek stratejiler
  • IP protokol ailesinin uygulama katmanına ilişkin bazı protokolleri hakkında açıklamalar (telnet, pop3, imap, http ...) ve bunlara ilişkin client programların yazımı
  • UDP/IP uygulamaları
  • UNIX domain soketlerinin kullanımı
  • Ölçeklenebilir (scaleable) dağıtık uygulamaların gerçekleştirilmesine yönelik stratejiler
  • Linux çekirdeğinin protokol mimarisi (Linux TCP/IP stack)
  • Network sniffer programlar ve pcap kütüphanesinin kullanımı

Proc ve Sys Dosya Sistemleri

  • Proc ve Sys dosya sistemlerinin tanıtımı
  • Proc ve Sys dosya sistemlerinin girişlerinin anlamı
  • Proc ve Sys dosya sistemlerinin okunması ve yazılması
  • Proc ve Sys Dosya sistemlerinin Linux çekirdeği tarafından gerçekleştirimi

X Window Sistemleri ve GUI Çalışma Modeli

  • XWindow Sistemlerinin Genel Yapısı ve GUI çalışma modeli
  • XWindow sistemlerinde aşağı seviyeli GUI işlemlerinin temelleri
  • XWindow sistemleri üzerine kurulu olan yüksek seviyeli GUI kütüphanelerine ilişkin temel bilgiler

Object ve Executable Dosya Formatları

  • Object dosya ve executable dosya kavramları
  • ELF formatının incelenmesi
  • ELF formatı üzerinde işlem yapan programlar
  • GNU BFD kütüphanesinin temel kullanımı
  • Object dosyaların link edilmesi
  • Relocation işlemi
  • Flat binary dosyaların oluşturulması

Linux’ta Kullanılan Dosya Sistemlerinin Disk Organizasyonları

  • Linux sistemlerinin kullandığı dosya sistemlerinin tanıtımı
  • Linux’ta disk sektörlerinin okunması ve yazılması
  • Loopback aygıtlar
  • I-Node tabanlı dosya sistemlerinin disk organizasyonları
  • Dosyaların i-node bilgileri
  • Hard link ve soft link kavramları
  • Ext-2, Ext-2 ve Ext-4 sistemlerinin disk organizasyonu ve bu dosya sistemlerinin aşağı seviyeli incelenmesi

Linux Sistemlerinde Boot Süreci

  • Linux sistemlerinin boot edilmesi
  • Boot sürecinin ayrıntıları
  • Çekirdeğin boot parametreleri (kernel boot parameters)
  • Çekirdek imaj dosyasının yüklenmesi
  • Boot işlemi sırasında işlem gören çeşitli sistem dosyaları ve işlevleri
  • Boot işleminden sonra yaratılan temel prosesler

Linux Çekirdek Kodlarının İncelenmesi

  • Linux çekirdek kodlarının dizin organizasyonu
  • Linux çekirdek kodlarının genel yazım biçimi
  • Linux çekirdek kodlarında kullanılan temel veri yapıları
  • Linux çekirdeğindeki dinamik tahsisat sistemleri (buddy allocator, slab allocator, …)
  • Linux çekirdekleri arasındaki versiyon farklılıkları

Linux Çekirdeğinin Yeniden Derlenmesi

  • Linux çekirdeğinin derlemesi
  • Linux modüllerinin eklenip çıkartılması
  • Linux kaynak kodlarında değişiklikler yapılması

Linux Aygıt Sürücüleri

  • Aygıt sürücülerin anlamı
  • Linux aygıt sürücü mimarisinin tanıtımı
  • Linux çekirdek modüllerinin yazımı
  • Çekirdek modüllerinin yüklenmesi ve boşaltılması
  • Karakter aygıt sürücülerinin yazımı
  • Aygıt sürücülerde senkronizasyon işlemleri
  • Aygıt sürücülerde bekleme kuyruklarının yaratılması ve bloke işlemlerinin sağlanması
  • Aygıt sürücülerde bellek tahsisatları
  • Aygıt sürücülerin IO portlarını kullanması
  • Aygıt sürücülerde kesme işlemlerinin yönetilmesi
  • Blok aygıt sürücülerinin yazımı
  • Blok aygıt sürücülerinde bellek haritalaması ve DMA kullanımı
  • USB aygıt sürücüleri

* Ücreti Sorunuz.

KURSA ÖN KAYIT YAPMAK İÇİN TIKLAYINIZ

* Kursumuz gerçek zamanlıdır. Derslerimiz interaktif olarak yapılmaktadır.

Bu kurs C ve Sistem Programcıları Derneği ve Sistem Bilgisayar işbirliği ile düzenlenmektedir.

Sistem Programlama ve İleri C Uygulamaları (I)


Giriş ve Temel Kavramlar

  • Sistem Programlama Nedir?
  • İşletim Sistemlerinin Tarihsel Gelişimi
  • Orijinal Kod Temeline Sahip Olan ve Olmayan İşletim Sistemleri
  • Dağıtım (Distribution) Kavramı ve İşletim Sistemlerinin Dağıtımları
  • Programlamadaki Katmanlı Yapılar
  • API Kavramı
  • Kütüphane ve Framework Kavramları
  • CPU, Mikroişlemci, Mikrodenetleyici SOC (System on Chip) ve SBC (Single-Board Computer) Kavramları
  • C’de Tanımsız Davranış, Derleyiciye Bağlı Davranış ve Belirsiz Davranış Kavramları
  • C Derleyicilerinin Hata Mesajları ve Standartlara Uyum
  • Kursta Kullanılacak Olan Nispeten Az Bilinen Bazı Standart C Fonksiyonları
  • Geçici Dosya Kavramı ve Geçici Dosyaların Oluşturulması
  • Windows, UNIX/Linux ve Mac OS X Sistemlerinde C Programlarının Derlenerek Çalıştırılması
  • GNU Tarzı Komut Satırı Argümanları
  • Komut Satırı Argümanlarının Ayrıştırılması
  • İşletim Sistemlerinin Sistem Fonksiyonları, POSIX Fonksiyonları ve Windows API Fonksiyonları
  • Proses Kavramı
  • Değişkenlerin Harflandirilmesi
  • Macar Notasyonu ve Windows API Fonksiyonlarında Kullanılan typedef Tür İsimleri
  • Fonksiyonlarda Hata Kontrolleri
  • Windows API Fonksiyonlarının Başarısızlık Nedenlerinin Elde Edilmesi ve Rapor Edilmesi
  • UNIX/Linux Sistemlerindeki POSIX Fonksiyonlarının Başarısızlık Nedenlerinin Elde Edilmesi ve Rapor Edilmesi
  • C Programlarında Dosya Organizasyonu
  • Handle Kavramı ve Handle Sistemleri
  • Windows ve UNIX/Linux Sistemlerinde Fonksiyon Çağırma Biçimleri (Calling Conventions)
  • C’de Fonksiyon Göstericilerinin Kullanımı
  • Türden Bağımsız İşlem Yapabilen Fonksiyonların Tasarımı
  • Göstericiyi Gösteren Göstericiler
  • Dizi Göstericileri
  • Göstericilere İlişkin Karmaşık Bildirimler
  • Referans Yerelliği (Locality of Reference) Kavramı ve Programlamadaki Önemi

İşletim Sistemlerinin Dosya Sistemleri

  • İşletim Sistemlerinin Dosya İşlemlerini Yapan Sistem Fonksiyonları
  • Windows Sistemlerinde Temel Dosya İşlemlerini Yapan API Fonksiyonları
  • UNIX/Linux Sistemlerinde Temel Dosya İşlemlerini Yapan POSIX Fonksiyonları
  • Windows Sistemlerinde Dosya Özellikleri
  • UNIX/Linux Sistemlerinde Dosya Özellikleri
  • Windows Sistemlerinde Dosya Nesneleri ve Proseslerin Handle Tabloları
  • UNIX/Linux Sistemlerinde Dosya Nesneleri ve Dosya Betimleyicilerin Anlamı
  • Windows Sistemlerinde Dosya Sistemi İle İlgili Yardımcı API Fonksiyonları
  • UNIX/Linux Sistemlerinde Dosya Sistemi İle İlgili Yardımcı POSIX Fonksiyonları
  • Windows Sistemlerinde Dizin İçerisindeki Dosyaların Elde Edilmesi
  • UNIX/Linux Sistemlerinde Dizin İçerisindeki Dosyaların Elde Edilmesi
  • Dizin Değişiklerinin Otomatik Olarak İzlenmesi

Özyinelemeli İşlemler

  • Özyineleme Kavramı
  • Özyinelemeli Fonksiyonlar
  • Özyinelemeli Fonksiyonlara İlişkin Örnekler
  • Dizin Ağacının Özyinelemeli Biçimde Dolaşılması

Proseslerin Bellek Alanları

  • Prosesin İşletim Sistemi Tarafından Yüklenmesi
  • Stack Kavramı
  • Proseslerin (Thread’lerin) Stack’leri
  • Data ve BSS Bölümleri
  • Kod (Text) Bölümleri
  • Heap Kavramı ve Proseslerin Heap Organizasyonları
  • Windows Sistemlerinde Heap Organizasyonı
  • UNIX/Linux Sistemlerinde Heap Organizasyonu

Bellek Sistemleri

  • Birincil ve İkincil Bellekler
  • RAM ve ROM Kavramları
  • RAM ve ROM çeşitleri
  • Hard Disklerin Genel Yapısı
  • SSD Disklerin Genel Yapısı
  • İkincil Belleklerden Veri Transferi
  • Önbellek (Cache) Sistemleri
  • Önbellek Terminolojisi
  • Çok Karşılaşılan Önbellek Sistemleri
  • Önbellek Sistemlerinin Tasarımı
  • C’nin Standart Dosya Fonksiyonlarınının Kullandığı Tampon (Önbellek) Mekanizması
  • stdin, stdout ve stderr Dosyalarının Tamponlama Mekanizmaları

İşlemcilerin Koruma ve Sayfalama Mekanizmaları ve Sanal Bellek Kullanımı

  • İşlemcilerin Koruma Mekanizmasının Anlamı
  • İşlemcilerin Bellek ve Komut Koruması
  • Proseslerin Çekirdek Moduna Geçmesi ve Geri Dönmesi
  • Çekirdek Modülleri ve Ayggıt Sürücülerin Anlamı
  • İşlemcilerin Sayfalama Mekanizmasının Anlamı
  • Sanal Bellek Kullanımı
  • Proseslerarası Geçiş

Giriş Çıkış Yönlendirmeleri ve Boru İşlemleri

  • Giriş/Çıkış Yönlendirmeleri (IO Redirection)
  • Komut Satırında Boru İşlemleri

Prosesler ve İşletim Sisteminin Proses Yönetimleri

  • Zaman Paylaşımlı Çalışma Modeli -İşletim Sistemlerinin Çizelgeleyici Alt Sistemleri
  • Bloke Kavramı, Processlerin ve Thread’lerin Bloke Olması
  • Çalışma Kuyrukları (Run Queues) ve Bekleme Kuyrukları (Wait Queues)
  • Proseslerin Çevre Değişkenleri
  • IO Yoğun ve CPU Yoğun Prosesler
  • Windows’ta Proseslerin Yaratılması ve Sonlanması
  • UNIX/Linux Sistemlerinde Proseslerin Yaratılması ve Sonlanması (fork ve exec işlemleri)
  • Proseslerarasında Altlık-Üstlük (Parent-Child) İlişkileri
  • Proseslerin Çıkış (Exit) Kodlarının Elde Edilmesi
  • UNIX/Linux Sistemlerinde Hortlak (Zombie) Prosesler
  • Windows ve UNIX/Linux Sistemlerinde Proses Listesinin Elde Edilmesi
  • Proseslerin Kullandığı Kaynaklar

Proseslerarası Haberleşme (Interprocess Communication)

  • Proseslerarası Haberleşmenin Anlamı
  • Aynı Makinenin Prosesleri Arasındaki Haberleşmelerde ve Farklı Makinelerin Prosesleri Arasındaki Haberleşmelerde Kullanılan Yöntemler
  • Windows’ta Borular Yoluyla Proseslerarası Haberleşme
  • UNIX/Linux Sistemlerinde Borular Yoluyla Proseslerarası Haberleşmeler
  • İsimsiz ve İsimli Borular
  • Windows Sistemlerinde Paylaşılan Bellek Alanları
  • UNIX/Linux Sistemlerinde Paylaşılan Bellek Alanları
  • Windows Sistemlerinde Bellek Tabanlı Dosyalar
  • UNIX/Linux Sistemlerinde Bellek Tabanlk Dosyalar
  • UNIX/Linux Sistemlerinde Mesaj Kuyrukları

Thread’lerle İşlemler

  • Thread Kavramı
  • Thread’lerin Stack’leri
  • Thread’lerin Birbirleriyle Haberleşme Biçimleri
  • Windows Sistemlerinde Thread’lerin Yaratılması ve Sonlanması
  • UNIX/Linux Sistemlerinde Thread’lerin Yaratılması ve Sonlanması
  • Thread Senkronizasyonu
  • Kritik Kod Blokları
  • Windows Sistemlerinde CriticalSection Nesneleri İle Kritik Kodların Oluşturulması
  • Windows Sistemlerinde Mutex Nesnelerinin Kullanımı
  • UNIX/Linux Sistemlerinde Mutex Nesnelerinin Kullanımı
  • Windows Sistemlerinde Semaphore Nesneleri
  • UNIX/Linux Sistemlerinde Semaphore Nesneleri
  • Üretici-Tüketici Probleminin Windows ve UNIX/Linux Sistemlerinde Çözümü
  • Windows’ta Event Senkronizasyon Nesneleri
  • UNIX/Linux Sistemlerinde Koşul Değişkenleri
  • Windows Sistemlerinde Okuma/Yazma Kilitleri
  • UNIX/Linux Sistemlerinde Okuma/Yazma Kilitleri
  • Örnek Senkronizasyon Problemleri: Uyuyan Berber Problemi, Yemek Yiyen Filozoflar Problemi vs.
  • Windows’ta Atomik İşlemler ve InterLocked Fonksiyonları
  • UNIX/Linux Sistemlerinde Atomik İşlemler
  • C ve C++’ta Atomik İşlemler
  • Fonksiyonların Thread Güvenliliği
  • Windows’ta Thread Local Storage Kullanımı
  • UNIX/Linux Sistemlerinde Thread Specific Data Kullanımı
  • Thread Havuzları
  • Windows Sistemlerinde Thread’lerin Çizelgelenmesi
  • UNIX/Linux Sistemlerinde Thread’lerin Çizelgelenmesi

Veri Yapıları ve Algoritmalar

  • Algoritma Kavramı
  • Algoritmanın Karmaşıklığı
  • Algoritma Karmaşıklığının Hesaplama Yöntemleri
  • Asimtotik Notasyonlar
  • Big O Notasyonu
  • Algoritmaların Sınıflandırılması
  • Sayılar Teorisine Yönelik Algoritmalar
  • Algoritmik Bulmacalar
  • Veri Yapısı Kavramı ve Temel Veri Yapıları
  • Dinamik Diziler, Kullanım Alanları ve Gerçekleştirimleri
  • Bağlı Listeler, Kullanım Alanları ve Gerçekleştirimleri
  • Kuyruk Veri Yapısı, Kullanım Alanları ve Gerçekleştirimleri
  • Stack Veri Yapısı, Kullanım Alanları ve Gerçekleştirimleri
  • Çift Yönlü Dinamik Diziler (Deque), Kullanım Alanları ve Gerçekleştirimleri
  • Sıralama Algoritmaları
  • Arama (Seraching) İşlemleri, İçsel ve Dışsal Arama Kavramları
  • İkili Aramalar
  • Üstel Aramalar
  • Hash Tabloları, Kullanım Alanları, Varyasyonları ve Gerçekleştirimleri
  • Tahsisat Algoritmaları Kullanım Alanları ve Gerçekleştirimleri
  • Çöp Toplayıcı (Garbage Collector) Kavramı, Kullanım Alanları ve Gerçekleştirimleri
  • Ağaç Kavramı, Özellikleri
  • İkili Ağaçlar
  • Ağaçlarda Dolaşım İşlemleri
  • Arama Ağaçları
  • İkili Arama Ağaçları, Kullanım Alanları ve Gerçekleştirimleri
  • İkili Arama Ağaçlarında Dengeleme
  • Heap Ağaçları, Heap Veri Yapısı ve Gerçekleştirimleri
  • Heap Veri Yapısıyla Öncelik Kuyrukları
  • Heap Sort Yöntemi
  • Dışsal (External) Aramalar
  • B-Tree ve B+Tree Ağaçları ve Gerçekleştirimleri
  • Veri Yapılarının Genelleştirilmeleri (Türden Bağımsız Veri Yapılarının Oluşturulması)
  • Graf Veri Yapısı
  • Graf Veri Yapısının Gerçekleştirimleri
  • Graf Veri Yapısında Dolaşım İşlemleri
  • Bazı Tipik Graf Problemlerinin Çözümüne İlişkin Algoritmalar

TCP/IP Protokol Ailesi İle Proseslerarası Haberleşme

  • Protokol Kavramı
  • OSI Katmanlarının Anlamı
  • IP Protokol Ailesine Genel Bakış
  • IP Protokolü
  • TCP ve UDP Protokolleri
  • TCP Protokolü ile Client/Server Haberleşme
  • Soket Kavramı BSD Soket Sistemi
  • Windows Soket API’leri
  • TCP Server Programlarının Yazımı
  • TCP Client Programlarının Yazımı
  • Client ile Server Arasında Haberleşme Teknikleri
  • Çok Client’lı Server Uygulamaları
  • IP Ailesinin Uygulama Katmanına İlişkin Protokoller (POP3, TELNET, HTTP, SSH Protokolleri)
  • UDP Haberleşmesi
  • UDP Client ve Server Programları

Kütüphanelerin Yaratılması ve Kullanılması

  • Windows Sistemlerinde Statik Kütüphanelerin Yaratılması ve Kullanımı
  • UNIX/Linux Sistemlerinde Statik Kütüphanelerin Yaratılması ve Kullanımı
  • Windows Sistemlerinde Dinamik Kütüphanelerin Yaratılması ve Kullanımı
  • UNIX/Linux Sistemlerinde Dinamik Kütüphanelerin Yaratılması ve Kullanımı
  • Windows Sistemlerinde Dinamik Kütüphanelerim Dinamik Yüklenmesi
  • UNIX/Linux Sistyemlerinde Dinamik Kütüphanelerin Dinamik Yüklenmesi

Yazılımsal Araçların Kullanımı

  • Versiyon Takip Sistemleri
  • Git Aracının Kullanılması
  • Github Kullanımı
  • GNU Make, CMake ve QMake Build Araçlarının Kullanımı
  • Valgrind ve Cppcheck Araçlarının Kullanımı
  • Profiler’lar ve GNU gprof Araçlarının Kullanımı
  • Visual Studio Debugger Kullanımı
  • GDB Kullanımı

Veritabanı İşlemleri

  • Veritabanı Yönetim Sistemlerinin Genel Yapısı
  • Gömülü Veritabanı Yönetim Sistemleri
  • C’de Sqlite Kullanımı
  • C’de MySql Kullanımı

Yazılımlarda Test Süreci

  • Genel Olarak Test Süreci
  • Test Yöntemleri
  • Test Otomasyon Araçları Hakkında Genel Bilgiler
  • C’de Birim Testleri

Aşağı Seviyeli Disk İşlemleri

  • Hard Disklerin, DVD ROM’ların, SSD Disklerin ve Flash Disklerin Genel Yapısı
  • Windows’ta Aşağı Seviyeli Disk İşlemleri
  • UNIX/Linux Sistemlerinde Aşağı Seviyeli Disk İşlemleri
  • Windows FAT Dosya Sistemlerinin Disk Organizasyonları
  • Ext2 ve Ext3 Dosya Sistemlerinin Disk Organizasyonları
  • Disk Bölümleme Tabloları
  • Klasik ve UEFI Boot Süreci

Kesme Mekanizması

  • Kesme Kavramı
  • Yazılım ve Donanım Kesmeleri
  • PC Mimarisinde Temel Kesmeler ve İşlevleri
  • Kesmelerin Ele Alınması

Ve diğerleri….

Ön koşul: C Programlama Dilini bilmek veya C Programlama Dili kursunu tamamlamış olmak.

* Ücreti sorunuz.

ARM Mikrodenetleyici Uygulamaları


Açıklama; Ders akışı sırasında aşığda belirtilen konularda değişiklik yapılabilir. Yeni konular eklenebilir ya da bazı konular programdan çıkartılabilir. Ders konuları işlenme sırasına göre belirtilmemiştir. ARM C Uygulamaları ders programı STM32F4 işlemci mimarisi kullanılarak yürütülecektir. Geliştirme ortamı olarak IAR Embedded Workbench for ARM (EWARM) kullanılacaktır. Uygulama konularında STM32 F4 Discovery geliştirme kitinin kullanılması planlanmaktadır. Ayrıca Mikroelektronika ve diğer firmalarının bazı bordları da kullanılacaktır.

Kurs konularından bazıları aşağıdadır:

 

ARM Mikrodenetleyici çekirdek yapılarının incelenmesi

STM32F4 Mikrodenetleyicilerin incelenmesi:

– Bellek organizasyonu

– I/O portları

– Çevresel birimler

– Kesme özelliği ve diğer özellikler

Geliştirme ortamlarının incelenmesi:

– IAR EWARM geliştirme ortamı

– STMicroelectronics STMCube yazılım geliştirme ortamı

Mikrodenetleyici uygulamaları akış yönetimi, yazılım modellemeleri

I/O portları kullanımı

Alfanümerik LCD, 7-segment display birimlerinin uygulamaları

Push button ve Matrix keyboard uygulamaları

RS232 haberleşmesi: GPS modül kullanımı, NMEA protokolü

1-Wire Bus haberleşmesi: Sayısal termometre uygulaması

I2C haberleşmesi: Real Time Clock, 24XX EEPROM bellek uygulamaları

SPI haberleşmesi: Sensör uygulamaları, 25XX EEPROM bellek uygulamaları

Grafik LCD kullanımı

RS485 haberleşmesi ve MODBUS protokolü

Mixed model programming: C – Assembly entegrasyonu

 

Ön koşul; Daha önce C Programlama dilinde uygulamalı çalışma yapmış olmak ya da C ve Sistem Programcıları Derneği’nin açmış olduğu C Programlama Dili kursuna katılmış olmak.

Kurs ücreti duyuru sayfasında belirtilmektedir.

Bu kurs C ve Sistem Programcıları Derneği ve Sistem Bilgisayar işbirliği ile düzenlenmektedir.

 

Intel 80X86 Korumalı Mod


Açıklama : Korumalı mod (protected mode), Intel işlemcilerinin çokişlemli (multiprocessing) çalışmayı mümkün kılan çeşitli özelliklerinin bileşiminden oluşan bir çalışma biçimidir. Intel mimarisini kullanan çokişlemli işletim sistemleri de (Windows 3.1, Windows 9X, OS/2, Unix gibi.) korumalı modu kullanırlar. Bu sistemlerde düşük seviyeli işlemlerin yorumlanması ve sistem programlama çalışmalarının yapılabilmesi ancak korumalı modun iyi bilinmesiyle mümkün olabilir.

Kurs konularından bazıları aşağıdadır:
80386, 80486 ve Pentium işlemcilerine genel bakış
Protection mekanizması
Sayfalama işlemleri
Sanal bellek
Korumalı moddaki kesme mekanizması
V86 çalışma modu
Uyumluluk
Yaygın işletim sistemlerinin protected modu kullanma biçimleri

Önkoşul: 8086 (80X86 Real Mode) Sembolik Makina dilinde (Assembly Language) uygulamalı çalışma yapmış olmak ya da C ve Sistem Programcıları Derneği’nin açmış olduğu 80X86 Sembolik Makina Dili kursunu başarıyla bitirmiş olmak.

* Ücreti sorunuz.

Windows Aygıt Sürücüleri


Açıklama: Bu kurs Win32 sistemlerinde aygıt sürücü yazmak isteyen sistem programcılarına yönelik ileri düzey bir programlama kurstur. Kursumuzda Windows sistemlerinin çekirdek yapısı açıklanarak aygıt sürücü mimarileri ele alınmaktadır.

Kurs konularından bazıları aşağıdadır:
Windows NT grubu sistemlerin aygıt sürücü modeli
WDM ve temel NT türü sürücüler
Kullanıcı düzeyinde I/O işlemleri
Bellek kullanımı
Aygıt bellekleri
ISA ve PCI bus yapısı
Sürücülerin yüklenmesi ve çalıştırılması süreci
İskelet sürücü programların yazımı
Debug araçlarının kullanımı
Kesme işlemlerinin yönetilmesi
DMA işlemleri
Aygıt sürücülerinde “thread” lerin kullanımı
Çeşitli aygıtlara ilişkin örnek sürücülerin tasarımı
Çeşitli uygulamalar
Önkoşul: Windows sistemlerinde uygulamalı sistem programlama faaliyetlerinde bulunmuş olmak ya da C ve Sistem Programcıları Derneği’nin açmış olduğu Sistem Programlama ve İleri C Uygulamaları (I)-(II), Windows API Programlama ve Windows Sistem Programlama kurslarını başarıyla tamamlamış olmak.

* Ücreti sorunuz.

80X86 ve ARM Sembolik Makine Dilleri (Assembly Languages)


Bu kursumuzda Intel’in 80X86 işlemcileri ile ARM işlemcilerinin sembolik makine dilileri yardımcı konularla birlikte uygulamalı olarak ele alınmaktadır.

Ön Koşul:

C Programlama Dili kursunu başarıyla bitirmiş olmak ya da kursun gerektirdiği düzeyde bilgi ve deneyime sahip olmak.

* Ücreti sorunuz.

Unix/Linux Aygıt Sürücüleri


Açıklama : Bu kurs Unix/Linux sistemlerinde aygıt sürücü yazmak isteyen sistem programcılarına yönelik ileri düzey bir programlama kurstur. Kursumuzda Unix/Linux sistemlerinin çekirdek yapısı açıklanarak aygıt sürücü mimarileri ele alınmaktadır.

Kurs konularından bazıları aşağıdadır:
Unix/Linux sistemlerinin çekirdek yapısının aşağı seviyeli incelenmesi
Unix/Linux sistemlerinin aygıt sürücü modeli
Unix/Linux sistemlerinde aşağı seviyeli dosya işlemleri
Blokeli ve blokesiz giriş çıkış işlemleri
Koruma mekanizması
Haberleşme portlarının ve kesme kaynaklarının kullanımı
Karakter ve blok sürücülerin genel yapıları
Yazıcılara ilişkin aygıt sürücüleri
Terminal sürücüleri
Teyp sürücüleri
Hata ayıklama işlemleri
Aygıt sürücülerin kurulumu ve yüklenmesi
Versiyon kontrolleri
DMA işlemleri
Çevre birimlerinin kontrolü
Linux sistemlerine ilişkin özel durumlar
Örnek aygıt sürücülerin yazımı

Önkoşul: Unix/Linux sistemlerinde uygulamalı sistem programlama faaliyetlerinde bulunmuş olmak ya da C ve Sistem Programcıları Derneği’nin açmış olduğu Unix/Linux Sistem Programlama kursunu başarıyla tamamlamış olmak.

* Ücreti sorunuz.

Linux Kernel


Açıklama: Bu kurs Linux kernel tasarımı ve analizine ilişkin ileri düzey bir kurstur. Linux kernel kodları üzerinde geliştirme ve değiştirme yapmayı hedefleyen ve Linux sistemlerinde aygıt sürücüler yazmak isteyen sistem programcılarına yöneliktir. CSD İletim Sistemi Geliştirme Projesi’ne katılmak isteyen programcılar için de temel oluşturma amacındadır.

Kurs konularından bazıları aşağıdadır:
Linux Sistemlerinin Temel Özellikleri
Process Yönetimi
Bellek Yönetimi
Kesmeler
Kernel Senkronizasyonu
Zamanlama İşlemleri
Proses ve Thread çizelgelemesi
Sistem Fonksiyonları
Sanal Dosya Sistemi
Karakter ve Blok Aygıt Sürücüleri
Page Cache Mekanizması
Sanal Bellek Yönetimi
Prosesler arası Haberleşme
Sistemin Başlatılması
Kernel kodlarının Derlenmesi
Diğerleri…

Önkoşul:Unix/Linux sistemlerinde sistem programlama alanında uygulamalı çalışma yapmış olmak ya da C ve Sistem Programcıları Derneği’nin açmış olduğu Sistem Programlama ve İleri C Uygulamaları (I), (II) ve Unix/Linux Sistem Programlama kurslarını başarıyla bitirmiş olmak.

* Ücreti sorunuz.

Windows Sistem Programlama


Açıklama: Bu kurs 32 bit Windows sistemlerinde sistem programlama çalışmalarını yapabilmek için gereksinim duyulan bilgilerin uygulamalı bir biçimde kazandırılmasını hedeflemektedir. Kursta 32 bit Windows sistemlerinin aşağı seviyeli çalışmaları ayrıntılarıyla ele alınacak ve çeşitli uygulamalı örnekler verilecektir.

Kurs konularından bazıları aşağıdadır:
32 bit Windows sistemlerinde işlem yönetimi (process management)
Alt işlemler (thread mechanisms)
Alt işlemli çalışmalar (multithreading applications)
32 bit Windows sistemlerinin bellek yönetimi
Sanal bellek kullanımı
Bellek dosyaları (memory mapped files)
Heap kullanımı
Alt işlemlerin eş zamanlılığını sağlama ve kritik kodların tasarımı
Mesaj sistemi
Dinamik Kütüphaneler (DLL’s)
Dosya Sistemi
Aygıtların kullanılması ve aygıt sürücüleri
PE formatının incelenmesi
Ağ haberleşmesi
Seri port kullanımı
Ve diğerleri…

Önkoşul: C Programlama Dilini kullanarak sistem programlama alanında uygulamalı çalışma yapmış olmak ya da C ve Sistem Programcıları Derneği’nin açmış olduğu C Programalama Dili, Sistem Programlama ve İleri C Uygulamaları (I) ve Sistem Programlama ve İleri C Uygulamaları (II) kurslarını başarıyla bitirmiş olmak.

* Ücreti sorunuz.