Unix Notları

☁️ Ümit Eroğlu 🌍🛰
6 min readApr 10, 2020

--

İşletim Sistemleri / Unix / Linux

Günümüzde kullanılan birçok işletim sisteminin temeli olan Unix hakkında kısa bir derleme. Başlamadan önce, işletim sistemi nedir ve bileşenleri nelerden oluşur bunları açıklayalım.

İşletim Sistemi nedir?

İşletim sistemi, bilgisayarınızın çalışmasını sağlayan programlar ve araçlar bütünüdür. Kullanıcı ile karmaşık donanım arasında, bir köprü gibi çalışan yazılımlar ve donanım yazılımlarından oluşur.

Donanım aşağıdaki öğelerden oluşabilir:

  • Bir ya da daha fazla işlemci
  • Ana hafıza
  • Saatler
  • Klavyeler
  • Ekranlar
  • Diskler
  • Bantlar (Tape)
  • CD ler
  • Ağ Arayüzleri
  • Çeşitli girdi-çıktı araçları,

Yazılımların yüksek-seviye ve assembly dili destekli kısımları bulunmaktadır:

Bunlar görünmez ve arka planda çalışırlar (görev zamanlayıcı, hafıza yönetimi)
Kullanıcı programları ve dil kütüphaneleri tarafından çağrılırlar. (sistem çağrıları gibi)

İşletim sistemleri aynı zamanda bazı sistem yazılımları ile beraber gelirler bunlar:

  • Editörler
  • Derleyiciler
  • Kabuklar (Shell)
  • Araçlar
  • Mail
  • Dosya Yöneticisi
  • Web Tarayıcı
  • Takvim vb.

İşletim Sistemi Temel Prensipleri

  • Hepsinin ortak temelleri bulunmaktadır. Onlar olmadan bilgisayarları kullanamayız.
  • Aynı uygulamanın birçok bilgisayarda çalışmasını sağlayan, özel uygulamalar ile elektronikler arasındaki katmanlardır.
  • Kendi başlarına amaçları yoktur sedece bilgisayar kullanımı içindir.
  • Kullanıcılara genel ihtiyaç duyulan görevleri yerine getirmek için yardım ederler.

İşletim Sistemlerinin Hedefleri

1. Bilgisayarın kaynaklarını; doğru, düzenli, güvenli ve etkili biçimde sağlamak ve paylaşmak.

  • Donanım : CPU, Hafıza, Yazıcı, Diskler, Ağ
  • Yazılım : Kütüphaneler, Araçlar, Sistem Yazılımı

2. Her kullanıcı için bir Sanal Makine sağlamak.

  • Kullanıcıya bütün bir bilgisayar deneyimi vermek.
  • Karmaşık donanımlı sistemleri bir arayüzle basitleştirmek.

Örnekler:

  • Aynı grafik kullanıcı arayüzleri (GUI) birçok farklı iş istasyonunda çalışabilmektedir.
  • Bilgisayarın sahip olduğundan daha fazla hafıza kullanan programlar yazabilmek.
  • Disk dosyalarına “sektör” ve ya “track” ları önemsemeden erişebilmek.
  • Diğer kullanıcılar tarafından hafıza ya da dosya koruma verilebilmesi.
  • Basit bir komut satırı arayüzünden güçlü komutlar oluşturabilmek.

İşletim Sistemlerinin Ortak Özellikleri

  • Bir seferde birden çok kullanıcı ile ilgilenebilmesi ve iş zamanlaması yapabilmesi.
  • İnteraktif bir batch komut dili yorumlayıcısı içermesi.
  • CPU, hafıza dosyaları, girdi-çıktı cihazları gibi alanlarda kaynak paylaşımı kontrolü sunması.
  • Ortak bir koruma, gizlilik ve hata yönetimi sistemi sağlaması.
  • Dış ve iç iş-kesme (interrupt) durumlarını, birincil düzeyde bir değişken olarak ele alması.
  • Hesaplama ve tanılama gibi işletim sistemi özelliklerine kullanıcı dostu bir arayüz sağlar.
  • Uzun süreli on-line depolama hizmeti sağlar.

Modern Bir İşletim Sisteminin 4 Temel Kısmı

1. Süreç yöneticisi (process manager)

Sistemdeki tüm kullanıcılarla, kimin bir sonraki adımda ne yapacağı ve bunlarla ilgili olan işlerle ilgilenir.

2. Girdi-Çıktı yöneticisi (I/O manager)

Görsel girdi-çıktı cihazları, ara bellek (buffer) ve iş-kesme (interrupt) gibi arayüzler ile ilgilenir.

3. Hafıza yöneticisi (memory manager)

Kullanılmayan hafızayı serbest bırakır ve her kullanıcıya adil bir bölümleme ile yeterince hafıza vermeye çalışır.

4. Dosya Sistemi (file system)

Koruma ve paylaşma dahil olmak üzere dizinlerin ve disklerdeki dosyaların organizasyonunu yapar.

İşletim Sistemi Tipleri

  • Tek Kullanıcılı işletim sistemleri. (mikrobilgisayarlar)
  • Batch i.s. Kullanıcıyla görev arasında etkileşim yoktur. Direk işleme koyar.
  • Çoklu-programlama yapan i.s. Hafızada bir seferde birden fazla program kullanılır.
  • Çoklu kullanıcılı, zaman paylaşımlı i.s. Birçok kullanıcıya verilen birkaç milisaniyelik zaman diliminden oluşur.
  • Gerçek zamanlı i.s. Katı zamanlama kısıtlamaları, hata izleme, güdümlü füze izleme gibi.
  • Ağ Yapılı i.s. Kullanıcılar netteki diğer bilgisayarlardan haberdardır ve uçtan uca bağlanabilirler. Bazen normal i.s. ne bu tür ağ özellikleri eklenebilir.
  • Dağıtılmış i.s. Birçok işlemci, dağıtılmış CPU, dosya sunucularından oluşabilir. Kullanıcıların mimari hakkında bilgisi (dosyaların yeri,hangi cpu) yoktur.

Unix Tarihi

Gelişimi

1960'lar — Multics projesi (MIT, GE, AT&T)
1970'ler — AT&T Bell Laboratuarları
1970/80 — UC Berkeley — California Üniversitesi
1980'ler — DOS birçok Unix fikrini taklit etmiştir
- Unix’in ticari amaçlarla bölünmesi
- GNU Projesi
1990'lar — Linux
Günümüz — Unix, geniş bir dağılımla, birçok farklı kaynaktan, ticari ve ücretsiz şekilde temin edilebilir

  • Unix 60'ların gerçek zamanlı işletim sistemi olan MULTICS tabanlıdır.
  • 70'lerde Bell Labs’da çalışan Dennis Ritchie & Ken Thompson tarafından daha basit bir multics yaratarak programlama ve doküman hazırlamak amacıyla yazılmıştır.
  • %95 i C Dili, % 5 i ise Assembly Dilinde yazılmıştır. Bu yönü kolay taşınabilirlik ve uzun bir hizmet ömrü sağlamıştır.
  • Katmanlı, çoklu-kullanıcılı, çoklu-programlama ve ağ hizmetlerine sahiptir
  • Karmaşık bir gelişim tarihi vardır.
  • Standart olan ve olmayan birçok versiyonu mevcuttur.
Source Living Computers

En çok bilinenleri:

Solaris (Sun)
Linux (Open)
FreeBSD (freebsd.org)
OpenBSD (openbsd.org)
NetBSD (netbsd.org)
MacOS X (Apple)
HP UX (HP)
AIX (IBM)
Ultrix (DEC)

  • Birbiri ile etkileşim halinde olan birçok güçlü modüler araçtan oluşmaktadır.
  • Yeni bir özellik eklemek isteyen kullanıcılar açısından oldukça esnektir.
  • Oldukça kararlıdır ve hata ayıklaması yapılmıştır.
  • İyi özellikleri diğer işletim sistemleri tarafından kopyalanmıştır.
    (Çekirdek, Girdi-Çıktı, Yöneltme ve yeniden yönlendirme gibi)
  • Bugünlerde internet sunucularında ve mühendislik uygulamalarında kullanılmaktadır. (CAD,CAM,CAE vb)

Unix Felsefesi

  • Çoklu Kullanıcı / Çoklu Görev (Multiuser / Multitasking)
  • Araç kutusu yaklaşımı (Toolbox approach)
  • Esneklik / Özgürlük
  • Kısa / Öz (Conciseness)
  • Herşey bir dosya
  • Dosya sisteminin bir yeri, süreçlerin ise bir ömrü var
    (File system has places, processes have life)
  • Programcılar için programcılar tarafından tasarlanmış

Tarihsel açıdan Unix Sisteminin Bazı Eksiklikleri

  • Standartlaşmada, grafik arayüz ve popüler yazılımlarda gecikmiştir
  • Deneyimli bilgisayar kullanıcıları için tasarlanmıştır. Kullanıcı dostu değildir.
  • Dokümantasyon hakkında bilgili bilgisayar kullanıcıları için yapılmış, kısa ve öz, acımasız ve cana yakın olmayan isimleri bulunmaktadır.
  • Üzerine-tıklamalı (Click-Point) sistemlere alışkın ev kullanıcısına hitap etmediği ve bu amaçla pazarlanmadığı için pek tanınmamaktadır.
  • Ancak Linux ve Açık-Kaynak-Yazılım Hareketi bu trendi etkili bir biçimde tersine çevirmiştir.

Unix Programları

Shell, (kabuk) bir komut satırı yorumlayıcısıdır. (interpreter) Shell’in kendiside bir programdır. Program ya da komut, kernel (çekirdek) ile etkileşime girer.

Program ya da komut;

  • mevcut (built-in) bir shell komutu,
  • yorumlanmış bir betik (script) ya da
  • derlenmiş bir nesne kodu dosyası (object code file) olabilir.

Tüm Unix komutları aynı standartları takip etmez. Komut opsiyonları ve syntax, man page (manual pages) içerisinde listelenmiştir.

Unix İşletim Sistemi Yapısı (içten dışa doğru: Donanım-Kernel-Sistem Çağrıları-Programlar)

Shell Çeşitleri

Shell, kullanıcı ile işletim sistemi arasında bulunur ve bir komut yorumlayıcısı olarak hareket eder. Girdiyi (input) okur ve komutları, sistem tarafından uygulanmak üzere, hareketlere dönüştürür.

Bourne Shell (sh)
C Shell (csh)
Korn (ksh)
Bourne-Again Shell (bash)
Z Shell (zsh)
T-C shell (tcsh)

Shell Betikleri (Scripts)

  • Dos’taki batch dosyalarına benzerler.
  • Basit ve hızlı bir programlama yaparlar.
  • Text dosyası, etkili şekilde yeni bir komut olarak, shell tarafından yorumlanır.
  • Shell komutlarından oluşan bir liste sırayla (sequentially) çalıştırılabilir.
  • Özel bir eklentiye ihtiyaç duymadan, izinler (permissions) gerçekleştirilebilir.

Bazı Unix Özellikleri

  • Küme Komut İşleme (piping) ve yeniden-yönlendirme (redirection) yapılabilir.
  • Çıktı (output) bir dosyaya yönlendirilebilir.
  • Bir dosyaya, girdi (input) yapılabilir.
  • Küme Komut İşleme yapılabilir.
  • Bir komutun çıktısı, başka bir komutun girdisi yapılabilir.

Linux Evrimi / Devrimi

Unix sisteminin yeniden canlanması ve popülerliği, kökleri 1984 GNU Projesine, Açık Kaynak Hareketine ve Özgür Yazılım Kuruluşuna dayanmaktadır. (Free Software Foundation — gnu.org)

Açık Kaynak Hareketinin ardında yatan fikir şudur:

Eğer programcılar bir yazılımın kaynak kodunu okuyabilir, değiştirebilir ve yeniden dağıtımını yapabilirlerse o yazılım evrim geçirir. İnsanlar onu geliştirir, başka yazılımlara uyumlu hale getirir ve hatalarını düzeltirler. Bu durum hızlı gelişir ve bunu geleneksel yazılım gelişim hızı ile karşılaştırırsak ne kadar şaşırtıcı sonuçlar elde edilebileceğini görürüz. (opensource.org)

Linux ücretsiz bir yazılımdır. Ancak bu durum bir içeceğin ücretsiz olması gibi değildir. Daha çok konuşma-fikir özgürlüğü gibidir. Birçok kaynaktan edinmek mümkündür. (linux.com)

Kimse Linux yazılımının sahibi değildir. Linus Torvalds bu girişimi 1991 yılında başlatmıştır. Günümüzde dünyadaki binlerce insan tarafından desteklenerek geliştirilmekte ve ilerlemektedir.

Linux dağıtımları bilgisayar ortamınızı zenginleştiren birçok uygulama programıyla beraber gelmektedir.

Bunlar: Ofis programları, text editörleri, oyunlar, hesap tabloları, e-posta programları, grafik uygulamaları, bilimsel programlar, belgelendirme, dijital kamera uygulamaları, web editörleri, tarayıclar vb.

Windows ya da Mac programları gibi olmasalarda onlara benzer ve ücretsizdirler. Hatta bazı uygulamaları ticari emsallerinden daha çok özellikli ve kararlıdır.

Unix sisteminde olduğu gibi birçok çeşidi bulunmaktadır:

Red Hat
Suse
Mandrake
Caldera
OpenLinux + TurboLinux
Debian vb.

Kaynaklar:

https://en.wikipedia.org/wiki/Unix

Unix A History and a Memoir — Brian Kernighan

Unix Programming Environment — Brian Kernighan, Rob Pike

https://tr.wikipedia.org/wiki/Unix

Introduction to Unix — Rob Funk — ohio-state.edu

--

--