Python Programlama Dili ve Uygulamaları


  1. Kısım: Python Programlama Dili (230 Saat)

Genel Tanıtım

Python genel amaçlı, nesne yönelimli, fonksiyonel özellikleri olan, çok modelli ve nispeten kolay öğrenilebilen bir programlama dilidir. Özellikle veri analizinde ve çözümlenmesinde, yapay zeka ve makine öğrenmesinde tercih edilmektedir. Bu özellikleri nedeniyle Python Programlama Dilinin popülaritesi özellikle son yıllarda popülaritesi oldukça artmıştır.

Kursun temel özellikleri şöyle betimlenebilir:

Bu kurs Python Programlama Dilini ayrıntılı biçimde uygulamalı olarak öğretmeyi hedeflemektedir. Aynı zamanda bu kurs Yapay Zeka ve Makine Öğrenmesi kursu için de bir ön aşama olarak işlev görmektedir.
Kurs Python Programlama Dilini ayrıntılı biçimde ve uygulamalı olarak öğretme iddiasındadır.
Kurs Yapay Zeka ve Makine Öğrenmesi kursu için bir hazırlık kursu işlevini de görmektedir.

  • Temel Kavramlar

    • Programlama Dillerinin Tarihsel Gelişimi
    • Python Programlama Dilinin Tarihsel Gelişimi
    • Python Dili, Python Gerçekleştirimleri ve Python Dağıtımları
    • Python Programlama Dilinin Temel Özellikleri
    • Python Neden Son Dönemlerde Popülerlik Kazanmıştır?
    • Python Ortamının Kurulumu
    • Temel Bilgisayar Mimarisi
    • İşletim Sistemleri
    • Gömülü Sistemler
    • Çevirici Programlar (Translators), Derleyiciler (Compilers) ve Yorumlayıcılar (Interpreters)
    • IDE Kavramı
    • Mülkiyete Sahip Yazılımlar ve Açık Kaynak Kodlu Yazılımlar
    • Doğal Kodlu ve Ara Kodlu Çalışma Sistemleri
    • Dil Kavramı
    • Dillerde Sentaks ve Semantik
    • Bilgisayar Dilleri ve Programlama Dilleri
    • Programlama Dillerinin Sınıflandırılması
    • Programlama Dillerinin Sentakslarının Açıklanması İçin Kullanılan Notasyonlar
  • Python Programlama Diline Giriş

    • Komut Yorumlayıcı Ortamda (REPL) Çalışma
    • Atom (Token) Kavramı ve Atomların Sınıflandırılması
    • Boşluk Karakterleri (White Space)
    • Dinamik Tür Sisteminin Anlamı
    • Python’da Temel Veri Türleri
    • Değiştirilebilir (Mutable) ve Değiştirilemez (Immutable) Tür Kavramları
    • Python’da Değişkenlerin ve Nesnelerin Yaratılması
    • Python’da Sabitler
    • Adres Kavramı ve Nesnelerin Adresleri
    • Değişkenler ve Nesneler Arasındaki İlişki
    • Python’da Dinamik Tür Sisteminin Gerçekleştirilme Biçimi
    • Python Standart Kütüphanesi Nedir ve Nelerden Oluşmaktadır?
    • Fonksiyon ve Metot Kavramları
    • Built-in Fonksiyon ve Sınıf Kavramları
    • Operatör Kavramı, Operatörler Arasındaki Öncelik İlişkileri
    • Python’da Operatörler
    • Tür Dönüştürmeleri
    • input ve print Fonksiyonlarının Ayrıntıları
    • Python Programlarının Yazılması ve Çalıştırılması
  • Python’da Temel Veri Yapıları

    • Dolaşılabilir (Iterable) Nesne Kavramı
    • Range Fonksiyonu
    • Listeler
    • Listeler Üzerinde İşlemler
    • Listeler Üzerinde Dilimleme İşlemleri (List Slicing)
    • Listelerin Açılması (List Unpacking)
    • Listelerle Çok Boyutlu Dizilerin Oluşturulması
    • Demetler (Tuples)
    • Demetler Üzerinde İşlemler
    • Demetlerin Açılması (Tuple Unpacking)
    • Kümeler (Sets)
    • Kümeler Üzerinde İşlemler
    • Değiştirilemez Kümeler (Frozen Sets)
    • Sözlükler (Dictionaries)
    • Sözlükler Üzerinde İşlemler
    • String’ler
    • String’ler Üzerinde İşlemler
    • String’lerin Dilimlenmesi
    • len Fonksiyonu ve in Opereratörünün İşlevleri
  • Python’da Deyimler (Statements)

    • Farklı Türlerin Birbirleriyle İşleme Sokulması
    • Satırların Girinti Düzeyleri (Indent Level)
    • Deyim Kavramı ve Deyimlerin Sınıflandırılması
    • İfadesel Deyimler (Expression Statements)
    • Bileşik Deyimler (Compound Statements)
    • Suite Kavramı
    • If Deyimi
    • While Döngüleri
    • For Döngüleri
    • Break ve continue Deyimleri
    • Koşul Operatörü
    • Pass Deyimi
  • Fonksiyonların Tanımlanması ve Fonksiyonlarla İşlemler

    • Fonksiyonların Tanımlanması ve Fonksiyon Nesneleri
    • Fonksiyon İsimlerinin Anlamı
    • Fonksiyonların Parametre Değişkenleri
    • Fonksiyonların *’lı ve **’lı Parametreleri
    • Fonksiyon Çağrılarında Argümanların Kullanımı
    • *’lı **’lı Argümanlar
    • Fonksiyon Parametrelerinde Tür Kontrolü
    • İç İçe Fonksiyon Tanımlamaları
  • Modüller

    • Modüllerin Oluşturulması
    • Modüllerin import Edilmesi
    • Modül İsimlerinin Anlamı
    • Sys.path Listesinin Anlamı
    • Python Programlarında Çalışma Dizinlerinin Değiştirilmesi
    • Modülün import Edilmesiyle Çalıştırılması Arasındaki Farklar
  • Tamamlayıcı Konular

    • Python’da Rastgele Sayıların Elde Edilmesi
    • Değişkenlerin Faaliyet Alanları (Scope)
    • Değişkenlerin Ömürleri
    • Enumerate, map, filter ve zip Fonksiyonları
    • Python Yorumlayıcısında İsim Arama Mekanizması
    • Bytes ve bytearray Türleri
    • Permütasyon ve Kombinasyon İşlemleri
  • İçlemler (Comprehensions)

    • İçlemlerin Genel Sentaks Biçimleri
    • Liste İçlemleri (List Comprehensions)
    • Küme İçlemleri (Set Comprehensions)
    • Sözlük İçlemleri (Dictionary Comprehensions)
    • İçlemler nerede Kullanılır ve İçlemlere Neden Gereksinim Duyulmaktadır?
  • Sınıflar

    • Nesne Yönelimli Programlama Modeli ve Sınıf Kavramı
    • Sınıfların Tanımlanması
    • Sınıflar Türünden Nesnelerin Yaratılması
    • Sınıf Değişkenleri
    • Metotların Tanımlanması ve self Parametresinin Anlamı
    • Sınıfların Dunder (Başında ve Sonunda İki Alt Tire Bulunan) Metotları
    • Sınıfların _new_ ve _init_ Metotları
    • Python Standart Kütüphanesindeki Yardımcı Sınıflarla İlgili Alıştırmalar
    • Sınıfların Öznitelikleri (Class Attributes)
    • Sınıfların Örnek Öznitelikleri (Instance Attributes)
    • Sınıf İsimlerinin Anlamı
    • Nesne Yönelimli Programlama Tekniğinde Sınıflar Arasındaki İlişki Biçimleri
    • Sınıflarda Türetme İşlemleri (Inheritance)
    • Çoklu Türetmeler (Multiple Inheritance)
    • Türetme Durumlarında Taban Sınıfın _init_ Metodunun Çağrılması
    • Super Fonksiyonu
    • Sınıflarda Kapsülleme (Encapsulation)
    • Çokbiçimlilik (Polymorphism)
    • Sınıfların _str_ ve _repr_ Metotları
    • Python’da Çöp Toplayıcı Mekanizma
    • Deterministik Çöp Toplama ve Sınıfların _del_ Metotları
    • Operatör Metotları
    • Sınıfların Statik Metotları
    • Sınıfların Sınıf Metotları
    • Sınıflardaki Diğer Özel Dunder Metotları
    • Dolaşılabilir (Irterable) Sınıfların Oluşturulması
    • Property Kavramı ve Property Kullanımı
    • Betimleyiciler
    • Sınıfların _get_, _set_ ve _delete_ Metotları
  • Dekoratörler

    • Dekoratörlerin Anlamı
    • Fonksiyon Dekoratörleri
    • Sınıf Dekoratörleri
    • Önemli sınıf Dekaratörleri
  • Exception Mekanizması

    • Python’da Exception Mekanizmasının Kullanımı
    • Exception’ların oluşturulması ve yakalanması
    • Exception Sınıflarının Yazılması
    • Çok Karşılaşılan Exception Sınıfları
    • With deyimi
  • Python’da Dosya İşlemleri

    • Dosya İşlemleri
    • Dosyaların Açılması ve Kapatılması
    • Dosyalarda Yazma ve Okuma İşlemleri
    • Text ve Binary Dosyalar
    • Text Dosyalarda Karakter Kodlaması (Character Encoding)
    • Karakter Kodlama Dönüştürmeleri
  • Üretici Fonksiyonlar ve Lambda İfadeleri

    • Üretici Fonksiyon (Generators) Kavramı
    • Üretici Fonksiyonların Tanımlanması ve Kullanılması
    • Lambda İfadeleri
  • Diğer Önemli Built-In Fonksiyonlar

    • Eval Fonksiyonu
    • Exec Fonksiyonu
    • Compiler Fonksiyonu
    • Property Fonksiyonu
    • Locals Fonksiyonu
  • Python’da Paketler (Packages)

    • Paket Kavramı
    • Paketlerin Oluşturulması ve import Edilmesi
    • Paketlerdeki _init_.py Dosyasının Anlamı
    • İç İçe Paketlerin Oluşturulması
    • Paket Yönetimi
  1. Kısım: Python Uygulamaları (230 Saat)
  • Genel Amaçlı Bazı İşlemlerin Gerçekleştirilmesi

    • Standart Kütüphanede Tarih ve Zaman İşlemleri Yapan Fonksiyonların ve Sınıfların Kullanımı
    • Dizin ve Dosyalar Üzerinde İşlemler Yapan Fonksiyonların ve Sınıfların Kullanımı
    • İşletim Sistemi İle İlgili Aşağı Seviyeli Önemli Bazı İşlemlerin Yapılması
    • Python’da Log’lama İşlemleri
    • Python’da Debugger Kullanımı
    • Zaman Ölçme İşlemleri ve Profiling
    • Sisteme İlişkin Önemli Bilgilerin Elde Edilmesi ve Değiştirilmesi
    • Çöp Toplayıcı Mekanizmanın Ayrıntıları
    • Nesnelerin Seri Hale Getirilmesi
    • Programların Komut Satırı Argümanları
  • Python’da Veritabanı İşlemleri

    • Veritabanı Yönetim Sistemleri (VTYS)
    • SqLite, MySQL ve SqlServer VTYS’leri Hakkında Temel Bilgiler
    • İlişkisel Veritabanları
    • Temel SQL Komutları
    • Python’da VTSY’e Bağlanma
    • VTYS’lere SQL Komutlarının Gönderilmesi
    • VTYS’lerle Sorgulama İşlemleri
    • Python’da Anahtar Değer Temelli DBM Veritabanı Kullanımı
  • Python’da Thread Uygulamaları

    • Thread Kavramı
    • Thread’lerin Yaratılması ve Sonlanması
    • Thread’lerle İlgili Temel İşlemler
    • Thread’lerin Stack’leri
    • Thread’lerin Bloke Olması
    • Thread Senkronizasyonu
    • Lock (Mutex) Mekanizması
    • Semaphore Nesnelerinin Kullanımı
    • Tipik Senkronizasyon Problemlerinin Ele Alınması
    • Senkronize Kuyruk Nesneleri
    • Python’da Paralel Programlama
    • Prosesler Arası Haberleşme Kavramı
    • Paylaşılan Bellek Alanlarının Kullanımı
    • Boru Mekanizmasının Kullanımı
  • Python’da GUI Uygulamaları

    • GUI Ortamlarında Mesaj Tabanlı Çalışma Modeli
    • PyQt Kütüphanesinin Kullanılması
    • Tkinter Kütüphanesinin Kullanılması
  • Python’da Proseslerarası Haberleşme ve Network Ağ Haberleşmeleri

    • IP Protokol Ailesi
    • Python’da Soket Programlama
    • Client-Server Çalışma Modeli
    • TCP/IP Uygulamaları
    • UDP/IP Uygulamaları
    • E-Posta Alma ve Gönderme
    • FTP İşlemleri
    • Dağıtık Uygulamaların Temelleri
  • Çeşitli Dosya Formatları Üzerinde İşlemler

    • Dosya Sıkıştırma ve Açma İşlemleri
    • CSV Dosyalarıyla ve Konfigürasyon Dosyalarıyla İşlemler
    • Temel XML İşlemleri
    • Temel HTML Parse İşlemleri
  • Numpy Kütüphanesinin Kullanımı

    • Numpy Kütüphanesinde Temel İşlemler
    • Numpy Dizileri İle Vektörel İşlemler
    • NumPy Dizilerinde İndeksleme ve Dilimleme
    • NumPy Kütüphanesinde Vektörel İşlemler Yapan Fonksiyonlar
    • NumPy ile Lineer Cebir İşlemleri
    • NumPy Dosya İşlemleri
    • İleri Düzey Numpy İşlemleri
  • Sembolik Matemetiksel İşlemler ve SymPy Kütüphanesinin Kullanımı

    • SymPy Kütüphanesinin Tanıtımı
    • SymPy’da İfadelerin Oluşturulması ve İfade Ağaçları
    • İfadelerin Sadeleştirilmesi
    • İfadelerin Açılması
    • İfadelerin Değerlerinin Elde Edilmesi
    • İfadeler Üzerinde Matematiksel İşlemler
  • Python’da Grafik Çizimleri ve PyPlot Kütüphanesinin Kullanımı

    • Grafik Çizimi İle İlgili Temel Nesneler
    • Grafiklerin Çizdirilmesi
    • Çizim Nesnelerine İlişkin Ayrıntılar
    • Çizgi Grafikleri, Çubuk Grafikleri, Histogram’lar, Pasta Grafikleri
  • Pandas Kütüphanesinin Kullanımı

    • Pandas Kütüphanesinin Amacı
    • Seriler Üzerinde İşlemler
    • Seriler Üzerinde İndeksleme
    • Seriler Üzerinde Dilimleme
    • DataFrame Nesneleri
    • DaraFrame Üzerinde Satır ve Sütun Seçme İşlemleri
    • DataFrame’ Sütun Ekleme ve Silme
    • DataFrame Üzerinde Aritmetik İşlemler
    • CSV Dosyalarının DataFrame Olarak Okunması
    • Eksik Veriler Üzerinde İşlemler
    • Verilerin Gruplanması ve Birleştirilmesi
    • Pandas’ta Verilerin Görüntülenmesi
  • Özel Bazı Konular

    • Şifreleme İşlemleri
    • Pyton’da Yazılım Test İşlemleri
    • Düzenli İfadelerle İşlemler (Regular Expressions)
    • Python’dan C ve C++ Kodlarının Çağrılması

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

* Kurs ücreti duyuru sayfasında belirtilmektedir.

 

Gömülü Linux Sistemleri – Geliştirme ve Programlama


Kursumuza ön kayıt yaptırmak için bu bağlantıyı kullanabilirsiniz.

  • Giriş ve Temel Bilgiler

    • Gömülü Sistemlere Genel Bir Bakış
    • Gömülü Sistemlerin Karakteristik Özellikleri
    • Bir Kaynak Yöneticisi Olarak İşletim Sistemi
    • İşletim Sistemlerinin Alt Sistemleri
    • Linux Sistemlerinin Tarhihsel Gelişimi
    • Gömülü Linux Sistemi Ne Anlama Gelmektedir?
    • Gömülü Linux Sistemlerinin Masaüstü Linux Sistemlerinden Farklılıklları
    • Mikroişlemci, Mikrodenetleyici, SOC (System on Chip) ve SBC (Single Board Computer) Kavramları
    • Gömülü Linux Sistemleri için Kullanılan Donanımlar, Raspberry Pi, Beaglebone ve Diğerleri
    • Gömülü Sistemlerin Çevre Birimleri
    • Gömülü Sistemlerde Bellek Birimleri
    • Gömülü Sistemler İçin Emülatörler ve QEMU
  • Single Board Bilgisayarlar

    • Single Board Bilgisayar Nedir?
    • Yaygın Kullanılan Single Board Bilgisayarlar
    • Single Board Bilgisayarların Uygulama Alanları
    • Single Board Bilgisayarların Sınırlılıkları ve Handikapları
  • Raspberry Pi Donanımının Özellikleri

    • Raspberry Pi Donanımındaki CPU, GPU ve RAM Özellikleri
    • ARM İşlemcilerinin Özellikleri
    • ARM işlemcilerinde Cortex Türleri ve Komut Kümeleri Çeşitliliği
    • SD Kart Arabirimi
    • GPIO Arabirimi
    • I2C ve SPI Veri Yolları
    • USB Arabirimi
    • Video/Audio Özellikleri
    • Ethernet ve Wireless Birimleri
    • HDMI ile Bağlantı
    • Güç Kaynağının Olması Gereken Özellikleri ve Soğutucu Gereksinimi
    • Raspberry Pi Donanımında Kullanılan Soketler ve Kablolar
  • Gömülü Sistemlere Linux İşletim Sisteminin Yüklenmesi ve Kullanıma Hazır Hale Getirilmesi

    • Uygun Linux Dağıtımının Belirlenmesi
    • Gömülü Linux Sistemleri İçin Kullanılan Dağıtımlar ve Özellikleri
    • Raspberry Pi Donanımlarında Kullanılan Yaygın Dağıtımlar
    • Linux Dağıtımlarının Gömülü Sisteme Yüklenmesi
    • Diskin Bölümlendirilmesi ve Buna İlişkin Komutlar ve Utility Programlar
    • Toolchain Kavramı
    • Doğal (Native) ve Çapraz (Cross) Toolchain’ler
    • Gömülü Sistemler İçin Çapraz Derleyiciler (Cross Compilers)
    • Ethernet ve Wireless Network Bağlantılarının Sağlanması
  • Linux Sistemlerinde Dosya Sistemleri

    • ext2, ext3, ext4, xfs Dosya Sistemlerinin Genel Özellikleri
    • Dosya Sistemlerinin Mount Edilmesi
    • Dosya Sistemlerindeki Temel Dizinler ve Anlamları
    • Dosya Bloklerı, i-node Kavramı
    • Linux’ta Kullanılan Dosya Sistemlerinin Aşağı Seviyeli Tasarımları
    • Dosya Sistemlerine Yönelik Aygıt Sürücüler
    • Dosya Sistemi İle İlgili Komutlar ve Utility Programlar
    • tmpfs ve ramfs Dosya Sistemleri ve Linux’ta Ramdisk Kullanımı
  • Ekran ve Görüntü Birimlerinin Programlanması

    • Terminal Aygıt Sürücüleri
    • Terminal Aygıt Sürücülerinin Programlanması
    • X Window Sistemleri
    • X Window Sistemlerinin Tasarımı ve Programlanmasıne İlişkin Temel Bilgiler
    • Qt Framework hakkında Temel Bilgiler ve Basit Örnekler
    • Framebuffer Kavramı ve Kullanım Alanları
    • Framebuffer Aygıt Sürücüleri
    • Linux’ta Framebuffer Kütüphanesinin Kullanımı
  • Çevre Birimlerinin Programlanması

    • USB Arabiriminin Özellikleri
    • libusb Kütüphanesinin Kullanımı
    • Raspberry Pi Donanımlarında GPIO Uçlarının Kullanımı
    • GPIO Uçlarının Programlanmasına İlişkin Örnekler
    • I2C ve SPI Arayüzlerinin Kullanılması
    • UART Kullanımı
    • Raspberry Pi İçin Tasarlanmış GPIO Uçlarını Kullanan Hazır Kartlar (Add-on Boards)
    • Sensörlerin İşlevleri ve Sensörlerin Kullanımına İlişkin Örnekler
    • LCD Kullanımına İlişkin Örnekler
  • Linux Çekirdeğinin Konfigüre Edilmesi ve Derlenmesi

    • Konfigürasyon İşleminin Anlamı
    • Önemli Konfigürasyon Parametreleri
    • Kernel Modüllerinin Çekirdeğe Eklenmesi
    • Kernel Modüllerinin Bağımlılıkları
    • Kernel Modülleri ile İlgili Araçlar, Komutlar ve Utility Programlar
    • GNU Make Aracının Temel Düzeyde Kullanımı ve Make Dosyalarının Oluşturulması
    • Linux Çekirdeğinin Derlenmesi
  • Gömülü Linux Sistemlerinde Kullanılan Ön Yükleyici (Boot Loader) Programlar

    • Ön Yükleyici Kavramı ve Ön Yükleyicileri İşlevleri
    • Birinci ve İkinci Düzey Ön Yükleyiciler
    • Raspberry Pi Ön Yükleyici Mekanizması
    • U-Boot (Das U-Boot) Önyükleyicisinin Genel Yapısı ve Kullanımı
  • Linux Sistemlerinin Başlatılma Süreci

    • Masaüstü ve Gömülü Sistemlerde Linux Sistemlerinin Başlatılması
    • Kernel Konfigürasyon Parametrelerinin Boot Sürecindeki Etkileri
    • Linux Çekirdeğinin Yüklenmesine İlişkin Aşamalar
    • Boot Süreci Sırasında Dosya Sistemlerinin Mount Edilmesi
    • Boot Sürecinde Etkili Olan Script Dosyaları
  • Linux Sistemlerinde Kullanılan Init Paketleri ve Systemd Init Paketinin Kullanımı

    • Init Paketlerinin İşlevi
    • SysVInit ve Upstart Paketleri Hakkında Temel Bilgiler
    • Systemd Paketinin Kurulumu
    • Systemd Paketinin İşlevleri
    • Daemon Kavramı
    • Unit Dosyalarının Oluşturulması ve Servislerin Yönetilmesi
    • Systemd İle Servis Yönetiminin Ayrıntıları
    • Systemd Paketine İlişkin Komutların Kullanımı
  • Aygıt Ağacı (Device Tree)

    • Aygıt Ağacı Nedir ve Ne Amaçla Kullanılmaktadır?
    • Aygıt Ağaçlarına Neden Gereksinim Duyulmuştur?
    • Aygıt Ağaçlarının Genel Yapısı
    • Agıt Ağaçlarının Oluşturulması
    • Aygıt Ağaçlarının Derlenmesi ve Tersine Derlenmesi (Decompile Edilmesi)
    • Aygıt Ağaçları ve Boot Süreci
    • Aygıt Ağaçları ve Aygıt Dosyaları
    • Sistem Çalışırken Aygıt Konfigürasyonlarının Ayarlanması
  • Yocto Projesi

    • Yocto Projesi Nedir?
    • Poky ve bitbake Kavramları
    • Katman (Layer) Kavramı ve Kullanımı
    • Image Kavramı ve Kullanımı
    • Image İsimleri
    • Recipe Kavramı ve Kullanımı
    • Log Mekanizması
    • Build İşlemi
  • Buildroot Projesi

    • Buildroot Projesi Nedir?
    • Buildroot Çalışma Mekanizması
    • Buildroot Konfigürasyonu
    • Sistemin İsteğe Göre Özelleştirilmesi (Customization)
    • Buildroot’a Yeni Paketlerin Eklenmesi
    • Build İşlemi
  • Linux Sistemlerinde Kullanılan Log Sistemi

    • log Mesajlarının User Mod ve Kernel Modda Oluşturulması
    • syslod Daemon Programın İşlevi
    • Loglamanın User Modda Programlama Yoluyla Yapılması
  • Linux Daemon (Servis) Programlarının Yazımı

    • Daemon Programların Anlamı
    • Daemon Programların Oluşturulması ve Devreye Sokulması
    • Daemon Programların Konfigüre Edilmesi
    • User Mod ve Kernel Mod Daemon Kavramı
    • Linux Kernel İçerisindeki Kernel Mod Daemon’lar ve İşlevleri
  • procfs ve sysfs Dosya Sistemlerinin Kullanımı

    • proc Dosya Sisteminin Genel Yapısı ve Kullanımı
    • sys Dosya sisteminin Genel Yapısı ve Kullanımı
  • Linux Aygıt Sürücülerinin Yazımı

    • Aygıt Sürücülerinin 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 İşlemleri
    • Aygıt Sürücülerde Bekleme Kuyruklarının Yaratılması ve Bloke İş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 İş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
    • Kernel Thread’lerin Yaratılması ve Kullanımı.

Kursumuza ön kayıt yaptırmak için bu bağlantıyı kullanabilirsiniz.

Kurs ücreti duyuru sayfasında belirtilmektedir.

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

Unix/Linux Sistem Programlama


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.

Online UNIX/Linux Sistem Programlama Kurs İçeriği(220 Saat)

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

 

*Kurs ücreti duyuru sayfasında belirtilmektedir.

* 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.

Kurs ücreti duyuru sayfasında belirtilmektedir.

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

 

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.