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) Program Counter Parent PID … Handle Table Process ID (PID) Registers Next Process Block Image File Name PCB List of Thread Control Blocks List of open files … This is an abstract view Windows implementation of PCB is split in multiple data structures Next TCB … Thread Control Block (TCB)
Process Block (!process) Physical address of Page Directory root of the process’s Virtual Address Descriptor tree
Linux da Proses Temsili Task_struct in 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 wait for I/O inc count add data, val write file wait for I/O load val inc val read from file wait for I/O CPU burst I/O burst … load val inc val read file
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.exeSession Manager The first “created” process Takes parameters from \HKEY_LOCAL_MACHINE\System\CurrentControlSet \Control\Session Manager Launches required subsystems (csrss) and then winlogon csrss.exeWindows subsystem winlogon.exeLogon process: Launches services.exe & lsass.exe; presents first login prompt When someone logs in, launches apps in \Software\Microsoft\Windows NT\WinLogon\Userinit services.exeService 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.exeLocal Security Authentication Server userinit.exeStarted after logon; starts Explorer.exe (see \Software\Microsoft\Windows NT\CurrentVersion\WinLogon\Shell) and exits (hence Explorer appears to be an orphan) explorer.exeand 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...
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 (Insert- Remove) Ü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 shared- memory 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 Message queue Connection port Client process Server process Handle Server view of section Handle Client view of section Shared section Client communication port Server communication port
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. ( 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
RPC vs RMI (Remote Method Invocation)? Call remote function vs Call Remote object?