เราจะได้ที่อยู่หน่วยความจำจำนวนเท่าใดด้วยโปรเซสเซอร์ 32 บิตและ RAM 1GB


12

เราสามารถรับแอดเดรสหน่วยความจำได้จำนวนเท่าใดด้วยโปรเซสเซอร์ 32 บิตและ RAM 1GB และมีหน่วยประมวลผล 64 บิตเท่าใด

ฉันคิดว่ามันเป็นเช่นนี้:

RAM 1GB หารด้วย 32 บิตหรือหารด้วย 4? การรับจำนวนที่อยู่หน่วยความจำ

แต่ฉันไม่แน่ใจ. นั่นเป็นเหตุผลที่ฉันถาม

ฉันแดงบนวิกิพีเดียว่าที่อยู่หน่วยความจำ 1 แห่งคือ 32bits กว้างหรือ 4 octets (1 octet = 8 บิต) เมื่อเทียบกับ 64 บิตโปรเซสเซอร์ที่ 1 ที่อยู่หน่วยความจำหรือ 1 จำนวนเต็มคือ 64 บิตกว้างหรือ 8 octets แต่ไม่รู้ว่าฉันเข้าใจถูกต้องหรือไม่


แทบทุกระบบที่ทันสมัยมีการระบุไบต์, หมายความว่า 32 บิตสามารถที่อยู่ประมาณ 4 กิกะไบต์ (ถ้ามีการติดตั้ง RAM ที่มาก) ในอดีตมีรูปแบบการใช้คำที่มีคำว่า "12" เป็น 12, 15, 16, 17, 24, 32, 36, หรือ 48 บิตและมีโอกาสอื่น ๆ รวมถึงเครื่องทศนิยมที่ส่ง 4 หรือ 6 บิต หน่วย แต่โปรดจำไว้ว่าระบบที่ทันสมัยส่วนใหญ่ใช้หน่วยความจำเสมือนซึ่งหมายความว่าโปรเซสเซอร์สามารถจัดการหน่วยความจำได้มากกว่าที่ติดตั้งไว้
Daniel R Hicks

@DanielRHicks หน่วยความจำเสมือนไม่มีผลต่อจำนวน RAM ที่สามารถแก้ไขได้
เจมี่ Hanrahan

@JamieHanrahan - เพื่อให้หน่วยความจำเสมือนทำงานได้จะต้องมีกลไกการกำหนดแอดเดรสที่ครอบคลุมช่วงที่อยู่เสมือน (ของกระบวนการเดียว) สิ่งนี้สามารถทำได้ด้วยการจำลองซอฟต์แวร์ แต่ค่อนข้างไม่มีประสิทธิภาพดังนั้นในระบบส่วนใหญ่ช่วงการกำหนดแอดเดรสของตัวประมวลผลมีขนาดใหญ่พอที่จะรวมพื้นที่ที่อยู่สูงสุดของกระบวนการ
Daniel R Hicks

@DanielRHicks แน่นอน แต่นั่นไม่ส่งผลกระทบต่อจำนวนRAM ที่สามารถแก้ไขได้ RAM คือหน่วยความจำกายภาพไม่ใช่เสมือน ที่อยู่เสมือนไม่ใช่ที่อยู่ RAM และหน่วยความจำเสมือนไม่ใช่ RAM
เจมี่ Hanrahan

@JamieHanrahan - คุณไม่เข้าใจอะไรเลย หากคุณไม่สามารถระบุที่อยู่หน้าของ RAM ในพื้นที่ที่อยู่เสมือน RAM นั้นไม่ได้ผล (ฉันรู้ดีว่าการทำงานของหน่วยความจำเสมือนทำงานในการออกแบบหน่วยความจำเสมือนมาตั้งแต่ปี 1972)
Daniel R Hicks

คำตอบ:


38

คำตอบสั้น ๆ :จำนวนที่อยู่ที่มีอยู่มีค่าน้อยกว่าที่อยู่เหล่านี้:

  • ขนาดหน่วยความจำในหน่วยไบต์
  • จำนวนเต็มที่ไม่ได้ลงนามที่ยิ่งใหญ่ที่สุดที่สามารถบันทึกในคำของเครื่อง CPU

คำตอบยาวและคำอธิบายข้างต้น:

หน่วยความจำประกอบด้วยไบต์ (B) แต่ละไบต์ประกอบด้วย 8 บิต (b)

1 B = 8 b

RAM 1 GB เป็นจริง 1 GiB (gibibyte ไม่ใช่กิกะไบต์) ความแตกต่างคือ:

1 GB  = 10^9 B = 1 000 000 000 B
1 GiB = 2^30 B = 1 073 741 824 B

หน่วยความจำทุกไบต์มีที่อยู่ของตัวเองไม่ว่าคำของเครื่อง CPU จะใหญ่เพียงใด เช่น. Intel 8086 CPU เป็น 16 บิตและเป็นหน่วยความจำที่มีหน่วยเป็นไบต์ดังนั้น CPU แบบ 32 บิตและ 64 บิตที่ทันสมัย นั่นเป็นสาเหตุของการ จำกัด ครั้งแรก - คุณไม่สามารถมีที่อยู่มากกว่าไบต์หน่วยความจำได้

ที่อยู่หน่วยความจำเป็นจำนวนไบต์ที่ CPU ต้องข้ามจากจุดเริ่มต้นของหน่วยความจำเพื่อไปยังที่อยู่ที่ต้องการ

  • ในการเข้าถึงไบต์แรกนั้นจะต้องข้าม 0 ไบต์ดังนั้นที่อยู่ไบต์แรกคือ 0
  • ในการเข้าถึงไบต์ที่สองจะต้องข้าม 1 ไบต์ดังนั้นที่อยู่ของมันคือ 1
  • (และอื่น ๆ ... )
  • หากต้องการเข้าถึงไบต์สุดท้าย CPU จะข้าม 1073741823 ไบต์ดังนั้นที่อยู่ของมันคือ 1073741823

ตอนนี้คุณต้องรู้ว่าจริง ๆ แล้ว 32- บิตหมายความว่าอย่างไร ดังที่ฉันได้กล่าวไว้ก่อนหน้านี้มันเป็นขนาดของคำศัพท์ของเครื่องจักร

Machine word คือจำนวนหน่วยความจำของ CPU ที่ใช้เพื่อเก็บหมายเลข (ใน RAM, แคชหรือรีจิสเตอร์ภายใน) CPU แบบ 32 บิตใช้ 32 บิต (4 ไบต์) เพื่อเก็บหมายเลข ที่อยู่หน่วยความจำก็เป็นตัวเลขเช่นกันดังนั้นบน CPU แบบ 32 บิตที่อยู่หน่วยความจำประกอบด้วย 32 บิต

ตอนนี้คิดเกี่ยวกับสิ่งนี้: ถ้าคุณมีหนึ่งบิตคุณสามารถบันทึกสองค่าในนั้น: 0 หรือ 1 เพิ่มอีกหนึ่งบิตและคุณมีสี่ค่า: 0, 1, 2, 3 ในสามบิตคุณสามารถบันทึกแปดค่า : 0, 1, 2 ... 6, 7 นี่คือระบบไบนารีจริง ๆ และมันทำงานแบบนั้น:

Decimal Binary
0       0000
1       0001
2       0010
3       0011
4       0100
5       0101
6       0110
7       0111
8       1000
9       1001
10      1010
11      1011
12      1100
13      1101
14      1110
15      1111

มันทำงานได้เหมือนกันนอกจากนี้ปกติ แต่หลักสูงสุดคือ 1 ไม่ 9. สิบ 0 0000แล้วคุณเพิ่ม 1 และได้รับเพิ่มอีกครั้งหนึ่งและคุณมี0001 0010สิ่งที่เกิดขึ้นที่นี่เหมือนกับการมีทศนิยม09และเพิ่ม: คุณเปลี่ยน 9 เป็น 0 และเพิ่มตัวเลขถัดไป

จากตัวอย่างข้างต้นคุณจะเห็นว่ามีค่าสูงสุดเสมอคุณสามารถเก็บไว้ในจำนวนที่มีจำนวนบิตคงที่ - เพราะเมื่อบิตทั้งหมดเป็น 1 และคุณพยายามที่จะเพิ่มมูลค่าโดย 1 บิตทั้งหมดจะกลายเป็น 0 จึงทำลาย จำนวน. มันเรียกว่าจำนวนเต็มล้นและทำให้เกิดปัญหาที่ไม่พึงประสงค์มากมายทั้งสำหรับผู้ใช้และนักพัฒนา

   11111111    = 255
+         1
-----------
  100000000    = 0   (9 bits here, so 1 is trimmed)
  • สำหรับ 1 บิตค่ายิ่งใหญ่ที่สุดคือ 1
  • 2 บิต - 3
  • 3 บิต - 7
  • 4 บิต - 15

จำนวนที่มากที่สุดที่เป็นไปได้คือ 2 ^ N-1 โดยที่ N คือจำนวนบิต อย่างที่ฉันได้กล่าวไปแล้วที่อยู่หน่วยความจำคือตัวเลขและยังมีค่าสูงสุด นั่นเป็นสาเหตุที่ขนาดของเครื่องคำ จำกัด จำนวนที่อยู่หน่วยความจำที่มีอยู่ด้วย - บางครั้ง CPU ของคุณก็ไม่สามารถประมวลผลตัวเลขที่ใหญ่พอที่จะรองรับหน่วยความจำเพิ่มเติม

ดังนั้นใน 32 บิตคุณสามารถเก็บตัวเลขได้ตั้งแต่ 0 ถึง 2 ^ 32-1 และนั่นคือ 4 294 967 295 มันเป็นมากกว่าที่อยู่ที่ยิ่งใหญ่ที่สุดใน RAM ขนาด 1 GB ดังนั้นในกรณีของ RAM จำนวนเฉพาะของคุณจะเป็นปัจจัย จำกัด

ขีด จำกัด RAM สำหรับ CPU แบบ 32 บิตในทางทฤษฎีแล้ว 4 GB (2 ^ 32) และสำหรับ 64 บิต CPU นั้นมีขนาด 16 EB (exabytes, 1 EB = 2 ^ 30 GB) กล่าวอีกนัยหนึ่งซีพียู 64 บิตสามารถตอบสนองอินเทอร์เน็ตทั้งหมด ... 200 ครั้ง;) (ประเมินโดยWolframAlpha )

อย่างไรก็ตามในระบบปฏิบัติการจริงซีพียู 32 บิตสามารถจัดการกับ RAM ได้ประมาณ 3 GiB นั่นเป็นเพราะสถาปัตยกรรมภายในของระบบปฏิบัติการ - ที่อยู่บางส่วนถูกสงวนไว้สำหรับวัตถุประสงค์อื่น คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ที่เรียกว่า3 GB อุปสรรคในวิกิพีเดีย คุณสามารถยกขีด จำกัด นี้กับทางกายภาพที่อยู่ส่วนขยาย


พูดเกี่ยวกับหน่วยความจำที่อยู่, มีบางสิ่งที่ฉันควรจะพูดถึง: หน่วยความจำเสมือน , การแบ่งส่วนและเพจ

หน่วยความจำเสมือน

ดังที่ @Daniel R Hicks ชี้ให้เห็นในคำตอบอื่น OSes ใช้หน่วยความจำเสมือน ความหมายคือแอปพลิเคชันไม่ทำงานกับที่อยู่หน่วยความจำจริง แต่เป็นแอปที่มีให้โดย OS

เทคนิคนี้ช่วยให้ระบบปฏิบัติการย้ายข้อมูลบางส่วนจาก RAM ไปยัง Pagefile (Windows) หรือ Swap (* NIX) ที่เรียกว่า HDD ช้ากว่า RAM เล็กน้อย แต่ก็ไม่ใช่ปัญหาร้ายแรงสำหรับข้อมูลที่เข้าถึงได้ยากและอนุญาตให้ระบบปฏิบัติการให้แอปพลิเคชัน RAM มากกว่าที่คุณติดตั้งจริง

เพจจิ้ง

สิ่งที่เรากำลังพูดถึงคือเรียกว่ารูปแบบการกำหนดแอดเดรสแบบแบน

การเพจคือโครงร่างการกำหนดแอดเดรสทางเลือกที่อนุญาตให้กำหนดแอดเดรสหน่วยความจำเพิ่มเติมที่ปกติคุณสามารถทำได้ด้วยหนึ่งคำศัพท์เครื่องในโมเดลแฟล็ต

ลองนึกภาพหนังสือที่เต็มไปด้วยคำ 4 ตัวอักษร สมมติว่ามี 1024 หมายเลขในแต่ละหน้า ในการพูดถึงตัวเลขคุณต้องรู้สองสิ่ง:

  • จำนวนหน้าที่พิมพ์คำนั้น
  • คำใดในหน้านั้นคือคำที่คุณกำลังค้นหา

นั่นคือวิธีที่ x86 ซีพียูสมัยใหม่จัดการกับหน่วยความจำ มันแบ่งออกเป็น 4 หน้า KiB (1024 คำต่อคำในเครื่อง) และหน้าเหล่านั้นมีตัวเลข (หน้าจริงๆแล้วอาจเป็น 4 MiB ใหญ่หรือ 2 MiB พร้อมPAE ) เมื่อคุณต้องการระบุเซลล์หน่วยความจำคุณต้องมีหมายเลขหน้าและที่อยู่ในหน้านั้น โปรดทราบว่าแต่ละเซลล์หน่วยความจำมีการอ้างอิงโดยตัวเลขหนึ่งคู่เท่านั้นซึ่งจะไม่เกิดกรณีสำหรับการแบ่งกลุ่ม

การแบ่งกลุ่ม

อันนี้ค่อนข้างคล้ายกับเพจ มันถูกใช้ใน Intel 8086 เพียงเพื่อตั้งชื่อตัวอย่างหนึ่ง กลุ่มที่อยู่ปัจจุบันเรียกว่าเซ็กเมนต์หน่วยความจำไม่ใช่หน้าเว็บ ความแตกต่างคือส่วนสามารถทับซ้อนกันและพวกเขาทับซ้อนกันมาก ตัวอย่างเช่นใน 8086 เซลล์หน่วยความจำส่วนใหญ่มีอยู่ใน 4096 เซกเมนต์ที่ต่างกัน


ตัวอย่าง:

สมมติว่าเรามีหน่วยความจำ 8 ไบต์ทั้งหมดถือศูนย์ยกเว้นไบต์ที่ 4 ซึ่งเท่ากับ 255

ภาพประกอบสำหรับโมเดลหน่วยความจำแบบแบน:

 _____
|  0  |
|  0  |
|  0  |
| 255 |
|  0  |
|  0  |
|  0  |
|  0  |
 -----

ภาพประกอบสำหรับหน่วยความจำเพจที่มีเพจขนาด 4 ไบต์:

 PAGE0
 _____
|  0  |
|  0  |
|  0  |  PAGE1
| 255 |  _____
 -----  |  0  |
        |  0  |
        |  0  |
        |  0  |
         -----

ภาพประกอบสำหรับหน่วยความจำที่แบ่งเป็นเซ็กเมนต์ที่มี 4 ไบต์แบ่งเป็น 1:

 SEG 0
 _____   SEG 1
|  0  |  _____   SEG 2
|  0  | |  0  |  _____   SEG 3
|  0  | |  0  | |  0  |  _____   SEG 4
| 255 | | 255 | | 255 | | 255 |  _____   SEG 5
 -----  |  0  | |  0  | |  0  | |  0  |  _____   SEG 6
         -----  |  0  | |  0  | |  0  | |  0  |  _____   SEG 7
                 -----  |  0  | |  0  | |  0  | |  0  |  _____
                         -----  |  0  | |  0  | |  0  | |  0  |
                                 -----   -----   -----   -----

อย่างที่คุณเห็นไบต์ที่ 4 สามารถระบุได้สี่วิธี: (ที่อยู่จาก 0)

  • ส่วนที่ 0 ชดเชย 3
  • ส่วนงานที่ 1 ชดเชย 2
  • ส่วนที่ 2 ชดเชย 1
  • ส่วนที่ 3 ชดเชย 0

มันเป็นเซลล์หน่วยความจำเดียวกันเสมอ

ในเซ็กเมนต์การใช้งานจริงถูกเลื่อนมากกว่า 1 ไบต์ (สำหรับ 8086 เป็น 16 ไบต์)

สิ่งที่ไม่ดีเกี่ยวกับการแบ่งส่วนคือความซับซ้อน (แต่ฉันคิดว่าคุณรู้อยู่แล้ว) สิ่งที่ดีคือคุณสามารถใช้เทคนิคที่ชาญฉลาดเพื่อสร้างโปรแกรมแบบแยกส่วน

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


1
ระบบปฏิบัติการสามารถให้พื้นที่ที่อยู่เสมือน 4GiB เต็มรูปแบบ (อาจลบหนึ่งหน้า - 4KiB สำหรับ x86) กับกระบวนการของผู้ใช้ แต่จะทำให้การโทรของระบบมีราคาแพงกว่าเนื่องจากพื้นที่ที่อยู่จะต้องเปลี่ยน ด้วย PAE และกลไกที่คล้ายกันจำนวนหน่วยความจำกายภาพที่แอดเดรสสามารถกำหนดได้โดยระบบสามารถเพิ่มขึ้นได้แม้ว่าแอดเดรสจะยังคง จำกัด อยู่ที่ 32 บิต
Paul A. Clayton

มันไม่ใช่สิ่งที่ฉันค้นหา แต่มันก็เป็นข้อมูลที่ดีอยู่ดี! ขอบคุณสำหรับคำอธิบายที่ดีของจำนวนสูงสุด สิ่งที่สำคัญ (1 = สูงสุดเช่นเดียวกับในไบนารี 9 คือสูงสุด.) สำหรับการเปรียบเทียบตารางไบนารีและทศนิยม เป็นวิธีคิดที่ดีจริงๆ ฉันเรียนรู้สิ่งใหม่ :) ขอบคุณ!
johan smohan

Gibi และ Giga นี้สับสนมาก ... เพราะในบางเว็บไซต์ฉันอ่านว่าหน่วยความจำวัดใน Gibi และที่อื่นที่เป็น Giga ... คุณมีแหล่งข้อมูลที่ดี / น่าเชื่อถือหรือไม่
johan smohan

Wikipedia มีบทความเกี่ยวกับคำนำหน้าไบนารีรวมถึงภูมิหลังทางประวัติศาสตร์บางส่วน หมายเลขที่เกี่ยวข้องกับฮาร์ดแวร์ส่วนใหญ่ใช้ส่วนนำหน้าทศนิยมข้อยกเว้นที่น่าสังเกตมากที่สุดคือ RAM และขนาดสเกลสีเช่น LCDs ที่มีสี 16M มีช่องสัญญาณสี 8 บิตสามช่อง (2 ^ 24) การตอบคำถามของคุณโดยตรง: ในกรณีนี้จำนวนที่อยู่ที่มีอยู่จะเท่ากับจำนวนหน่วยความจำไบต์เนื่องจาก RAM ถูกระบุตามจำนวนไบต์ CPU แบบ 32 บิตสามารถจัดการได้มากถึง 2 ^ 32 B, 64- บิตหนึ่ง - 2 ^ 64
gronostaj

ขอบคุณ! ฉันต้องการสิ่งนี้สำหรับการสอบของโรงเรียน :) ฉันคิดว่าฉันเข้าใจสิ่งต่าง ๆ มากที่สุดในตอนนี้ สิ่งเดียวที่ยังรบกวนฉันอยู่ทำไม 2 ^ 32 B ถ้าเป็นโปรเซสเซอร์ 32 บิตและไม่ใช่ 32byte
johan smohan

3

นอกเหนือไปจากข้างต้นทราบว่าเสมือน addressing ถูกนำมาใช้พร้อมกับหลายช่องว่างอยู่ ดังนั้นแม้ว่าคุณจะมี RAM เพียง 1GB แต่โปรแกรมสามารถใช้หน่วยความจำเสมือนได้ถึง 4GB (แม้ว่าระบบปฏิบัติการส่วนใหญ่จะ จำกัด ให้เหลือน้อยกว่านี้) และคุณสามารถมีคอนเซ็ปต์พื้นที่ 4GB ขนาดนั้นได้

ขนาด RAM ไม่ได้ จำกัด (มาก) ขนาดสูงสุดของโปรแกรมหรือจำนวนโปรแกรมที่คุณสามารถรันได้ แต่จะ จำกัด ประสิทธิภาพการทำงาน เมื่อหน่วยความจำจริงกลายเป็น "เกินจริง" และระบบเริ่ม "หวด" เนื่องจาก "สลับ" "หน้า" ของหน่วยความจำไปมาระหว่าง RAM และดิสก์ประสิทธิภาพจะลดลง


2

แรม 1GByte จะมีขนาด 1024 * 1024 * 1024 ไบต์หรือ 1,073,741,824 ไบต์

ตัวประมวลผลแบบ 32 บิตจะมีขนาด 4 * 1024 * 1024 * 1024 ไบต์เสมอหรือพื้นที่ที่อยู่ 4,294,967,296 ไบต์ไบต์ 1Gbyte of RAM ปรากฏขึ้นภายในพื้นที่นี้ สำหรับโปรเซสเซอร์ Intel RAM บางตัวจะต้องปรากฏขึ้นที่ที่อยู่ 0 สำหรับเวกเตอร์ขัดจังหวะดังนั้น RAM จริงจะเริ่มต้นที่แอดเดรส 0 และขึ้นไป

สิ่งอื่น ๆ ปรากฏในพื้นที่ที่อยู่นั้นเช่น BIOS และ ROM ตัวเลือก (ใน 384Kbytes บนภายใน 1Mbyte แรก) อุปกรณ์ I / O (เช่น APIC) และ RAM วิดีโอ มีสิ่งแปลก ๆ เกิดขึ้นกับโหมดการจัดการระบบ "SMRAM" ที่ฉันยังไม่เข้าใจอย่างสมบูรณ์

โปรดทราบว่านี่เป็นพื้นที่ที่อยู่จริงจากมุมมองของเคอร์เนล MMU สามารถจัดเรียงสิ่งนี้ใหม่ทั้งหมดในลักษณะใด ๆ กับกระบวนการ userpace


ฉันแดงบนวิกิพีเดียว่าที่อยู่หน่วยความจำ 1 แห่งคือ 32bits กว้างหรือ 4 octets (1 octet = 8 บิต) เมื่อเทียบกับ 64 บิตโปรเซสเซอร์ที่ 1 ที่อยู่หน่วยความจำหรือ 1 จำนวนเต็มคือ 64 บิตกว้างหรือ 8 octets คุณถูกต้องเกี่ยวกับพื้นที่ที่อยู่ 4 * 1024 * 1024 * 1024 ไบต์ แต่ฉันกำลังค้นหาพื้นที่ที่อยู่หน่วยความจำซึ่งฉันคิดว่าเป็น 1GB / 32 บิต แต่ฉันยังไม่รู้ว่าฉันถูกต้องหรือไม่ :) ขอบคุณสำหรับคำตอบ!
johan smohan

Np Intel CPU มีช่องว่างสองช่อง: "หน่วยความจำ" และ "I / O" สิ่งอื่นที่ไม่ใช่ RAM ปรากฏในพื้นที่ "หน่วยความจำ" สิ่งอื่น ๆ เช่นอุปกรณ์ I / O หรือ ROM อาจอยู่ในจุดที่ว่างโดย RAM โดยทั่วไปแล้วอุปกรณ์ I / O เท่านั้นที่ปรากฏในพื้นที่ที่อยู่ I / O
LawrenceC

@johansmohan ทั้งตัวเลขและคำตอบของลอเรนซ์นั้นไม่ถูกต้อง ไม่มีความสัมพันธ์คงที่ระหว่าง "ความกว้างบิต" ของโปรเซสเซอร์และความกว้างของที่อยู่ RAM ที่สามารถใช้ได้ โปรเซสเซอร์ x86 แบบ 32 บิตเท่านั้นสามารถระบุ RAM 64 GB ตัวประมวลผล x64 เริ่มต้นที่พื้นที่ที่อยู่ทางกายภาพ 40 บิตและขณะนี้อยู่ที่ 52 บิต สำหรับพื้นที่ที่อยู่เสมือนนั้นอาจแตกต่างกัน บน x64 แม้ว่าที่อยู่เสมือนจะใช้เวลา 64 บิตในการจัดเก็บ แต่ใช้เพียง 48 บิตสำหรับ VAS ที่ 256 TiB แทนที่จะเป็น 16 EiB ที่คุณคาดหวังจาก 64 บิต
เจมี่ Hanrahan

0

ตัวประมวลผลแบบ 32 บิตสามารถระบุหน่วยความจำได้สูงสุด 2 ^ 32 ไบต์ (ประมาณ 4GB) แต่การมีหน่วยความจำ 1GB จะทำให้ 1 * 1024 * 1024 * 1024 หน่วยความจำไบต์ที่อยู่ได้ (แม้ว่าคุณอาจจะยังคงมีพื้นที่อยู่เสมือน 2 ^ 32 ) CPU 64 บิตสามารถระบุไบต์ละ 2 ^ 64 แต่ฉันคิดว่าระบบส่วนใหญ่ใช้เพียง 48 บิตสำหรับที่อยู่หน่วยความจำที่สร้างขอบเขตบน ไบต์ที่แอดเดรสได้ 2 ^ 48


คุณหมายถึง 1024 * 1024 * 1024 และไม่ใช่ 1 * 1024 * 1024 ใช่ไหม
johan smohan

โปรเซสเซอร์ 32 บิตสามารถระบุที่มากที่สุด 2 ^ 32 octet หรือบิต? แค่ตรวจสอบเพราะฉันต้องรู้แน่ ๆ
johan smohan

@johan smohan ถูกต้องค่านี้ควรเป็น 1 * 1024 * 1024 * 1024
AcId

@johan smohan ตัวประมวลผลแบบ 32 บิตสามารถระบุตำแหน่งได้มากที่สุด 2 ^ 32 ไบต์โดยหนึ่งไบต์มี 8 บิต (หนึ่ง
อ็อ

0

คำตอบที่ได้รับการยอมรับให้คำอธิบายที่ดี แต่ฉันไม่คิดว่ามันคือคำตอบ มันไม่ได้มีอะไรเกี่ยวกับรถบัสที่อยู่ และขนาดของมันเป็นเหตุผลหลักที่ทำให้หน่วยความจำ จำกัด ตัวอย่างเช่น 8080 เป็นตัวประมวลผล 8 บิต (ขนาดของบัสข้อมูลคือ 8 บิต) แต่มีบัสแอดเดรส 16 บิต สามารถระบุที่อยู่ 2 ^ 16 = (2 ^ 6) * (2 ^ 10) = 64 * 1024 ไบต์ = 64KB

คุณสามารถหาข้อมูลเพิ่มเติมได้ที่นี่ (32 บิต)ในส่วน "ประวัติทางเทคนิค"


ฉันเห็นด้วย. โปรดทราบว่ารุ่นที่ใหม่กว่าของ 16-bit PDP-11 มีแอดเดรสบัส 22 บิต (และสามารถระบุ RAM 4 MB), HP 1000MX, หรือ "16 บิต" ในที่สุดก็มาถึง RAM 16 MB (24 ที่อยู่ - บิต); VAX เป็นซีพียู 32 บิต แต่มีพื้นที่แอดเดรสฟิสิคัล 30 บิต แต่ครึ่งหนึ่งถูกสงวนไว้สำหรับพื้นที่ I / O สำหรับขีด จำกัด RAM 512 MB; "16 บิต" 8086, 1 MB; "16 บิต" 80286, 16 MB; เป็นต้นและเมื่อ PAE ได้รับการแนะนำกับ Pentium Pro, 32- บิต x86 สามารถที่อยู่ได้ถึง 64 GB RAM (พื้นที่ที่อยู่ทางกายภาพ 24 บิตแม้ว่าการสั่งซื้อต่ำสามบิตไม่เคยทำให้มันออกจาก CPU)
เจมี่ Hanrahan

-2

ฉันเชื่อว่าข้อมูลพื้นฐานส่วนใหญ่หายไปในการสนทนานี้ดังนั้นนี่คือคำตอบของฉัน:

การพูดว่า "นี่คือตัวประมวลผลขนาด 32 บิต" หมายความว่าขนาดคำสั่งหรือขนาดคำสั่งซีพียูที่สามารถเข้าใจและทำงานพร้อมกันคือ 32 บิต เช่นเดียวกันกับตัวประมวลผล 64 บิต: พวกเขาสามารถจัดการคำสั่งได้ไม่เกิน 64 บิต

คิดแบบนี้เหมือนเครื่องคิดเลขเชิงกลแบบเก่า: คุณมีเพียงตัวเลขจำนวนมากดังนั้นก็ไม่สามารถใส่ตัวเลขได้อีกต่อไป

ตอนนี้ที่อยู่ที่ CPU สามารถใช้ยังต้องพอดีกับพื้นที่ว่างนั้นดังนั้นสำหรับโปรเซสเซอร์ 32 บิตที่อยู่ที่ใช้สามารถทำได้เพียง 32 บิตเท่านั้น ดังนั้นจากที่นี่เราสามารถคำนวณจำนวนที่อยู่สูงสุด (เช่นจำนวน RAM สูงสุดที่ CPU ใช้งานได้):

2 ^ 32 = 4294967296 (= 4 GB)

หรือ

2 ^ 64 = 18446744073709551616 (= อีกวิธี;)

หรือเป็นตัวอย่างที่สนุก Commodore 64 รุ่นเก่าของฉันมีซีพียู 16 บิตดังนั้นมันจึงสามารถจัดการหน่วยความจำของ:

2 ^ 16 = 65536 ไบต์ (= 64 KB)

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


2
ความแตกต่างที่สำคัญระหว่างโปรเซสเซอร์ 32 และ 64 บิตคือช่วงที่อยู่ (ซึ่งมีผลต่อพื้นที่ที่อยู่เสมือนมากกว่า "ของจริง") โปรเซสเซอร์ใช้เทคนิคมากมายจนยากที่จะบอกว่าความกว้างของเส้นทางข้อมูลจริงคืออะไรในหลาย ๆ กรณี และความยาวของคำสั่งนั้นส่วนใหญ่ไม่เกี่ยวข้องกับตัวประมวลผล "ความกว้าง"
Daniel R Hicks

คำอธิบายนั้นถูกต้องสมบูรณ์ สมมติว่าคุณไม่ได้หมายถึงขนาดชิปที่แท้จริงในหน่วยเซนติเมตรเมื่อพูดว่า "ความกว้างของโปรเซสเซอร์" ซึ่งในกรณีนี้คุณจะต้องพูดอย่างไม่ถูกต้องว่าคุณมีความผิดพลาดคุณกำลังทำผิดเทคนิคการจับคู่หน่วยความจำ / พื้นที่ที่อยู่เสมือน นอกจากนี้สิ่งที่คุณพูดนั้นเกี่ยวข้องกับการใช้งานเคอร์เนลมากกว่าคุณอาจต้องการตรวจสอบ PAE linux kernels
Tuncay Göncüoğlu

2
ความยาวของคำสั่งไม่มีความสัมพันธ์กับ "ความกว้าง" ของโปรเซสเซอร์ในระบบที่ทันสมัย ค่าที่เกี่ยวข้องมากที่สุดคือความกว้างของรีจิสเตอร์ (แม้ว่าอาจเป็นการหลอกลวง) ความกว้างของพา ธ การถ่ายโอนระหว่างโปรเซสเซอร์และหน่วยความจำและขนาดเป็นบิตของแอดเดรสหน่วยความจำ แต่ค่าทั้งสามนี้สามารถแตกต่างกันได้ง่ายมาก
Daniel R Hicks

1
@DanielRHicks Daniel Hicks ถูกต้อง "ความกว้างบิต" ของ CPU ไม่จำเป็นต้องเกี่ยวข้องกับ "ขนาดคำสั่งหรือขนาดคำสั่ง" มีซีพียูที่ถูกสร้างขึ้นด้วยวิธีนี้ แต่ตัวประมวลผลสินค้าโภคภัณฑ์ในปัจจุบัน (x86 / x64) ไม่ใช่ในหมู่พวกเขา
เจมี่ Hanrahan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.