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”
vepage 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ı
(Environment Variables)
Proseslerin Çevre Değişkenleri - 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
(Process Capabilities)
Linux Sistemlerinde Proseslere İlişkin Yetenekler - 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.