> Prosesler Arası Haberleşme Yöntemleri (Interprocess Communication): İki ya da daha fazla prosesin birbirine bayt göndermesi ya da alması konusu prosesler arası haberleşmeyi kapsamaktadır. Böyle bir haberleşmenin sağlanabilmesi için özel mekanizmalar kullanılmaktadır. Genellikle iki ana grupta ele alınırlar: -> Aynı makinedeki prosesler arasında haberleşme. Burada işletim sisteminin sağladığı özel yöntemler kullanılmaktadır. -> Farklı makinelerdeki prosesler arası haberleşme. Buradaki makineler bir şekilde birbirlerine bağlanmıştır. Farklı makineler farklı dünyalara da ait olabilirler. Dolayısıyla bir takım kuralları belirlemiş olmaları gerekiyor. İşte bu kurallara da protokol denmektedir. IP protokol ailesini kursun ilerleyen derslerinde göreceğiz. Öte yandan farklı makinelerde uygulanan haberleşme yöntemini aynı makinede çalışan prosesler için de uygulayabiliriz fakat performans düşecektir. "client-server" sistemlerde, Dağıtık Sistemlerde(Distributed Systems) vb. sistemlerde prosesler arası haberleşme yöntemleri bariz bir şekilde kullanılmaktadır. Dağıtık Sistemler, bir işin bir grup bilgisayara yaptırıldığı temalara denir. Programın bir kısmının bir makinede, bir kısmının bir makinede çalıştırılma biçimidir. Dağıtık Sistemler genelde "cloud" sistemlerde kullanılır.Şimdi de aynı makinedeki prosesler ile farklı makinedeki proseslerin arasındaki haberleşme yöntemlerini incelemeye başlayalım: >> Aynı makinede koşan prosesler arası haberleşme yöntemleri: Pek çok işletim sistemi şu haberleşme yöntemlerini bir şekilde ortak kullanmaktadır: Boru Haberleşmesi, Paylaşılan Bellek Alanları, Mesaj Kuyrukları. Bu yöntemler benzer biçimde implemente edilmişlerdir. Bunların dışında Windows'a özgü, Linux'a özgü yöntemler de kullanılmıştır. Tabii kültürler arası farklılık yine görülmektedir. >> Farklı makinede koşan prosesler arası haberleşme yöntemleri: Bu haberleşme yönteminde ise prosesler farklı makinalarda koşmaktadır. Farklı makinelerin prosesleri arasında haberleşme (yani bir ağ içerisinde haberleşme), aynı makinenin prosesleri arasındaki haberleşmeye göre daha karmaşık unsurlar içermektedir. Çünkü burada ilgili işletim sisteminin dışında pek çok belirlemelerin de önceden yapılmış olması gerekir. İşte ağ haberleşmesinde önceden yapılan belirlemelere, daha doğrusu belirlenmiş kurallar topluluğuna, "protocol" denilmektedir. Ağ içerisindeki haberleşmedeki tarihsel süreç içerisinde pek çok protokol geliştirilmiş, bu protokolleri birleştirerek de Protokol Aileleri oluşturulmuştur. Bunların bazıları büyük şirketlerin kontrolü altında olup, hala kullanılmaktadır. Ancak açık bir protokol ailesi olan IP Protokol Ailesi, günümüzde farklı makinelerin prosesleri arasındaki haberleşmede, hemen her zaman tercih edilen bir protokoldür. Protokol Aileleri oluşturulurken protokoller, birbirinin üzerine eklenerek oluşturulduğu gibi, yalın halde de kullanılmış olabilir. Böylece Protokol Aileleri bünyelerinde hem katmanlı bir yapıya hem de tekil protokolleri barındırabilir. Buradaki katmanlı yapı oluşturulurken de üstteki gelen protokol, alttaki protokolün zaten var olduğu fikriyle ve yine alttaki protokol kullanılarak, katmanlı yapıya eklenmiştir. Aslında bu katmanlı yapıya prosedürel programlama tekniğinde "zaten var olan bir fonksiyonu kullanarak daha yüksek seviyeli bir fonksiyon yazmaya" benzetebiliriz. Yani Standart C Fonksiyonlarının POSIX/Windows Fonksiyonları kullanılarak oluşturulması gibi. Diğer yandan bu katmanlı yapının nasıl oluşturulması gerektiğine yönelik, "OSI Model (Open System Interconnection Model)" isimli, referans bir döküman da "ISO" tarafından 80'li yılların başında geliştirilmiştir. Bu referans kaynağa göre katmanlı bir yapı toplamda 7 katmandan oluşmalıdır. Bu katmanlar, yüksek seviyeden aşağı seviyeye doğru, aşağıdaki gibidir. "Uygulama Katmanı (Application Layer)" | "Sunum Katmanı (Presentation Layer)" | "Oturum Katmanı (Session Layer)" | "Aktarım Katmanı (Transort Layer)" | "Network Katmanı (Network Layer)" | "Veri Bağlantı Katmanı (Data Link Layer)" | "Fiziksel Katman (Physical Layer) " Bu katmanlardan, -> "Fiziksel Katman (Physical Layer)" : En aşağı seviyeli elektriksel tanımlamaların yapıldığı katmandır. Örneğin kabloların, konnektörlerin özellikleri vs. Yani bu katman, iletişim için gereken ortamı betimlemektedir. -> "Veri Bağlantı Katmanı (Data Link Layer)" : Artık bilgisayarlar arasında fiziksel bir adreslemenin yapıldığı ve bilgilerin paketlere ayrılarak gönderilip alındığı bir ortam tanımlarlar. Yani bu katmanda bilgilerin gönderildiği ortam değil, gönderilme biçimi ve fiziksel adresleme tanımlanmaktadır. Ağ üzerinde her birimin donanımsal olarak tanınabilen fiziksel bir adresinin olması gerekir. Örneğin bugün kullandığımız Ethernet kartları "Ethernet Protocol" denilen bir protokole uygun tasarlanmıştır. Bu ethernet protokolü "OSI Model" in fiziksel ve veri bağlantı katmanına karşılık gelmektedir. Ethernet protokolünde ağa bağlı olan her birimin ismine "MAC" denilen 6 baytlık fiziksel bir adresi vardır. Ethernet protokolünde "MAC" adresini bildiğimiz ağa bağlı bir birime bilgi gönderebiliriz. Bilgiler "Paket Anahtarlaması (Packet Switching)" denilen teknikle gönderilip alınmaktadır. Bu teknikte bilgiler bir paket adı altında bir araya getirilir, sonra ilgili fiziksel katmana seri bir biçimde gönderilir. -> "Network Katmanı (Network Layer)": Artık "internetworking" yapmak için gerekli kuralları tanımlamaktadır. "Internetworking" terimi "'network' lerden oluşan 'network' ler" anlamına gelir. Aynı fiziksel ortamda bulunan ağlara ise "Yerel Ağlar (Local Area Networks)" denilmektedir. Bu yerel ağlar "router" denilen aygıtlarla birbirlerine bağlanmaktadır. Böylece "internetworking" ortamı oluşturulmaktadır. Tabii böyle bir ortamda artık ağa birimler için fiziksel adresler kullanılamaz. Bu ortamlarda ağa birimlere mantıksal bir adres ataması yapılmalıdır. İşte bu katman, "internetworking" ortamı içerisinde, bir birimden diğerine bir paket bilginin gönderilmesi için gereken tanımlamaları içermektedir. Ağ katmanı bu nedenle en önemli katmandır. Ağ katmanında artık fiziksel bir adresleme değil, mantıksal adresleme sistemi kullanılmaktadır. Ayrıca bilgilerin paketlere ayrılarak, "router" lardan dolaşıp, hedefe varması için gereken rotalama mekanizması da bu katmanda tanımlanmaktadır. Yani elimizde yalnızca network katmanı varsa biz yalnızca "internetworking" ortamında belli bir kaynaktan hedefe bir paket yollayabiliriz. -> "Aktarım Katmanı (Transort Layer)": Network katmanının üzerindedir. Aktarım katmanında artık kaynak ile hedef arasında bir bağlantı oluşturulabilmekte ve veri aktarımı daha güvenli olarak yapılabilmektedir. Aynı zamanda aktarım kavramı "multiplex" bir kaynak hedef yapısı da oluşturmaktadır. Bu sayede bilgiler hedefteki spesifik bir programa gönderilebilmektedir. Bu işleme "port numaralandırması" da denilmektedir. -> "Oturum Katmanı (Session Layer)": Pek çok protokol ailesinde yoktur. Görevi oturum açma kapama gibi yüksek seviyeli bazı belirlemeleri yapmaktır. -> "Sunum Katmanı (Presentation Layer)": Verilerin sıkıştırılması, şifrelenmesi gibi tanımlamalar içermektedir. -> "Uygulama Katmanı (Application Layer)": Bu protokolü kullanan bütün programlar aslında uygulama katmanını oluşturmaktadır. Yani ağ ortamında haberleşen her program zaten kendi içerisinde açık ya da gizli bir protokol oluşturmuş durumdadır. Örneğin IP protokol ailesindeki somut işleri yapmakta kullanılan Telnet, SSH, HTTP, POP3 gibi protokoller uygulama katmanı protokolleridir.