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.

Kurs ücreti duyuru sayfasında belirtilmektedir.

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