แม้ว่าโค้ดส่วนใหญ่ในเคอร์เนลลินุกซ์จะถูกเขียนด้วยภาษา C แต่ก็ยังมีอีกหลายส่วนของรหัสนั้นซึ่งเฉพาะเจาะจงกับแพลตฟอร์มที่ใช้งานและจำเป็นต้องคำนึงถึงสิ่งนั้น
ตัวอย่างหนึ่งของสิ่งนี้คือหน่วยความจำเสมือนซึ่งทำงานในลักษณะเดียวกันกับสถาปัตยกรรมส่วนใหญ่ (ลำดับชั้นของตารางหน้า) แต่มีรายละเอียดเฉพาะสำหรับแต่ละสถาปัตยกรรม (เช่นจำนวนของระดับในแต่ละสถาปัตยกรรมและเพิ่มขึ้นแม้ใน x86 ด้วย แนะนำชิปใหม่ที่มีขนาดใหญ่ขึ้น) โค้ดเคอร์เนล Linux แนะนำมาโครเพื่อจัดการกับการข้ามผ่านลำดับชั้นเหล่านี้ที่คอมไพเลอร์บนสถาปัตยกรรมที่มีตารางเพจในระดับน้อยลง (เพื่อให้โค้ดนั้นเขียนด้วย C แต่ให้รายละเอียดของสถาปัตยกรรม พิจารณา.)
พื้นที่อื่น ๆ มีความเฉพาะเจาะจงมากสำหรับแต่ละสถาปัตยกรรมและจำเป็นต้องจัดการด้วยรหัสเฉพาะส่วนโค้ง ส่วนใหญ่เกี่ยวข้องกับรหัสในภาษาแอสเซมบลีแม้ว่า ตัวอย่างคือ:
การสลับบริบท : การสลับบริบทเกี่ยวข้องกับการบันทึกค่าของการลงทะเบียนทั้งหมดสำหรับกระบวนการที่จะถูกสลับและคืนค่าการลงทะเบียนจากชุดที่บันทึกไว้ของกระบวนการที่กำหนดเวลาไว้ใน CPU แม้แต่จำนวนและชุดของรีจิสเตอร์ก็มีความเฉพาะในแต่ละสถาปัตยกรรม โดยทั่วไปรหัสนี้จะนำไปใช้ในการประกอบเพื่อให้สามารถเข้าถึงการลงทะเบียนได้อย่างเต็มที่และเพื่อให้แน่ใจว่ามันจะทำงานได้อย่างรวดเร็วที่สุดเนื่องจากประสิทธิภาพของการสลับบริบทอาจมีความสำคัญต่อระบบ
การเรียกใช้ระบบ : กลไกที่รหัสผู้ใช้สามารถเรียกใช้การเรียกระบบได้มักจะเฉพาะกับสถาปัตยกรรม (และบางครั้งแม้แต่กับซีพียูรุ่นที่เฉพาะเจาะจงเช่น Intel และ AMD แนะนำคำแนะนำที่แตกต่างกันสำหรับซีพียูรุ่นเก่าอาจขาดคำแนะนำเหล่านั้น สำหรับสิ่งเหล่านั้นจะยังคงไม่เหมือนใคร)
ตัวจัดการขัดจังหวะ : รายละเอียดของวิธีการจัดการการขัดจังหวะ (การขัดจังหวะฮาร์ดแวร์) มักจะเป็นแพลตฟอร์มเฉพาะและมักจะต้องมีกาวระดับการประกอบเพื่อจัดการประชุมเรียกเฉพาะที่ใช้สำหรับแพลตฟอร์ม นอกจากนี้ primitives สำหรับการเปิด / ปิดการใช้งานอินเตอร์รัปต์มักเป็นแบบเฉพาะแพลตฟอร์มและต้องการรหัสแอสเซมบลีเช่นกัน
การกำหนดค่าเริ่มต้น : รายละเอียดของวิธีการกำหนดค่าเริ่มต้นมักจะรวมถึงรายละเอียดที่เฉพาะเจาะจงกับแพลตฟอร์มและมักจะต้องมีรหัสแอสเซมบลีบางอย่างเพื่อจัดการจุดเข้าสู่เคอร์เนล บนแพลตฟอร์มที่มี CPU หลายตัว (SMP) รายละเอียดเกี่ยวกับวิธีนำ CPU อื่น ๆ ออนไลน์นั้นมักจะใช้เฉพาะแพลตฟอร์มเช่นกัน
การล็อกแบบดั้งเดิม : การใช้งานการล็อกแบบดั้งเดิม (เช่น spinlocks) มักจะเกี่ยวข้องกับรายละเอียดเฉพาะแพลตฟอร์มเช่นกันเนื่องจากสถาปัตยกรรมบางอย่างให้ (หรือต้องการ) คำสั่ง CPU ที่แตกต่างกันเพื่อนำไปใช้อย่างมีประสิทธิภาพ บางตัวจะใช้การทำงานแบบปรมาณูซึ่งบางตัวจะมี cmpxchg ที่สามารถทดสอบ / อัปเดตแบบอะตอมมินิ (แต่ล้มเหลวหากมีนักเขียนคนอื่นเข้ามาก่อน) ส่วนคนอื่น ๆ จะมีตัวดัดแปลง "ล็อค" เป็นคำสั่ง CPU สิ่งเหล่านี้มักจะเกี่ยวข้องกับการเขียนรหัสแอสเซมบลีเช่นกัน
อาจมีพื้นที่อื่น ๆ ที่จำเป็นต้องใช้รหัสเฉพาะแพลตฟอร์มหรือสถาปัตยกรรมในเคอร์เนล (หรือโดยเฉพาะในเคอร์เนล Linux) เมื่อดูที่แผนผังซอร์สเคอร์เนลมีทรีย่อยของสถาปัตยกรรมเฉพาะภายใต้arch/
และภายใต้include/arch/
ที่คุณสามารถค้นหาเพิ่มเติมได้ ตัวอย่างของสิ่งนี้
บางคนน่าแปลกใจจริงตัวอย่างเช่นคุณจะเห็นว่าจำนวนการโทรของระบบที่มีอยู่ในแต่ละสถาปัตยกรรมนั้นแตกต่างกันและการโทรของระบบบางอย่างจะมีอยู่ในสถาปัตยกรรมบางอย่าง (แม้ใน x86 รายการ syscalls จะแตกต่างกันระหว่างเคอร์เนลแบบ 32 บิตและ 64 บิต)
กล่าวโดยสรุปมีหลายกรณีที่เคอร์เนลต้องทราบว่าเป็นแพลตฟอร์มเฉพาะ เคอร์เนล Linux พยายามสรุปส่วนใหญ่ดังนั้นอัลกอริธึมระดับสูงกว่า (เช่นวิธีการจัดการหน่วยความจำและการจัดตารางเวลา) สามารถนำมาใช้ใน C และทำงานเหมือนกัน (หรือส่วนใหญ่เหมือนกัน) ในสถาปัตยกรรมทั้งหมด