Bit akışı (bilişim)

Bilişim ve haberleşmede, bit akışı veya ikili değer dizesi, bir bitler dizesidir.
Bayt akışı, bir baytlar dizesidir. Genellikle, her bayt 8 adetlik bitten oluşur ve bu sebeple oktet akışı terimi ile değişimli kullanılabilir. Bir oktet, 8-bit dizesi olarak birkaç çeşitli yöntemle kodlanabilir, bu nedenle bit akışları ve bayt akışları arasında tek ve direkt bir dönüştürme metodu yoktur.
Bit akışları ve bayt akışları telekomünikasyonda ve bilgi işlemde yaygın olarak kullanılmaktadır. Örneğin, senkronize bit akışları SONET (Synchronous optical networking) tarafından taşınırken, asenkronize bayt akışları TCP (Transmission Control Protocol) tarafından taşınır.
Bit akışları ve bayt akışları arasındaki ilişki
Pratikte, bit akışları direkt olarak bayt akışlarını kodlamak için kullanılmaz. Bir iletişim yolu, bitlere direkt olarak dönüştürülmesini desteklemeyen bir sinyal verme biçimi kullanıyor olabilir (örneğin, birden fazla frekansın sinyallerini ileterek) ve genellikle aynı zamanda taşıdığı veriyle birlikte çerçeveleme ve hata bulma/düzeltme gibi diğer bilgileri de kodlar.
Örnekler
Bit akışı terimi konfigürasyon verilerinin FPGA'ya yüklenmesi işlemini tanımlamak için sıkça kullanılır. Çoğu FPGA (Alanda programlanabilir kapı dizisi) bunun yanında bayt-paralel bir veri yükleme metodunu desteklese de bu kullanım, yaygın bir method olan ve seri bir bit akışına dayanan, FPGA'yı genellikle sıralı bir PROM veya flaş bellek çipinden konfigüre etme metodundan ortaya çıkmış olabilir. Belirli bir FPGA için bir bit akışının detaylı formatı genellikle FPGA sağlayıcısına tescillidir.
Unix benzeri ve Windows gibi çoğu işletim sisteminde, standart I/O (giriş/çıkış) kütüphaneleri daha düşük seviyeli, ara belleğe alınmış dosya ulaşımını bir bayt akışı değerler dizisine çevirir. Daha detaylı olarak, Unix benzeri işletim sistemlerinde, her sürecin tek yönlü bayt akışlarının örneği olan üç standart akış bulunmaktadır. Unix taşıma mekanizması farklı süreçler arasındaki bayt akışı iletişimini sağlar.
Bir bayt (erişilebilir en küçük bellek birimi) tarafından sunulan 8-bit kullanımına fazla gelebileceğinden, veri sıkıştırma algoritmaları sık sık bit akışında kodlar. Çoğunlukla düşük seviye programlama dillerinde uygulansa da Python ve Java gibi bazı yüksek seviye programlama dilleri I/O bit akışı için kendi arayüzlerini sunmaktadır.
Akış Kontrolü
Çoğu zaman bir bit akışının içeriği dinamik olarak yaratılır, örneğin bir klavyeden veya diğer elektronik ekipmanlardan alınan veri (/dev/tty) ya da bir yalancı rastgele sayı üretecinden gelen veri (/dev/urandom), vb.
Bu belirtilen durumlarda, eğer bir bayt akışının varış noktası (tüketici) baytları üretilmelerine elverişli olan hızdan daha yüksek bir hızda kullanırsa, sistem varış noktasını bir sonraki bayt kullanılabilir olana kadar işlem senkronizasyonu kullanarak bekletir.
Baytlar varış noktasının kullanabileceği miktardan daha fazla üretilirse, bu durumla baş etmenin birkaç yolu vardır:
Üreticinin bir yazılım algoritması olması durumunda, sistem aynı işlem senkronizasyon tekniğini kullanarak üreticiyi durdurur.
Üreticinin akış kontrolünü desteklemesi durumunda, sistem hazır sinyalini ancak tüketici bir sonraki baytı kullanmaya hazırsa gönderir.
Üreticinin durdurulamadığı durumlarda -akış kontrolünü desteklemeyen bir klavye veya donanım mevcutsa- sistem, genellikle bir kuyruğu kullanarak, tüketici kullanmaya hazır olana kadar veriyi geçici olarak muhafaza etme girişiminde bulunur. Çoğu zaman kullanıcı ara belleği tamamen dolmadan boşaltabilir. Arabellek dolduktan sonra bile veri üretmeye devam eden bir üretici, arabellek aşımı, paket kaybı, ağ tıkanıklığı veya DoS saldırısı gibi istenmeyen sorunlara yol açabilir.