ubuntu isletim sistemi-surecler ve yonetimi

43

Upload: mustafa-gocmen

Post on 26-Dec-2014

518 views

Category:

Technology


2 download

DESCRIPTION

Linux işletim sisteminde süreçler ve yönetimleri

TRANSCRIPT

Page 1: Ubuntu Isletim Sistemi-Surecler ve Yonetimi
Page 2: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

KONULAR

– UBUNTU NEDİR ?– POSIX NEDİR ?– ÇEKİRDEK NEDİR ?– SÜREÇ NEDİR ?– SİNYAL NEDİR ?– SÜREÇLER ARASI İLETİŞİM ?

Page 3: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

UBUNTU NEDİR?

*Ubuntu, Linux tabanlı ve Debian geleneğini temelalan bir işletim sistemidir.

*Ubuntu'nun hedefi ortalama bilgisayar kullanıcılarına kullanımı ve kurulumu oldukça kolay, güncel ve güvenli bir işletim sistemi sunmaktır

Page 4: Ubuntu Isletim Sistemi-Surecler ve Yonetimi
Page 5: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

*İlk Ubuntu sürümü 20 Kasım 2004 tarihinde yayımlandı.

*O zamandan beri her altı ayda bir yeni sürüm yayımlanmaktadır.

*Ubuntu, 11,04 (Natty Narwhal) sürümüne kadar GNOME ara yüzünü kullanmış, bu sürümle birlikte Unity'e geçmiştir.

*Ancak hâlâ Ubuntu GNOME ile kullanılabilmektedir.

Page 6: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

*Ubuntu Güney Afrika'lı girişimci Mark Shuttleworth'e ait Canonical Ltd.'nin sponsorluğunda geliştirilmektedir.

Page 7: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

POSIX NEDİR ?*Unix’in başarısı ve niteliği birçok farklı sürümünün ortaya

çıkmasına neden oldu. Bu sürümlerde ortak bir davranış oluşturma amacıyla POSIX (Portable Operating System Interface for Unix) kural arayüzü oluşturuldu.

*POSIX arayüzünün sağladığı sağlıklı ve sağlam arayüz zamanla Unix türevi olmayan işletim sistemleri tarafından da kısmen de olsa uygulanır oldu (Windows’da Cygwin veya Windows Services for Unix ,Symbian, vb...)

*Bu belgedeki kodların çoğu sadece POSIX uyumlu sistemler için geçerlidirler.Dolayısıyla neden benim Windows 7’mde derleme hatası veriyor diye şikayet etmeyiniz!

Page 8: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

ÇEKİRDEK

*Günümüz işletim sistemleri geçmişe oranla tanınmayacak derecede çok özellik taşıyorlar;grafik arayüzler, yazılım yükleme merkezleri, temalar vb.

*Tüm bu bileşenler içerisinde yer alan, ve işletim sisteminin “kalbi” sayılıp, “asıl işi”, yani donanım ile etkileşimden sorumlu birime çekirdek (kernel) denir.

Page 9: Ubuntu Isletim Sistemi-Surecler ve Yonetimi
Page 10: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

*Linux için çalışan bir çok kernel bulunmakta. Bu çekirdekler Linus Towalds ın yönettiği bir grupta şekillendirilmekte.

*Şu anda en güncel çekirdek serisi 2.6.* serisidir.

*Fakat sistem mimarisi olarak iki önemli çekirdek yapısı karşımıza çıkmaktadır.

Page 11: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

*Bunlardan ilki eski tek çekirdek mimarisine dayanan çekirdek mimarisidir. Pentium Pro olmayan işlemcilerde çalışır.

*Hala sanal makinelerde,el cihazlarında ve eski makinelerde kullanılır.

*Diğeri ise günümüzde popüler olan SMP(Simetrik Çok İşlemci ) yapısını kullanır.

*İşlemci çekirdeklerinin aynı RAM'i ortak kullanmasını sağlar.

Page 12: Ubuntu Isletim Sistemi-Surecler ve Yonetimi
Page 13: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

*Yükleme esnasında boot kerneli kurar ve kernel kök klasörü (/) oluşturur. Gerekli olan klasörler(/etc , /proc , /usr,/boot ..) bu aşamada oluşturulur.

*Sonrasında bir boot loader (günümüzde en popülerleri GRUB ve LILO ) , sistem yeniden başlatıldığında çekirdek seçilir ve yüklenir.

*Bu çekirdek güncel olan ya da daha eski , hatta kendi hazırladığımız bir çekirdekte olabilir.

Page 14: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

*Kısacası Kernel , hangi programlara işlemcide zaman ayrılacağını , bellekte ne kadar yer verileceğini ve bu yerlerin nerelerde olacağını,giriş-çıkış cihazlarına ulaşmayı,eşzamanlılık sorunlarının çözülmesini sağlar.

Page 15: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

SÜREÇLER

*Bir işletim sistemindeki tüm etkinlikler süreçler (process) bağlamında gerçekleşir. Bir süreç, kısaca çalışmakta olan bir programdır. Bu bağlamda işletim sisteminin görevi,süreçlerin donanımsal özkaynaklara erişimini denetlemek ve etkinliklerini düzenlemektir.

Page 16: Ubuntu Isletim Sistemi-Surecler ve Yonetimi
Page 17: Ubuntu Isletim Sistemi-Surecler ve Yonetimi
Page 18: Ubuntu Isletim Sistemi-Surecler ve Yonetimi
Page 19: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

SÜREÇ YAPISI

● Bir süreç üç bellek alanında oluşur:- kod bölümü: çalıştırılabilir komutlar bu alanda saklanır.- veri bölümü- yığın bölümü (+ küme bellek - heap)

● Her üç alanın da özellikleri farklıdır (örneğin kod bölümü salt okunurdur). Çalıştırılabilir bir belgenin de yapısı bu ayrımı içerir, ancak orada sadece 2 bölüm söz konusudur (yığın yoktur).

Page 20: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

*Süreçler sistem kaynaklarına gereksinim duyarlar (belge açmak ister, ağa erişmek ister,ekrana yazdırmak ister...). Donanımla doğrudan etkileşime geçmeye tek yetkili işletim sisteminin kendisi olduğundan, bu isteklerini ona sistem çağrıları şeklinde iletirler.

*Böylece yetki onlara devredilip, işletim sistemine ait kodu çalıştırabilir ve donanıma erişebilirler.Dikkat: iki çalışma kipi vardır:-kullanıcı kipi (user mode): sıradan uygulamaların çalıştığı kip, son derece kısıtlanmış şekilde.-yönetici kipi (kernel mode): tam yetki kipi, işletim sisteminin bellek alanına erişim hakkı.

*İşletim sisteminin önceliği güvenliktir. Bir süreç asla işletim sistemine (çekirdeğe) zarar vermemelidir!!!

Page 21: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

SÜREÇ KİMLİĞİ

*Her sürecin onu diğerlerinden ayıran sayısal bir kimliği vardır, buna süreç kimliği (process id – process identifier) denir. Kısaca pid.

*Süreç kimlikleri 16-bit tamsayılardır,ve her yeni yaratılan sürece artarak işletim sistemi tarafından sağlanırlar. Her sürecin bir velisi (parent) vardır (sistemi başlatan süreç olan init dışında).

*Böylece bir işletim sistemi altında çalışan süreçleri bir ağaç yapısı olarak düşünebiliriz.Kökünde init yer alır.

Page 22: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

*Veli süreç kimliğine (parent process id) ppid olarak anılır. C/C++ uygulamalarında süreç kimliklerinin typedef hali: pid_t’dir ve <sys/types.h>’de tanımlıdır. Bir sürecin kimliğinigetpid() ve velisinin de kimliğini getppid() çağrıları ile öğrenebilirsiniz. Örneğin:

#include <stdlib.h>#include <unistd.h>int main(){printf(“Surec kimligi: %d\n”, getpid());printf(“Veli surec kimligi: %d\n”, getppid());return 0;}

*Dikkat: Bu örnek her çalıştırıldığında farklı sonuçlar verecektir.

Page 23: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

SÜREÇ YARATMAK

*Dos ve Windows ortamlarında yeni süreç yaratmak için spawn fonksiyonlar ailesi kullanır. Ona program adı verilir ve o da onu başlatır. Linux ortamında tüm bu adımları tek çağrıda yapan fonksiyon yoktur. Onun yerine Linux ortamında fork ve exec fonksiyonları kullanılır.Fork,çağrılan sürecin birebir kopyasını oluşturur, exec ise bir süreci başka bir programın sürecine dönüştürür.

*Dolayısıyla yeni bir süreç yaratmak için önce fork ile çalışan sürecin kopyası oluşturulur, sonra da exec ile kopyalardan birini arzu ettiğimiz yeni sürece dönüştürürüz.

Page 24: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

FORK*Bir süreç fork çağrısını gerçekleştirdiğinde, çocuk süreç

denilen birebir kopyası olan yeni bir süreç yaratılır (kod, veri ve yığın). Velisi (yani fork’u çağıran), kaldığı yerden çalışmaya devam ettiği gibi, yeni yaratılan süreç de o konumdan itibaren kendi köşesinde çalışmaya devam eder.

*Peki bu ikisi nasıl ayırt edilir ? Birincisi her iki sürecin de farklı süreç kimlikleri olacak,ikincisi ise, fork çağrısının geri yolladığı değerdir. Veli süreçte fork çağrısının geri dönendeğeri çocuk sürecin kimliğidir. Çocuk süreçte ise geri dönen değer sıfırdır.Hiçbir sürecin kimliği sıfır olmadığından, çocuk sürecin çocuk süreç olduğu kolayca anlaşılır.

Page 25: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

ÖRNEK:#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(){pid_t child_pid;printf(“Ana programa kimligi %d\n”, (int)getpid());child_pid = fork();if(child_pid != 0){printf(“Cocugun velisi %d\n”,(int)getpid());printf(“Cocugun kimligi %d\n”,(int)child_pid);}else{printf(“Cocuk surecteyiz %d\n”, (int)getpid());}return 0;}

Page 26: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

SİNYALLER

*Sinyaller süreçler ile iletişim ve onları denetim araçlarıdır. Sinyaller bir tür özel iletilerdir, ve eşzamansızdırlar (asynchronous). Yani bir sürece bir sinyal ulaştığında onu hemen işler,beklemez.

*Hangi fonksiyon veya işlemin ortasındaysa da, onu yarıda bırakıp sinyali işler.

*Her sinyalin sayısal bir kodu vardır: signal.h.

Page 27: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

*Bir sürece sinyal ulaşınca birçok şey gerçekleşebilir. Eğer sinyal ulaştığında çalışması öngörülmüş bir fonksiyon varsa o çalıştırılır ve fonksiyon tamamlanınca program durakladığı yerden devam eder.

*Yoksa sinyal yoksayılabilir de, sinyalin türüne göre, uygulamanın kapatılmasına da neden olabilir. Örneğin SIGBUS (bus eror) ve SIGSEV(segmentation fault) uygulamanın sonu demektir.

*Çekirdek tarafından yollanan bu birkaç sinyal dışında, bir süreç olağan bir şekilde başka bir sürece de sinyal yollayabilir. Örneğin sıradan bir kullanım şekli, bir sürecin kendisiniyok etmesini sağlamak için SIGTERM ve SIGKILL sinyallerini göndermektir.

Page 28: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

*Kullanıcıların kendi amaçları için kullanımlarına ayrılmış iki sinyal vardır: SIGUSR1 ve SIGUSR2.

*Sinyal ulaştığında sergilenmesi gereken davranışı belirlemek için sigaction fonksiyonu kullanılır.

*Fonksiyona söz konusu sinyalin kodu ve iki adet sigaction yapısına gösterici sağlanır.

*Bunlardan biri yeni davranışı belirler, diğeri eskiyi saklar.

Page 29: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

#include<stdio.h>#include<signal.h>#include<string.h>#include<sys/types.h>#include<unistd.h>sig_atomic_t sigusr1_count = 0;// bolunemezvoid handler(int sig_number){++sigusr1_count;}int main(){struct sigaction sa;memset(&sa, 0, sizeof(sa));sa.sa_handler = &handler;sigaction(SIG_USR1, &sa, NULL);/* Çocuk süreç oluştur ve işlemler... */printf(“%d tane sigusr1 sinyal \n”, sigusr1_count);return 0;}

ÖRNEK:

Page 30: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

SÜREÇ SONLANDIRMA*Bir süreç iki farklı şekilde sonlanabilir. Ya exit çağrısı ile ya

da main fonksiyonu tamamlanınca. İster exit çağrısının parametresi veya main’deki return ile, bir şekilde her süreç geriye bir değer yollar.Olağandışı durumlarda bir süreç ona ulaşan sinyal sonucunda da sonlanabilir. Örneğin;

CTRL+C’ye basılınca SIGINT sinyali yollanır. SIGTERM ise kill komutu ile yollanır.

*En güçlüleri ise SIGKILL’dir ki yakalanamaz, ertelenemez, anında yok eder. Bu sinyali yollamak için kill fonksiyonu kullanılır. Örneğin:

kill(pid, SIGTERM);

Page 31: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

SÜREÇ BEKLEME*Hangi sürecin önce ve ne kadar süre ile çalıştırılacağı belli

değildir. Linux multitasking yani belirli bir andan birden fazla görevi eşzamanlı yürüten bir işletim sistemidir (DOS değildir). Gerçekçi olmak gerekirse her an ancak bir komut çalıştırılabilir, dolayısıyla eşzamanlı değil de çok hızlı bağlam değişimi yaparak desek daha doğru olur.

*Bazen bir sürecin diğerinin sonucunu beklemesini isteriz. Ancak o tamamlandıktan sonra devam etmesini isteriz. Bu durumlarda wait çağrısı kullanılır. Onu çağırsan süreç BEKLEME durumuna geçer, ta ki çocuk süreçlerinden biri tamamlanıncaya kadar.WIFEXITED ve WEXITSTATUS makroları ile çocuk sürecin çıkış kodunu denetleyebilirsiniz.

Page 32: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

ZOMBİ SÜREÇLER

*Bir çocuk süreç tamamlanınca ne olur? Eğer velisi wait çağrısını gerçekleştirmiş ve tamamlanmasını bekliyorsa, sonuç veliye iletilir, çocuk süreç yok edilir ve veliçalışmasına devam eder.

*Peki ya veli wait’i çağırmamışsa? O zaman çocuk süreç onu kimse beklemediği için öylece kalır.

*Bu durumda ona zombi süreç denir.

Page 33: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

SÜREÇLER ARASI İLETİŞİM*Süreçler bölümünde görüldüğü kadarıyla bir velinin

çocuğu ile iletişim kurma yolları oldukça sınırlı. Çocuk velisine çıkış kodunu yollayabilir, ortam değişkenleri kullanılabilirveya komut satırı parametreleri de sağlanabilir. Ancak bunlar yetersizdir.

*Süreçler arası iletişim kavramı birden fazla süreç arasındaki veri alışverişini betimler. Bir web tarayıcısı sunucudan bir html sayfası isteyebilir, veya ls ile dizin içeriğini edindikten sonra yazıcının yazmasını isteyebiliriz.

*Süreçler arası iletişim adına 5 farklı yaklaşım incelenecek.

Page 34: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

-Boru (pipe): Bağıntılı süreçler arasında dizisel iletişim

-FIFO: Borulara benzer davranırlar, ancak söz konusu süreçler bağıntılı olmak zorunda değildirler.

-Soket: Bağıntısız hatta farklı bilgisayarlarda olan süreçler arasında iletişim

-Paylaşımlı Bellek: Ortak bir bellek alanına yazıp okuyarak iletişim.

-Bellek Haritası: Paylaşımlı belleğe benzer, ancak belge sistemindeki bir belge ile bağıntılıdır.

Page 35: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

Bu iletişim yaklaşımlarının farklılaştıkları açılar şöyle:

- İletişimi ortak atalı süreçler veya aynı bilgisayardaki süreçler ile kısıtlayıp kısıtlamadıkları

- İletişim tek yönlü veya çift yönlü olması

- İletişim kurabilen süreç sayısı

- Eşzamanlılıkları. Örneğin, veri okumak için okunacak verinin okumasını

beklemek gibi.

Page 36: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

BORULAR

*Boru, tek yönlü iletişim sağlayan bir iletişim aracıdır. Borunun yazma ucuna yazılan veri okuma ucundan okunur. Ayrıca borular dizisel araçlardır.

*Yani veri hangi sıra ile yazıldıysa aynı sıra ile de okunur.

*Boru yaratmak için “pipe” çağrısı kullanılır, ve ona 2 boyutlu bir int dizisi sağlanır. Artık bu dizinin ilk öğesi yazım belge betimleyicisi, ikinci öğesi ise okuma belge betimleyicisidir.

Page 37: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

int pipe_fds[2];int read_fd;int write_fd;pipe(pipe_fds);read_fd = pipe_fds[0];write_fd = pipe_fds[1];

*write_fd’ye yazılan veri, read_fd ucundan okunabilir.pipe’a yapılan çağrının ürettiği belge betimleyicileri, sadece çağrının yapıldığı süreç için geçerlidirler. Bir sürecin belge betimleyicileri başka bir sürece aktarılamaz.

*Ancak,bildiğimiz üzere, bir süreç fork ile çoğalınca, belge betimleyici tablosu da kopyalanır.

*Böylece çocuk ile velisi ortak belge betimleyicilerini kullanarak iletişim kurabilirler. Bu yüzden de borular ancak atalık bağıntısı olan süreçler arasında kullanılabilirler.

Page 38: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

FIFO*First-in, first-out (FIFO) belgelesi, belge sisteminde ismi olan

bir borudur. Herhangi bir süreç FIFO’yu açıp kapatabilir, ve en önemlisi iki ucundaki süreçlerin arasında atalık bağı olması koşulu yoktur. FIFO’lara ayrıca isimli boru (named pipe) da denir.

*FIFO yaratmak için mkfifo çağrısı kullanılır. İki parametre alır.İlki, FIFO’nun belge sisteminde yaratılacağı yoldur. Diğeri ise, FIFO’nun kullanıcı, grup ve diğer erişim izinlerini belirler.

*Başarısızlık durumunda (belki de o belge zaten var) geriye -1 yollar.

Page 39: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

SOKETLER

*Soketler, aynı veya farklı bilgisayarlarda yer alan süreçler arasında veri alışverişini sağlayan çiftyönlü iletişim araçlarıdır.

*Bunu başaran tek araçlar değiller, ancak biz bu özelliğe sahip yalnız onları göreceğiz. Telnet, FTP, talk ve WWW gibi uygulamaların tümü soketleri kullanırlar.

*Örneğin bir web sunucusundan telnet ile bir sayfa çekelim: telnet www.google.com 80

Page 40: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

*Bağlantı sağlandıktan sonra GET / komutunu girelim. Bu web sunucusuna soket üzerinde ileti yollar.Web sunucusu bu iletiyi yorumlayıp ondan sayfa istendiğini anlar. Yanıt olarak da sayfayı yollayıp bağlantıyı kapatır:

telnet www.google.com 80Trying 206.168.99.1...Connected to google.com (206.168.99.1).Escape character is ‘^]’.GET /<html><head><meta http-equiv=”Content-Type” content=”text/html”...

Page 41: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

SOKET KAVRAMLARI*Soket yaratırken belirtilmesi gereken üç parametre vardır:

iletişim tarzı, isim alanı ve protokol.Soket aracılığı ile gönderilen veriler paketler adında parçalar olarak iletilirler. İletişim tarzı bu paketlerin nasıl kullanılacaklarını ve yollayandan yollanana nasıl iletileceklerini belirler:

- Bağlantı iletişim tarzı, paketler hangi sıra ile gönderilirlerse aynı sıra ile varacaklarının garantisini verir. Olur da kaybolan veya sırası yanlış gelen paket olursa, karşı taraf yenisini talep eder.

- Datagram (veri birimi) iletişim tarzı, teslimat sırası ile ilgili garanti vermez.Ağ hatası nedeniyle paketler kaybolabilir veya sıraları değişebilir. Sistem sadece elinden gelenin en iyisini yapıp kalanını kadere kısmete devreder. Bu tarz posta hizmetine benzer. Her pakete varış adresi yerleştirilip yollanır.

Page 42: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

*İsim alanına gelince, o soket adreslerinin nasıl ifade edileceğini belirtir.Aynı bilgisayar içerisinde soket iletişimi kurulacaksa, o zaman her adres bir belge adındanibarettir. Farklı bilgisayarlar arasında iletişim kurulacaksa, o zaman her adres bir internet protokol adresi (IP adresi) ve bir adet bağlantı noktasından (port) oluşur.

*Bağlantı noktasına, varış bilgisayarındaki farklı soketler arasından doğru olanı seçmek için gereksinim duyarız.

*Protokol ise verinin yollanma şeklini ayarlar. En sıradan olanı TCP/IP’dir. Onun dışında AppleTalk ve Unix yerel iletişim protokolleri vardır.

Page 43: Ubuntu Isletim Sistemi-Surecler ve Yonetimi

TEŞEKKÜRLER

MUSTAFA GÖÇMEN