แพลตฟอร์ม x86 รองรับระบบปฏิบัติการใดบ้าง? X86 หรือ x64: มันหมายความว่าอะไร? ความถี่หลัก

สวัสดีทุกคน ผู้เยี่ยมชมบล็อกไอที... ฉันถูกถามบ่อยมาก - Windows เป็น x86 32 หรือ 64 บิตหรือไม่ ตามตรรกะ เราสามารถสรุปได้ว่า x86 มีขนาดใหญ่กว่า x64 อย่างชัดเจน แต่ในทางปฏิบัติปรากฎว่า x86 เท่ากับ x32... แต่ทำไมพวกเขาถึงเขียนแบบนั้น และใครที่ต้องถูกตีหัวถึงจะมี ไม่มีความสับสนขนาดนั้นเหรอ?

ตอนนี้ให้ฉันทึ่งของคุณ - x86 เท่ากับ x32 และความสนใจเท่ากับ x64 - คุณพร้อมสำหรับสิ่งนี้หรือยัง? - ฉันคิดว่าไม่... ทีนี้มาดูกันว่าอะไร อย่างไร และที่ไหน! เพื่อตอบคำถามนี้ไม่ใช่คำถามที่ง่ายที่สุด เราต้องย้อนกลับไปหลายทศวรรษ นี่คือที่มาของทั้งหมดนี้ ความยุ่งเหยิง.

ผู้เขียนที่เขียน x86 และ x64 รวมกันในข้อกำหนดสำหรับคอมพิวเตอร์จะต้องถูกตีที่หัว เป็นความผิดพลาดร้ายแรงในการเขียนสิ่งนี้ แต่ทุกคนต่างก็มีส่วนผิด... x86 เป็นสถาปัตยกรรมโปรเซสเซอร์ที่ใช้งานได้ดีกับโปรเซสเซอร์ทั้ง 64 บิตและ 32 บิต! เครื่องหมาย x86 มาจากชื่อของโปรเซสเซอร์ตัวแรกจาก Intel i8086 และรุ่นที่ใหม่กว่า จากนั้นตัวเลขแรกก็เปลี่ยนไปและจะมีตัวย่อว่า x86 ที่ส่วนท้ายของรุ่นซึ่งเป็นกลุ่มโปรเซสเซอร์ประเภทหนึ่ง แน่นอนว่านี่เป็นเวลานานมากแล้วและโปรเซสเซอร์ก็มีป้ายกำกับแตกต่างไปจากเดิมอย่างสิ้นเชิง แต่ x86 นั้นยึดที่มั่นอย่างแน่นหนาในเอกสารและมักจะสร้างความสับสนให้กับผู้คน... ซึ่งไม่สนใจสถาปัตยกรรมของโปรเซสเซอร์เป็นพิเศษและไม่ได้เจาะลึกประวัติของ การสร้างของพวกเขา

Windows x86 32 หรือ 64 บิตใช่ไหม

x86 ไม่ใช่ความจุบิต แต่เป็นสถาปัตยกรรม... แต่ตามที่ปฏิบัติได้แสดงให้เห็นแล้ว x86 นั้นเท่ากับระบบปฏิบัติการ 32 บิต หากเราเพิกเฉยต่อกฎทั้งหมด เราก็สามารถตอบได้ว่าใช่ โดยส่วนใหญ่แล้ว x86 จะเท่ากับระบบ 32 บิต

สัญกรณ์ที่ถูกต้องจะมีลักษณะเช่นนี้สำหรับระบบปฏิบัติการ 32 บิต (OS_WINDOWS_x86_32บิต)หรือประมาณนั้นสำหรับ 64 บิต (OS_WINDOWS_x86_64บิต)แต่เรากลับสับสนไปหมด!

ความแตกต่างอีกอย่างหนึ่งก็คือโปรเซสเซอร์ 32 บิตนั้นมีอยู่แล้วมาก เป็นเวลานานเป็นรุ่นเดียวในตลาดและเป็นสถาปัตยกรรม x86... และเมื่อรุ่น 64 บิตออกมา พวกเขาก็เริ่มถูกกำหนดให้เป็น x64 และสำหรับ 32 บิต ทุกอย่างก็ยังคงอยู่เหมือนเดิม!

x32 หรือ x64 - ไหนดีกว่ากัน?

ในแง่ของประสิทธิภาพ แน่นอนว่าระบบปฏิบัติการ 64 บิตมีข้อได้เปรียบที่ชัดเจน แต่ระบบปฏิบัติการ 32 บิตนั้นมีทรัพยากรที่จำกัดมาก แรม- 32 บิตไม่สามารถจัดการกับ RAM ได้มากกว่า 4 กิกะไบต์ แต่ในความเป็นจริงแล้วจะเห็นได้ไม่เกิน 3.25 กิกะไบต์จากสี่! อย่างไรก็ตาม แอปพลิเคชั่นบางตัวอาจไม่ทำงานบน WIndows 64 บิต ซึ่งเป็นอุปสรรคต่อการเปลี่ยนไปใช้ระบบปฏิบัติการใหม่

x86-64 เป็นส่วนขยาย 64 บิตสำหรับสถาปัตยกรรม x86 ที่พัฒนาโดย AMD ช่วยให้โปรแกรมทำงานในโหมด 64 บิต

เรื่องราว

ข้อมูลจำเพาะดั้งเดิมได้รับการพัฒนาโดย AMD ในปี พ.ศ. 2543 โปรเซสเซอร์ตัวแรกที่ใช้สถาปัตยกรรมนี้คือ AMD K8 (เปิดตัวในปี พ.ศ. 2546)

ในช่วงหลายปีที่ผ่านมา (ปลายยุค 90 และต้นยุค 2000) HP และ Intel ได้พัฒนาสถาปัตยกรรม IA-64 (Intel Itanium) แบบ 64 บิต แต่มันแตกต่างอย่างสิ้นเชิง โดยยึดหลักการ VLIW (คำสั่งที่ยาวมาก) และไม่เข้ากันกับสถาปัตยกรรม x86 แบบ 32 บิต เนื่องจากซอฟต์แวร์ที่เขียนไว้ก่อนหน้านี้จำนวนมากใช้งานไม่ได้กับ IA-64 สถาปัตยกรรมนี้ไม่ได้รับความนิยม แม้ว่าในตอนท้ายของปี 2544 จะมีการเปิดตัว Windows XP 64 บิตสำหรับ IA-64 รุ่นพิเศษสำหรับ IA-64

สถาปัตยกรรม x86 ย้อนกลับไปในปี 1978 โดยเริ่มเป็นแบบ 16 บิต และกลายเป็น 32 บิตในปี 1985 สถาปัตยกรรมนี้มีไม้ค้ำยันจำนวนมากสำหรับความเข้ากันได้แบบย้อนหลัง คาดว่าจะตายพร้อมกับการประมวลผลแบบ 32 บิต อย่างไรก็ตาม การถือกำเนิดของ x86-64 ทำให้มันมีชีวิตใหม่

การตั้งชื่อ

มีชื่อเรียกที่แตกต่างกันมากมายสำหรับเทคโนโลยีนี้ ซึ่งบางครั้งก็ทำให้เกิดความสับสน

  • x86-64- รุ่นดั้งเดิม ภายใต้ชื่อนี้ AMD ได้เผยแพร่ข้อกำหนดเบื้องต้นฉบับแรก
  • x64- ชื่ออย่างเป็นทางการของเวอร์ชันปฏิบัติการ ระบบวินโดวส์ซึ่งใช้เป็นชื่อสถาปัตยกรรมโดย Microsoft และ Oracle
  • AMD64- หลังจากการเปิดตัวโปรเซสเซอร์ Clawhammer และ Sledgehammer ตัวแรก ชื่อของบริษัทพัฒนา AMD ก็ปรากฏในนามของสถาปัตยกรรม อย่างเป็นทางการแล้วสำหรับการนำ AMD ไปใช้
  • EM64T- ชื่ออย่างเป็นทางการแรกของการดำเนินการของ Intel ย่อมาจากเทคโนโลยี Extended Memory 64
  • อินเทล 64เป็นชื่ออย่างเป็นทางการในปัจจุบันของสถาปัตยกรรม Intel

บางครั้งการกล่าวถึง AMD ทำให้ผู้ใช้เข้าใจผิดถึงขั้นที่พวกเขาปฏิเสธที่จะใช้ระบบปฏิบัติการเวอร์ชันดั้งเดิมโดยอ้างถึงข้อเท็จจริงที่ว่าเวอร์ชัน AMD จะไม่ทำงานบนโปรเซสเซอร์ Intel ที่จริงแล้ว ผู้จัดจำหน่ายซอฟต์แวร์ใช้ชื่อ amd64 เพียงเพราะ AMD เป็นผู้บุกเบิกในการพัฒนาเทคโนโลยีนี้

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

ความชุก

ซูเปอร์คอมพิวเตอร์

ในรายชื่อซูเปอร์คอมพิวเตอร์ TOP-500 สถาปัตยกรรม x86-64 ได้เข้ามาแทนที่สถาปัตยกรรม RISC และเวอร์ชัน 32 บิตที่ได้รับความนิยมก่อนหน้านี้ Intel พยายามโปรโมต Itanium (ส่วนแบ่งสูงสุดในปี 2004) แต่ก็ไม่ประสบความสำเร็จ

ศูนย์ข้อมูล

เซิร์ฟเวอร์ที่ใช้ชิป x86 ยังคงรักษาส่วนแบ่งการตลาดมากกว่า 90 เปอร์เซ็นต์ http://www.common.org/servers/x86-servers-data-center/

ขณะนี้ศูนย์ข้อมูลของ Google ทั้งหมดใช้โปรเซสเซอร์ Intel ที่มีสถาปัตยกรรม x86 ที่รู้จักกันดี อย่างไรก็ตาม Google วางแผนที่จะใช้โซลูชันทางเลือก https://habrahabr.ru/company/ibm/blog/282820/

ในปี 2560 อัลกอริธึมสำหรับการประมวลผลข้อมูลจำนวนมากในกรณีส่วนใหญ่จะดำเนินการบนสถาปัตยกรรม x86-64 ซึ่งเป็นสาเหตุที่เรากำลังพิจารณาในโปรแกรมหลักของ AiSOBOI

ลงทะเบียน

สถาปัตยกรรม x86-64 มี:

  • การลงทะเบียนจำนวนเต็มวัตถุประสงค์ทั่วไป 16 บิต 64 บิต (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 - R15)
  • 8 รีจิสเตอร์ทศนิยม 80 บิต (ST0 - ST7);
  • รีจิสเตอร์ MMX 8 64 บิต (MM0 - MM7, แชร์พื้นที่กับรีจิสเตอร์ ST0 - ST7);
  • 16 รีจิสเตอร์ SSE 128 บิต (XMM0 - XMM15)
  • ตัวชี้ RIP 64 บิตและการลงทะเบียนการตั้งค่าสถานะ RFLAGS 64 บิต

การดำเนินการบนรีจิสเตอร์ 64 บิต (การบวก การลบ ฯลฯ) จะใช้เวลาเท่ากันกับการดำเนินการบนรีจิสเตอร์ 32 บิต

อาจดูน่าประหลาดใจ แต่การดำเนินการกับรีจิสเตอร์ครึ่งล่างของ 32 บิตจะรีเซ็ต 32 บิตที่สูงกว่า ตัวอย่างเช่น,

mov eax, ebx

จะรีเซ็ตบิตที่สำคัญที่สุดใน rax โดยอัตโนมัติ

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

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

คำแนะนำ

x86-64 เป็นของประเภท ซีไอเอสซี(การคำนวณชุดคำสั่งที่ซับซ้อน) เกือบจะเป็นสถาปัตยกรรม CISC สมัยใหม่เพียงแห่งเดียว สถาปัตยกรรมยอดนิยมอื่น ๆ นั้นมีพื้นฐานมาจากหลักการ RISC(คอมพิวเตอร์ชุดคำสั่งลดลง)

ในขณะเดียวกันโปรเซสเซอร์ x86 สมัยใหม่แม้ว่าจะเข้ากันได้กับ CISC แต่ก็เป็นโปรเซสเซอร์ที่มีคอร์ RISC และในแง่ที่เป็นทางการถือเป็นไฮบริด ในโปรเซสเซอร์ CISC แบบไฮบริดนั้น คำสั่ง CISC จะถูกแปลงเป็นชุดคำสั่ง RISC ภายใน ในขณะที่คำสั่ง x86 หนึ่งคำสั่งสามารถสร้างคำสั่ง RISC ได้หลายคำสั่ง และคำสั่งต่างๆ จะถูกดำเนินการบนไปป์ไลน์ซูเปอร์สเกลาร์หลายคำสั่งในแต่ละครั้ง คำแนะนำเล็กๆ น้อยๆ นั้นง่ายต่อการปฏิบัติตามในแต่ละครั้ง

คำแนะนำจะถูกเข้ารหัสเป็นลำดับไบต์ที่มีความยาวผันแปรได้ ในทางปฏิบัติตั้งแต่ 1 ถึง 15 ไบต์

หมดโอกาสแล้ว

ใน x86-64 คำแนะนำที่ล้าสมัยบางส่วนถูกลบออกไปเมื่อเทียบกับ x86 นี่คือคำแนะนำทางคณิตศาสตร์ BCD และ aam (ASCII ปรับสำหรับการคูณ) อย่างไรก็ตาม คำแนะนำที่ล้าสมัยส่วนใหญ่ยังคงอยู่

โหมด

โปรเซสเซอร์ของสถาปัตยกรรมนี้รองรับโหมดการทำงานสองโหมด: โหมดยาวและโหมดดั้งเดิม (เข้ากันได้กับ x86 32 บิต)

โหมดยาว

โหมด "ยาว" เป็นโหมด "ดั้งเดิม" สำหรับโปรเซสเซอร์ x86-64 โหมดนี้ช่วยให้คุณใช้ประโยชน์จากสิทธิประโยชน์เพิ่มเติมทั้งหมดที่ได้รับจากสถาปัตยกรรม หากต้องการใช้โหมดนี้ จำเป็นต้องมีระบบปฏิบัติการ 64 บิต

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

โหมดดั้งเดิม

โหมด "ดั้งเดิม" นี้ช่วยให้โปรเซสเซอร์ดำเนินการตามคำสั่งที่ออกแบบมาสำหรับโปรเซสเซอร์ x86 และให้ความเข้ากันได้เต็มรูปแบบกับโค้ด 32 บิตและระบบปฏิบัติการ ในโหมดนี้ โปรเซสเซอร์จะทำงานเหมือนกับโปรเซสเซอร์ x86 ทุกประการ เช่น Athlon หรือ Pentium III และ คุณสมบัติเพิ่มเติมที่ได้รับจากสถาปัตยกรรม x86-64 (เช่น รีจิสเตอร์เพิ่มเติม) จะไม่สามารถใช้งานได้ ในโหมดนี้โปรแกรม 64 บิตและ ระบบปฏิบัติการจะไม่ทำงาน

โหมดนี้ประกอบด้วยโหมดย่อย:

  • โหมดจริง
  • โหมดป้องกัน
  • โหมดเสมือน 8086

โหมดจริงถูกใช้ใน MS-DOS ในโหมดจริงรหัส BIOS จะถูกดำเนินการเมื่อคอมพิวเตอร์บูท โหมดที่ได้รับการป้องกันใช้ในระบบปฏิบัติการมัลติทาสกิ้งสมัยใหม่รุ่น 32 บิต โหมด 8086 เสมือนเป็นโหมดย่อยที่ได้รับการป้องกันซึ่งมีจุดประสงค์เพื่อสร้างสิ่งที่เรียกว่าเป็นหลัก "เครื่องดอสเสมือน" หากคุณเรียกใช้แอปพลิเคชัน DOS 16 บิตจาก Windows เวอร์ชัน 32 บิต ตัวจำลอง NTVDM จะทำงานซึ่งใช้โหมดโปรเซสเซอร์นี้ โปรแกรมจำลองอื่น DOSBox ไม่ได้ใช้โหมด V86 นี้ แต่ทำการจำลองเต็มรูปแบบ

การสลับระหว่างโหมด

คุณไม่สามารถเปลี่ยนจากโหมดยาวไปเป็นโหมด 8086 จริงหรือเสมือนได้โดยไม่ต้องรีบูตเครื่อง ดังนั้น NTVDM จึงไม่ทำงานใน Windows รุ่น 64 บิต และไม่สามารถเรียกใช้โปรแกรม 16 บิตได้

โปรเซสเซอร์ x86-64 ที่ทันสมัยที่สุดรองรับโหมดจริงอย่างสมบูรณ์ หากทำการบูทผ่าน BIOS รหัส bootloader (จากเซกเตอร์ #0) จะถูกดำเนินการในโหมดจริง อย่างไรก็ตาม หากใช้ UEFI แทน BIOS การเปลี่ยนไปใช้โหมด Long จะเกิดขึ้นเร็วกว่านั้นด้วยซ้ำ และจะไม่มีการดำเนินการโค้ดใด ๆ ในโหมดจริง เราสามารถสรุปได้ว่าคอมพิวเตอร์สมัยใหม่เริ่มทำงานในโหมดยาว 64 บิตทันที

การแปลที่อยู่ในหน่วยความจำ

พูดง่ายๆ ก็คือ โปรเซสเซอร์จะเข้าถึงหน่วยความจำผ่านทางบัส ที่อยู่หน่วยความจำที่แลกเปลี่ยนบนบัสคือที่อยู่ทางกายภาพ นั่นคือ ตัวเลขดิบตั้งแต่ศูนย์ถึงขีดจำกัดบนของที่มีอยู่ หน่วยความจำกายภาพ(เช่น สูงสุด 2 33 หากคุณติดตั้ง RAM ขนาด 8 GB) ก่อนหน้านี้ Northbridge ตั้งอยู่ระหว่างโปรเซสเซอร์และชิปหน่วยความจำ แต่ในการใช้งานของ Intel โดยเริ่มจาก Sandy Bridge จะถูกรวมเข้ากับดายโปรเซสเซอร์

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

นี่ไม่ใช่ไดอะแกรมทางกายภาพ แต่เป็นเพียงคำอธิบายของกระบวนการแปลที่อยู่เท่านั้น

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

การแบ่งส่วนหน่วยความจำโหมดจริง

โปรเซสเซอร์ 16 บิต 8086 ใช้รีจิสเตอร์ 16 บิตและสามารถระบุหน่วยความจำได้โดยตรงขนาด 2 x 16 ไบต์เท่านั้น วิศวกรค้นพบวิธีทำให้มันทำงานกับหน่วยความจำจำนวนมากได้โดยไม่ต้องขยายความจุของรีจิสเตอร์

การลงทะเบียนเซ็กเมนต์ถูกคิดค้นขึ้นซึ่งควรจะระบุว่าหน่วยความจำขนาด 64 กิโลไบต์ใดที่เป็นที่อยู่ 16 บิตที่กำหนด

วิธีแก้ปัญหาดูสมเหตุสมผล: ขั้นแรกให้คุณตั้งค่าเซ็กเมนต์รีจิสเตอร์ โดยพื้นฐานแล้วพูดว่า "โอเค ฉันต้องการทำงานกับหน่วยความจำส่วนหนึ่งโดยเริ่มต้นที่ที่อยู่ X"; ดังนั้นที่อยู่แบบ 16 บิตจึงถูกใช้เป็นออฟเซ็ตภายในส่วนนี้แล้ว

โดยรวมแล้ว มีการลงทะเบียนเซ็กเมนต์ 16 บิตสี่รายการในตอนแรก จากนั้นเพิ่มอีกสองรายการ:

  • CS = ส่วนรหัส
  • DS = ส่วนข้อมูล
  • ES = ส่วนปลายทาง
  • SS = ส่วนสแต็ก

ในการคำนวณที่อยู่เชิงเส้นของเซลล์หน่วยความจำตัวประมวลผลจะคำนวณที่อยู่ทางกายภาพของจุดเริ่มต้นของเซ็กเมนต์ - คูณส่วนเซกเมนต์ของที่อยู่เสมือนด้วยหมายเลข 16 (หรือซึ่งเหมือนกันคือเลื่อนไปทางซ้ายด้วย 4 บิต) จากนั้นเพิ่มตัวเลขผลลัพธ์พร้อมกับออฟเซ็ตจากจุดเริ่มต้นของเซ็กเมนต์ ดังนั้นเซ็กเมนต์จึงทับซ้อนกันบางส่วน และสามารถระบุหน่วยความจำกายภาพโดยรวมได้ประมาณ 1 MB คำถามเกิดขึ้น: ทำไมไม่คูณค่าของเซกเมนต์รีจิสเตอร์ด้วย 65536 ทันที เพราะงั้นจะเป็นไปได้ที่จะระบุหน่วยความจำ 4 GB จากนั้นจึงไม่จำเป็นและเพิ่มต้นทุนของชิปเท่านั้น

ในโหมดเรียลไม่มีการป้องกันหน่วยความจำหรือสิทธิ์ในการเข้าถึง

โปรแกรมมีขนาดเล็ก ดังนั้นสแต็กและโค้ดจึงพอดีกับขนาด 64 KB จึงไม่มีปัญหา ในภาษา C ในสมัยโบราณนั้น ตัวชี้ปกติคือ 16 บิตและชี้สัมพันธ์กับเซ็กเมนต์เริ่มต้น แต่ก็มีพอยน์เตอร์ไกลที่รวมค่าของรีจิสเตอร์เซ็กเมนต์ด้วย

#รวม int main() ( ถ่านไกล * p = (ถ่านไกล * ) 0x55550005 ; ถ่านไกล * q = (ถ่านไกล * ) 0x53332225 ; * p = 80 ; (* p)++; printf ("%d" ,* q ) ; กลับ 0 ; )

พอยน์เตอร์ทั้งสองชี้ไปที่ที่อยู่ทางกายภาพเดียวกัน 0x55555

โหมดที่ได้รับการป้องกัน

ในโหมดป้องกันแบบ 32 บิต จะใช้โมเดลหน่วยความจำแบบเซ็กเมนต์ด้วย แต่จัดระเบียบตามหลักการอื่น: การจัดเรียงเซ็กเมนต์จะอธิบายโดยโครงสร้างพิเศษ (ตารางตัวอธิบาย) ที่อยู่ใน RAM

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

ตารางคำอธิบายมีสองประเภท: global (GDT) และ local (LDT) ตารางสากลอธิบายส่วนของระบบปฏิบัติการและโครงสร้างข้อมูลที่ใช้ร่วมกัน โดยแต่ละเคอร์เนลจะมีของตัวเอง สามารถกำหนดตารางท้องถิ่นสำหรับแต่ละงาน (กระบวนการ) เฉพาะเจาะจงได้ บิต TI คือ 0 สำหรับ GDT และ 1 สำหรับ LDT ดัชนีระบุหมายเลขตัวอธิบายในตารางตัวอธิบายส่วน ช่อง RPL ย่อมาจาก Requested Privilege Level

ตัวตารางนั้นเป็นเพียงอาร์เรย์ที่มีรายการขนาด 8 ไบต์ (ตัวอธิบายเซ็กเมนต์) โดยที่แต่ละรายการจะอธิบายหนึ่งเซ็กเมนต์และมีลักษณะดังนี้:

นอกเหนือจากที่อยู่พื้นฐานของเซ็กเมนต์แล้ว ตัวอธิบายยังมีขนาดของเซ็กเมนต์ (แม่นยำยิ่งขึ้น คือออฟเซ็ตสูงสุดที่มีอยู่) และแอตทริบิวต์เซ็กเมนต์ต่างๆ ที่ใช้เพื่อปกป้องหน่วยความจำและกำหนดสิทธิ์การเข้าถึงเซ็กเมนต์สำหรับส่วนต่างๆ โมดูลซอฟต์แวร์- ที่อยู่ฐานคือที่อยู่เชิงเส้นแบบ 32 บิตที่ชี้ไปยังจุดเริ่มต้นของเซ็กเมนต์ และขีดจำกัดจะกำหนดขนาดของเซ็กเมนต์ การเพิ่มที่อยู่ฐานให้กับที่อยู่หน่วยความจำโลจิคัลจะทำให้มีที่อยู่เชิงเส้น (ไม่มีการคูณด้วย 16 อีกต่อไป) DPL (Descriptor Privilege Level) - ระดับสิทธิ์ของ descriptor; นี่คือตัวเลขตั้งแต่ 0 (โหมดเคอร์เนลที่มีสิทธิพิเศษมากที่สุด) ถึง 3 (โหมดผู้ใช้ที่มีสิทธิพิเศษน้อยที่สุด) ที่ควบคุมการเข้าถึงเซ็กเมนต์

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

โหมดยาว

บนสถาปัตยกรรม x86-64 โหมดยาว (64 บิต) ไม่ได้ใช้การแบ่งส่วน การลงทะเบียนเซ็กเมนต์สี่ส่วน (CS, SS, DS และ ES) ถูกบังคับให้มีที่อยู่ฐานเป็น 0 การลงทะเบียนเซ็กเมนต์ FS และ GS ยังคงมีที่อยู่ฐานที่ไม่เป็นศูนย์ ซึ่งจะทำให้ระบบปฏิบัติการสามารถใช้เพื่อวัตถุประสงค์ในการบริการได้

ตัวอย่างเช่น Microsoft Windows บน x86-64 ใช้ GS เพื่อชี้ไปที่ Thread Environment Block ซึ่งเป็นโครงสร้างขนาดเล็กสำหรับแต่ละเธรดที่ประกอบด้วยข้อมูลเกี่ยวกับการจัดการข้อยกเว้น ตัวแปรภายในเธรด และข้อมูลต่อเธรดอื่นๆ เช่นเดียวกัน, เคอร์เนลลินุกซ์ใช้เซ็กเมนต์ GS เพื่อจัดเก็บข้อมูลต่อ CPU

แนวปฏิบัติ: การดูรีจิสเตอร์

(GDB) ข้อมูลการลงทะเบียน RAX 0x40052d 4195629 RBX 0x0 0 RCX 0x0 0 RDX 0x7FFFFFFDE78 14073748346744 RSI 0x7FFFFFDE RSP 0x7FFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDFFFFFFFFDDDD4E80 140737351863936 0X7FFFFFFFFFFFFDC10 1407373519528 4608 R12 0x400440 4195392 R13 0x7FFFFFFDE60 140737488346720 R14 0x0 0 r15 0x0 0 ฉีก 0x400531 0x400531 eflags 0x246 [ PF ZF IF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0

วงแหวนแห่งการป้องกัน

คุณคงทราบโดยสัญชาตญาณว่าแอปพลิเคชันมีสิทธิ์ที่จำกัด คอมพิวเตอร์อินเทล x86 และมีเพียงรหัสระบบปฏิบัติการเท่านั้นที่สามารถทำงานบางอย่างได้ มันทำงานอย่างไร? ระดับสิทธิ์ x86 เป็นกลไกที่ระบบปฏิบัติการและ CPU จำกัดความสามารถของโปรแกรมในโหมดผู้ใช้ ระดับสิทธิ์มีสี่ระดับ ตั้งแต่ 0 (มีสิทธิ์มากที่สุด) ถึง 3 (มีสิทธิ์น้อยที่สุด) และมีทรัพยากรหลักสามระดับ: หน่วยความจำ พอร์ต I/O และความสามารถในการดำเนินการคำสั่งเครื่องเฉพาะ ในช่วงเวลาใดก็ตาม โปรเซสเซอร์ x86 จะทำงานในระดับสิทธิ์ที่กำหนด ซึ่งจะกำหนดว่าโค้ดใดสามารถทำได้และไม่สามารถทำได้ ระดับสิทธิพิเศษเหล่านี้มักถูกอธิบายว่าเป็นวงแหวนป้องกัน โดยวงแหวนที่อยู่ด้านในสุดจะสอดคล้องกับสิทธิ์สูงสุด เคอร์เนล x86 ที่ทันสมัยที่สุดใช้เฉพาะ Ring 0 และ Ring 3 เท่านั้น

พื้นที่ที่อยู่เสมือน

แม้ว่าที่อยู่เสมือนจะมีความกว้าง 64 บิต การใช้งานปัจจุบัน (และชิปทั้งหมดในการออกแบบ) ไม่อนุญาตให้ใช้พื้นที่ที่อยู่เสมือน 2 64 ไบต์ (16 เอ็กซาไบต์) ทั้งหมด ซึ่งจะเป็นประมาณสี่พันล้านเท่าของพื้นที่ที่อยู่เสมือนบนเครื่อง 32 บิต ในอนาคตอันใกล้ ระบบปฏิบัติการและแอปพลิเคชันส่วนใหญ่จะไม่ต้องการพื้นที่ที่อยู่ขนาดใหญ่ ดังนั้นการใช้ที่อยู่เสมือนที่กว้างดังกล่าวจะช่วยเพิ่มความซับซ้อนและค่าใช้จ่ายในการแปลที่อยู่โดยไม่เกิดประโยชน์ที่แท้จริง ดังนั้น AMD จึงตัดสินใจว่าในการใช้งานสถาปัตยกรรมครั้งแรก เฉพาะที่อยู่เสมือน 48 บิตที่ต่ำกว่าเท่านั้นที่จะถูกนำมาใช้ในการแปลที่อยู่

นอกจากนี้ ข้อกำหนดของ AMD กำหนดให้ 16 บิตที่สำคัญที่สุดของที่อยู่เสมือนใดๆ บิต 48 ถึง 63 ต้องเป็นสำเนาของบิต 47 (โดยใช้หลักการขยายเครื่องหมาย) หากไม่เป็นไปตามข้อกำหนดนี้ โปรเซสเซอร์จะส่งข้อยกเว้น ที่อยู่ที่ตรงกับกฎนี้เรียกว่า " รูปแบบบัญญัติ- ตามรูปแบบบัญญัติที่อยู่ทั้งหมด 256 เทราไบต์ของพื้นที่ที่อยู่เสมือนที่ใช้งานได้ ซึ่งยังคงมีขนาดใหญ่กว่าพื้นที่ที่อยู่เสมือน 4 GB ของเครื่อง 32 บิตถึง 65536 เท่า

แบบแผนนี้อนุญาตให้ปรับขยายไปยังการกำหนดแอดเดรส 64 บิตที่แท้จริงได้หากจำเป็น ระบบปฏิบัติการหลายระบบ (รวมทั้งตระกูล Windows NT และ GNU/Linux) ใช้พื้นที่ครึ่งสูงของพื้นที่ที่อยู่ (พื้นที่เคอร์เนล) และเหลือครึ่งล่าง (พื้นที่ผู้ใช้) สำหรับโค้ดแอปพลิเคชัน สแต็กโหมดผู้ใช้ ฮีป และอื่นๆ พื้นที่ข้อมูล การออกแบบ "ที่อยู่แบบบัญญัติ" ช่วยให้มั่นใจได้ว่าการใช้งานที่เข้ากันได้กับ AMD64 ทุกครั้งจะมีหน่วยความจำครึ่งหนึ่งโดยพื้นฐานแล้ว ครึ่งล่างจะ "โตขึ้น" เมื่อมีบิตที่อยู่เสมือนเพิ่มมากขึ้น และครึ่งบนจะตรงกันข้ามที่ด้านบนของพื้นที่ที่อยู่และขยายลง .

Windows เวอร์ชัน x64 แรกไม่ได้ใช้ขนาด 256 TB ทั้งหมดด้วยซ้ำ จำกัดพื้นที่ผู้ใช้เพียง 8 TB และพื้นที่เคอร์เนล 8 TB พื้นที่ที่อยู่ 48 บิตทั้งหมดได้รับการสนับสนุนใน Windows 8.1 ซึ่งเปิดตัวในเดือนตุลาคม 2556

โครงสร้างตารางหน้า

แทนที่จะใช้ระบบตารางเพจสองระดับที่ใช้โดยระบบ x86 แบบ 32 บิต ระบบโหมดยาวจะใช้ตารางเพจสี่ระดับ

ขนาดหน้าที่เป็นไปได้:

  • 4 KB (2 12 ไบต์) - ใช้บ่อยที่สุด (เหมือนกับ x86)
  • 2 เมกะไบต์ (2 21 ไบต์)
  • 1 กิกะไบต์ (2 30 ไบต์)

ลำดับชั้นการแมปเพจขนาด 4KB ที่สมบูรณ์สำหรับพื้นที่ 48 บิตทั้งหมดจะใช้ RAM เพียง 512GB เท่านั้น (ประมาณ 0.195% ของพื้นที่เสมือน 256TB)

แนวปฏิบัติ: มันจะตกเร็วแค่ไหน?

เป็นที่แน่ชัดว่าโค้ดนี้ไม่ถูกต้องตามมาตรฐาน มีลักษณะการทำงานที่ไม่ได้กำหนดไว้ และหากเป็นเช่นนั้น คอมไพลเลอร์สามารถทำอะไรก็ได้ เช่น ไม่ขัดข้องเลย แต่อย่างไรก็ตาม หากคุณรันบน x86-64 มันจะล่มในช่วงเวลาหนึ่ง...

#รวม #รวม ถ่านบุฟ[1] ; #define PAGE_SIZE 4096 int main() ( char * ptr = buf; for (;; ) ( int offset = (intptr_t ) ptr % PAGE_SIZE; printf ("%p: offset = %d\n" , ptr ออฟเซ็ต) ;* ptr = "ก" ;

// คาดว่าจะมีข้อผิดพลาดในการแบ่งส่วน!

++ptr;

) กลับ 0 ;

-

ซ้อนการจัดระเบียบและการเรียกใช้ฟังก์ชัน

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

สแต็กใน x86

กองเติบโตขึ้นลง ด้านบนของสแต็กมีที่อยู่ต่ำสุดจริงๆ

มีการใช้ register rsp พิเศษ (Stack Pointer)

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

กองเติบโตขึ้นลง ด้านบนของสแต็กมีที่อยู่ต่ำสุดจริงๆ

คำแนะนำ

ดันแร็กซ์

เทียบเท่า

ย่อย rsp, 8 mov, rax

Mov rax เพิ่ม rsp 8

แบบแผนการเรียก Linux

Linux และระบบปฏิบัติการอื่นๆ ใช้ระเบียบการ System V AMD64 ABI

เพื่อความง่าย เราจะจำกัดตัวเองให้อยู่ที่อาร์กิวเมนต์และพอยน์เตอร์จำนวนเต็ม

อาร์กิวเมนต์หกข้อแรกถูกส่งผ่านการลงทะเบียน:

หากยังไม่เพียงพอ อาร์กิวเมนต์ที่เจ็ดก็ถูกส่งผ่านสแต็กแล้ว

หากฟังก์ชันต้องการใช้รีจิสเตอร์ rbx, rbp และ r12–r15 ฟังก์ชันนั้นจะต้องคืนค่าให้กลับสู่สถานะดั้งเดิมก่อนที่จะออก

ค่าส่งคืนสูงสุด 64 บิตจะถูกเก็บไว้ใน rax สูงสุด 128 บิต - ใน rax และ rdx

สแต็คเฟรม

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

นี่คือการเพิ่มประสิทธิภาพ การลดและเพิ่ม rsp เป็นสองคำสั่งอยู่แล้วซึ่งสามารถบันทึกได้

ตัวอย่างเช่น:

long utilfunc(long a, long b, long c) ( long xx = a + 2; long yy = b + 3; long zz = c + 4; ผลรวมยาว = xx + yy + zz; กลับ xx * yy * zz + ผลรวม)

กำลังบันทึกตัวชี้ฐานของเฟรม

ตัวชี้ rbp (และรุ่นก่อนหน้า ebp บน x86) ซึ่งเป็น "จุดยึด" ที่เสถียรไปยังจุดเริ่มต้นของสแต็กเฟรมระหว่างการดำเนินการฟังก์ชัน สะดวกมากสำหรับการเขียนโปรแกรมด้วยตนเองและสำหรับการดีบัก อย่างไรก็ตาม เมื่อไม่นานมานี้พบว่าโค้ดที่สร้างโดยคอมไพเลอร์ไม่จำเป็นต้องใช้ rbp จริงๆ (คอมไพเลอร์สามารถติดตามออฟเซ็ตจาก rsp ได้อย่างง่ายดาย)

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

gcc เก็บตัวชี้ฐานเริ่มต้นไว้บน x86 แต่อนุญาตให้ปรับให้เหมาะสมด้วยแฟล็กการคอมไพล์ -fomit-frame-pointer

อย่างไรก็ตาม "สิ่งใหม่" อีกประการหนึ่งที่ AMD64 ABI เปิดตัวคือการทำให้ตัวชี้ฐานเป็นทางเลือกอย่างชัดเจน gcc ทำตามคำแนะนำนี้ และโดยค่าเริ่มต้นจะละเว้นตัวชี้เฟรม x64 เมื่อคอมไพล์พร้อมการปรับให้เหมาะสม โดยให้ตัวเลือกในการบันทึกโดยระบุแฟล็ก -fno-omit-frame-pointer

แบบแผนการเรียก Windows

ไชโย ไม่มี cdecl/stdcall/fastcall/thiscall/register/safecall อีกต่อไป เหลือรูปแบบการโทรเดียวเท่านั้น! แต่ไม่เลย Microsot ได้พัฒนา vectorcall...

อาร์กิวเมนต์สี่ตัวแรกถูกส่งผ่านรีจิสเตอร์: rcx, rdx, r8, r9

ฟังก์ชันจะต้องคืนค่ารีจิสเตอร์ rbx, rbp, rdi, rsi, rsp, r12, r13, r14 และ r15 กลับสู่สถานะดั้งเดิม

แบบฝึกหัด: ผลรวมของตัวเลข 3 : c3 เกษียณ

การโทรของระบบ

กลไกการดำเนินการเรียกของระบบ

ฟังก์ชันซี

เมื่อคุณเรียกใช้ฟังก์ชันระบบใดๆ เช่น open() , write() , getpid() จากโค้ด C แสดงว่าคุณไม่ได้ทำให้ระบบเรียกตัวเองโดยตรง คุณไม่สามารถเปลี่ยนไปใช้โหมดเคอร์เนล (วงแหวน 0) จากโหมดผู้ใช้ (วงแหวน 3) โดยการเรียกใช้ฟังก์ชัน เรียกว่า ฟังก์ชั่นปกติดำเนินการภายใน ห้องสมุดมาตรฐานและภายในพวกเขาจะทำการเรียกระบบโดยใช้วิธีใดวิธีหนึ่ง:

  • ผ่านการขัดจังหวะของซอฟต์แวร์
  • ผ่านคำสั่ง syscall
  • ผ่านคำแนะนำ sysenter

ซอฟต์แวร์ขัดจังหวะ

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

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

การขัดจังหวะของซอฟต์แวร์คือการขัดจังหวะแบบซิงโครนัสที่โปรแกรมสามารถนำไปใช้โดยใช้คำสั่งพิเศษ

บนโปรเซสเซอร์ x86 หากต้องการเรียกการขัดจังหวะแบบซิงโครนัสอย่างชัดเจน จะมีคำสั่ง int ซึ่งมีอาร์กิวเมนต์เป็นหมายเลขขัดจังหวะ (ตั้งแต่ 0 ถึง 255) ในโหมดป้องกันและโหมดยาว โปรแกรมปกติไม่สามารถให้บริการขัดจังหวะได้ ฟังก์ชันนี้ใช้ได้เฉพาะกับรหัสระบบ (ระบบปฏิบัติการ)

ใน Linux OS หมายเลขขัดจังหวะ 0x80 ใช้เพื่อดำเนินการเรียกของระบบ ตัวจัดการขัดจังหวะ 0x80 คือเคอร์เนล Linux ก่อนที่จะดำเนินการขัดจังหวะ โปรแกรมจะวางหมายเลขของการเรียกระบบที่จะดำเนินการในรีจิสเตอร์ eax เมื่อการควบคุมย้ายไปที่วงแหวน 0 เคอร์เนลจะอ่านหมายเลขนี้และเรียกใช้ฟังก์ชันที่ต้องการ

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

  • วางหมายเลขโทรศัพท์ของระบบใน eax
  • วางอาร์กิวเมนต์ในรีจิสเตอร์ ebx, ecx, edx, esi, edi, ebp
  • เรียกคำสั่ง int 0x80
  • รับผลลัพธ์จาก eax

ตัวอย่างการใช้งาน mygetpid() (รับ PID ของกระบวนการปัจจุบัน) ในภาษาแอสเซมบลี (หมายเลข 20 ใช้สำหรับการเรียกระบบ getpid):

ไม่มีคำนำหน้า Intel_syntax globl mygetpid .text mygetpid: mov eax, 20 int 0x80 ret

คำสั่งซิสคอล

มันมากขึ้น วิธีการที่ทันสมัยซึ่งใช้กับ Linux 64 บิต ทำงานเร็วขึ้น

  • หมายเลขโทรศัพท์ของระบบอยู่ใน rax
  • อาร์กิวเมนต์ถูกเขียนเป็น rdi, rsi, rdx, r10, r8 และ r9
  • จากนั้นจึงเรียกว่า syscall
  • ผลลัพธ์อยู่ใน rax

ตัวอย่างการใช้งาน mygetpid() (รับ PID ของกระบวนการปัจจุบัน) ในแอสเซมเบลอร์ (สำหรับการเรียกระบบ getpid จากตาราง จะใช้หมายเลข 39):

ไม่มีคำนำหน้า Intel_syntax globl mygetpid .text mygetpid: mov rax, 39 syscall ret

การติดตามการโทรของระบบ

บน Linux strace เครื่องมือโหมดผู้ใช้ช่วยให้คุณติดตามได้ การโทรของระบบที่โปรแกรมนี้ทำงาน

วันนี้จะไม่มีใครแปลกใจกับความจริงที่ว่ารูปถ่ายครอบครัวสุดโปรดที่จัดเก็บและป้องกันจากความประหลาดใจที่ร้ายกาจในรูปแบบเช่นน้ำจากเพื่อนบ้านที่โชคร้ายที่ชั้นบนสุดที่ลืมปิดก๊อกน้ำสามารถเป็นตัวแทนบางอย่างได้ ชุดตัวเลขที่เข้าใจยากและในขณะเดียวกันก็ยังคงเป็นรูปถ่ายครอบครัว คอมพิวเตอร์ที่บ้านกลายเป็นเรื่องธรรมดาเหมือนกับ "กล่อง" ที่มีหน้าจอสีน้ำเงิน ฉันจะไม่แปลกใจถ้าในไม่ช้าพีซีที่บ้านจะถือว่าเทียบเท่ากับเครื่องใช้ไฟฟ้าในครัวเรือน อย่างไรก็ตาม “กลไกแห่งความก้าวหน้า” ที่ทุกคนคุ้นเคยคือสิ่งที่ Intel ทำนายไว้สำหรับเรา โดยส่งเสริมแนวคิดเกี่ยวกับบ้านดิจิทัล
ดังนั้นคอมพิวเตอร์ส่วนบุคคลจึงพบช่องทางเฉพาะในทุกด้านของชีวิตมนุษย์ การปรากฏและการเกิดขึ้นของมันในฐานะองค์ประกอบสำคัญของวิถีชีวิตได้กลายเป็นประวัติศาสตร์ไปแล้ว เมื่อเราพูดถึงพีซี เราหมายถึงระบบที่เข้ากันได้กับ IBM PC และค่อนข้างถูกต้องเช่นกัน มีผู้อ่านเพียงไม่กี่คนที่เคยเห็นระบบที่ไม่รองรับ IBM PC ด้วยตาของตัวเอง ซึ่งไม่ค่อยได้ใช้มากนัก

IBM PC และคอมพิวเตอร์ที่เข้ากันได้ทั้งหมดใช้โปรเซสเซอร์ x86 จริงๆ แล้วบางครั้งดูเหมือนว่านี่ไม่ใช่แค่สถาปัตยกรรมโปรเซสเซอร์เท่านั้น แต่ยังรวมถึงสถาปัตยกรรมของพีซีทั้งหมดด้วย เช่นเดียวกับอุดมการณ์ของโครงสร้างระบบโดยรวม เป็นการยากที่จะบอกว่าใครดึงใครมาด้วย ไม่ว่าจะเป็นนักพัฒนาอุปกรณ์ต่อพ่วงและผลิตภัณฑ์ขั้นสุดท้ายที่ปรับให้เข้ากับสถาปัตยกรรม x86 หรือในทางกลับกัน พวกเขากำหนดเส้นทางการพัฒนาของโปรเซสเซอร์ x86 โดยตรงหรือโดยอ้อม ประวัติความเป็นมาของ x86 ไม่ใช่เส้นทางแอสฟัลต์ที่ราบเรียบ แต่เป็นชุดของขั้นตอนที่นักพัฒนามีระดับความรุนแรงและความอัจฉริยะที่แตกต่างกันไป ซึ่งเกี่ยวพันกับปัจจัยทางเศรษฐกิจอย่างมาก ความรู้เกี่ยวกับประวัติของโปรเซสเซอร์ x86 นั้นไม่จำเป็นเลย การเปรียบเทียบโปรเซสเซอร์ของความเป็นจริงในปัจจุบันกับบรรพบุรุษโบราณนั้นไร้จุดหมาย แต่เพื่อที่จะติดตามแนวโน้มการพัฒนาทั่วไปและพยายามคาดการณ์ จำเป็นต้องมีการสำรวจอดีตทางประวัติศาสตร์ของสถาปัตยกรรม x86 แน่นอนว่างานประวัติศาสตร์ที่จริงจังอาจกินเวลามากกว่าหนึ่งเล่ม และไม่มีประโยชน์ที่จะอ้างวัตถุประสงค์และการรายงานข่าวในวงกว้างของหัวข้อนี้ ดังนั้นเราจะไม่เข้าสู่ความผันผวนของ "อายุการใช้งาน" ของโปรเซสเซอร์ x86 แต่ละรุ่น แต่จะจำกัดตัวเองอยู่เฉพาะเหตุการณ์ที่สำคัญที่สุดในมหากาพย์ x86 ทั้งหมด

1968
พนักงานสี่คนของ Fairchild Semiconductor: Bob Noyce ผู้จัดการและผู้ประดิษฐ์วงจรรวมในปี 1959 Gordon Moore ซึ่งเป็นผู้นำ การวิจัยทางวิทยาศาสตร์และการพัฒนาการออกแบบ Andy Grove ผู้เชี่ยวชาญด้านเทคโนโลยีเคมี และ Arthur Rock ผู้ให้การสนับสนุนทางการเงิน ได้ก่อตั้ง Intel ชื่อนี้ได้มาจากอินทิกรัลอิเล็กทรอนิกส์


1969
อดีตผู้อำนวยการฝ่ายการตลาดของ Fairchild Semiconductor, Jerry Sanders และบุคคลที่มีความคิดเหมือนกันอีกหลายคนได้ก่อตั้งบริษัท AMD (Advanced Micro Devices) ซึ่งเริ่มผลิตอุปกรณ์ไมโครอิเล็กทรอนิกส์

1971
เมื่อปฏิบัติตามคำสั่งซื้อชิป RAM อย่างใดอย่างหนึ่ง พนักงานของ Intel Ted Hoff เสนอให้สร้าง IC "อัจฉริยะ" ที่เป็นสากล การพัฒนานำโดย Federico Fagin เป็นผลให้ไมโครโปรเซสเซอร์ตัวแรก Intel 4004 ถือกำเนิดขึ้น

1978
ช่วงเวลาทั้งหมดก่อนหน้านี้เป็นยุคก่อนประวัติศาสตร์แม้ว่าจะแยกไม่ออกจากเหตุการณ์ที่เกิดขึ้นต่อไปก็ตาม ปีนี้ยุค x86 เริ่มต้นขึ้น - โดยอินเทลไมโครโปรเซสเซอร์ i8086 ถูกสร้างขึ้นซึ่งมีความถี่ 4.77.8 และ 10 MHz ความถี่ตลก? ใช่ นี่คือความถี่ของเครื่องคิดเลขสมัยใหม่ แต่นี่คือจุดเริ่มต้นทั้งหมด ชิปนี้ผลิตขึ้นโดยใช้เทคโนโลยี 3 μm และมีการออกแบบภายใน 16 บิตและบัส 16 บิต นั่นคือการสนับสนุน 16 บิตและด้วยเหตุนี้ระบบปฏิบัติการและโปรแกรม 16 บิตจึงปรากฏขึ้น
ต่อมาในปีเดียวกัน i8088 ได้รับการพัฒนา ความแตกต่างที่สำคัญคือบัสข้อมูลภายนอก 8 บิต ทำให้มั่นใจได้ถึงความเข้ากันได้กับฮาร์ดแวร์และหน่วยความจำ 8 บิตที่ใช้ก่อนหน้านี้ ข้อโต้แย้งที่สนับสนุนก็คือความเข้ากันได้กับ i8080/8085 และ Z-80 และราคาค่อนข้างต่ำ อย่างไรก็ตาม IBM เลือก i8088 เป็น CPU สำหรับพีซีเครื่องแรก ตั้งแต่นั้นเป็นต้นมา โปรเซสเซอร์ Intel จะกลายเป็นส่วนสำคัญ คอมพิวเตอร์ส่วนบุคคลและคอมพิวเตอร์เองก็จะถูกเรียกว่า IBM PC ไปอีกนาน

1982
i80286 ประกาศแล้ว “สองร้อยแปดสิบหก” กลายเป็นโปรเซสเซอร์ x86 ตัวแรกที่เจาะพื้นที่โซเวียตและหลังโซเวียตเป็นจำนวนมาก ความถี่สัญญาณนาฬิกา 6, 8, 10 และ 12 MHz ผลิตโดยใช้เทคโนโลยีการผลิต 1.5 μm และมีทรานซิสเตอร์ประมาณ 130,000 ตัว ชิปตัวนี้รองรับ 16 บิตเต็มรูปแบบ เป็นครั้งแรกที่มีการถือกำเนิดของ i80286 แนวคิดเช่น "โหมดที่ได้รับการป้องกัน" ปรากฏขึ้น แต่จากนั้นนักพัฒนาซอฟต์แวร์ก็ไม่ได้ใช้ประโยชน์จากความสามารถของมันอย่างเต็มที่ โปรเซสเซอร์สามารถจัดการหน่วยความจำได้มากกว่า 1 MB โดยการสลับไปยังโหมดที่ได้รับการป้องกัน แต่สามารถย้อนกลับได้หลังจากรีสตาร์ทเสร็จสมบูรณ์ และการจัดแบ่งการเข้าถึงหน่วยความจำแบบแบ่งกลุ่มต้องใช้ความพยายามเพิ่มเติมอย่างมากเมื่อเขียนโค้ดโปรแกรม สิ่งนี้นำไปสู่ความจริงที่ว่า i80286 ถูกใช้เหมือนกับ i8086 ที่รวดเร็วมากกว่า

ประสิทธิภาพของชิปเมื่อเทียบกับ 8086 (และโดยเฉพาะเมื่อเทียบกับ i8088) เพิ่มขึ้นหลายครั้งและสูงถึง 2.6 ล้านการทำงานต่อวินาที ในช่วงหลายปีที่ผ่านมาผู้ผลิตเริ่มใช้งานอย่างแข็งขัน สถาปัตยกรรมแบบเปิดไอบีเอ็มพีซี ในเวลาเดียวกันระยะเวลาของการโคลนโปรเซสเซอร์ x86 จาก Intel โดยผู้ผลิตบุคคลที่สามก็เริ่มขึ้น นั่นคือชิปดังกล่าวผลิตโดยบริษัทอื่นเป็นสำเนาถูกต้อง Intel 80286 กลายเป็นพื้นฐานสำหรับพีซีรุ่นใหม่ล่าสุดตามมาตรฐานเหล่านั้น นั่นคือ IBM PC/AT และโคลนต่างๆ มากมาย ข้อได้เปรียบหลักของโปรเซสเซอร์ใหม่คือประสิทธิภาพที่เพิ่มขึ้นและโหมดการกำหนดแอดเดรสเพิ่มเติม และที่สำคัญที่สุด - ความเข้ากันได้กับซอฟต์แวร์ที่มีอยู่ โดยปกติแล้ว โปรเซสเซอร์ยังได้รับอนุญาตจากผู้ผลิตบุคคลที่สาม...
ในปีเดียวกันนั้น AMD ได้ทำข้อตกลงกับ Intel ข้อตกลงใบอนุญาตและบนพื้นฐานของมันเริ่มการผลิตโคลนของโปรเซสเซอร์ x86

1985
ในปีนี้อาจเป็นเหตุการณ์ที่สำคัญที่สุดในประวัติศาสตร์ของโปรเซสเซอร์ที่มีสถาปัตยกรรม x86 - Intel เปิดตัวโปรเซสเซอร์ i80386 ตัวแรก อาจกล่าวได้ว่าเป็นการปฏิวัติ: โปรเซสเซอร์มัลติทาสกิ้ง 32 บิตที่มีความสามารถในการรันหลายโปรแกรมพร้อมกัน โดยพื้นฐานแล้วโปรเซสเซอร์สมัยใหม่ส่วนใหญ่ไม่มีอะไรมากไปกว่า 386 ที่รวดเร็ว ซอฟต์แวร์สมัยใหม่ใช้สถาปัตยกรรม 386 แบบเดียวกัน เพียงแต่ว่าโปรเซสเซอร์สมัยใหม่ทำสิ่งเดียวกัน แต่เร็วกว่าเท่านั้น Intel 386™ มีการปรับปรุงอย่างมากเหนือ i8086 และ i80286 โดยพื้นฐานแล้วโปรเซสเซอร์สมัยใหม่ส่วนใหญ่ไม่มีอะไรมากไปกว่า 386 ที่รวดเร็ว ซอฟต์แวร์สมัยใหม่ใช้สถาปัตยกรรม 386 แบบเดียวกัน เพียงแต่ว่าโปรเซสเซอร์สมัยใหม่ทำสิ่งเดียวกัน แต่เร็วกว่าเท่านั้น Intel 386™ มีการปรับปรุงอย่างมากเหนือ i8086 และ i80286 Intel 386™ มีการปรับปรุงการจัดการหน่วยความจำอย่างมีนัยสำคัญเมื่อเทียบกับ i80286 และความสามารถมัลติทาสก์ในตัวทำให้สามารถพัฒนาระบบปฏิบัติการ Microsoft Windows และ OS/2 ได้

ต่างจาก i80286 ตรงที่ Intel 386™ สามารถสลับจากโหมดที่ได้รับการป้องกันเป็นโหมดจริงและกลับมาอีกครั้งได้อย่างอิสระ และมีโหมดใหม่ - 8086 เสมือน ในโหมดนี้ โปรเซสเซอร์สามารถรันซอฟต์แวร์เธรดที่แตกต่างกันหลายตัวพร้อมกัน เนื่องจากแต่ละเธรดทำงานบน แยก "เสมือน" รถยนต์คันที่ 86 โปรเซสเซอร์ได้แนะนำโหมดการกำหนดแอดเดรสหน่วยความจำเพิ่มเติมที่มีความยาวส่วนต่างๆ ซึ่งทำให้การสร้างแอปพลิเคชันง่ายขึ้นอย่างมาก โปรเซสเซอร์ผลิตขึ้นโดยใช้กระบวนการทางเทคโนโลยีขนาด 1 ไมครอน เป็นครั้งแรกที่มีการนำเสนอโปรเซสเซอร์ Intel ในหลายรุ่นที่ประกอบขึ้นเป็นตระกูล 386 นี่คือจุดเริ่มต้นของเกมการตลาดอันโด่งดังของ Intel ซึ่งต่อมาส่งผลให้มีการแบ่งคอร์ที่พัฒนาแล้วหนึ่งคอร์ออกเป็นสองรุ่นเชิงพาณิชย์ เรียกในกลุ่มผู้ใช้และผู้เชี่ยวชาญว่า "Pentium สำหรับคนรวย Celeron สำหรับคนจน" แม้ว่าสิ่งที่แย่ตรงนี้ก็คือหมาป่าได้รับอาหารอย่างดีและแกะก็ปลอดภัย
มีการผลิตรุ่นต่อไปนี้:

386DX ที่ 16, 20, 25 และ 33 MHz มีหน่วยความจำที่สามารถระบุตำแหน่งได้ 4 GB;
386SX ที่มีความถี่ 16, 20, 25 และ 33 MHz ซึ่งแตกต่างจาก 386DX มีบัสข้อมูล 16 มากกว่า 32 บิตและหน่วยความจำที่สามารถกำหนดแอดเดรสได้ 16 MB ตามนั้น (ในทำนองเดียวกันในคราวเดียวโปรเซสเซอร์ i8088 คือ “สร้าง” จาก i8086 โดยการลดความกว้างบิตของบัสภายนอกเพื่อให้แน่ใจว่าเข้ากันได้กับอุปกรณ์ภายนอกที่มีอยู่)
386SL ในเดือนตุลาคม 1990 - โปรเซสเซอร์ Intel 386SX รุ่นมือถือที่มีความถี่ 20 และ 25 MHz

1989
Intel Corporation เปิดตัวโปรเซสเซอร์ตัวถัดไป - Intel 486™ DX พร้อมความถี่ 25, 33 และ 50 MHz Intel 486™ DX เป็นโปรเซสเซอร์ตัวแรกในตระกูล 486 และมีประสิทธิภาพเพิ่มขึ้นอย่างมาก (มากกว่า 2 เท่าที่ความถี่เดียวกัน) เมื่อเทียบกับตระกูล 386 โดยเพิ่มแคช L1 ขนาด 8 KB ที่รวมอยู่ในชิป และมีขนาดสูงสุด ของ L2 -แคชเพิ่มขึ้นเป็น 512 Kb i486DX ได้รวมหน่วยจุดลอยตัว (FPU - หน่วยจุดลอยตัว) ซึ่งก่อนหน้านี้ทำงานเป็นโปรเซสเซอร์ร่วมทางคณิตศาสตร์ภายนอกที่ติดตั้งอยู่บน บอร์ดระบบ- นอกจากนี้ นี่เป็นโปรเซสเซอร์ตัวแรกที่คอร์มีไปป์ไลน์ห้าขั้นตอน ดังนั้น คำสั่งที่ผ่านขั้นตอนแรกของไปป์ไลน์ ในขณะที่ดำเนินการต่อไปในขั้นตอนที่สอง จะปล่อยคำสั่งแรกสำหรับคำสั่งถัดไป หัวใจหลักของโปรเซสเซอร์ Intel 486™DX คือ Intel 386DX™ ที่รวดเร็ว รวมกับโปรเซสเซอร์ร่วมทางคณิตศาสตร์และแคช 8 KB บนชิปตัวเดียว การบูรณาการนี้ทำให้สามารถเพิ่มความเร็วของการสื่อสารระหว่างบล็อกให้เป็นค่าที่สูงมากได้
Intel เปิดตัวแคมเปญโฆษณาพร้อมสโลแกน "Intel: The Computer Inside" เวลาจะผ่านไปและจะกลายเป็นแคมเปญโฆษณาอันโด่งดัง “Intel Inside”

1991
โปรเซสเซอร์ของ AMD ถูกสร้างขึ้น - Am386™ อันนี้ถูกสร้างขึ้นบางส่วนภายใต้ลิขสิทธิ์ ส่วนหนึ่งมาจากการออกแบบของตัวเอง และทำงานที่ความถี่สูงสุด 40 MHz ซึ่งสูงกว่าโปรเซสเซอร์ Intel
ก่อนหน้านี้เล็กน้อย การดำเนินคดีทางกฎหมายครั้งแรกเกิดขึ้นระหว่าง Intel และ AMD เกี่ยวกับความตั้งใจของ AMD ในการขายโคลน Intel 386™ หลังจากเสริมความแข็งแกร่งให้กับจุดยืนอย่างมั่นคง Intel ไม่จำเป็นต้องแจกจ่ายใบอนุญาตให้กับผู้ผลิตบุคคลที่สามอีกต่อไปและจะไม่แบ่งปันพายของตัวเองกับใครเลย เป็นผลให้ AMD เข้าสู่ตลาดโปรเซสเซอร์ x86 เป็นครั้งแรกในฐานะคู่แข่ง บริษัทอื่นตามมา ดังนั้นการเผชิญหน้าครั้งใหญ่ระหว่างสองยักษ์ใหญ่จึงเริ่มต้นขึ้นซึ่งดำเนินต่อไปจนถึงทุกวันนี้ (คู่แข่งที่เหลือหลุดออกไป) ซึ่งทำให้โลกได้รับสิ่งดีๆมากมาย สโลแกนที่ไม่ได้พูดออกไป คู่แข่งของอินเทลกลายเป็นวลีที่ว่า “แบบเดียวกับ Intel แต่ราคาต่ำกว่า”
ในเวลาเดียวกัน เวลาอินเทลเปิดตัว i486SX ซึ่งเพื่อลดต้นทุนของผลิตภัณฑ์จึงไม่มีหน่วย FPU (ตัวประมวลผลร่วมแบบรวม) ซึ่งแน่นอนว่าส่งผลเสียต่อประสิทธิภาพการทำงาน ไม่มีความแตกต่างอื่นใดจาก i486DX

1992
ด้วยการเปิดตัวโปรเซสเซอร์ Intel 486DX2 มีการใช้ปัจจัยการคูณความถี่บัสเป็นครั้งแรก เมื่อถึงจุดนี้ ความถี่ภายในของคอร์เท่ากับความถี่ของบัสข้อมูลภายนอก (FSB) แต่มีปัญหาในการเพิ่มขึ้น เนื่องจากบัสต่อพ่วงในพื้นที่ (ในเวลานั้น VESA VL-bus) และแม้แต่ อุปกรณ์ต่อพ่วงเองก็แสดงความไม่เสถียรที่ความถี่เกิน 33 MHz ตอนนี้อยู่ที่ความถี่ รถเมล์เอฟเอสบีความถี่สัญญาณนาฬิกาหลัก 33 MHz คือ 66 MHz เนื่องจากการคูณด้วย 2 เทคนิคนี้มีประวัติยาวนานและใช้กันในปัจจุบัน มีเพียงตัวคูณใน CPU สมัยใหม่เท่านั้นที่สามารถเกิน 20 ได้ Intel 486™ DX2 กลายเป็นโปรเซสเซอร์ยอดนิยมมาเป็นเวลานานและ อย่างไรก็ตามมีการขายในปริมาณมากเช่นเดียวกับโคลนจากคู่แข่ง (AMD, Cyrix และอื่น ๆ ) ซึ่งตอนนี้มีความแตกต่างจาก "ต้นฉบับของ Intel" อยู่บ้างแล้ว

1993
เปิดตัวโปรเซสเซอร์ superscalar x86 ตัวแรกซึ่งมีความสามารถในการดำเนินการมากกว่าหนึ่งคำสั่งต่อรอบสัญญาณนาฬิกา - Pentium (ชื่อรหัส P5) ซึ่งสามารถทำได้โดยการมีสายพานลำเลียงที่ทำงานขนานกันสองตัวที่เป็นอิสระ โปรเซสเซอร์ตัวแรกมีความถี่ 60 และ 66 MHz และได้รับบัสข้อมูล 64 บิต เป็นครั้งแรกที่แคช L1 ถูกแบ่งออกเป็นสองส่วน: แยกจากกันสำหรับคำแนะนำและข้อมูล แต่หนึ่งในนวัตกรรมที่สำคัญที่สุดคือหน่วยจุดลอยตัว (FPU) ที่ได้รับการอัปเดตอย่างสมบูรณ์ ในความเป็นจริง ก่อนหน้านี้ไม่เคยมี FPU ที่ทรงพลังขนาดนี้บนแพลตฟอร์ม x86 และเพียงไม่กี่ปีหลังจากการเปิดตัว Intel Pentium คู่แข่งก็สามารถไปถึงระดับประสิทธิภาพได้ นอกจากนี้ เป็นครั้งแรกที่มีการรวมบล็อกการทำนายสาขาไว้ในโปรเซสเซอร์ ซึ่งได้รับการพัฒนาอย่างแข็งขันโดยวิศวกรตั้งแต่นั้นมา

สิ่งที่สำคัญที่สุดคือ: ในโปรแกรมใด ๆ มีการเปลี่ยนแบบมีเงื่อนไขมากมาย เมื่อการทำงานของโปรแกรมจะต้องไปตามเส้นทางใดเส้นทางหนึ่ง ขึ้นอยู่กับเงื่อนไข สามารถวางการเปลี่ยนแปลงได้เพียงหนึ่งในหลายสาขาในไปป์ไลน์ และหากท้ายที่สุดเต็มไปด้วยโค้ดจากสาขาที่ไม่ถูกต้อง ก็จะต้องเคลียร์และเติมรอบสัญญาณนาฬิกาหลายรอบ (ขึ้นอยู่กับจำนวนขั้นตอนของไปป์ไลน์) . มีการใช้กลไกการทำนายสาขาเพื่อแก้ไขปัญหานี้ โปรเซสเซอร์ประกอบด้วยทรานซิสเตอร์ 3.1 ล้านตัวและผลิตโดยใช้กระบวนการ 0.8 ไมโครเมตร การเปลี่ยนแปลงทั้งหมดนี้ทำให้สามารถเพิ่มประสิทธิภาพของโปรเซสเซอร์ใหม่ให้สูงขึ้นจนไม่สามารถบรรลุได้ ในความเป็นจริง การปรับโค้ดให้เหมาะสมที่สุด “สำหรับโปรเซสเซอร์” เกิดขึ้นได้ยากในตอนแรก และจำเป็นต้องใช้คอมไพเลอร์พิเศษ และเป็นเวลานานที่โปรเซสเซอร์ใหม่ล่าสุดต้องรันโปรแกรมที่ออกแบบมาสำหรับโปรเซสเซอร์ตระกูล 486 และ 386
ในปีเดียวกัน Pentium รุ่นที่สองปรากฏบนคอร์ P54 ซึ่งข้อบกพร่องทั้งหมดของ P5 ได้ถูกกำจัดออกไป ในระหว่างการผลิต มีการใช้กระบวนการทางเทคโนโลยีใหม่ขนาด 0.6 และหลังจากนั้น 0.35 ไมโครเมตร จนถึงปี 1996 โปรเซสเซอร์ใหม่ครอบคลุมความถี่สัญญาณนาฬิกาตั้งแต่ 75 ถึง 200 MHz
Pentium รุ่นแรกมีบทบาทสำคัญในการเปลี่ยนผ่านไปสู่ระดับใหม่ของประสิทธิภาพของคอมพิวเตอร์ส่วนบุคคล เป็นแรงผลักดันและกำหนดแนวทางการพัฒนาสำหรับอนาคต แม้ว่าประสิทธิภาพจะก้าวกระโดดครั้งใหญ่ แต่ก็ไม่ได้ทำให้เกิดการเปลี่ยนแปลงพื้นฐานใดๆ กับสถาปัตยกรรม x86

1994
Intel 486™DX4, AMD Am486DX4 และ Cyrix 4x86 ที่เกิดขึ้นใหม่ยังคงดำเนินต่อไปในสาย 486 และการใช้การคูณความถี่บัสข้อมูล โปรเซสเซอร์มีความถี่สามเท่า โปรเซสเซอร์ DX4 ของ Intel วิ่งที่ 75 และ 100 MHz และ Am486DX4 ของ AMD ถึง 120 MHz ระบบการจัดการพลังงานมีการใช้กันอย่างแพร่หลายในโปรเซสเซอร์ ไม่มีความแตกต่างพื้นฐานอื่นๆ จาก 486DX2

1995
ประกาศเปิดตัว Pentium Pro (P6 core) บัสโปรเซสเซอร์ใหม่, ไปป์ไลน์อิสระสามท่อ, การเพิ่มประสิทธิภาพสำหรับโค้ด 32 บิต, จาก 256 Kb ถึง 1 Mb L2 cache ที่รวมอยู่ในโปรเซสเซอร์และทำงานที่ความถี่คอร์, กลไกการทำนายสาขาที่ได้รับการปรับปรุง - โปรเซสเซอร์ใหม่เกือบทำลายสถิติในแง่ของ จำนวนนวัตกรรมที่ติดตั้ง Intel Pentium ก่อนหน้านี้

โปรเซสเซอร์อยู่ในตำแหน่งสำหรับใช้ในเซิร์ฟเวอร์และมีราคาที่สูงมาก สิ่งที่น่าทึ่งที่สุดคือคอร์ประมวลผล Pentium Pro ไม่ใช่คอร์สถาปัตยกรรม x86 จริงๆ รหัสเครื่อง x86 ที่เข้าสู่ CPU ได้รับการถอดรหัสภายในเป็นไมโครโค้ดที่คล้ายกับ RISC และนี่คือสิ่งที่แกนประมวลผลประมวลผล ชุดคำสั่ง CISC เช่นเดียวกับชุดคำสั่งของโปรเซสเซอร์ x86 บ่งบอกถึงความยาวคำสั่งแบบแปรผัน ซึ่งกำหนดความยากในการค้นหาแต่ละคำสั่งในสตรีม และดังนั้นจึงสร้างปัญหาในการพัฒนาโปรแกรม ทีม CISC มีความซับซ้อนและซับซ้อน คำสั่ง RISC นั้นเรียบง่าย สั้น และใช้เวลาน้อยกว่ามากในการรันคำสั่งที่มีความยาวคงที่ การใช้คำสั่ง RISC ช่วยให้คุณสามารถเพิ่มความขนานของการคำนวณตัวประมวลผลได้อย่างมากนั่นคือใช้ไปป์ไลน์มากขึ้นและลดเวลาดำเนินการของคำสั่ง แกน P6 เป็นพื้นฐานสำหรับสามแกนถัดไป โปรเซสเซอร์อินเทล- เพนเทียม 2, เซเลรอน, เพนเทียม 3
ปีนี้ยังเห็นเหตุการณ์สำคัญ - AMD ซื้อ NexGen ซึ่งในเวลานั้นมีการพัฒนาสถาปัตยกรรมขั้นสูง การควบรวมกิจการของทีมวิศวกรทั้งสองจะนำโปรเซสเซอร์ x86 ระดับโลกที่มีสถาปัตยกรรมไมโครที่แตกต่างจาก Intel มาใช้ในเวลาต่อมา และทำให้เกิดแรงผลักดันให้เกิดการแข่งขันที่ดุเดือดครั้งใหม่
โปรเซสเซอร์ MediaGX ใหม่จาก Cyrix ถูกนำเสนอเป็นครั้งแรกที่ Microprocessor Forum และคุณสมบัติที่โดดเด่นของมันคือตัวควบคุมหน่วยความจำในตัว ตัวเร่งกราฟิก อินเทอร์เฟซ บัส PCIและประสิทธิภาพเทียบเท่ากับประสิทธิภาพของ Pentium นี่เป็นความพยายามครั้งแรกในการบูรณาการอุปกรณ์อย่างแน่นหนาเช่นนี้

1996
โปรเซสเซอร์ AMD K5 ใหม่พร้อมคอร์ RISC ซุปเปอร์สเกลาร์ปรากฏตัวแล้ว อย่างไรก็ตาม แกน RISC และชุดคำสั่ง (คำสั่ง ROP) จะถูกซ่อนจากซอฟต์แวร์และผู้ใช้ และคำสั่ง x86 จะถูกแปลงเป็นคำสั่ง RISC วิศวกรของ AMD ใช้โซลูชันที่ไม่เหมือนใคร - คำสั่ง x86 จะถูกแปลงบางส่วนในขณะที่อยู่ในแคชของโปรเซสเซอร์ ตามหลักการแล้ว โปรเซสเซอร์ K5 สามารถดำเนินการได้ถึงสี่คำสั่ง x86 ต่อรอบสัญญาณนาฬิกา แต่ในทางปฏิบัติ โดยเฉลี่ยแล้ว จะมีการประมวลผลเพียง 2 คำสั่งต่อรอบสัญญาณนาฬิกาเท่านั้น

นอกจากนี้ การเปลี่ยนแปลงลำดับการคำนวณ การเปลี่ยนชื่อรีจิสเตอร์ และ "เทคนิค" อื่นๆ แบบดั้งเดิมสำหรับโปรเซสเซอร์ RISC สามารถเพิ่มประสิทธิภาพได้ โปรเซสเซอร์ K5 เป็นผลงานของทีมวิศวกรร่วมจาก AMD และ NexGen ความเร็วสัญญาณนาฬิกาสูงสุดไม่เกิน 116 MHz แต่ประสิทธิภาพของ K5 นั้นสูงกว่าโปรเซสเซอร์ Pentium ที่มีความเร็วสัญญาณนาฬิกาเท่ากัน ดังนั้นเพื่อวัตถุประสงค์ทางการตลาด เป็นครั้งแรกในการฝึกฝนการทำเครื่องหมาย CPU จึงมีการใช้คะแนนประสิทธิภาพซึ่งแตกต่างอย่างชัดเจนกับความเร็วสัญญาณนาฬิกาของ Pentium ซึ่งมีประสิทธิภาพเท่ากัน แต่โปรเซสเซอร์ยังคงไม่สามารถแข่งขันกับมันได้อย่างเพียงพอเนื่องจาก Pentium มีความถี่ถึง 166 MHz แล้ว
ในปีเดียวกันนั้น Intel Pentium MMX ก็ได้เปิดตัว นวัตกรรมหลักของโปรเซสเซอร์ P55C คือคำสั่ง MXX เพิ่มเติมสำหรับชุดคำสั่งซึ่งแทบไม่มีการเปลี่ยนแปลงใด ๆ เลยนับตั้งแต่สร้างโปรเซสเซอร์รุ่นที่สาม เทคโนโลยี MMX คือการใช้คำสั่งที่เน้นการทำงานกับข้อมูลมัลติมีเดีย ชุดคำสั่งพิเศษ SIMD (คำสั่งเดียว - หลายข้อมูล) ปรับปรุงประสิทธิภาพเมื่อดำเนินการเวกเตอร์ คำสั่งแบบวนรอบ และประมวลผลข้อมูลจำนวนมาก - เมื่อใช้ตัวกรองกราฟิกและเอฟเฟกต์พิเศษต่างๆ

โดยพื้นฐานแล้วนี่คือคำสั่งใหม่ 57 คำสั่งที่ออกแบบมาเพื่อเร่งความเร็วการประมวลผลวิดีโอและเสียง การเปลี่ยนแปลงเคอร์เนลที่เหลือคือการเพิ่มหน่วยความจำแคชโดยทั่วไป การปรับปรุงการทำงานของหน่วยความจำแคช และบล็อกอื่นๆ โปรเซสเซอร์ผลิตขึ้นโดยใช้กระบวนการ 0.35 ไมครอน ทรานซิสเตอร์ 4.5 ล้านตัว ความถี่สูงสุด 233 MHz.
การผลิตโปรเซสเซอร์ Superscalar Cyrix 6x86 เริ่มต้นบนคอร์ M1 ซึ่งจริงๆ แล้วเป็นโปรเซสเซอร์รุ่นที่ 5 โดยมีคุณลักษณะที่โดดเด่นคือไปป์ไลน์ "ลึก" และการใช้คำสั่ง x86 แบบคลาสสิกโดยไม่มีชุดคำสั่งเพิ่มเติม
ในช่วงสิ้นปี ขณะที่ Intel กำลังพัฒนา PentiumII นั้น AMD ก็กลับมาเป็นที่รู้จักอีกครั้งด้วยการเปิดตัวโปรเซสเซอร์ K6 รุ่นที่หก AMD-K6 มีพื้นฐานมาจากคอร์ที่พัฒนาโดยวิศวกร NexGen สำหรับโปรเซสเซอร์ Nx686 และได้รับการดัดแปลงอย่างมากโดย AMD เช่นเดียวกับ K5 แกน K6 ไม่ได้ทำงานด้วยคำสั่ง x86 แต่ใช้ไมโครโค้ดที่คล้ายกับ RISC โปรเซสเซอร์รองรับคำสั่ง MMX และบัสระบบ 100-MHz และมีแคช L1 เพิ่มขึ้นเป็น 64 KB ในไม่ช้าก็เห็นได้ชัดว่า PentiumII นั้นแข็งแกร่งเกินไปสำหรับ K6

ตั้งแต่ปี 2540 ถึงปัจจุบัน...
ภายในปี 1997 ทิศทางการพัฒนาทางวิศวกรรมของสถาปัตยกรรม x86 จากผู้ผลิตชั้นนำได้เป็นรูปเป็นร่างแล้ว ขั้นตอนต่อไปในการพัฒนาโปรเซสเซอร์ x86 สามารถมีลักษณะเป็นการเผชิญหน้าระหว่างสถาปัตยกรรมซึ่งยังคงดำเนินต่อไปจนถึงทุกวันนี้ ผู้ชนะที่ยิ่งใหญ่ ได้แก่ Intel ซึ่งยึดครองตลาดได้ 90%, AMD ซึ่งต่อสู้กับมันอย่างดื้อรั้น, สูญเสียกำลังการผลิตไปหลายครั้ง และ Cyrix ซึ่งจะถูกซื้อโดย VIA ในภายหลัง จากนั้นไม่สามารถทนต่อ การแข่งขันจะจมลงสู่ความสับสน ผู้ผลิตรายอื่นจะไม่สามารถแข่งขันได้เพียงพอและจะถูกบังคับให้มองหาตลาดเฉพาะกลุ่มอื่น ๆ มีการวางแผนการเปลี่ยนจาก CISC ไปเป็นคำสั่งย่อยที่คล้ายกับ RISC ในระดับที่น้อยลงสำหรับ Intel และมากขึ้นสำหรับ AMD นอกจากนี้ คำสั่ง CISC ยังคงมาถึงอินพุตและเอาต์พุตของโปรเซสเซอร์ x86 จริงๆ แล้ว เหตุใดพวกเขาจึงเริ่มแนะนำสถาปัตยกรรม RISC ภายในให้กับโปรเซสเซอร์ x86 ด้วยสถาปัตยกรรม CISC ดั้งเดิม ซึ่งช่วยให้ดำเนินการคำสั่งแบบขนานได้ลึกยิ่งขึ้น ใช่ จากสถาปัตยกรรม CISC x86 ในสมัยก่อน รุ่นที่สี่ทุกอย่างถูกบีบออก และไม่มีวิธีใดที่จะปรับปรุงประสิทธิภาพในระดับชุดคำสั่งพื้นฐานได้

ตั้งแต่นั้นเป็นต้นมา ไม่มีการเปลี่ยนแปลงหรือความก้าวหน้าใหม่ๆ โดยพื้นฐานในการพัฒนาสถาปัตยกรรม แม้ว่าโปรเซสเซอร์สมัยใหม่จะเร็วขึ้นหลายร้อยเท่า เช่น 386 วิศวกรได้ฝึกฝนและปรับปรุงสถาปัตยกรรมไมโครหลักที่มีอยู่ และสถาปัตยกรรมใหม่ก็เป็นเพียงการปรับปรุงสถาปัตยกรรมเก่าเท่านั้น การปรับปรุงและความพยายามที่จะปรับปรุงประสิทธิภาพทั้งหมดขึ้นอยู่กับการเพิ่มประสิทธิภาพ โซลูชั่นที่มีอยู่การแนะนำการแก้ไขต่างๆ และ "ไม้ค้ำยัน" สำหรับ FPU ที่ง่อย ระบบสำหรับจัดระเบียบไปป์ไลน์และแคช วิธีที่ถูกแฮ็กแต่ยังคงมีประสิทธิภาพคือการเพิ่มขนาดหน่วยความจำแคชและความถี่บัส FSB อย่างต่อเนื่อง โปรเซสเซอร์ที่ทันสมัยมีหน่วยความจำแคชสูงสุด 2 MB ทำงานที่ความถี่คอร์และความถี่ บัสระบบถึง 800 MHz จากนั้นใช้ตัวคูณ เนื่องจากความถี่ที่สร้างขึ้นจริงมีเพียง 200 MHz ในช่วง 7 ปีที่ผ่านมา "นวัตกรรมการเสริมกำลัง" ต่อไปนี้ได้ถูกนำมาใช้ในโปรเซสเซอร์ x86: ในที่สุดหน่วยความจำแคชก็ถูกย้ายไปยังชิปโปรเซสเซอร์และถ่ายโอนไปยังความถี่หลัก หน่วยการทำนายสาขาได้รับการแนะนำและได้รับการปรับปรุงอย่างต่อเนื่องเพื่อเป็นการชดเชยสำหรับ เพิ่มความยาว (จำนวนขั้นตอน) ของไปป์ไลน์กลไก การเปลี่ยนแปลงแบบไดนามิกลำดับการดำเนินการคำสั่ง การลดจำนวนรอบที่ไม่ได้ใช้งาน กลไกการดึงข้อมูลล่วงหน้าสำหรับการใช้หน่วยความจำแคชอย่างมีเหตุผลมากขึ้น ชุดคำสั่งเพิ่มเติมกำลังเพิ่มขึ้น: SSE, SSE2, SSE3, 3DNow!, 3DNow Professional หากยังสามารถเรียก MMX ได้ โดยขยายชุดคำสั่ง x86 เพิ่มเติม ชุดที่ตามมาทั้งหมดไม่น่าจะเป็นไปได้ เนื่องจากไม่มีอะไรเหลือให้เพิ่มในคำสั่ง x86 จุดเด่นของการปรากฏตัวของชุดเหล่านี้คือการพยายามใช้หน่วยจุดลอยตัว (FPU) ให้น้อยที่สุดเท่าที่จะเป็นไปได้ในรูปแบบที่เป็นอยู่ เนื่องจากแม้ว่าจะมีประสิทธิภาพสูง แต่ก็มีคุณลักษณะที่ความสามารถในการปรับตัวต่ำเพื่อให้ได้ความแม่นยำสูง การคำนวณความไม่แน่นอนของสถาปัตยกรรมภายในและความคาดเดาไม่ได้ ซึ่งทำให้ชีวิตของโปรแกรมเมอร์ยากขึ้น นั่นคือพวกเขาแนะนำหน่วยการคำนวณพิเศษจริง ๆ ซึ่งไม่ได้เน้นไปที่การคำนวณโดยทั่วไป แต่เน้นไปที่งานจริงและพบบ่อยซึ่งเสนอให้ดำเนินการข้าม FPU แบบคลาสสิก

ดูเหมือนการดิ้นรนกับผลที่ตามมาจากการรวมตัวประมวลผลร่วมทางคณิตศาสตร์เข้ากับ CPU เมื่อปี 1989 ไม่ว่าในกรณีใด หากคุณคิดและนับจำนวน โปรเซสเซอร์จะใช้เวลาส่วนใหญ่ "กับตัวเอง" - กับการแปลง การคาดการณ์ และอื่นๆ อีกมากมายทุกประเภท และไม่เกี่ยวกับการรันโค้ดโปรแกรม
เมื่อมองย้อนกลับไปก็ชัดเจนว่าทุกอย่างไม่ราบรื่น การแนะนำปัจจัยการคูณและความไม่ซิงโครนัสที่เกิดขึ้นตลอดจนการเพิ่มจำนวนขั้นตอนไปป์ไลน์ล้วนเป็นดาบสองคม ในอีกด้านหนึ่งสิ่งนี้ทำให้สามารถเพิ่มความเร็วสัญญาณนาฬิกาของโปรเซสเซอร์เป็นเกือบ 4 GHz (และนี่ไม่ใช่ขีด จำกัด ) ในทางกลับกันเรามีคอขวดในรูปแบบของบัส FSB และปัญหาเกี่ยวกับการแตกแขนงแบบมีเงื่อนไข . แต่ทุกอย่างมีเวลาของมัน และเห็นได้ชัดว่านี่เป็นการตัดสินใจที่สมเหตุสมผล เนื่องจากมีปัจจัยทางเศรษฐกิจที่ชั่วร้ายอยู่เสมอ
ควรสังเกตว่าในช่วงไม่กี่ปีที่ผ่านมาประสบความสำเร็จอย่างยอดเยี่ยมในด้านการผลิตเซมิคอนดักเตอร์ กระบวนการทางเทคโนโลยี 90 นาโนเมตรสำหรับการผลิตโปรเซสเซอร์ x86 ได้รับการฝึกฝนแล้วซึ่งทำให้สามารถบรรลุความถี่สัญญาณนาฬิกาที่ใกล้เคียงกับช่วงไมโครเวฟและจำนวนทรานซิสเตอร์ในคริสตัลสูงถึง 170 ล้าน (Pentium 4 EE)
เราคุ้นเคยกับการคิดว่าโปรเซสเซอร์เป็นอุปกรณ์หลักในพีซี และเป็นตัวกำหนดทิศทางของการใช้คอมพิวเตอร์ทั่วโลก แต่การเดินขบวนแห่งชัยชนะของสถาปัตยกรรม x86 ซึ่งกินเวลานานกว่าหนึ่งในสี่ของศตวรรษนั้นไม่ได้เริ่มต้นจากโปรเซสเซอร์โดยเฉพาะ แต่เริ่มต้นกับอุปกรณ์ผู้ใช้โดยรวม - IBM PC ในเวลานั้น IBM ไม่รู้ว่าพีซีเครื่องนี้จะมีอนาคตอันสดใสรออยู่อย่างไร และพวกเขาไม่ได้ให้ความสำคัญกับโปรเจ็กต์นี้เลย พวกเขาเปิดให้ทุกคนเข้าถึงได้ ความสำเร็จของ IBM PC เกิดจากการเปิดกว้างของแนวคิด ความสำเร็จของซอฟต์แวร์และ MS DOS และโปรเซสเซอร์ในนั้นอาจเป็นสถาปัตยกรรมอะไรก็ได้ แต่มันก็เกิดขึ้นที่ IBM เลือก i8088 และ i8086 จากนั้นทุกอย่างก็เริ่มหมุนและหมุน... แต่ท้ายที่สุดแล้วโปรเซสเซอร์ x86 กลับกลายเป็นว่าไม่เป็นเช่นนั้น คอมพิวเตอร์สากลสำหรับทุกโอกาสหรืออุปกรณ์ "อัจฉริยะ" ที่มีอยู่ทั่วไปทุกหนทุกแห่งและสามารถทำได้ทุกอย่างอย่างที่เราฝันไว้เมื่อก่อน และ "กฎหมาย" ของกอร์ดอน มัวร์ (ทุกๆ 2 ปี จำนวนทรานซิสเตอร์ในชิปโปรเซสเซอร์จะเพิ่มขึ้นสองเท่า) กลายเป็นกฎหมายสำหรับ Intel เท่านั้น ซึ่งวางไว้แถวหน้าของนโยบายการตลาด และเห็นได้ชัดว่าไม่สะดวกที่จะปฏิเสธคำนี้ .

วันนี้เราสามารถพูดได้อย่างชัดเจนว่าสถาปัตยกรรม x86 ถึงทางตันแล้ว การมีส่วนร่วมของเธอในการทำให้คอมพิวเตอร์เป็นที่นิยมในฐานะอุปกรณ์นั้นยิ่งใหญ่มากและไม่มีใครโต้แย้งในเรื่องนี้ อย่างไรก็ตาม คุณไม่สามารถมีความเกี่ยวข้องได้ตลอดไป ม้าตัวหนึ่งที่อายุน้อยและแข็งแกร่งได้กลายเป็นคนแก่ที่จู้จี้จุกจิกซึ่งยังคงถูกควบคุมไว้กับเกวียน ความอยากของผู้ใช้นั้นไม่เพียงพอ และในไม่ช้าสถาปัตยกรรม x86 ก็จะไม่สามารถสนองความต้องการของผู้ใช้ได้ แน่นอนว่าการเปลี่ยนแปลงนี้เกี่ยวข้องกับความพยายามของ Herculean เนื่องจากกลุ่มพีซีมูลค่าหลายล้านดอลลาร์ของโลกซึ่งโดยส่วนใหญ่แล้วใช้โปรเซสเซอร์สถาปัตยกรรม x86 และที่สำคัญที่สุดคือใช้ซอฟต์แวร์สำหรับโค้ด x86 คุณไม่สามารถพลิกทุกสิ่งได้ภายในวันเดียว แต่ต้องใช้เวลาหลายปี แต่การพัฒนาโปรเซสเซอร์และโปรแกรม 64 บิตกำลังได้รับแรงผลักดันด้วยความเร็วที่น่าอิจฉา Intel เปิดตัว Itanium2 และ AMD ได้เปิดตัว Athlon 64 มาเกือบหนึ่งปีแล้วซึ่งไม่มีสถาปัตยกรรม x86 เลยแม้ว่าจะเต็มแล้วก็ตาม เข้ากันได้และยังสามารถรันโปรแกรมเก่าทั้งหมดได้ ดังนั้นเราสามารถพูดได้ว่า AMD Athlon 64 ถือเป็นจุดเริ่มต้นของการออกจากสถาปัตยกรรม x86 และด้วยเหตุนี้จึงเปิดช่วงการเปลี่ยนแปลง
อย่างที่คุณเห็น การอ้างว่าโปรเซสเซอร์เป็นส่วนประกอบพีซีที่เติบโตเร็วที่สุดนั้นยังห่างไกลจากการไม่มีมูลความจริง ลองนึกภาพว่าคอมพิวเตอร์สำหรับเด็กของเราจะติดตั้งโปรเซสเซอร์ตัวใด คิดแล้วสยอง!

ในออดโนคลาสนิกิ


ภูมิหลังทางประวัติศาสตร์โดยย่อ

วิวัฒนาการของไมโครโปรเซสเซอร์ในอดีตบอกเป็นนัยถึงการเพิ่มความกว้างของการลงทะเบียนจำนวนเต็ม เช่น จำนวนบิตสูงสุดที่สร้างตัวเลขซึ่งเป็นไปได้ที่จะดำเนินการเบื้องต้น การดำเนินการทางคณิตศาสตร์โดยดำเนินการคำสั่งที่เหมาะสม นอกจากนี้ ปริมาณของที่อยู่ที่สามารถระบุตำแหน่งได้ซึ่งสามารถเข้าถึงได้นั้นขึ้นอยู่กับพารามิเตอร์นี้เชิงเส้นตรง (โดยไม่มีเทคนิคใด ๆ ที่ทำให้การทำงานช้าลง)
ไมโครโปรเซสเซอร์ Intel 4004 ตัวแรกคือ 4 บิตและเป็นผู้ก่อตั้งตระกูล x86 เช่น โปรเซสเซอร์ตัวแรกที่ใช้ชุดคำสั่งพื้นฐานยอดนิยมจนถึงทุกวันนี้ Intel 8086 เป็นแบบ 16 บิต ยุคของไมโครโปรเซสเซอร์ 32 บิตเริ่มต้นในปี 1985 ด้วย Intel 386; ตั้งแต่นั้นมา จนถึงและรวมถึง Intel Pentium4 และ AMD AthlonXP ระบบคำสั่งได้รับการเสริมเท่านั้น (MMX, SSE/SSE2/SSE3, 3Dnow!) แต่ แม้ว่าความจุบิตของบัสภายนอกและแคชบัสจะเพิ่มขึ้นเป็น 256 บิตในบางกรณี แต่จำนวนบิตของการลงทะเบียนจำนวนเต็มสำหรับวัตถุประสงค์ทั่วไปยังคงเท่ากับ 32
ในขณะเดียวกัน โปรเซสเซอร์ประสิทธิภาพสูงเกือบทั้งหมดที่มีสถาปัตยกรรมรุ่นใหม่กว่า x86 (ส่วนใหญ่เป็นรุ่น RISC) เป็นแบบ 64 บิตมานานแล้ว (โปรเซสเซอร์ตัวแรกคือ MIPS R3000 ปรากฏในปี 1994 และเป็นที่รู้จักสำหรับเวิร์กสเตชันและเซิร์ฟเวอร์ SGi เป็นหลัก) ยิ่งไปกว่านั้น Intel กำลังโปรโมตโปรเซสเซอร์ 64 บิตเริ่มแรกรุ่นที่สองของตัวเองด้วยสถาปัตยกรรม IA64 (ใช้เทคโนโลยี VLIW) ด้วยชื่อทางการค้า Itanium ซึ่งไม่มีซอฟต์แวร์ที่เข้ากันได้กับ x86
อย่างไรก็ตาม ในปี พ.ศ. 2545 AMD ได้เปิดตัวการพัฒนาสถาปัตยกรรม x86 ที่เรียกว่า AMD64 ซึ่งเป็นส่วนขยายอีกชุดหนึ่งของชุดคำสั่ง x86 แต่ได้รับการออกแบบให้ทำงานกับรีจิสเตอร์จำนวนเต็มวัตถุประสงค์ทั่วไป 64 บิต ในด้านฮาร์ดแวร์ ชุดคำสั่งนี้ถูกนำมาใช้ครั้งแรกกับโปรเซสเซอร์ตระกูล AMD K8: Opteron/Athlon64 ซึ่งเป็นซอฟต์แวร์เต็มรูปแบบที่เข้ากันได้กับโปรเซสเซอร์ x86 ทั่วไป
ในอีกสองปีข้างหน้า เห็นได้ชัดว่าศักยภาพสูงสุดของโปรเซสเซอร์เหล่านี้จะเกิดขึ้นได้ก็ต่อเมื่อทำงานในระบบปฏิบัติการที่ใช้ชุดคำสั่งที่เหมาะสมและการกำหนดแอดเดรสหน่วยความจำ 64 บิต ซึ่งประการแรกคือทำให้สามารถทำงานได้โดยไม่ต้อง ข้อจำกัดใดๆ กับอาร์เรย์ข้อมูลเชิงเส้นมากกว่า 4GB
ประการแรก ระบบปฏิบัติการตระกูล Linux ได้รับการย้ายไปยังโปรเซสเซอร์ใหม่ พร้อมด้วยชุดแอปพลิเคชันที่เป็นตัวแทนที่ค่อนข้างสำคัญต่อความเร็วของโปรเซสเซอร์และต้องใช้หน่วยความจำจำนวนมาก ความเร็วและความเสถียรของโปรเซสเซอร์ใหม่ตลอดจนปัญหาพื้นฐานในการสร้างโปรเซสเซอร์เดสก์ท็อปด้วย สถาปัตยกรรมอินเทล IA64 สนับสนุนให้ Microsoft เริ่มย้ายระบบปฏิบัติการไปยังแพลตฟอร์มนี้
ตั้งแต่นั้นมาก็ชัดเจนว่าชุดคำสั่ง AMD64 จะกลายเป็นมาตรฐานอุตสาหกรรมใหม่และ Intel ไม่มีทางเลือกอื่นนอกจากเพิ่มอะนาล็อกที่สมบูรณ์ของชุดคำสั่ง AMD64 ที่เรียกว่า EM64T (เทคโนโลยีหน่วยความจำขยาย 64 บิต) ให้กับโปรเซสเซอร์ ในการนำไปปฏิบัติของ Intel

โปรเซสเซอร์ x86 64 บิตมีความแตกต่างโดยพื้นฐานจากโปรเซสเซอร์ 32 บิตอย่างไร
นอกจากความเป็นไปได้แล้ว ทำงานเร็วด้วยจำนวนเต็ม 64 บิตและการกำหนดที่อยู่โดยตรงของหน่วยความจำเสมือนและหน่วยความจำกายภาพจำนวนมากอย่างไม่มีใครเทียบ มาตรฐานอุตสาหกรรมใหม่สำหรับโปรเซสเซอร์ x86 ได้ขจัดข้อบกพร่องพื้นฐานสามประการของสถาปัตยกรรมนี้:
1) เพิ่มจำนวนการลงทะเบียนจำนวนเต็มวัตถุประสงค์ทั่วไปเป็นสองเท่า - ตามพารามิเตอร์นี้ ผู้สืบทอดทั้งหมดของ Intel 386 นั้นอยู่ไกลจากโปรเซสเซอร์ RISC และ VLIW สมัยใหม่มาก การใช้รีจิสเตอร์เหล่านี้ของคอมไพเลอร์สามารถปรับปรุงประสิทธิภาพการใช้งานของอัลกอริธึมจำนวนมากได้อย่างมาก
2)ใช้สำหรับการดำเนินการจุดลอยตัวไม่ใช่สแต็ก แต่เป็นรีจิสเตอร์ที่ใช้ในชุดคำสั่ง SSE2 มันมีผลกระทบต่อประสิทธิภาพที่เห็นได้ชัดเจนมาก แต่ยังต้องมีการคอมไพล์ซอฟต์แวร์ใหม่ด้วย
3)DEP - การป้องกันการดำเนินการข้อมูล (การป้องกันการส่งการดำเนินการของเนื้อหาของส่วนข้อมูลเมื่อเกิดข้อผิดพลาดล้น) หรือที่เรียกว่า EVP (การป้องกันไวรัสขั้นสูง) ทำให้การทำงานของบางคลาสมีความซับซ้อนอย่างมาก มัลแวร์ก่อนอื่น - เวิร์มและโทรจัน ไม่ต้องการการคอมไพล์ซอฟต์แวร์ใหม่ นอกจากนี้ยังรองรับระบบปฏิบัติการ Microsoft 32 บิตโดยเริ่มจาก WindowsXP SP2 และ Windows 2003 Server SP1

ฉันต้องใช้อะไรบ้างเพื่อรันแอปพลิเคชัน x86 64 บิตบนพีซีของฉัน
1) โปรเซสเซอร์ x86 64 บิต ในขณะที่เขียนคำถามที่พบบ่อย ได้แก่โปรเซสเซอร์ AMD ที่รองรับเทคโนโลยี AMD64 และโปรเซสเซอร์ Intel ที่มี EM64T ตามลำดับ โดยเฉพาะ เรากำลังพูดถึง AMD Opteron/Athlon64/Turion 64 (อะนาล็อกบนมือถือของ Athlon64)/Sempron 64/Phenom64 คุณ การสนับสนุนของอินเทล EM64T มีอยู่ในโปรเซสเซอร์ Celeron D 3X1/3X6, Pentium4 5X1/5X6/6XX, Pentium D, Pentium XE (ไม่ใช่ Pentium4 XE!), Xeon DP ทั้งหมดที่มีบัส 800 MHz และ XeonMP พร้อมบัส 667 MHz รวมถึงอนาคตส่วนใหญ่ด้วย โปรเซสเซอร์ Intel ยกเว้น Pentium M และ Celeron M

อัพเดตเมื่อ มกราคม 2551 - ปัจจุบัน ในขณะนี้ในที่สุดชุดคำสั่ง AMD64/EM64T ก็กลายเป็นมาตรฐานสำหรับโปรเซสเซอร์ x86 แบบพกพา เดสก์ท็อป และเซิร์ฟเวอร์ทั้งหมดที่ผลิตขึ้นจาก Intel และ AMD

คุณต้องตรวจสอบให้แน่ใจด้วยว่า BIOS รู้จักโปรเซสเซอร์อย่างถูกต้อง เมนบอร์ด(ซึ่งหมายความว่ามีการโหลดไมโครโค้ดที่จำเป็นลงไปการไม่ปฏิบัติตามเงื่อนไขนี้อาจนำไปสู่ปัญหาร้ายแรงในการทำงานของคอมพิวเตอร์) อาจจำเป็นต้องมีการอัพเดตในบางสถานการณ์ ไบออสเมนบอร์ดค่าธรรมเนียม สิ่งนี้เกี่ยวข้องกับโปรเซสเซอร์ Intel เป็นหลัก เนื่องจากมาเธอร์บอร์ด LGA775 บางรุ่นไม่รองรับโปรเซสเซอร์ดังกล่าวในตอนแรก
2) ระบบปฏิบัติการ
ในขณะที่เขียนคำถามที่พบบ่อย ระบบปฏิบัติการต่อไปนี้จะพร้อมใช้งาน:
Microsoft Windows XP Professional x64 Edition, Microsoft Windows 2003 Server x64 Editions (มาตรฐาน/องค์กร/ศูนย์ข้อมูล) วินโดวส์เซิร์ฟเวอร์ในปี 2008 Sun Solaris และ Linux และ FreeBSD รุ่นต่างๆ ก็ถูกย้ายไปยังแพลตฟอร์ม AMD64 ด้วย (การอภิปรายโดยละเอียดเกี่ยวกับคุณสมบัติของระบบปฏิบัติการที่คล้ายยูนิกซ์นั้นอยู่นอกเหนือขอบเขตของคำถามที่พบบ่อยนี้) วินโดวส์วิสต้ามีเวอร์ชัน x64 ของทุกรุ่น ยกเว้นเวอร์ชันเริ่มต้น
3) ไดรเวอร์ ไดรเวอร์ทั้งหมดที่ทำงานอยู่ในเคอร์เนลของระบบจะต้องเป็นแบบ 64 บิต ไม่มีการระบุความเข้ากันได้แบบย้อนหลัง สำหรับส่วนประกอบที่พบบ่อยที่สุด ( การ์ดแสดงผล nVidia GeForce และ ATi Radeon, ชิปเซ็ตและดิสก์ คอนโทรลเลอร์ของอินเทล, VIA, nVidia) ไดรเวอร์ดังกล่าวได้ถูกเขียนไว้แล้ว

แอปพลิเคชันทั่วไปจะทำงานบน Windows 64 บิตหรือไม่
1) แอปพลิเคชัน 32 บิตสำหรับ Microsoft Windows - ใช่ จะมีและในบางสถานการณ์ประสิทธิภาพอาจเพิ่มขึ้นได้เมื่อเทียบกับการทำงานบนคอมพิวเตอร์เครื่องเดียวกัน แต่ภายใต้ระบบปฏิบัติการ 32 บิต (โดยเฉพาะอย่างยิ่งหากแอปพลิเคชันใช้จำนวนมากมาก RAM) อย่างไรก็ตาม แอปพลิเคชัน 32 บิตไม่สามารถเข้าถึง DLLs 64 บิตและ Active Controls และในทางกลับกัน (ในทางปฏิบัติ สิ่งนี้ส่งผลให้เกิดความจริงที่ว่าในฐานะส่วนหนึ่งของ Windows 64 บิต Internet Explorer เหลือ 32 บิตสำหรับ การดำเนินการที่ถูกต้องด้วยหน้าที่มีองค์ประกอบ ActiveX)
2) แอปพลิเคชัน 16 บิตสำหรับ Microsoft Windows - ไม่ ยกเว้นโปรแกรมติดตั้งบางตัว
3) แอปพลิเคชัน DOS - หมายเลข (ในขณะที่เขียนคำถามที่พบบ่อย เป็นที่ทราบกันดีว่า DosBox โปรแกรมจำลอง OpenSource ที่ได้รับการพิสูจน์แล้วอย่างดีนั้นถูกย้ายไปยัง Windows รุ่น 64 บิต ซึ่งเกือบจะลบออกเกือบทั้งหมด ปัญหาที่เป็นไปได้)
4) แอปพลิเคชัน Windows สำหรับ IA64 (Itanium) - หมายเลข

ทั้งหมดนี้จะให้อะไรฉันในขณะนี้และจะให้อะไรฉันในอนาคต?
สำหรับผู้ใช้ทั่วไป โปรแกรมประจำวัน การถ่ายโอนไปยังแพลตฟอร์ม 64 บิตในปัจจุบันไม่ได้ให้ประสิทธิภาพเชิงคุณภาพแบบก้าวกระโดด ข้อยกเว้นเพียงอย่างเดียว (และแม้แต่เกมที่เกี่ยวข้องกัน) คือเกมไฮเทคล่าสุดบางเกม
โปรแกรมจะได้รับประโยชน์สูงสุดจากการเปลี่ยนไปใช้ 64 บิตสำหรับการทำงานกับฐานข้อมูล และยิ่งปริมาณข้อมูลที่ใช้มากเท่าไร กำไรก็จะยิ่งเห็นได้ชัดเจนมากขึ้นเท่านั้น โปรแกรมสำหรับ CAD/CAE (การออกแบบโดยใช้คอมพิวเตอร์ช่วย การสร้างแบบจำลอง ฯลฯ) ตลอดจนโปรแกรมสำหรับสร้าง เนื้อหาดิจิทัล(ภาพ เสียง การประมวลผลวิดีโอ) และอื่นๆ ข้อมูลรายละเอียดตามกฎแล้วคุณสามารถค้นหาได้จากเว็บไซต์ของผู้พัฒนาซอฟต์แวร์ที่คุณใช้อยู่ - ตามกฎแล้วไม่มีใครเปิดเผยความลับเกี่ยวกับความพร้อมใช้งานของเวอร์ชัน 64 บิต
ในบรรดาโปรแกรมที่พอร์ตไปยัง Windows 64 บิตเสร็จสมบูรณ์หรือใกล้จะเสร็จสมบูรณ์แล้ว ควรกล่าวถึง Microsoft SQL Server 2000 และ 2005, Cakewalk Sonar 4.0, CryTek FarCry, Epic Unreal Tournament 2004, SiSoft Sandra 2005 รายการเต็มคุณจะพบซอฟต์แวร์ที่อยู่ในขั้นตอนต่างๆ ของการย้ายไปยัง Windows x64

ตารางเปรียบเทียบข้อ จำกัด เกี่ยวกับจำนวน RAM สูงสุดที่ใช้และจำนวนโปรเซสเซอร์สำหรับระบบปฏิบัติการเวอร์ชัน 32 และ 64 บิตจาก Microsoft:

ข้อจำกัดทั่วไปเกี่ยวกับจำนวนหน่วยความจำที่ใช้ 32 บิต 64 บิต
พื้นที่ที่อยู่เสมือนแบบเต็ม 4 กิกะไบต์ 16 เทราไบต์
พื้นที่ที่อยู่เสมือนสำหรับกระบวนการ 32 บิต 2 GB (3 GB พร้อมรหัสดาวน์โหลด / 3 GB) 4 GB หากโปรแกรมถูกคอมไพล์ด้วยสวิตช์ /LARGEADDRESSAWARE (2 GB โดยไม่มีสวิตช์)
พื้นที่ที่อยู่เสมือนสำหรับกระบวนการ 64 บิต ไม่สามารถใช้ได้ 8 เทราไบต์
พูลเพจ 470 เมกะไบต์ 128GB
พูลที่ไม่ใช่เพจ 256 เมกะไบต์ 128GB
รายการตารางหน้าระบบ (PTE) 660 เมกะไบต์ถึง 900 เมกะไบต์ 128GB
ข้อจำกัดเกี่ยวกับหน่วยความจำกายภาพและจำนวนโปรเซสเซอร์ 32 บิต 64 บิต
วินโดว์ XP มืออาชีพ 4GB / สูงสุด 2 CPU 128GB / สูงสุด 2 CPU
Windows Server 2003 รุ่นมาตรฐาน 4GB / สูงสุด 4 CPU 32GB / สูงสุด 4 CPU
Windows Server 2003 รุ่นองค์กร 64GB / สูงสุด 8 CPU 1 TB / สูงสุด 8 CPU
Windows Server 2003 รุ่นดาต้าเซ็นเตอร์ ซีพียู 64GB / 8 - 32 ซีพียู 1TB / 8 - 64
Windows Server 2008 รุ่นเว็บ 4GB / สูงสุด 4 CPU 32GB / สูงสุด 4 CPU
Windows Server 2008 รุ่นมาตรฐาน 4GB / สูงสุด 4 CPU 32GB / สูงสุด 4 CPU
Windows Server 2008 รุ่นองค์กร 64GB / สูงสุด 8 CPU 2 TB / สูงสุด 8 CPU
Windows Server 2008 รุ่นดาต้าเซ็นเตอร์ 64GB / สูงสุด 32 CPU 2 TB / สูงสุด 64 CPU
Windows Server 2008 รุ่น HPC - 128GB / สูงสุด 4 CPU

ข้อมูลเกี่ยวกับขนาดหน่วยความจำสูงสุดที่รองรับสำหรับ Windows Vista รุ่น 64 บิตสามารถพบได้

ในบทความวันนี้ เราจะมาดูกันว่าแพลตฟอร์มใดที่เหมาะกับคอมพิวเตอร์ของคุณมากกว่า: x64 หรือ x86(x32)? ท้ายที่สุดแล้ว หลายๆ คนถามตัวเองว่า อันไหนดีกว่ากัน? ระบบปฏิบัติการเวอร์ชัน 32 หรือ 64 บิตนั้นขึ้นอยู่กับคุณ แต่ฉันคิดว่าเป็นการดีกว่าถ้ารู้วิธีตัดสินใจเลือกให้ถูกต้อง!

เนื่องจากคุณอาจมีระบบปฏิบัติการติดตั้งอยู่แล้ว คุณจึงทำได้อย่างง่ายดาย

ฉันจะไม่เข้าไปในวิวัฒนาการของโปรเซสเซอร์แบบ "ป่า" และ "การบรรจุ" แต่จะพยายามอธิบายประเด็นหลัก

ก่อนอื่นเรามาดูกันว่าสถาปัตยกรรมและความลึกของบิตเหล่านี้มาจากไหน?

สถาปัตยกรรม x86 แบบ 32 บิต (ไมโครโปรเซสเซอร์ที่เข้ากันได้กับ 286-, 386-, 486) ได้รับการตั้งชื่อตาม -86 สิ้นสุด และ x32 และ x64 ก็เป็นความจุของโปรเซสเซอร์อยู่แล้ว ดังนั้นจึงถูกต้องที่จะแยกความแตกต่างระหว่างสถาปัตยกรรมหลักสองประเภท: x86 และ x64 (x32 is ชื่อไม่ถูกต้อง x86)

แล้วความแตกต่างระหว่างพวกเขาคืออะไร?

นี่คือการใช้ทรัพยากรฮาร์ดแวร์คอมพิวเตอร์ ความจริงก็คือว่า Intel บางตัวและ โปรเซสเซอร์เอเอ็มดีไม่ได้ออกแบบมาสำหรับ x64
นอกจากนี้ x64 ยังได้รับการออกแบบสำหรับ RAM อย่างน้อย 4 GB บนพีซีของคุณ- จริงๆ แล้วนี่คือสิ่งที่พัฒนาขึ้นมาเพื่อ
และประการที่สาม คอมพิวเตอร์มีภาระอะไรบ้างระหว่างการทำงาน? หากคุณเป็นนักออกแบบ นักออกแบบเลย์เอาต์ หรือบุคคลที่ใช้แอปพลิเคชันที่ทรงพลังจาก Adobe และบริษัทมัลติมีเดียยักษ์ใหญ่อื่นๆ x64 จะเป็นสิ่งที่คุณให้ความสำคัญเป็นอันดับแรก ถ้าคุณมี 4

แล้วคุณควรเลือกอะไร?

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

ขอให้โชคดี!

ข่าวที่เกี่ยวข้อง:


เบ็ดเตล็ด



2024 wisemotors.ru. วิธีนี้ทำงานอย่างไร. เหล็ก. การทำเหมืองแร่ สกุลเงินดิจิทัล