Baytların neden sekiz bit olduğu geçmişi nedir?


86

İşyerindeki tarihsel güçlerin, sekiz bitlik grupları temel birim olarak kullanmaya karar verirken yapacağı eziyet nerede?

Bir zamanlar diğer sözcük boyutlarını kullanan makineler vardı, ama bugün sekiz bitlik olmayanlar için müze parçalarına, gömülü uygulamalar için özel cipslere ve DSP'lere bakmalısınız. Bayt, bilgisayar tasarımının ilk günlerinin karmaşasından ve yaratıcılığından nasıl evrimleşti?

Çok az bitin, bilgisayarları mümkün kılmak için yeterli veriyi işlemek için etkisiz kalacağını, bunun da çok fazlasının pahalı donanımlara yol açacağını hayal edebiliyorum. Oyunda başka etkiler var mıydı? Bu güçler neden sekiz biti dengeledi?

(BTW, eğer zaman yolculuğu yapabilseydim, "bayt" ın 8 bit olduğunu ilan ettiği zamana geri dönüp, herkesi 21. yüzyılın başlarında biblolarla rüşvet vererek 12 bit yapmaya ikna ettim.)


7
Bu eski güzel Wikipedia'dan daha iyi cevaplayamayacağımız sorulardan biri olabilir .
Scott Whitlock

10
Öyleyse neden 12'yi 8'e tercih ediyorsun?
SinirliFormsDesigner'la

8
Son cümle jest mi? O 2'in üssü değil çünkü A 12-bitlik bayt sakıncalı olacağını
Rob

19
Hafıza ve kayıtlar o zamanlar çok ucuz değildi, bu yüzden 8 bit, 6 ya da 9 (36 bitlik bir kelimenin kesirleri) ile karşılaştırıldığında, iyi bir uzlaşmaydı. Ayrıca, adres hesaplamaları, 2'nin gücü ile daha basit bir halettir ve küçük kutulardaki ham transistörlerden mantık yaptığınız zaman sayılır.
Mike Dunlavey,

9
"Erken günlerde" kelimelerin boyutları 2 olan güçleri kullanmak o kadar önemli değildi. DEC-10 36 bitlik bir kelimeye sahipti ve CDC 6000 serisinin 60 bitlik bir kelimesi vardı ve indeks kayıtları 18 bitdi.
Jay Elston

Yanıtlar:


75

5-bit baudot kodlarıyla birçok erken çalışma yapıldı , ancak bunlar hızlı bir şekilde sınırlandı (sadece 32 olası karakter, temelde sadece büyük harfler ve birkaç noktalama işareti, ancak rakamlar için yeterli "boşluk") .

Oradan, birkaç makine 6-bit karaktere gitti. Bu yine de oldukça yetersizdi - büyük ve küçük harf (İngilizce) harfler ve rakamlar istiyorsanız, noktalama işaretleri için yalnızca iki karakter daha bıraktıysanız, çoğu hala bir karakter kümesinde yalnızca bir harf harfine sahipti.

ASCII, 7 bitlik bir karakter seti tanımladı. Bu, uzun süredir birçok kullanım için "yeterince iyi" idi ve en yeni karakter kümelerinin temelini de oluşturdu (ISO 646, ISO 8859, Unicode, ISO 10646, vb.)

İkili bilgisayarlar tasarımcıları iki boyutta güç üretmeye motive eder. "Standart" karakter seti zaten 7 bit gerektirdiğinden, 2 güç elde etmek için bir bit daha eklemek zor değildi (ve o zamana kadar depolama çoğu karakter için "boşa" biraz daha ucuz hale geliyordu. de daha kabul edilebilirdi).

O zamandan beri, karakter kümeleri 16 ve 32 bitlere taşındı, ancak çoğu ana bilgisayar büyük ölçüde orijinal IBM bilgisayarına dayanıyor. Sonra yine, pazarın yeterince 8 bitlik karakterden yeterince memnun kaldığı, PC'nin şu anki baskınlık seviyesine ulaşmasa bile, herkesin her şeyi daha büyük karakterlerle yapabileceğinden emin değilim.

Pazarın biraz değiştiğini de eklemeliyim. Mevcut pazarda, karakter boyutu donanım tarafından yazılımdan daha az tanımlanır. Windows, Java vb. Uzun zaman önce 16 bit karakterlere taşındı.

Şimdi, 16 veya 32 bit karakterleri desteklemedeki engel, yalnızca 16 veya 32 bit karakterlerin kendisinde olan zorluklardan ve çoğunlukla genel olarak i18n'yi desteklemenin zorluklarından kaynaklanmaktadır. ASCII'de (örneğin) bir harfin büyük mü yoksa küçük harf mi olduğunun veya ikisinin arasında dönüştürülmesinin inanılmaz derecede önemsiz olduğunu tespit etmek. Tam Unicode / ISO 10646'da temel olarak tarif edilemez şekilde karmaşıktır (standartların bile denemediği bir noktaya kadar - tabloları değil açıklamaları verir). Sonra bazı diller / karakter kümeleri için, büyük / küçük harf temel fikrinin bile geçerli olmadığını da eklersiniz . Sonra, bazılarında karakterleri göstermenin bile, hala çok daha karmaşık olduğunu ekliyorsunuz.

Bunların hepsi, yazılımın büyük çoğunluğunun bile denemediği kadar karmaşık. Durum yavaş yavaş iyileşiyor, ancak yavaş yavaş operasyonel kelime.


9
8 bitin 7bit ASCII'den geldiğini, artı iletim protokollerinin tasarımcıların istediği kadar kayıpsız olmadığından ihtiyaç duyulan bir onaylama biti okudum sanıyordum.
Martin York

3
@LokiAstari, Evet, buna bir eşlik biti adı verilir ve kaba hata bulma veya kurtarma biçimleri için kullanılabilir. Wikipedia: Parite biti
CVn

2
IBM PC'nin bununla ne yapacağından emin değilim. "Bayt başına 8 bit", 8080 CPU'da başlayan (IBM PC döneminin 8086 / 8'inin bir önceki sürümü) CP / M döneminde (<1980) zaten standart idi
MSalters 17:11

1
@ MSalters: Öncelikle, donanımın evrimini "tartışmasız" (tartışmasız) olduğu için. Hayır, 8 bit / bayt PC'de yeni değildi , ancak o zamana kadar çoğu mimaride birkaç yılda bir yer değiştirildi. PC bunu büyük ölçüde durdurdu ve yeni iken özellikle ilerici olmayan bir mimariyi aldı ve yıllarca korudu .
Jerry Coffin

2
Geçerli karakter kümeleri 16 veya 32 bit değildir, Java ve Windows böyle kullanmaz. Geçerli karakter kümesi, doğrudan haritalandırmak için 21 bit gerektiren Unicode'dur. Mevcut yazılım, 8 (UTF-8), 16 (UTF-16) veya 32 (UTF-32) bit kod birimlerini temel alan kodlamaları kullanır ve gerektiğinde tek bir kod noktası oluşturmak için birden fazla kod birimini birleştirir, ancak bu bit boyutları bir sonuçtur. donanımın karakter kümesi değil.
Sebastian Redl

10

ASCII bilgisi için yedi bit ve hata bulma paritesi için bir tane.


27
ASCII için 7 bit ve her türlü şey için kullanılmış bir ekstra bit
Martin Beckett

1
Erken hafıza ile uğraşırken parite çok önemliydi. 8 bitlik veri baytına taşındıktan sonra bile, eşlik kontrolüne izin vermek için 9 bitlik bellek yongaları vardı.
Jim C

1
Bu ilginç bir iddia. Bu fikri destekleyen herhangi bir geçmiş veri var mı?
David

6

8 bit mimarideki Wikipedia sayfasına bir göz atın . Her ne kadar karakter kümeleri 5-, 6-7, sonra 7-bit olmuş olsa da, temel CPU / bellek veri yolu mimarisi her zaman 2 güç kullandı. Çok önce Mikroişlemcinin (1970'lerin etrafında) 4-bit veri yolu vardı, bu da bir komutun 4 hareket edebileceği anlamına geliyordu. harici bellek ile CPU arasındaki veri bitleri.

Daha sonra 8080 işlemcinin piyasaya sürülmesiyle 8 bit mimarisi popüler oldu ve işte bu günlerde bile kullanılan x86 montaj talimatı setinin başlangıcını verdi. Tahmin etmek zorunda olsaydım, bayt, genel halkın PC'leri kabul etmeye ve oynamaya başladığı ve 8 bitlik tek bir veri biriminin standart büyüklüğü olarak kabul edilen bu ilk işlemcilerden geliyordu.

O zamandan beri otobüs büyüklüğü iki katına çıktı, ancak her zaman 2 güç kalmıştı (yani 16-32- ve şimdi 64-bit). mevcut ana CPU mimarisi 64-bit'tir.

Her zaman iki katına çıkarak (% 50 büyümek yerine) mevcut uygulamalarla ve diğer eski bileşenlerle bir arada bulunan yeni donanımlar yapmanın daha kolay olduğunu varsaymak isterim. Örneğin, 8 bitten 16'ya çıktıklarında, her komut şimdi 1 yerine 2 bayt hareket ettirebildi, bu nedenle kendinize bir saat döngüsü kaydedersiniz, ancak sonuç aynı olur. Bununla birlikte, 8 ila 12 bitlik bir mimariden geçmişseniz, orijinal verileri yarıya bölmeyi ve bunun sinir bozucu olabileceğini yönetmeyi bırakacaksınız. Bunlar sadece tahmin, ben gerçekten bir donanım uzmanı değilim.


5
"Çok ilk işlemci (1970'lerde) ..." . Bilgisayarın tarihçesi hakkında biraz okuma yapmanız gerekiyor !! Von Neumann mimarisi bilgisayar için ilk CPU II. Dünya Savaşı sırasında veya daha önce yapıldı (tarihin hangi versiyonuna inandığınıza bağlı olarak).
Stephen C

19. yüzyılda bilgisayar cihazları vardı ve eminim ki Mısırlılar bir tür hesap makinesi kabı içmişlerdir. Bu bilgi, bağladığım Wikipedia sayfasından geldi. Dediğim gibi, ben bir donanım uzmanı değilim ve kesinlikle bir tarihçi değilim, ama çok uzaklarda olduğumu düşünüyorsanız, bu wikipedia sayfasını güncellemek isteyebilirsiniz.
DXM

Girdiğim bağlantıyı bozmazsam yardımcı olur sanırım. "İlk CPU" derken özür dilerim. Viki sayfasından alıntı yaptığım için "ilk mikroişlemci" demeliydim. Demek istediğim şey o. Bunun için üzgünüm.
DXM

"Elektron öncesi" bir bilgisayar için bir çözüm modern bilgisayar demektir, yoksa elektron bilgisayarı. Bugün bile mekanik bir bilgisayar yapabilirsin. Elektron alanlarını kullanmaya başlayana kadar avantajımız yoktu, bir mikroişlemci yaptık.
Ramhound

PDP serisi tarafından kullanılan 8 bitlik bayt ve 16 bitlik kelime boyutu, 8 bitlik baytların popülaritesinde de bir faktör olabilir.
Jay Elston

4

Bir bayt, baktığınız bilgisayara bağlı olarak, çeşitli (en az) 1, 4, 6, 7, 8, 9, 12, 18, 20 ve muhtemelen 36 bit olmuştur. Herhangi bir metin merkezli yorumlama kullanmak yerine, "bayt" ı burada "en küçük adreslenebilir bellek birimi" anlamına geliyor. (Örneğin, popüler HP48SX / GX hesap makinesi satırında kullanılan 64-bit bir CPU olan Saturn CPU, 4B-bit.

20 bitlik bayt, 50'lerde "IAS makinelerinde" oldukça yaygındı. 6, 12, 18 (ve belki 36) 60'lı, 70'li ve 80'li yıllardaki çeşitli mimarilerde oldukça popülerdi.

Sonunda, "2 güçleri" ve "adreslenebilir bir birimdeki bitler" arasında güzel bir yazışma olması kazanılmış gibi görünüyor.


Ve asla 10 bit değil? Google ile bulabildiğim tek şey bazı yeni video işlemciler 10 bit.
rslnx

@khrf Mümkün, sadece sahip olduğu herhangi bir mimariyi hatırlayamıyorum (çoğunlukla genel amaçlı bilgisayarları düşündüm).
Vatine

Evet, genel amaçlı bilgisayarları da düşünüyorum. Bunun vb Tabii 1 byte, 2 byte ile 1 megabayt, 1 kilobayt ele alabilir bilmek 10-bit-byte ile ne güzel olurdu hayal çünkü garip, öyle :) konfor sadece bir kapris var
rslnx

2

Öncelikle biraz açıklama: Octets (8-bit birimleri) modern bilgisayar mimarisinde gerçekten temel bir birim değildir . En azından iki, 2, 4, 16, 32, 64, 128 vb. Diğer güçlerden daha temel değil. Octets, 8 bit işlemciler için temel ünitedir (dolayısıyla adı!), Ancak modern mimariler tipik olarak daha büyük bit ile çalışır Dahili olarak ayarlar. Örneğin, x86_64 64 bit tamsayı kayıtlara ve 80 bit kayan nokta kayıtlarına sahiptir. RAM, 64 bitlik parçalar halinde okunur ve yazılır ve işlemci, 8 bitlik baytları tek tek adresleyebileceğiniz gibi görünmesi için biraz sihir kullanır.

Daha eski mimariler için, "bayt" veri yolunun boyutunu belirtir ve asıl soruda belirtildiği gibi birçok farklı veri yolu boyutu vardır (4, 5, 6, 8, 12 vb.). Ancak 1993'ten bu yana , veri boyutları için standart bir SI birimine sahip olmak için bir bayt 8 bit olarak tanımlanmıştır . Bu nedenle "bayt" ın anlamı, mimariye bağımlı bir birimden mimariden bağımsız bir standart birime değişmiştir.

Bu yüzden, bu günlerde bayt, verileri ele almak ve ölçmek için standart bir birimdir, ancak başka türlü temel değildir.

Octets birimi, öncelikle metin saklama konusundaki endişelerinden dolayı depolama için fiili standart haline geldi. Metni saklamak için ideal olarak bir baytın bir karakter saklamasını istersiniz. İki faktör önemliydi:

  • Dijital sistemler tasarlanırken iki (2, 4, 8, 16, 32 vb.) Güçlere sahip ünitelere sahip olmak daha uygundur.
  • ASCII karakter kümesinde tek bir karakter depolamak için 8 bit yeterlidir (karakter kümesini Kiril alfabesini desteklemek için genişletmek için boş alan).

Elbette 8 bit, tüm komut dosyalarını desteklemek için yeterli değildir - Japonca gibi bir şey en az 16 bit gerektirir (ve buna değer, Unicode 21 bittir), ancak bu noktada bitler pahalıydı ve çoğu dijital metin Yine de ASCII aralığı.

Bu günlerde, metin genellikle UTF-8 gibi değişken genişlikli kodlamalarda depolanır ve Unicode birleştirme karakterleri gibi şeylerle, "bir bayt bir karaktere eşittir" uzun zamandan beri geçmişte kalmıştır. Bugün bayt gerçekten sadece tarihsel nedenlerden dolayı standarttır.


1

Bilgilerime göre, bayt kelimesi, sekiz (8) bit kelimeden oluşan sekizlik ifadesinden türetilmiştir. 8 bitlik kelimelerle bulduğumuz kolaylık, onaltılık değerlere dönüşümdür; çünkü 00000000 = 00 & 11111111 = FF (imzasızlar için Aralık 255 ve imzalılar için -127), bit-bilge dahil olmak üzere bu tür bir yapıdaki tüm aritmetik işlemleri yapmak kolaydır. operasyonlar.

Baytları (8 bit kelime) felaketen küçük 3 bit'den saçma sapan büyük 60 bit kelimeye kadar kelime boyutlarının doğal bir evrimi olarak görüyorum.


Bunun için bir referans görmek istiyorum. Bundan cidden şüpheliyim. Özellikle, C Standardında kullanıldığı ve C ++ standardına dahil edildiği şekliyle "byte", "8 bit" anlamına gelmez. 8 bitlik bir sayı sekizlidir.
gnasher729

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.