Bu derleme programlama dersinde 8 bitin veri için kullanıldığını, 1 bitlik parite için olduğunu, sonra da parite hatasını (donanım arızası veya elektriksel bozulma nedeniyle) tespit etmek için kullanıldığını okudum .
Bu doğru mu?
Bu derleme programlama dersinde 8 bitin veri için kullanıldığını, 1 bitlik parite için olduğunu, sonra da parite hatasını (donanım arızası veya elektriksel bozulma nedeniyle) tespit etmek için kullanıldığını okudum .
Bu doğru mu?
Yanıtlar:
Bir veri baytı sekiz bittir, işletim sisteminde veya hatta donanım düzeyinde hata kontrolü için kullanılan veri bayt başına daha fazla bit olabilir (eşlik biti veya daha gelişmiş bir hata tespit şeması), ancak veri sekizdir bit ve herhangi bir eşlik biti genellikle yazılım tarafından görünmez. Bir bayt, 'sekiz bit veri' anlamına gelmek üzere standardize edilmiştir. Metin, sekiz bit veriden daha büyük bir veri baytını depolamak için daha fazla bit olabileceğini söylerken yanlış değildir, ancak genellikle baytın bir parçası olarak kabul edilmeyenler, metnin kendisidir.
Bunu, öğreticinin aşağıdaki bölümünde görebilirsiniz:
Doubleword: a 4-byte (32 bit) data item
4 * 8 = 32, aslında sistemde 36 bit alabilir ancak amaçlarınız ve amaçlarınız için sadece 32 bit.
char
, C'nin (linkin ne hakkında olduğunu) tam olarak adreslenebilen en küçük bellek birimi olduğuna dikkat edin. Buna sadece char denir , fakat C Standard byte ile eşanlamlı yapar .
Geleneksel olarak, bir bayt herhangi bir boyutta olabilir ve yalnızca adreslenebilir en küçük bellek birimidir. Bugünlerde 8 bit bayt, yazılım için oldukça standart hale getirildi. JustAnotherSoul'un dediği gibi, donanım 8 bit veriden daha fazla bit depolayabilir.
FPGA'lar gibi programlanabilir mantık aygıtları üzerinde çalışıyorsanız, dahili belleğinin genellikle 9 bit parça olarak ve HDL yazarı olarak adreslenebilir olduğunu görebilirsiniz, bu 9. bit'i hata kontrolü için veya sadece daha büyük miktarları saklamak için kullanabilirsiniz "bayt" başına veri sayısı. Özel donanım için bellek yongaları satın alırken, genellikle 8 veya 9 bit adreslenebilir birim (veya 16/18, 32/36, vb.) Seçeneğiniz vardır ve ardından 9 bit "bayt" olup olmadığına bağlıdır. eğer seçmeyi tercih edersen, o 9. bit ile yaparsın.
Bu metin son derece kötü ifade edilir. Neredeyse kesinlikle ECC (hata düzeltme kodu) RAM hakkında konuşuyor .
ECC ram yaygın olarak 9 bit kullanarak 8 bitlik bilgi depolar. Ekstra bayt biti, hata düzeltme kodlarını saklamak için kullanılır.
(Her iki durumda da, her bayt her çipin üzerine yayılmıştır. Puget Systems izniyle )
Tüm bunlar donanım kullanıcıları tarafından tamamen görünmez. Her iki durumda da, bu RAM'ı kullanan yazılım bayt başına 8 bit görür.
Bir kenara olarak: RAM'deki hata düzeltme kodları genellikle bayt başına 1 bit değildir; bunun yerine 8 bayt başına 8 bit. Bu ek yükü aynı alana sahiptir, ancak bazı ek avantajları vardır. Daha fazla bilgi için SECDED'e bakınız .
Genel olarak konuşursak, kısa cevap bir bayt 8 bittiğidir. Bu, meseleyi basitleştiriyor (bazen yanlışlık noktasına bile), ancak çoğu insanın (çok sayıda programcı dahil) aşina olduğu ve neredeyse herkesin varsayılan olduğu (ne kadar farklı boyutlu baytlar olduğuna bakılmaksızın) tanımı çalışmak zorunda kaldım).
Daha spesifik olarak, bir bayt, verilen mimari için en küçük adreslenebilir hafıza birimidir ve genellikle tek bir metin karakterini tutacak kadar büyüktür. Çoğu modern mimaride, bir bayt 8 bit olarak tanımlanır; ISO / IEC 80000-13 aynı zamanda popüler bir fikir birliğinde olduğu gibi bir baytın 8 bit olduğunu da belirtir (yani eğer 9-bit bayttan bahsediyorsanız, açıkça belirtmediğiniz sürece çok fazla sorun yaşayacağınız anlamına gelir) normal bayt demek istemediğinizi belirtin).
Ancak, bu kuralın istisnaları vardır. Örneğin:
sizeof(char)
, dolaylı olarak a'nın char
en az 8 bit olması gerektiğini, her baytın benzersiz bir adrese sahip olması gerektiğini ve bitişik baytlar arasında boşluk olmaması gerektiğini belirtir. bellekte. Bu, dilleri açıkça 8 bit bayt gerektirdiklerinde olduğundan daha taşınabilir hale getirmektir. [Bir bayttaki bit sayısı, CHAR_BIT
C kitaplığı başlığında "sınırlar" olarak belirtilmiştir ( limits.h
C, climits
C ++ ile).]
Bu nedenle, çoğu durumda, bir bayt genellikle 8 bit olacaktır. Değilse, muhtemelen 9 bittir ve 36 bitlik bir kelimenin parçası olabilir veya olmayabilir.
Bayt teriminin bağlamsız iyi tanımlanmadığını unutmayın. Bilgisayar mimarileri söz konusu olduğunda, en azından modern mimariler için bir baytın 8 bit olduğunu varsayabilirsiniz. Bu büyük ölçüde, bayt başına en az 8 bit olması gereken ancak daha büyük baytlar için herhangi bir garanti sağlamayan, bayt başına 8 bit yapan tek güvenli varsayım olan C gibi programlama dilleri ile standartlaştırılmıştır .
Adreslenebilir birimleri 8 bitten (genellikle 16 veya 32) büyük olan bilgisayarlar var, ancak bu birimlere genellikle makine baytları denir, bunlar makine kelimeleridir. Örneğin, 32K 32 bit RAM kelimeleri olan bir DSP'nin 32 KB değil 128 KB veya RAM olduğu ilan edilir.
İletişim standartları söz konusu olduğunda işler çok iyi tanımlanmamıştır. ASCII hala yaygın olarak kullanılmaktadır ve 7 bit bayta sahiptir (bilgisayarlarda 8 bit bayta güzel bir şekilde uyar). UART alıcı-vericileri hala yapılandırılabilir bayt boyutuna sahip olarak üretilir (genellikle bayt başına en az 6, 7 ve 8 bit seçersiniz, ancak 5 ve 9 duyulmaz).
Bir bayt genellikle, ayrı ayrı adreslenebilir bellek alanı birimi olarak tanımlanır. Herhangi bir boyutta olabilir. 6 ile 9 bit arasında, belki daha da büyük olan bayt boyutlarında mimariler var. Adreslenebilir tek birimin veriyolunun büyüklüğü olduğu mimariler de vardır, bu tür mimarilerde ya sadece bayt olmadıklarını söyleyebiliriz ya da bayt kelimesiyle aynı büyüklüktedir (bildiğim bir durumda 32 bit olmak); Her iki durumda da, kesinlikle 8 bit değil. Aynı şekilde, bit adreslenebilir mimariler de vardır, bu mimariler üzerinde, yine de baytların var olmadığını ya da baytların 1 bit olduğunu iddia edebiliriz; Her iki yol da mantıklı bir tanım, ancak 8 bit kesinlikle yanlıştır.
Birçok genel amaçlı genel mimaride, bir bayt 8 bit içerir. Ancak, bu garanti edilmez. Ana akımdan ve / veya genel amaçlı CPU'lardan ne kadar uzakta olursanız, 8 bitlik baytlarla karşılaşmama ihtimaliniz o kadar yüksektir. Bu kadar ileri gider ki, bazı taşınabilir yazılımlar bile boyutu yapılandırılabilir hale getiriyor. Örneğin, GCC'nin eski sürümleri, BITS_PER_BYTE
belirli bir mimari için bir baytın boyutunu ayarlayan bir makro (veya buna benzer bir şey) içeriyordu. NetBSD'nin bazı eski sürümlerinin bayt başına 8 bit olmayan mimarilerde çalıştırılabileceğine inanıyorum.
Gerçekten, adreslenebilir en küçük bellek miktarından ziyade tam olarak 8 bit hakkında konuştuğunuzu vurgulamak istiyorsanız, bu kadar büyük olsa da, örneğin birçok yeni RfC'de kullanılan octet terimini kullanabilirsiniz .
CHAR_BIT
(içinde bulunur limits.h
), bilmiyorumBITS_PER_BYTE
1960’da programlamaya başladığımda, 6 bit bayt ile 48 bit kelimemiz vardı - onlar bu ismi aramamışlar, karakter olarak adlandırılıyorlardı. Sonra Golem bilgisayarında 75 bit kelime ve 15 bit bayt ile çalıştım. Daha sonra, IBM 360 ile çıkana kadar 6 bit bayt normdu ve günümüzde bir bayt genellikle bir sekizli, yani 8 bit veriye eşdeğerdir. Bazı donanımlarda hata tespiti ve muhtemelen hata düzeltmesi için ek bitler vardı, ancak bu yazılım tarafından erişilebilir değildi.
Bir bayt 8 bittir.
Uzak geçmişte, bir bellek kelimesi ve bir baytın farklı tanımları vardı. Bu belirsizliğin günümüz hayatında yaygın veya yaygın olduğu önerisi yanlıştır.
En azından 1970'lerin sonlarından bu yana bir bayt 8 bit olmuştur. Ev bilgisayarlarının ve PC'lerin kitlesel popülasyonu, tüm veri sayfalarını ve disket sürücüleri, sabit disk sürücüleri ve PROM / EPROM / EEPROM / Flash EPROM ile ilgili tüm dokümanları olduğu gibi, belgelerinde 8-bitlik bir değer olarak açıkça kullanmıştır. / SRAM / SDRAM bellek yongaları o dönemde okudum. (Ve o zaman zarfında kişisel olarak çok şey okudum.) Ethernet ve birkaç diğer iletişim protokolü oktetlerden bahsetme konusunda olağandışı olarak göze çarpıyor.
Bayt teriminin belirsizliği, nadir ve belirsiz bir şeydir. Son 30 yıl veya daha fazla programcı, tasarım mühendisleri, test mühendisleri, satış görevlileri, servis mühendisleri veya ortalama bahisçilerin sayısının çok az olması, kelimeyi hiç tanımadıkları takdirde 8 bitlik bir değerden başka bir anlama geleceğini düşünür .
Bir bayt, bellek yongalarında depolandığı veya kablo ile iletildiği gibi donanım tarafından işlendiğinde, donanım bayta yedek veriler ekleyebilir. Bu daha sonra, güvenilir olmayan verilerin tanınması ve atılabilmesi için donanım hatalarının tespit edilmesine yardımcı olabilir (örneğin parite, sağlama toplamı, CRC). Veya verilerdeki hataların düzeltilmesine ve verilerin kurtarılmasına izin verebilir (örn. ECC). Her iki şekilde de, gereksiz veriler bayt alındığında veya daha ileri işlemler için alındığında atılır. Bayt, merkezi 8 bitlik değer olarak kalır ve yedek veri, yedek veri olarak kalır.
İlk olarak, referansta bulunduğunuz eğitim oldukça modası geçmiş gibi görünüyor ve belirtmeden x86 işlemcilerin modası geçmiş sürümlerine yönelik görünüyor, bu nedenle okuduğunuz birçok şey başkaları tarafından anlaşılmayacak (örneğin, iddia ediyorsanız) Bir WORD 2 bayttır, insanlar ya ne hakkında konuştuğunuzu bilmeyecekler ya da çok eski olmayan x86 işlemciler temelinde size öğretildiğini ve ne bekleyeceğini bileceklerdir).
Bir bayt, birisinin olması gerektiğine karar verdiği bit sayısıdır. 8 bit ya da 9 bit ya da 16 bit olabilir. 2016 yılında, çoğu durumda bir bayt sekiz bit olacaktır. Güvende olmak için octet terimini kullanabilirsiniz - bir octet her zaman, her zaman sekiz bittir.
Buradaki gerçek karışıklık iki soruyu karıştırıyor: 1. Bir bayttaki bit sayısı nedir? 2. Bir byte'ı bir yerden başka bir yere aktarmak istersem veya bir byte saklamak isteseydim, pratik fiziksel araçları kullanarak bunu nasıl yapardım? Modemler, sabit diskler veya SSD sürücüleri yapan bir şirkette çalışmadığınız sürece, ikinci soru genellikle sizi ilgilendirmez. Uygulamada ilk soruya ilgi duyuyorsunuz ve ikincisi için sadece "birileri daha sonra bakar" diyorsunuz.
Bahsedilen eşlik biti, bir bayt bellekte depolandığında ve bayt okunduğunda hafızanın bir kaza sonucu değiştiğini tespit etmeye yardımcı olan ilkel bir mekanizmadır. Bu o kadar da iyi değil, çünkü iki bitin değiştirildiğini bulamayacak, bu yüzden bir değişimin tespit edilemeyeceği muhtemel ve problemden kurtulamıyor çünkü 8 bitin hangisinin değiştiğini bulmanın bir yolu yok , veya eşlik biti değişmiş olsa bile.
Parite bitleri pratikte bu ilkel biçimde kullanılmaz. Kalıcı olarak depolanan veriler genellikle daha karmaşık şekillerde korunur, örneğin 1024 baytlık bir bloğa 32 bit veya daha uzun sağlama toplamı ekleyerek - çok daha az ek alan kaplar (bu örnekte% 12,5 yerine% 0,4) ve çok daha fazla olur bir şeyin yanlış olduğunu öğrenmeme olasılığı düşüktür.
WORD
, ki bu ... ... amacınızı ispatlıyor, çünkü WinAPI tipi isimlerinin çoğu eski ve geriye dönük uyumluluk için saklanıyor. xP
Modern kullanımda, bir bayt 8 bit, periyot (tarihsel olarak başka tanımları olmasına rağmen). Öte yandan, bir veri kelimesi, söz konusu donanımın atomik bir birim olarak ele aldığı şey ne olursa olsun - 8 bit, 9 bit, 10 bit, 12 bit, 16 bit, 20 bit, 24 bit, 32 bit, vb. Olabilir. Çeşitli bilgisayar Yıllar geçtikçe sistemler her çeşit farklı kelime boyutuna sahipti.
Bir bellek sistemi veya iletim protokolü uygulamak için, ek bitleri içeren hata tespit / düzeltme eklemek yararlıdır. 9 bitlik bir bayt yapmazlar, çünkü yukarıda belirtildiği gibi bir bayt 8 bittir.
Çeşitli şemalar, çeşitli şekillerde hata algılama ve / veya düzeltme ekler.
Tipik eşlik kullanımı, alıcının tek bir hata biti algılayabilmesi için iletim kelimesine fazladan bir bit eklemektir.
Tek bit hata düzeltmesi sağlayabilen bir şema, 32 bit veri kelimesi başına 4 ECC bitinin eklenmesini içerir. Bu sadece bayt başına 1 bit'e aritmetik olarak eşdeğer olur, ancak bu şekilde çalışamaz / çalışmaz. 36 bitlik bir veri sözcüğü, 32 bitlik bir veri alanı için tek bir hatadan kurtulmak için yeterli bilgiyi taşıyabilir.
8 bit. CPU ve klavyenin içinde, 9 ve 11 bit. Kullanıcı verileri olsa da 8 bit ile temsil edilir. Klavyedeki tuşlar 11 bit'e ayrılmış şarkıları gönderir. 1 başlangıç biti, 1 biten biti, 1 parite biti ve bir tuşa basılmasıyla 8 bite basıldı.