BÖLÜM 4

advertisement
BÖLÜM 4
EŞ ZAMANLI İŞLEMLER
Kapsam...
 İşlem Kavramı
 İşlem Düzenleme
 Prosesler üzerinde gerçekleştirilen işlemler
 Proses İletişimi
İşlem(process) Kavramı
 Bir işletim sistemi programlar işletir:
Toplu işletimde  jobs (işler)
 Zaman Paylaşımlı Sistemlerde  kullanıcı
programları ya da görevler
 İşlem=Yürütümdeki program
 Bir program çalıştırılabilir bir dosya belleğe yüklendiği
anda işlem halini alır. (komut satırından yada
mouse+click yöntemi ile)
 Bir çok kullanıcı aynı web browser programını
işletiyor olabilir bunların hepsi ayrı proseslerdir.

Bir proses şunları içerir
 Program Counter (process




registers)
Stack(function parameters, return
address, local variables )
Data Area (global variables)
CPU state (bir ya da daha çok
thread)
Kaynaklar (açık dosyalar, işleyici
programlar vs)
Program in execution


Multiple processes


İşlem Durumları (Current activity)
 New: Yeni bir proses yaratılıyor
 Running: Prosese ait talimatlar işletiliyor
 Waiting: Proses herhangi bir olay için bekliyor
 Ready: Proses CPU için bekliyor
 Terminated: Proses işletimini tamamlıyor
Proseslerin Durum Diagramları
İşlem Kontrol Blok (PCB)/Task
Control Block
 İşletim Sisteminde her proses kendi PCB’si ile temsil edilir. PCB
içeriği:
 İşlem durum bilgisi
 Program counter’ı
 CPU register’lar
 CPU düzenleme bilgisi
 Proseslerin öncelikleri vs.
 Bellek bilgisi
 Text, data, stack pointers, sizes vs.
 Pointer to page table vs.
 Hesaplama bilgisi
 Cpu usage
 I/O durum bilgisi
 Açık dosya listesi, prosese ayrılan I/O listesi
PCB
Kernel her proses için PCB erişimi
yapar
Process Control Block (PCB)
Process ID (PID)
Parent PID
 This is an abstract view
 Windows implementation of PCB is
split in multiple data structures
…
Next Process Block
List of open files
PCB
Handle Table
Image File Name
List of Thread
Control Blocks
…
Thread Control Block (TCB)
Next TCB
Program Counter
Registers
…
Process Block (!process)
EPROCESS address
Physical address
of Page Directory
Process ID
Address of
process environment block
Process ID of
parent process
PROCESS ff704020 Cid: 0075
Peb: 7ffdf000 ParentCid: 005d
DirBase: 0063c000 ObjectTable: ff7063c8 TableSize: 70.
root of the process’s
Image: Explorer.exe
Virtual Address
VadRoot ff70d6e8 Clone 0 Private 229. Modified 236. Locked 0.
Descriptor tree
FF7041DC MutantState Signalled OwningThread 0
Token
e1462030
Time the process
ElapsedTime
0:01:19.0874
has been running,
UserTime
0:00:00.0991
divided into User
KernelTime
0:00:02.0613
and Kernel time
QuotaPoolUsage[PagedPool]
18317
QuotaPoolUsage[NonPagedPool]
3824
Working Set Sizes (now,min,max) (727, 20, 45) (2908KB, 80KB, 180KB)
PeakWorkingSetSize
757
VirtualSize
29 Mb
PeakVirtualSize
31 Mb
PageFaultCount
1396
MemoryPriority
FOREGROUND
BasePriority
8
CommitCharge
250
Linux da Proses Temsili

Task_struct in <linux/sched.h>
 long state /*state of the process*/
 struct sched_entity se; /*scheduling information*/
 struct task_struct *parent /*this process’s parent*/
 struct list_head children; /*this process’s children*/
 struct files_struct *files /*list of open files*/
 struct mm_struct *mm /*address space of process*/

Linux kernel’da tüm aktif prosesler task_struct yapısı double links list kullanılarak
tutulur.
Örn. Proses durumu değiştiriliyor
 currentstate = new state

Dispatcher
 Dispatcher modulü, CPU kontrolünü Short-term
düzenleyici tarafından seçilmiş olan thread’e
verir; şu basamaklardan oluşur:



İçerik anahtarlaması (switching context)
User moda geç (switching to user mode)
Kullanıcı programında uygun yere zıplamak
(yeniden başlatmak için)
 Dispatch latency (gecikme zamanı)–
dispatcher’ın bir thread’i durdurup diğerini
başlatmasına kadar geçen süre.
İçerik Anahtarlaması
İşlem Düzenleme Kuyrukları
 Sisteme dahil olan prosesler kuyruklara alınırlar.
 İş Kuyruğu (Job Queue): Sistemdeki tüm proseslerin
kuyruğu
 Hazır Kuyruğu (Ready Queue): Ana bellekte, CPU
için bekleyen proseslerin kuyruğu
 Aygıt Kuyrukları (Device Queue): G/Ç cihazları için
bekleyen proseslerin kuyruğu
Değişik Kuyruk Yapıları
Proses Düzenleme
Düzenleyiciler
 Long Term (Job) Düzenleyici: Sisteme dahil
olan proseslerden hangilerinin hazır
kuyruğuna seçileceğine karar verir.
 Short Term (CPU) Düzenleyici: Hazır
kuyruğundan hangi prosesin seçilip CPU’ya
gönderileceğine karar verir.
Medium Term Düzenleyici
Düzenleyiciler
 Temel fark: çalışma sıklıklarıdır.
 Long Term multiprogramming’in derecesini
(bellekteki proses sayısını) düzenler.
 Prosesler iki şekilde tanımlı olabilirler:


I/O Bound: CPU üzerinde çok az zaman
işletilir. İşletiminden fazla zamanı I/O işlemleri
için geçirir.
CPU Bound: Daha az sıklıkta I/O isteği yapar.
CPU ve I/O Bursts
…
load val
inc val
read file
wait for I/O
CPU burst
I/O burst
inc count
add data, val
write file
CPU burst
wait for I/O
I/O burst
load val
inc val
read from file
CPU burst
wait for I/O
I/O burst
Optimizasyon kriterleri





Maximize CPU utilization
Maximize throughput
Minimize turnaround time
Minimize waiting time
Minimize response time
Proses yaratma
 İşlem tablosunda bu işlem için bir kısım yaratılır
 Bu işlemin adı veya numarası işletim sistemin
sakladığı işlemler listesine eklenir.
 İşlem isimlendirilir. Örneğin UNIX işletim sistemi
işlemleri tamsayılarla isimler (30127 gibi).
 İşleme öncelik değeri verilir.
 İşleme başlangıçta ihtiyaç duyduğu kaynaklar tahsis
edilir.
UNIX’de Proses Yaratma
 fork sistem çağrısı ile yaratılır
 çağrıyı yapan proses: parent proses
 Yaratılan proses: child proses
 pid=fork()
 Her iki proses de aynı bağlama sahip
 Parent prosese child ın kimlik değeri döner
 Child prosese 0 değeri döner
 0 numaralı prosesi açılışta çekirdek tarafından
yaratılır; fork ile yaratılmayan tek prosestir.
UNIX’de Proses Yaratma
 fork sistem çağrısı yapıldığında çekirdeğin
yürüttüğü işlemler:




proses tablosunda (varsa) yer ayırılır
(maksimum proses sayısı belli)
Child prosese yeni bir kimlik numarası atanır
(sistemde tek)
Parent prosesin bağlamının kopyası çıkarılır.
Parent’a child’ın kimliğini, child’a da 0 değerini
döndürür
UNIX’de Proses Sonlanması
 exit sistem çağrısı ile
 exit(status)

“status” değeri parent prosese aktarılır
 Tüm kaynakları geri verilir
 Dosya erişim sayaçları düzenlenir
 Proses tablosu kaydı silinir.
Proses Yaratma (fork)
Proses Yaratma
Linux Process Tree
Windows/ create process
Windows’da Processes Tree
Process-Based Windows Code:
System Startup Processes
smss.exe
Session Manager
The first “created” process
Takes parameters from \HKEY_LOCAL_MACHINE\System\CurrentControlSet
\Control\Session Manager
Launches required subsystems (csrss) and then winlogon
csrss.exe
Windows subsystem
winlogon.exe Logon process: Launches services.exe & lsass.exe; presents first
login prompt
When someone logs in, launches apps in \Software\Microsoft\Windows
NT\WinLogon\Userinit
services.exe
Service Controller; also, home for many Windows-supplied services
Starts processes for services not part of services.exe (driven by
\Registry\Machine\System\CurrentControlSet\Services )
lsass.exe
Local Security Authentication Server
userinit.exe
Started after logon; starts Explorer.exe (see
\Software\Microsoft\Windows NT\CurrentVersion\WinLogon\Shell) and exits
(hence Explorer appears to be an orphan)
explorer.exe
and its children are the creators of all interactive apps
Process Termination
İşlemi Kesme
 Bir Kesme Oluştuğunda:



OS denetimi eline alır.
OS kesilen işlemin durumunu saklar.
OS, kesmeyi analiz eder ve kontrolü kesmeyi
işlemek için uygun olan yordama geçirir.
PSW (Program Status Word)












CPU içindeki bütün durum bit şartlarına Program State Word (PSW) denir.
PSW ayrı bir donanım yazacında saklanır.
PSW içeriği CPU nun durumunu karakterize eder.
Tipik olarak son ALU işleminden sonraki durum bitlerinin içerir: bu aynı zamanda izin verilen
kesmeleri ve kullanıcı/sistem modunu belirtir.
 CPU normal olarak kullanıcı modundadır. CPU durumu PSW içindeki özel durum
bitlerinden anlaşılır.
Kesmeyi servis etmek için CPU durum bilgisi saklanır, servis rutininin başlangıç adresi PC
aktarılır.
Kesme geldiğinde bir buyruk icra ediliyorsa bu işlem bitene kadar CPU kesmeyi dikkate
almaz.
Bir sonraki al-getir evresinden önce denetim kesme sinyali gelip gelmediğine bakar.
Bekleyen bir kesme sinyali varsa denetim donanım kesme evresine girer.
Bu evrede PC ve PSW içerikleri yığına yazılır.
Gelen kesmenin işleyici rutininin adresi PC a yazılır ve PSW yeni bir duruma getirilir.
Servis rutini hazırdır, kesme servis edilene kadar sistem modundadır. Bu durum PSW ile
belirlenmiştir.
Kesme işleyici rutinin son buyruğu kesme alt programından geri dönüştür.bu buyruk icra
edilince yığındaki PSW ve dönüş adresi yerlerine yeniden yazılır. Kullanıcı moduna dönülür.
Program kaldığı yerden devam eder.
PSW...
PSW...
 Program Durum Sözcüğü(PSW) komut yürütme sırasını denetler ve bu
işlem durumu hakkında çeşitli bilgi içerir. Üç tip PSW vardır:
 güncel PSW: yürütülecek bir sonraki komutun adresi saklanır.
Kesme tiplerinin aktif/pasif olma bilgilerini tutar.
 yeni PSW ve eski PSW
 Bir kesme olduğunda eğer işlemci bu tip kesme için
pasif değilse, o zaman donanım PSW'leri aşağıdaki
gibi değiştirir:


Kesmenin tipine bağımlı olarak güncel PSW eski
PSW'ye konulur
Yeni PSW güncel PSW'ye konulur
 Bu PSW değişimlerinden sonra, güncel PSW o anda
uygun kesme işlemcisinin(IH) adresini içerir. Daha
sonra kesme işlemcisi kesme'yi çalıştırır.
Birlikte Çalışan Prosesler
 Bağımsız Proses: Sistemdeki başka proseslerin
çalışmalarından etkilenmez.
 Birlikte Çalışan Proses: Diğer proseslerin
çalışmasından etkilenebilirler.
 Birlikte çalışmanın avantajları:




Bilgi paylaşımı
Bilgi işleme hızında artış
Modülerlik
Uygunluk
Üretici-Tüketici Problemi
 Üretici ve tüketicinin bir arada
çalışabilmesi için buffer
havuzları oluşturmalıyız.
 Bu havuzları üretici doldurmalı ,
tüketici boşaltmalı. Bu sayede
üretici , tüketici diğer taraftan
havuzu boşaltırken havuzu
doldurabilmeli.
 Üretici proses bir veriyi tüketici
proses için üretir ve tüketici
proses bu veriyi kullanır.
...
 Üretici ve tüketicinin sınırlı bir veri alanına (buffer) erişebildiklerini
varsayalım.
 Üretici üretmiş olduğu ürünü (veriyi) Buffer’da boş yer varsa koyabilir.
Yer yok ise tüketicinin Buffer’dan bir veriyi almasını beklemek
durumundadır.
 Tüketici ise ancak Buffer boş değilse veri tüketebilir, aksi taktirde
üreticinin Buffer’a veri girmesini bekmelesi gerekir.
 Unbounded (sınırlanmamış) – buffer üretici tüketici probleminde
bufferların sayısında bir sınır yoktur. Tüketici yeni ürünler bekler , ve
gelenleri tüketir , sadece ürün bitince bekler fakat üretici daima yeni
ürün üretip koyabilir. Bounded producer / consumer probleminde ise n
adet sabit buffer vardır. Üretici n buffer dolunca bekler , tüketici n adet
buffer boşalınca bekler.
Sınırlı Buffer Durumu
 Paylaşılan veri:
Sınırlı Buffer Durumu (InsertRemove)
Üretici proses paylaşılmış bellek alanını kullanıyor
Tüketici proses paylaşılmış bellek alanını kullanıyor:
Interprocess Communication
Systems(IPC)





IPC mekanizması 2 şekilde gerçekleştirilir.
 Shared memory
 Message passing
Çoğu modern işletim sistemi iki yöntemi de uygular.
Dağıtık sistemlerde message passing daha kolay uygulanır bir yöntemdir.
Shared memory, message passing yönteminden daha hızlı olabilir. Sistem çağrıları sadece
paylaşılan bellek alanına erişirler. Paylaşılan bellek alanı bir kere yapılandırıldığında bu
alana tüm erişimler rutin bellek erişimleri gibi düzenlenir ve işletim sistemi kernel’ı bu işlemi
asiste etmez.
Multicore işletim sistemlerinde message passing daha tercih edilir IPC yöntemi haline
gelmiştir.
Message Passing Systems
 Proseslere aynı adres uzayını paylaşmadan senkronizasyon ve
iletişim yolu sağlar.
 kısa mesajlar göndericiden alıcıya kopyalanır
 uzun mesajlar shared memory segment üzerinden erişilir.
 Server (kernel) client’ın adres alanına direk olarak yazabilir.
Naming





İletişime geçmek isteyen prosesler birbirlerini refere etmek için bir yola sahip
olmalıdır.
Direct ve indirect iletişimi kullanabilirler.
Direct communication:
 Gönderici ve alıcı proses adı açıkca belirtilmelidir.
 Send(P,message) -send a message to process P
 Receive (Q,message) -receive a message from process Q
Buradaki link şu özelliklere sahiptir.
 İletişim isteyen 2 proses arasında otomatik link kurulur. İletişim için sadece
prosesler birbirlerinin tanımını bilirler.
 Link tam olarak 2 proses arasındadır.
 Bir çift prosesin iletişimi için 1 adet link vardır.
Bu şema adreslemede simetriyi sunar. Asimetrik şemada:

sadece gönderici alıcının ismini belirtir.

Send(P,message) -send a message to process P
Receive (id,message) -receive a message from any process

Naming



Indirect communication:
Mesajlar mailbox lar ve port lar üzerinden alınırlar.
Mailbox: soyut olarak proseslerin mail yazıp okuyabilecekleri bir nesne. Her
birinin tekil bir tanımlayıcı numarası var.



Send ( A , message) - Send a message to mailbox A
Receive (A, message) - Receive a message from mailbox A
Burada link şu özelliklere sahiptir.
 Prosesler sadece ortak mailboxları varsa link kurabilirler
 Link birden fazla proses arasında kurulabilir.
 Her iletişimdeki proses çifti için değişik sayıda aynı mailboxu kullanan link
bulunabilir.
Indirect Communication





Varsayalım ki :
 P1,P2,P3 prosesleri A mailbox’unu paylaşıyor
 P1, A mailbox’a bir mesaj gönderiyor, P2 ve P3, P1’den bir receive() sistem
çağrısı işletiyor
 Hangi proses P1 den gelen mesajı cevaplar?
Cevap şu durumlara göre değişir:
 Bu iki proses için de bir link kurulmasına izin verilebilir.
 Receive işlemini yapacak en fazla bir prosese izin verilebilir.
 Sistemin hangi prosesin alım işlemini yapacağına karar vermesi
sağlanabilir.(P2 ve P3 aynı anda değil) örneğin sistem bu iki proses için
Round Robin algoritmasına göre karar verir.
Mailbox bir kullanıcı yada işletimi sistemine ait olabilir.
Eğer kullanıcıya aitse (mailbox proses asdres uzayının parçasıdır) o halde
owner ve user proses arası link kurulur, hangi prosesin receive() çağrısını
işleteceği karışıklığı kalkar.
Eğer sisteme aitse, bağımsızdır ve hiçbir proses ile ilişkilendirilmemiştir. O
zaman OS bir proses için şu mekanizmaları sağlar:



Create a new mailbox
Send and receive messages thorough the mailbox
Delete a mailbox
Buffering
 Kapasite: Bir linkin , içinde geçici olarak barındırabileceği mesajların
sayısını gösteren bir kapasite tanımlaması vardır. Bu özellik linkle ilişkili
mesajların bir kuyruğu olarak düşünülebilir. Bu kuyruğun
uygulanmasında 3 temel yol vardır :



Zero Capacity: Kuyruğun maksimum boyu 0 ‘dır. Bu yüzden link
bekleyen hiçbir mesaj içeremez. Bu durumda gönderici alıcının mesajı
almasını beklemelidir. Bu senkronizasyona randevu denir.
Bounded Capacity:Kuyruk sınırlı n boyuna sahiptir. Bu yüzden içinde n
mesajı barındırabilir. Eğer kuyruk dolu değil ise yeni mesaj
gönderildiğinde kuyrukta yerini alır. Bu göndericinin beklemeden yeni
bir mesaj daha gönderebilmesini sağlar. Bunun yanında kuyruğun bir
kapasitesi vardır. Kuyruk dolunca gönderici kuyrukta yer boşalıncaya
kadar beklemek zorundadır.
Unbounded Capacity:Kuyruk potansiyel olarak sınırsız büyüklüktedir.
Bu yüzden istediği kadar mesaj gönderebilir. Gönderici asla beklemez.
Mesaj geçirme/senkronizasyon
Example IPC: POSIX Shared
Memory
 “Posix paylaşılmış bellek alanı” bellek-eşlemeli dosyalar kullanılarak
organize edilmiştir.
 Bir proses öncelikle shm_open sistem çağrısını kullanarak bir sharedmemory object yaratır.
 Parametreler:
 Name: shared memory object adı
 0_CREAT: eğer “name” nesnesine henüz ulaşılamıyorsa
 0_RDRW: eğer “name” nesnesi okuma yada yazma için açılmış ise
 0666:Shared-memory object için dizin erişimleri
 Sistem çağrısı başarılı olduğunda işletim sistemine shared-memory
nesnesi için bir integer file descriptor döndürür.
 Nesne yaratılınca ftruncate(shm_fd,4096) nesnenin kaç byte lık
olduğunu belirler. Çağrı, nesne boyutunu 4096 byte olarak kurar.
 Son olarak mmap fonksiyonu, shared-memory nesnesini içeren bir
memory-mapped file oluşturur. Ve shared memory object nesnesine
erşim için bir pointer döndürür.
Example IPC : Windows








Proses haberleşmesinde mesajlaşma kullanılır.
Uygulama programları sunucunun(subsystem server) client’ları gibi düşünülür.
Mesaj-geçirme özelliği, ALPC(Advanced Local ProcedureCall) olarak
adlandırılır.
 Aynı makine üzerindeki iki prosesin iletişimi için kullanılır
 RPC gibi kullanılır ancak Windows a özelleştirilmiştir.
Windows, iki proses arasındaki iletişim için bir port nesnesi kullanır.
 Connection ports
 Communication ports
Server prosesler, tüm proseslere görünür şekilde connection-port nesneleri
yapılandırır.
Ne zaman bir client bir alt sistemden servis isteğinde bulundu, sunucunun
connection-port nesnesine bir handle açar ve istekte bulunur.
Sonraki adımda server, client’a bir handle döndürür ve bağlantı kanalı açar.
Bu bağlantı kanalı, iki özel bağlantı portu içerir:


Biri client-server
Diğeri server-client mesajları içindir.
Example IPC : Windows
 Bağlantı portları, uygulamalar için iletişim kanallarının
kurulmasına olanak tanırlar:




Client, alt sistemin bağlantı port nesnesine bir handle
açar.
Client, bağlantı isteği gönderir.
Server, iki özel iletişim portu yaratır, handle’ı bunlardan
birine client’a döndürür.
Client yada server, port handle’ı, mesaj göndermek
geri mesaj almak yada cevapları dinlemek için kullanır.
Example IPC : Windows
 ALPC kanalı yaratıldığında 3 mesaj geçirme tekniğinden biri
seçilir:



Küçük mesajlar için (<256 bytes) porttun mesaj kuyruğu kullanılır.
Büyük mesajlar bir section nesnesi üzerinden aktarılır. Bu nesne
bellekte paylaşılır bir alandır.
Paylaşılan bellek alanına aktarılamayacak büyüklükteki mesajlar
için ise server, client’ın adres alanına direk olarak okuma yada
yazma yapabilir.
 Kernel servislerin çoğu client programlar ile haberleşmek için
ALPC kullanırlar.
Example IPC : Windows
LPC Portaların Kullanımı
Client address
space
Kernel address
space
Server address
space
Connection port
Client process
Message
queue
Server process
Handle
Handle
Client view
of section
Client
communication
port
Server
communication
port
Shared
section
Handle
Server view
of section
Client-Server İletişimi
 Sockets
 Remote Procedure Calls
 Pipes
Soketler








Soketler:
 aynı veya farklı hostlar üzerindeki süreçlerin haberleşmesini sağlayan bir haberleşme
(interprocess communication) yöntemidir
 soyut bir tanımla haberleşme uç noktalarıdır.
Network üzerinden haberleşmek isteyen bir çift proses, bir çift soket kullanır.
POSIX'in sağladığı programlama API'si sayesinde programcı soketlere yazarken veya
okurken yine write(), read() gibi sistem çağrılarını kullanabilir.
Soket: bir port numarası ile bitiştirilmiş bir IP adresi ile tanımlanır.
İstemci (Client): Hizmet isteyen soket programlara denir.
Sunucu (Server): Hizmet veren soket programdır.
Server,
 gelen Client istekleri için bir portu dinler.
 Bir istek cevaplandığında, client soketinden bir bağlantıyı iletişimi tamamlamak için
kabul eder.
Server özel servisler uygular:




telnet server 23 nolu portu dinler
ftp server 21 nolu portu dinler
http server 80 nolu portu dinler
1024 altındaki portlar standart servislerin sağlanması için ayrıllmış portlardır.
Soket İletişimi
 Client bir bağlantı isteği gönderiyor bu istek 1024 den büyük bir port ile
ilişkilendiriliyor.
 Bir web server client isteğini 80 portu üzerinden dinliyor.
 Her bağlantı bir çift unique soket çiftinden oluşur.
 Hostlar arasında gidip gelen paketler, hedef port numarasına göre
uygun prosese iletilir.
 Aynı anda host X üzerindeki başka bir proses web servere a erişmeye
çalışırsa 1625 den farklı 1024’den büyük bir port numarası ile erişim
sağlar.
Soket Bağlantı Örneği
•
•
•
•
•
•
•
•
Server ServerSocket yaratır ve port 6013
dinler.
Server portu accept() metodu ile
dinlemeye başlar. Program bu satırda
client tan istek gelene kadar bekler.
Bir bağlantı isteği geldiğinde, accept()
komutu, server makinenin bağlatı için
kullanabileceği bir soket nesnesi
döndürür. Yeni oluşan “client” soket
nesnesi clineti server tarafında temsil
eder diyebiliriz.
Server-soket iletişimi:
Server öncelikle client ile haberleşmede
kullanacağı bir PrintWriter nesnesi
yaratır.
PrintWriter nesnesi server’a sokete
yazma yetkisini print() ve println()
metotları ile verir.
Server proses tarih bilgisini client’a
println() metodunu çağırarak gönderir.
Sokete bir kez tarihi yazdığında soketi
client için kapatır ve diğer istekleri
dinlemeye devam eder.
Soket Bağlantı Örneği




Client bir soket yaratır ve Server
dan bağlantı isteğinde bulunur.
(127.0.0.1 IP adresi ve 6013
portundan)
Bağlantı kurulduğunda client
stream I/O cümleleri ile soketten
okuma yapabilir.
Soketten veri okumak içinse
inputstream nesnesine bir
bufferstream nesnesi referans
olarak atanır.
Tarih bilgisini server dan
okuduktan sonra soketi kapatır.
Remote Procedure Call
 Her RPC mesajı, uzak makinedeki bir portta bir “RPC daemon




listening” prosesine adreslenir. Ve her biri işletilecek fonksiyon
için identifier ve parametreleri içerir.
Sonra fonksiyon işletilir ve sonucu requester’a ayrı bir mesaj ile
geri bildirilir.
Port basit olarak bir mesaj paketinin başlangıcına dahil edilmiş
bir numaradır.
Eğer bir remote proses bir servise ihtiyaç duyarsa, o zaman
mesajı uygun olan bir porta adresler.
Örneğin, bir sistem, diğer sistemlerin kendi current kullanıcılarını
listelemesine izin verdi.



O zaman, bir daemon programa sahip olmalıdır. (diyelim ki RPC,
port 3027 ye eklenmiş).
Şu halde, herhangi bir uzak sistem, ihtiyacı olan bilgiyi serverdaki
port 3027’ye bir RPC mesajını göndererek sağlayabilir.
Veri bir reply mesajı ile iletilecektir.
RPC işletimi
Pipes
 Pipe: proseslerin iletişimi için bir iletim kanalı gibi davranır.
 Pipe (boru) işletim sistemi tarafından çekirdek alanında organize
edilen bir FIFO kuyruk sistemidir.
 İlk Unix sistemlerdeki IPC mekanizmalarından biridir.
 Uygulamak için 4 durum kapsanmalıdır:




Pipe bidirectional yada unidirectional iletişime izin veriyor mu?
Eğer iki taraflı iletişime izin veriliyorsa iletişim half-dublex mi, fulldublex mi?
İletişen prosesler arasında bir ilişki bulunmalımı(parent-child gibi)
Pipe lar network üzerinden mi haberleşmeli yada aynı makinede mi
haberleşmeli
 Tipik olarak, bir pipe parent proses ile child proses arasında
yada tek bir proses içersinde 2 thread arasındaki iletişimi
kurmak için kullanılır.
Ordinary Pipes
 Ordinary pipes iki prosesin standart producer–
consumer yolu ile haberleşmesine olanak tanır:
producer pipe’ın sonuna yazar (the write-end)
ve consumer sonundan okur (the read-end)
 Ordinary pipes unidirectional yapıdadır, sadece oneway iletişime izin verir. Eğer two-way iletişime ihtiyaç
olursa, 2 pipe kullanılmalı, her pipe’da veri başka
yöne gönderilir.
 Windows işletim sisteminde Ordinary pipes
anonymous pipes olarak adlandırılır
Ordinary Pipes on UNIX
Systems




On UNIX systems, ordinary pipes are constructed using the function
 pipe(int fd[])
This function creates a pipe that is accessed through the int fd[] file descriptors:
 fd[0] is the read-end of the pipe, and fd[1] is the write-end.
UNIX treats a pipe as a special type of file. Thus, pipes can be accessed using
ordinary read() and write() system calls.
An ordinary pipe cannot be accessed from outside the process that created
it.


Typically, a parent process creates a pipe and uses it to communicate with
a child process that it creates via fork()
the child inherits the pipe from its parent process
Ordinary Pipe in UNIX

Named Pipes
 Named pipes daha güçlü iletişim aracı sağlarlar.
 İletişim bidirectional olabilir ve parent–child ilişkisi zorunlu
değildir.
 Named pipe bir kez kurulduktan sonra birden çok proses iletişim
için kullanabilir.
 UNIX ve Windows işletim sistemleri destekler
Download