ประวัติของเหตุใดไบต์ถึงแปดบิต?


86

สิ่งที่กองกำลังทางประวัติศาสตร์ในการทำงานการแลกเปลี่ยนที่จะทำในการตัดสินใจที่จะใช้กลุ่มแปดบิตเป็นหน่วยพื้นฐาน?

มีเครื่องใช้ครั้งหนึ่งเคยใช้คำขนาดอื่น แต่วันนี้สำหรับผู้ที่ไม่ใช่แปดคนคุณต้องมองไปที่ชิ้นส่วนพิพิธภัณฑ์ชิปพิเศษสำหรับการใช้งานแบบฝังและ DSP ไบต์วิวัฒนาการมาจากความวุ่นวายและความคิดสร้างสรรค์ในยุคแรก ๆ ของการออกแบบคอมพิวเตอร์อย่างไร

ฉันสามารถจินตนาการได้ว่าบิตที่น้อยลงจะไม่มีประสิทธิภาพในการจัดการข้อมูลเพียงพอที่จะทำให้การคำนวณเป็นไปได้ในขณะที่หลาย ๆ คนอาจทำให้ฮาร์ดแวร์มีราคาแพง มีอิทธิพลอื่น ๆ ในการเล่นหรือไม่? เหตุใดแรงเหล่านี้จึงสมดุลกันถึงแปดบิต

(BTW ถ้าฉันสามารถเดินทางข้ามเวลาได้ฉันจะกลับไปเมื่อ "ไบต์" ถูกประกาศให้เป็น 8 บิตและโน้มน้าวให้ทุกคนทำให้มันเป็น 12 บิตติดสินบนพวกเขาด้วยเครื่องประดับเล็ก ๆ แห่งศตวรรษที่ 21)


7
นี้อาจจะเป็นหนึ่งในคำถามเหล่านั้นที่เราไม่สามารถตอบได้ดีกว่าเก่าดีวิกิพีเดีย
Scott Whitlock

10
ทำไมคุณถึงชอบ 12 บิตถึง 8?
FrustratedWithFormsDesigner

8
ประโยคสุดท้ายเป็นเรื่องตลกหรือเปล่า? ไบต์แบบ 12 บิตจะไม่สะดวกเพราะมันไม่ใช่พลังของ 2
Rob

19
หน่วยความจำและการลงทะเบียนไม่ได้ราคาถูกมากดังนั้น 8 บิตจึงเป็นการประนีประนอมที่ดีเมื่อเทียบกับ 6 หรือ 9 (เศษส่วนของคำ 36 บิต) นอกจากนี้การคำนวณที่อยู่ยังเป็นเรื่องง่ายกว่ามากด้วยพลังของ 2 และนั่นจะนับเมื่อคุณสร้างตรรกะจากทรานซิสเตอร์ดิบในกระป๋องเล็ก ๆ
Mike Dunlavey

9
การใช้ขนาดคำที่มีพลังของ 2 ไม่สำคัญใน "วันแรก ๆ " DEC-10 มีคำศัพท์ 36 บิตและซีรีย์ CDC 6000 มีคำ 60 บิตและรีจิสเตอร์ดัชนีที่มี 18 บิต
Jay Elston

คำตอบ:


75

งานแรก ๆ จำนวนมากทำด้วยรหัส baudot 5 บิต แต่สิ่งเหล่านั้นก็ค่อนข้าง จำกัด (มีเพียง 32 ตัวอักษรที่เป็นไปได้ดังนั้นโดยทั่วไปจะเป็นเพียงตัวพิมพ์ใหญ่และเครื่องหมายวรรคตอนไม่กี่ตัวแต่ไม่เพียงพอสำหรับตัวเลข) .

จากนั้นมีเครื่องจักรไม่กี่ตัวที่ไปอักขระ 6 บิต นี่ยังค่อนข้างไม่พอเพียง - ถ้าคุณต้องการตัวอักษรและตัวเลข (อังกฤษ) ตัวพิมพ์เล็กและใหญ่ที่เหลือเพียงสองตัวอักษรเพิ่มเติมสำหรับเครื่องหมายวรรคตอนดังนั้นส่วนใหญ่ยังคงมีเพียงหนึ่งตัวอักษรในชุดอักขระ

ASCII กำหนดชุดอักขระ 7 บิต นั่นคือ "ดีพอ" สำหรับการใช้งานเป็นเวลานานและได้สร้างพื้นฐานของชุดอักขระที่ใหม่ที่สุดเช่น ISO 646, ISO 8859, Unicode, ISO 10646 เป็นต้น

คอมพิวเตอร์แบบไบนารี่กระตุ้นให้นักออกแบบสร้างพลังได้สองขนาด เนื่องจากชุดอักขระ "มาตรฐาน" จำเป็นต้องใช้ 7 บิตอยู่แล้วมันจึงไม่เป็นการยืดเลยที่จะเพิ่มหนึ่งบิตอีกเล็กน้อยเพื่อให้ได้พลังงาน 2 (และจากนั้นพื้นที่เก็บข้อมูลก็ถูกกว่ามากพอที่ "สิ้นเปลือง" เล็กน้อยสำหรับตัวละครส่วนใหญ่ เป็นที่ยอมรับมากขึ้นเช่นกัน)

ตั้งแต่นั้นมาชุดอักขระได้ย้ายไปที่ 16 และ 32 บิตแต่คอมพิวเตอร์กระแสหลักส่วนใหญ่ขึ้นอยู่กับพีซี IBM ดั้งเดิม จากนั้นอีกครั้งตลาดพอพอใจกับตัวละคร 8-bit อย่างเพียงพอแม้ว่าพีซีไม่ได้มาถึงระดับที่เป็นปัจจุบันฉันไม่แน่ใจว่าทุกคนจะทำทุกอย่างด้วยตัวละครที่ใหญ่กว่าอยู่ดี

ฉันควรจะเพิ่มว่าตลาดมีการเปลี่ยนแปลงเล็กน้อย ในตลาดปัจจุบันขนาดตัวอักษรจะถูกกำหนดโดยฮาร์ดแวร์น้อยกว่าซอฟต์แวร์ Windows, Java และอื่น ๆ ย้ายไปที่อักขระ 16 บิตนานแล้ว

ตอนนี้อุปสรรคในการรองรับอักขระ 16- หรือ 32- บิตเป็นเพียงเล็กน้อยจากความยากลำบากที่มีอยู่ในตัวอักษร 16- หรือ 32- บิตตัวเองและส่วนใหญ่มาจากความยากลำบากในการรองรับ i18n โดยทั่วไป ใน ASCII (ตัวอย่าง) การตรวจสอบว่าตัวอักษรเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กหรือแปลงระหว่างสองตัวนั้นเป็นเรื่องเล็กน้อยอย่างไม่น่าเชื่อ ใน Unicode / ISO 10646 เต็มรูปแบบมันมีความซับซ้อนอย่างคลุมเครือ (จนถึงจุดที่มาตรฐานไม่ได้ลอง - พวกเขาให้ตารางไม่ใช่คำอธิบาย) จากนั้นคุณเพิ่มในความจริงที่ว่าสำหรับบางภาษา / ชุดอักขระแม้แต่แนวคิดพื้นฐานของตัวพิมพ์ใหญ่ / ตัวพิมพ์เล็กก็ไม่สามารถใช้ได้ จากนั้นคุณเพิ่มในความจริงที่ว่าแม้การแสดงตัวละครในบางตัวนั้นยังคงซับซ้อนกว่ามาก

นั่นคือทั้งหมดที่ซับซ้อนพอที่ซอฟต์แวร์ส่วนใหญ่ไม่ได้ลอง สถานการณ์กำลังดีขึ้นอย่างช้า ๆแต่ช้า ๆก็คือคำผ่าตัด


9
ฉันคิดว่าฉันอ่านที่ไหนสักแห่ง 8 มาจาก 7 บิต ASCII บวกบิตการตรวจสอบที่จำเป็นเพราะโปรโตคอลการส่งเกือบจะไม่สูญเสียน้อยกว่าที่นักออกแบบต้องการ :-)
Martin York

3
@ LokiAstari ใช่มันเรียกว่าบิตพาริตี้และสามารถใช้สำหรับการตรวจหาข้อผิดพลาดหรือการกู้คืนแบบหยาบ Wikipedia: Parity bit
CVn

2
ไม่แน่ใจว่าพีซี IBM ทำอะไรกับสิ่งนี้ "8 บิตต่อไบต์" เป็นมาตรฐานในยุค CP / M (<1980) ซึ่งเริ่มต้นบน 8080 CPU (ผู้บุกเบิก 8086/8 ของยุคพีซี IBM)
MSalters

1
@MSalters: ในขั้นต้นว่ามันมี (เนื้อหา) "แสดงความสามารถ" วิวัฒนาการของฮาร์ดแวร์ ไม่ 8-bits / byte ไม่ใช่สิ่งใหม่สำหรับพีซีแต่จนถึงตอนนี้สถาปัตยกรรมส่วนใหญ่จะถูกแทนที่ทุกสองสามปี พีซีได้หยุดส่วนใหญ่นั้นและนำสถาปัตยกรรมที่ไม่ได้แม้กระทั่งความก้าวหน้าโดยเฉพาะอย่างยิ่งเมื่อมันใหม่และเก็บไว้สำหรับทศวรรษที่ผ่านมา
Jerry Coffin

2
ชุดอักขระปัจจุบันไม่ได้เป็น 16 หรือ 32 บิตและ Java และ Windows ไม่สามารถใช้งานได้ ชุดอักขระปัจจุบันคือ Unicode ซึ่งต้องการ 21 บิตในการแม็พโดยตรง ซอฟต์แวร์ปัจจุบันใช้การเข้ารหัสตาม 8 (UTF-8), 16 (UTF-16) หรือ 32 (UTF-32) หน่วยรหัสบิตรวมหน่วยรหัสหลายหน่วยในรูปแบบรหัสจุดเดียวที่จำเป็น แต่ขนาดบิตเหล่านั้นเป็นผลมา ของฮาร์ดแวร์ไม่ใช่ของชุดอักขระ
เซบาสเตียนเรดล

10

เจ็ดบิตสำหรับข้อมูล ASCII และอีกหนึ่งสำหรับพาริตี้ตรวจจับข้อผิดพลาด


27
7 บิตสำหรับ ASCII และหนึ่งบิตพิเศษที่ใช้สำหรับทุกสิ่ง
มาร์ตินเบ็คเก็ตต์

1
ความเท่าเทียมกันมีความสำคัญมากเมื่อต้องรับมือกับความจำเริ่มแรก แม้หลังจากย้ายไปที่ 8 บิตข้อมูลไบต์มีชิปหน่วยความจำที่มี 9 บิตเพื่อให้สามารถตรวจสอบความเท่าเทียมกัน
Jim C

1
นี่คือการยืนยันที่น่าสนใจ มีข้อมูลประวัติเพื่อสนับสนุนแนวคิดนี้หรือไม่?
david

6

ลองดูที่หน้าวิกิพีเดียเกี่ยวกับสถาปัตยกรรมแบบ 8 บิต แม้ว่าชุดอักขระอาจมี 5-, 6- แล้ว 7 บิตสถาปัตยกรรม CPU / หน่วยความจำพื้นฐานที่ใช้พลังของ 2 เสมอไมโครโปรเซสเซอร์แรกมาก (ประมาณปี 1970) มีบัส 4 บิตซึ่งหมายความว่าคำสั่งหนึ่งสามารถย้าย 4- บิตของข้อมูลระหว่างหน่วยความจำภายนอกและ CPU

จากนั้นด้วยการเปิดตัวโปรเซสเซอร์ 8080 สถาปัตยกรรม 8 บิตก็ได้รับความนิยมและนั่นคือจุดเริ่มต้นของชุดคำสั่งการประกอบ x86 ซึ่งใช้กันในทุกวันนี้ ถ้าฉันต้องเดาไบต์มาจากโปรเซสเซอร์รุ่นแรก ๆ ที่ประชาชนทั่วไปเริ่มยอมรับและเล่นกับพีซีและ 8 บิตถือว่าเป็นขนาดมาตรฐานของข้อมูลหน่วยเดียว

ตั้งแต่ขนาดรถบัสเพิ่มขึ้นเป็นสองเท่า แต่มันก็ยังคงเป็นขุมพลังของ 2 (เช่น 16-, 32- และตอนนี้ 64 บิต) ที่จริงฉันแน่ใจว่าภายในของรถบัสวันนี้มีความซับซ้อนมากกว่าเพียงแค่ 64 สายขนาน แต่ สถาปัตยกรรม CPU หลักปัจจุบันคือ 64- บิต

ฉันจะสมมติว่าเพิ่มเป็นสองเท่าเสมอ (แทนที่จะเพิ่มขึ้น 50%) มันง่ายกว่าที่จะสร้างฮาร์ดแวร์ใหม่ที่อยู่ร่วมกับแอปพลิเคชันที่มีอยู่และส่วนประกอบดั้งเดิมอื่น ๆ ตัวอย่างเช่นเมื่อพวกเขาไปจาก 8-bits ถึง 16 ตอนนี้แต่ละคำสั่งสามารถย้าย 2 ไบต์แทน 1 ดังนั้นคุณจึงบันทึกวงจรนาฬิกาหนึ่งรอบได้เอง แต่ผลลัพธ์สุดท้ายก็เหมือนกัน อย่างไรก็ตามหากคุณไปจากสถาปัตยกรรม 8 ถึง 12 บิตคุณจะต้องแบ่งข้อมูลต้นฉบับออกเป็นครึ่งและจัดการที่อาจทำให้เกิดความรำคาญ นี่เป็นเพียงการคาดเดาฉันไม่ใช่ผู้เชี่ยวชาญด้านฮาร์ดแวร์


5
"CPU แรกมาก (ประมาณปี 1970) ..." คุณต้องอ่านประวัติความเป็นมาของการคำนวณ !! ซีพียูตัวแรกสำหรับคอมพิวเตอร์สถาปัตยกรรม von Neumann ถูกสร้างขึ้นในช่วงสงครามโลกครั้งที่สอง ... หรือก่อนหน้า (ขึ้นอยู่กับเวอร์ชั่นของประวัติศาสตร์ที่คุณเชื่อ)
สตีเฟนซี

และมีอุปกรณ์คอมพิวเตอร์ในศตวรรษที่ 19 และฉันแน่ใจว่าชาวอียิปต์มีหม้อคิดเลขบางประเภท ข้อมูลนั้นมาจากหน้า Wikipedia ที่ฉันเชื่อมโยง อย่างที่ฉันบอกว่าฉันไม่ใช่ผู้เชี่ยวชาญด้านฮาร์ดแวร์และแน่นอนว่าฉันไม่ใช่นักประวัติศาสตร์ แต่ถ้าคุณรู้สึกว่าฉันยังห่างไกลคุณอาจต้องไปอัปเดตหน้าวิกิพีเดีย
DXM

ฉันเดาว่ามันจะช่วยได้ถ้าฉันไม่ได้พลาดการเชื่อมโยงในขณะที่ฉันเข้ามาฉันขอโทษที่พูดว่า "ซีพียูตัวแรก" ตั้งแต่ฉันอ้างอิงหน้าวิกิฉันควรจะพูดว่า "ไมโครโปรเซสเซอร์ตัวแรก" นั่นคือสิ่งที่ฉันหมายถึง. ขอโทษสำหรับเรื่องนั้น.
DXM

วิธีแก้ปัญหาของคอมพิวเตอร์ "อิเล็กตรอนก่อน" คือการพูดคอมพิวเตอร์สมัยใหม่หรือฉันคิดว่าคอมพิวเตอร์อิเล็กตรอน แม้วันนี้คุณสามารถสร้างคอมพิวเตอร์เชิงกลได้ มันไม่ได้จนกว่าเราจะเริ่มใช้สนามอิเล็กตรอนเพื่อประโยชน์ของเราเราไม่ได้สร้างไมโครโปรเซสเซอร์
Ramhound

8-bit ไบต์และ 16- บิตขนาดคำที่ใช้โดยชุด PDP อาจเล่นเป็นปัจจัยในความนิยมของไบต์ 8 บิต
Jay Elston

4

ไบต์มีความหลากหลาย (อย่างน้อย) 1, 4, 6, 7, 8, 9, 12, 18, 20 และอาจเป็น 36 บิตขึ้นอยู่กับคอมพิวเตอร์ที่คุณกำลังดู ฉันกำลังใช้ "ไบต์" ที่นี่เพื่อหมายถึง "หน่วยความจำที่อยู่ได้น้อยที่สุด" แทนที่จะใช้การตีความข้อความเป็นศูนย์กลาง (ตัวอย่างเช่น Saturn CPU ซึ่งเป็น CPU 64 บิตที่ใช้ในบรรทัดเครื่องคิดเลข HP48SX / GX ยอดนิยมระบุหน่วยความจำในหน่วย nibbles - 4 บิต)

ไบต์ 20 บิตนั้นพบได้บ่อยมากใน "เครื่อง IAS" ในยุค 50 6, 12, 18 (และอาจ 36) ค่อนข้างได้รับความนิยมในสถาปัตยกรรมที่หลากหลายในยุค 60, 70 และในระดับ 80

ในท้ายที่สุดการมีการติดต่อที่ดีระหว่าง "พลังของ 2" และ "บิตในหน่วยที่กำหนดแอดเดรสได้" ดูเหมือนจะชนะแล้ว


และไม่เคย 10 บิต? ทั้งหมดที่ฉันสามารถค้นพบกับ Google คือตัวประมวลผลวิดีโอล่าสุดคือ 10 บิต
rslnx

@khrf เป็นไปได้ฉันไม่สามารถเรียกคืนสถาปัตยกรรมใด ๆ ที่มี (ส่วนใหญ่ฉันจะใช้คอมพิวเตอร์ทั่วไป)
Vatine

ใช่ฉันจะพิจารณาคอมพิวเตอร์ทั่วไปด้วยเช่นกัน มันแปลกเพราะฉันจินตนาการว่ามันจะดีแค่ไหนกับ 10-bits-byte ที่จะรู้ว่าคุณสามารถพูดได้ 1 กิโลไบต์ด้วย 1 ไบต์, 1 เมกะไบต์กับ 2 ไบต์ ฯลฯ แน่นอนว่ามันเป็นความสะดวกสบาย :)
rslnx

2

ความกระจ่างเล็กน้อยแรก: Octets (หน่วย 8 บิต) ไม่ใช่หน่วยพื้นฐานในสถาปัตยกรรมคอมพิวเตอร์สมัยใหม่ อย่างน้อยก็ไม่ได้พื้นฐานอะไรมากกว่าพลังอื่น ๆ ของสอง - 2, 4, 16, 32, 64, 128 และอื่น ๆ Octets เป็นหน่วยพื้นฐานสำหรับโปรเซสเซอร์ 8 บิต (ดังนั้นชื่อ!) แต่สถาปัตยกรรมสมัยใหม่มักจะทำงานกับบิตที่ใหญ่กว่า - ชุดภายใน เช่น x86_64 มีการลงทะเบียนจำนวนเต็ม 64 บิตและการลงทะเบียนจุดลอยตัว 80 บิต RAM อ่านและเขียนเป็นชิ้น 64 บิตและตัวประมวลผลใช้เวทมนตร์เพียงเล็กน้อยเพื่อทำให้ดูเหมือนว่าคุณสามารถระบุไบต์ 8 บิตได้

สำหรับสถาปัตยกรรมเก่า ๆ "ไบต์" ระบุขนาดของดาต้าบัสและในขณะที่สถานะคำถามดั้งเดิมมีขนาดบัสที่แตกต่างกันจำนวนมาก (4, 5, 6, 8, 12 ฯลฯ ) แต่ตั้งแต่ 1993 ไบต์ได้ถูกกำหนดเป็น 8 บิตเพื่อให้มีหน่วย SI ที่เป็นมาตรฐานสำหรับขนาดข้อมูล ดังนั้นความหมายของ "ไบต์" จึงเปลี่ยนจากการเป็นหน่วยที่ขึ้นอยู่กับสถาปัตยกรรมเป็นหน่วยมาตรฐานสถาปัตยกรรมอิสระ

ดังนั้นวันนี้ไบต์เป็นหน่วยมาตรฐานสำหรับการระบุที่อยู่และการหาปริมาณข้อมูล แต่ไม่ได้เป็นพื้นฐานอย่างอื่น

หน่วย Octets กลายเป็นมาตรฐาน de-facto สำหรับการจัดเก็บเป็นหลักเนื่องจากความกังวลเกี่ยวกับการจัดเก็บข้อความ สำหรับการจัดเก็บข้อความคุณต้องการหนึ่งไบต์ในการจัดเก็บอักขระหนึ่งตัว ปัจจัยสองประการมีความสำคัญ:

  • การมีหน่วยที่เป็นกำลังสอง (2, 4, 8, 16, 32 ฯลฯ ) จะสะดวกกว่าเมื่อออกแบบระบบดิจิตอล
  • 8-bit เพียงพอที่จะเก็บอักขระหนึ่งตัวในชุดอักขระ ASCII (พร้อมที่ว่างสำหรับการขยายชุดอักขระเพื่อรองรับ Cyrillic)

แน่นอนว่า 8 บิตไม่เพียงพอที่จะรองรับสคริปต์ทั้งหมด - บางอย่างเช่นญี่ปุ่นต้องการอย่างน้อย 16 บิต (และสำหรับสิ่งที่คุ้มค่า Unicode คือ 21 บิต) แต่ ณ จุดนั้นบิตเวลามีราคาแพงและข้อความดิจิทัลส่วนใหญ่อยู่ใน ช่วง ASCII อยู่ดี

ทุกวันนี้ข้อความมักถูกเก็บไว้ในการเข้ารหัสความกว้างของตัวแปรเช่น UTF-8 และด้วยสิ่งต่าง ๆ เช่น Unicode ที่รวมอักขระเข้าด้วยกัน "หนึ่งไบต์เท่ากับอักขระหนึ่งตัว" ได้กลายเป็นอดีตไปแล้ว byte วันนี้เป็นเพียงมาตรฐานสำหรับเหตุผลทางประวัติศาสตร์


1

ตามข้อมูลของฉันคำว่าไบต์นั้นมาจากวลีที่แปดซึ่งเป็นแปด (8) บิตคำ ความสะดวกสบายที่เราพบใน 8 บิตคำคือการแปลงเป็นค่าเลขฐานสิบหกเนื่องจากค่า 00000000 = 00 & 11111111 = FF (Dec 255 สำหรับ unsigned และ -127 สำหรับการลงชื่อ) มันง่ายต่อการดำเนินการทางคณิตศาสตร์ทั้งหมดในโครงสร้างดังกล่าวรวมถึง bit-wise การดำเนินงาน

ฉันเห็นจำนวนไบต์ (8 บิตคำ) เป็นวิวัฒนาการตามธรรมชาติของขนาดคำจากขนาดเล็กหายนะ 3 บิตจนถึงขนาดใหญ่ 60 คำ


ฉันต้องการดูการอ้างอิงสำหรับสิ่งนั้น ฉันสงสัยอย่างจริงจัง โดยเฉพาะอย่างยิ่งคำว่า "ไบต์" ตามที่ใช้ในมาตรฐาน C และรวมอยู่ในมาตรฐาน C ++ ไม่ได้แปลว่า "8 บิต" ปริมาณ 8 บิตคือออคเต็ต
gnasher729

0

ไบต์ไม่จำเป็นต้องเป็น 8 บิตแต่ปรากฏว่า C และ C ++ กำหนดไบต์เป็นอย่างน้อย 8 บิต (แม้ว่ามันอาจจะมากกว่า) นี้คำถามเกี่ยวกับกองมากเกินกล่าวถึงไม่กี่ระบบที่ 1 ไบต์ไม่ได้เป็น 8 บิต


C ++ หรือคอมไพเลอร์ ?
Babiker

@Babiker: C ++ คอมไพเลอร์จะมีคำจำกัดความที่แม่นยำ ( CHAR_BITSมาโคร)
MSalters
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.