İçeriğe atla

Boru hattı (programlama)

Kontrol Edilmiş

Boru hattı (pipeline), yazılım mühendisliğinde, her bir elemanın çıktısı bir sonraki elemanın girdisi olacak şekilde sıralanmış işlemler zinciridir. Genellikle, ardışık birimlerin aralarına bir miktar arabellek (buffer) konulmaktadır. Bu boruhatları arasındaki bilgi akışı çoğunlukla bayt katarları (stream) ve bit katarları şeklindedir.

Çoklu İşlem Yürütümlü (Multiprocessed) Boruhatları

Boruhatları, en verimli şekilde; tüm komut dizileri aynı anda başlatılarak ve her bir komut dizisi tarafından gönderilen veri okuma isteğine otomatik olarak cevap verilerek, çoklu görev yürütümlü (multitasking) bir işletim sistemine yerleştirilebilirler. Bu şekilde, merkezi işlem birimi (CPU), bekleme süresini en aza indirmek için, doğal bir şekilde, çizelgeleyici (scheduler) tarafından komut dizileri arasında anahtarlanacaktır.

Genellikle, okuma ve yazma istekleri, işlemleri engellemektedir. Bu, yazma üzerinde yürütülen kaynak komut dizisinin, tüm veriler hedef komut dizisine yazılana kadar ertelenmesi ve aynı şekilde okuma üzerinde yürütülen hedef komut dizisinin, en azından istenen verilerin bazıları kaynak komut dizisinden alınana kadar ertelenmesi anlamına gelmektedir. Belli ki bu, her iki komut dizisinin de cevap vermek için birbirlerini belirsiz bir süre bekleyeceği bir kilitlenmeye (deadlock) neden olamaz; çünkü, en azından iki komut dizisinden birinin isteğine en kısa zamanda işletim sistemi tarafından hizmet verilecektir ve komut dizisi yürütülmeye devam edecektir.

Performans için birçok işletim sistemi, kaynak komut dizisinin, hedef komut dizisinin alabileceği veya almak isteyeceği veriden daha fazlasını sağlamasına olanak tanıyan iletişim tüneli arabellekleri (pipe buffer) içermektedir. Çoğu Unice ve Unix benzeri işletim sistemlerinde, genel olarak “arabellek” diye adlandırılan, potansiyel olarak daha büyük ve ayarlanabilir boyutta bir iletişim tüneli arabelleği sağlayan çok özel bir komut da ayrıca mevcuttur.

Bu komut, eğer hedef komut dizisi kaynak komut dizisinden belirgin derecede daha yavaş ise kullanışlı olabilir; ancak yine de kaynak komut dizisinin, mümkün olan en kısa sürede görevini tamamlaması arzulanmaktadır. Örneğin, kaynak komut dizisi, CD'den ses kaydı okuyan bir komuttan oluşuyor olsun ve hedef komut dizisi, dalga biçimindeki ses verisini OGG Vorbis formatında sıkıştıran bir komuttan oluşuyor olsun. Bu durumda, ses kaydının tamamını iletişim tüneli arabelleği içinde saklamak, CD sürücüsünün daha hızlı durmasına ve kullanıcının şifreleme (encode) işlemi tamamlanmadan CD'yi sürücüden çıkarabilmesine olanak tanıyacaktır.

Bu tür bir arabellek komutu, mevcut işletim sistemindeki veri okuma ve yazma temel öğeleri ile gerçekleştirilebilir. Zaman kaybettiren aktif bekleme (active waiting), poll, select veya multithreading gibi avantajlar kullanılarak önlenebilir.

VM/CMS ve MVS

CMS boruhattı, bizi VM/CMS ve MVS sistemlere götüren boruhattı fikrinin giriş aşamasıdır. Bu, çoklu girdi katarlarını alıp bunlardan çoklu çıktı katarları üreterek, Unix kabuklarından (shell) çok daha karmaşık boruhattı yapılarını destekler. [Böyle bir işlevsellik Unix çekirdeği (kernel) tarafından desteklenmektedir, ancak çok az program bunu kullanır ve hiçbir kabuk bunun için bir sözdizim (syntax) sağlamaz.] IBM mainframe işletim sistemleri, farklı doğaları yüzünden, CMS boruhatları içine, Unix'te farklı harici programlar şeklinde olan birçok adım eklemişlerdir; fakat aynı zamanda, işlevsel olmaları için, farklı harici programları çağırabilirler. Aynı zamanda, IBM mainframe dosyalarının kayıt bazlı (record-oriented) doğaları nedeniyle, boruhatları, akış bazlı (stream-oriented) değil de kayıt bazlı düzende çalışırlar.

Sözde Boruhatları (Pseudo-Pipeline)

Tekli görev yürütümlü (single-tasking) işletim sistemlerinde boruhattının komut dizileri teker teker, sıralı düzende yürütülmek zorundadır; öyle ki, her bir komut dizisinin çıktısı, bir sonraki komut dizisi tarafından okunmak üzere, geçici bir dosyaya kaydedilmelidir. Paralellik ve CPU anahtarlama olmadığından bu türe “sözde boruhattı” denir.

Örnek olarak, MS-DOS komut güdüsü (command prompt) yorumlayıcısı (COMMAND.COM), Unix boruhatlarının sözdizimine benzer, yüzeysel bir sözdizim sağlamaktadır. “dir | sort | more” komutu şu şekilde yürütülecektir (tabii ki daha karmaşık geçici dosya adları kullanılarak):

  1. 1.tmp adlı geçici dosyayı yarat
  2. “dir” komutunu, çıktısını 1.tmp dosyasına yönlendirerek, çalıştır
  3. 2.tmp adlı geçici dosyayı yarat
  4. “sort” komutunu, girdisini 1.tmp dosyasına ve çıktısını da 2.tmp dosyasına yönlendirerek, çalıştır
  5. “more” komutunu, girdisini 2.tmp dosyasına yönlendirerek ve çıktısını kullanıcıya sunarak, çalıştır
  6. Daha fazla ihtiyaç kalmadığından, 1.tmp ve 2.tmp dosyalarını sil
  7. Komut güdüsüne geri dön

Tüm geçici dosyalar %TEMP% ile işaret edilen bir klasörde (eğer %TEMP% ayarlanmamışsa, içinde bulunulan klasörde) saklanır.

Böylece, gönderme komut dizisi (sending process) tamamlanmadan alma komut dizisinin iletişim tüneli arabelleğinden veri okuması kesinlikle engellenmiş olmakla birlikte, sözde boruhatları sınırsız boyutta iletişim tüneli arabelleğine sahip (disk alanı sınırlamaları dikkate alınmadan) gerçek boruhatları gibi davranırlar. Disk trafiğine neden olmanın ötesinde; eğer SMARTDRV gibi bir sabitdisk önbelleği (önbellek) kurulmazsa ki bu çoklu görev yürütümlü işletim sistemleri için gerekli değildir; bu gerçekleştirim (sözde boruhattı) aynı zamanda boruhatlarını gerçek zamanlı tepkiler gerektiren uygulamalar için; örneğin, etkileşimli amaçlar gibi (kullanıcı, boruhattındaki ilk işlemin stdin aracılığıyla aldığı bir komut dizisi girer ve boruhattındaki son komut dizisi, çıktısını stdout aracılığıyla kullanıcıya sunar), uyumsuz hale getirdi.

Aynı zamanda, yes komutu gibi potansiyel olarak sonsuz miktarda çıktı üreten komutlar, sözde botuhattı içinde kullanılamazlar. Öyle ki, bu komutlar geçici disk alanı tükenen kadar çalışacaklardır, böylece botuhattı içindeki takip eden işlemler çalıştırılamayacaktır.

GUI’ler İçinde Boruhatları

RISC OS ve ROX Desktop gibi grafiksel ortamlar da botuhatları kullanırlar. Kullanıcının, bir programın nereye veri yazacağını belirtmesini sağlayan, dosya yöneticisi içeren bir kayıt diyalog kutusu sunmak yerine; RISC OS ve ROX, bir simge (ve ismi belirtmek için bir alan) içeren kayıt diyalog kutusu sunmaktadırlar. Hedef, simgenin sürüklenip bırakılmasıyla belirlenir. Kullanıcı, diğer programların simgeleri de dahil, kaydedilmiş bir dosyanın bırakılabileceği her yere simgeyi bırakabilir. Eğer simge bir program simgesinin üzerine bırakılırsa, program çalıştırılır ve normalde kaydedilmesi gereken dosya içeriği, yeni programın standart girdisine verilir.

Örnek olarak, internette gezinen bir kullanıcı, düzenleyip yeniden karşıya yüklemek (upload) İsteyeceği, .gz uzantılı, sıkıştırılmış resim dosyası ile karşılacaktır. GUI boruhatlarını kullanarak kullanıcı, bağı (link) arşiv açma programına sürükleyebilir, açılmış içeriği temsil eden simgeyi resim düzenleyicisine sürükleyebilir, farklı kaydet diyalogunu açabilir ve dosya simgesini karşıya yükleme programına sürükleyebilir.

Bu yöntem, geleneksel kayıt diyalog kutusu ile de kullanılabilir; ancak bunun için, kullanıcının programlarının dosya sisteminde açık ve kolay erişilebilir konumlara sahip olmaları gerekmektedir. Uygulamada bunun yerine sıklıkla GUI boruhatları kullanılır.

Diğer konular

  • Bir boruhattı, bilginin, borularda akan su gibi sadece tek yönde akmasına izin verir. Bunun haricinde, genel olarak, su bir boruda iki yönde de akabilir.
  • Boruhatları, işlevsel programlamanın, byte katarlarını veri nesnesi olarak kullanan bir biçimi olarak görülebilir.
  • Boruhattı kavramı, kaynak veri katarının görüntülenmeden önce değiştirilebileceği, Cocoon web geliştirme çatısının (framework) merkezindedir.
  • Boruhattı kavramı, TextPipe gibi veri madenciliği araçlarında da kullanılır.

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

<span class="mw-page-title-main">İşletim sistemi</span> bilgisayar donanım kaynaklarını yöneten yazılım

İşletim sistemi ya da işletim dizgesi, bir bilgisayarın donanım kaynaklarını yöneten ve uygulama yazılımlarına hizmet sağlayan yazılımların bir bütünüdür. İşletim sistemleri, bilgisayarın donanımı ile uygulama yazılımları arasında bir köprü görevi görerek kullanıcıların sistemle etkileşim kurmasını sağlar. Öne çıkan örnekler arasında Microsoft Windows, macOS, GNU/Linux dağıtımları, Android ve iOS yer alır.

<span class="mw-page-title-main">Unix</span>

UNIX türevi işletim sistemleri çok işlemcili çok pahalı makinelerden tek işlemcili, basit ve çok ucuz ev bilgisayarlarına kadar pek çok cihaz üzerinde çalışabilen esnek ve sağlamlığı çok değişik koşullarda test edilmiş sistemlerdir. Fakat özellikle kararlı yapısı ve çok kullanıcılı-çok görevli yapısıyla çok işlemcili sunucularda adeta standart haline gelmiştir ve özellikle akademik dünyada iş istasyonları üzerinde çok yaygın bir kullanım alanı bulmuştur. UNIX, Interdata 7/32, VAX ve Motorola 68000 arasında hızla yayıldı.

<span class="mw-page-title-main">Mikro çekirdek</span>

Bilgisayar biliminde, bir mikro çekirdek, bir işletim sistemini uygulamak için gereken mekanizmaları minimuma yakın sağlayan işletim sistemi çekirdeği türüdür. Ana çekirdek sadece birimler arası iletişim ve süreçleri sıralama işlerini yapar. Bellek yönetimi, kayıt ortamı yönetimi, sürücüler ve ağ ile ilgili çok sayıda sürec birbirleriyle iletişim kurarak haberleşir. Bu sayede; parçalardan oluşan yapı ve tasarımın sadeleştirilmesi, bir parçadaki hatanın diğer parçaları etkilememesi ve çalışma anında işletim sisteminin güncelleştirilebilmesi mümkün olabilmektedir.

<span class="mw-page-title-main">Windows 1.0</span> 1985te piyasaya sürülen ve MS-DOS üzerinde yükselen ilk Windows sürümü

Windows 1.0, Microsoft'un MS-DOS adlı işletim sistemi üzerinde oluşturduğu grafik arayüz (GUI) içeren işletim sistemi ailesi Windows'un ilk sürümüdür.

Berkeley r-komutları, bir Unix sisteminin kullanıcılarının TCP/IP bilgisayar ağı üzerinden başka bir Unix bilgisayarında oturum açmasını veya komutlar vermesini sağlamak için tasarlanmış bir bilgisayar programları paketidir. Berkeley r-komutları, 1982'de Berkeley'deki Kaliforniya Üniversitesi'ndeki Computer Systems Research Group (CSRG) tarafından, TCP/IP'nin erken uygulanmasına dayanarak geliştirildi.

<span class="mw-page-title-main">Make</span>

Make dosyaları bir formdan diğerini çevirme işlemini otomatikleştiren bir araçtır. Bu işlemi, çevrilecek programların ihtiyaç duyacağı diğer programları kontrol ettikten sonra gerekli programları çalıştırarak çevirme işlemini gerçekleştirir. Çevrilen programı çalıştırmak için ihtiyaç duyulan diğer programlara bağımlılıklar denir. Unix/Linux tabanlı işletim sistemlerinde, kaynak kodu nesne koduna derlerken ve nesne kodlarını çalıştırılabilir (executable) ve kütüphane (library) dosyalarına bağlarken (linking) sıklıkla kullanılır. Bağımlılık grafiğini çıkarmak için "Makefile" ismi verilen bir dosya kullanır ve shell'e geçirilmek üzere kullanılan betikleri (script) oluşturur.

Giriş/çıkış, bilgi işlem sistemin değişik fonksiyonel birimleri arasındaki iletişimi veya bu arayüzlere doğrudan bilgi sinyallerini göndermeyi sağlar.

<span class="mw-page-title-main">Apache Ant</span>

Apache Ant, yazılım inşası süreçlerini otomatikleştirmeye yarayan bir araçtır. Make'e benzeyen uygulama, Java ile geliştirilmiş olup Java platformunu gerektirmekte ve Java projelerinde sıkça kullanılmaktadır.

<span class="mw-page-title-main">Disk bölümlendirme</span>

Bölümlere ayırma, bilgisayarda sabit disk üzerinde işletim sistemlerine özgü mantıksal formatlamaya izin veren mantıksal bölümlerin oluşturulması, bilgisayar mühendisliğinde sabit disk sürücüsünün bölümlere ayırılması ile gerçekleştirilir. Diskin bölümlere ayrılması mantıksal hacim yönetiminin önünü açan bir tekniktir.

UUCP, Unix-to-Unix Copy 'nın kısaltmasıdır. Bu kavram, genellikle uzaktan komut çalıştırmaya ve bilgisayarlar arasında dosya, e-posta ve ağ haberleri taşınmasına imkân sağlayan bilgisayar programı ve protokoller paketi olarak adlandırılır.

cat (Unix) komut satırı programı

cat, dosyaları sırasıyla okuyan ve standart çıktıya yazan POSIX standartlı bir Unix komutudur.

Çevre değişkenleri, çevresel değişkenler ya da ortam değişkenleri, işletim sistemi seviyesinde konfigüre edilebilen ve bilgisayar işlemleri tarafından erişilebilen değişkenlerdir. Çoğu kez belli programların ve dosyaların konumlarını ve birden fazla işlem tarafından kullanılabilen bilgi ve ayarları tutmak için kullanılırlar. Çoğunlukla bir karakter dizisi olurlar.

<span class="mw-page-title-main">Mac OS X Public Beta</span>

Mac OS X Public Beta, Apple Computer Mac OS X Cheetah işletim sisteminin Aqua kullanıcı arayüzüne özelliğine ilk halka açık versiyonu oldu. 29,95$'a satılmıştır.13 Eylül 2000 tarihinde kamuoyuna serbest bırakıldı. Bu, yazılım geliştiriciler ve erken benimseyenlere yaklaşan işletim sisteminin bir önizlemesini test etmek ve nihai yayınlanmasından önce gelecek işletim sistemi için yazılım geliştirmeye izin verdi. ABD sürümünün 1H39 bir yapı numarası ve uluslararası sürümün 2E14 yapı numarası vardır.

Ekran okuyucu bir kullanıcı arayüzünü ve bir web tarayıcısı gibi bir uygulamadan veya bir işletim sistemindeki içeriği analiz eden bir yazılım uygulamasıdır. Çıktısını metin konuşma sentezleyici veya yenilenebilir Braille ekranı üzerinden sağlar. Kullanıcı arabiriminin içeriği ve metinsel temsili, bir bilgisayar monitörü olsun veya olmasın standart çıktıya gönderilir. Yorumlar daha sonra metin okuma, ses simgeleri veya bir Braille çıkış cihazı ile kullanıcıya sentezlenir. Ekran okuyucuları görme engelliler, okuryazarlığı olmayan veya öğrenme güçlüğü çeken insanlar için yararlı olduğu kadar; kör olan insanlar için de önemli olan yardımcı bir teknolojinin bir şeklidir.

<span class="mw-page-title-main">XNU</span>

XNU, MacOS işletim sisteminde kullanılmak üzere Aralık 1996'dan beri Apple'da geliştirilen ve Darwin işletim sisteminin bir parçası olarak ücretsiz ve açık kaynaklı yazılım olarak piyasaya sürülen bilgisayar işletim sistemi çekirdeğidir. Ayrıca, iOS, tvOS ve watchOS işletim sistemlerinin çekirdeği olarak da kullanılır. XNU, "X Not Unix"'in bir kısaltmasıdır.

<span class="mw-page-title-main">Metin tabanlı kullanıcı arayüzü</span> bir metin ekranına çıktı vermeye veya onu kontrol etmeye dayalı arabirim türü

Metin tabanlı kullanıcı arayüzü, metinsel kullanıcı arayüzü veya terminal kullanıcı arabirimi olarak da adlandırılır, grafik kullanıcı arayüzlerinin (GUI) icadından bir süre sonra ortaya çıkan ve onu grafik kullanıcı arayüzünden ayırt etmek için türetilen yeni bir terimdir. TUI'de bilgisayar grafikleri metin kipinde görüntülenir. Gelişmiş bir TUI, GUI'ler gibi tüm ekran alanını kullanabilir ve fare ve diğer girişleri kabul edebilir.

Bilişim ve haberleşmede, bit akışı veya ikili değer dizesi, bir bitler dizesidir.

tee (Unix)

tee, standart akışları kullanan komut satırı yorumlayıcılarında (kabuklar) bir komuttur. Standart girdiyi okur ve hem standart çıktıya hem de bir veya daha fazla dosyaya çıktıyı yazar; bu şekilde girdiyi kopyalayarak çoğaltır. Bu komut, genel olarak, boruhatları ve filtreler ile birlikte kullanılır; boruhattında giden bir çıktıyı aynı zamanda bir dosyaya kaydetmek istediğimiz zaman kullanışlıdır.