Mặc dù hầu hết các mã trong nhân Linux được viết bằng C, vẫn có nhiều phần của mã đó rất đặc trưng cho nền tảng nơi nó đang chạy và cần phải tính đến điều đó.
Một ví dụ cụ thể về điều này là bộ nhớ ảo, hoạt động theo kiểu tương tự trên hầu hết các kiến trúc (phân cấp các bảng trang) nhưng có các chi tiết cụ thể cho từng kiến trúc (chẳng hạn như số cấp trong mỗi kiến trúc và điều này đã tăng lên ngay cả trên x86 với giới thiệu các chip mới lớn hơn.) Mã hạt nhân Linux giới thiệu các macro để xử lý các hệ thống phân cấp có thể bị xóa bởi trình biên dịch trên các kiến trúc có ít cấp bảng trang hơn (do đó mã được viết bằng C, nhưng có chi tiết về kiến trúc cân nhắc.)
Nhiều khu vực khác rất cụ thể cho từng kiến trúc và cần được xử lý với mã cụ thể của vòm. Hầu hết trong số này liên quan đến mã trong ngôn ngữ lắp ráp mặc dù. Ví dụ là:
Chuyển đổi ngữ cảnh : Chuyển đổi ngữ cảnh liên quan đến việc lưu giá trị của tất cả các thanh ghi cho quá trình được tắt và khôi phục các thanh ghi từ tập đã lưu của quá trình được lên lịch vào CPU. Ngay cả số lượng và bộ thanh ghi là rất cụ thể cho từng kiến trúc. Mã này thường được triển khai trong lắp ráp, để cho phép truy cập đầy đủ vào các thanh ghi và cũng để đảm bảo nó chạy nhanh nhất có thể, vì hiệu suất chuyển đổi ngữ cảnh có thể rất quan trọng đối với hệ thống.
Các cuộc gọi hệ thống : Cơ chế mà mã vùng người dùng có thể kích hoạt một cuộc gọi hệ thống thường dành riêng cho kiến trúc (và đôi khi ngay cả với mô hình CPU cụ thể, ví dụ Intel và AMD đã giới thiệu các hướng dẫn khác nhau cho điều đó, các CPU cũ hơn có thể thiếu các hướng dẫn đó, vì vậy chi tiết cho những người vẫn sẽ là duy nhất.)
Trình xử lý ngắt : Chi tiết về cách xử lý ngắt (ngắt phần cứng) thường dành riêng cho nền tảng và thường yêu cầu một số keo cấp độ lắp ráp để xử lý các quy ước gọi cụ thể được sử dụng cho nền tảng. Ngoài ra, các nguyên hàm để bật / tắt các ngắt thường là đặc thù của nền tảng và cũng yêu cầu mã lắp ráp.
Khởi tạo : Chi tiết về cách khởi tạo cũng sẽ thường bao gồm các chi tiết dành riêng cho nền tảng và thường yêu cầu một số mã lắp ráp để xử lý điểm nhập vào kernel. Trên các nền tảng có nhiều CPU (SMP), chi tiết về cách đưa các CPU khác trực tuyến cũng thường dành riêng cho nền tảng.
Khóa nguyên thủy : Việc thực hiện các khóa nguyên thủy khóa (như spinlocks) thường liên quan đến các chi tiết cụ thể của nền tảng, vì một số kiến trúc cung cấp (hoặc thích) các hướng dẫn CPU khác nhau để thực hiện hiệu quả các lệnh đó. Một số sẽ thực hiện các hoạt động nguyên tử, một số sẽ cung cấp một cmpxchg có thể kiểm tra / cập nhật nguyên tử (nhưng không thành công nếu người viết khác vào trước), những người khác sẽ bao gồm một công cụ sửa đổi "khóa" theo hướng dẫn của CPU. Chúng thường sẽ liên quan đến việc viết mã lắp ráp là tốt.
Có thể có các khu vực khác cần mã theo nền tảng hoặc kiến trúc cụ thể trong nhân (hoặc cụ thể là trong nhân Linux.) Nhìn vào cây nguồn nhân, có các cây con đặc trưng kiến trúc bên dưới arch/
và bên dưới include/arch/
nơi bạn có thể tìm thấy thêm ví dụ về điều này.
Một số thực sự đáng ngạc nhiên, chẳng hạn, bạn sẽ thấy rằng số lượng cuộc gọi hệ thống có sẵn trên mỗi kiến trúc là khác biệt và một số cuộc gọi hệ thống sẽ tồn tại trong một số kiến trúc chứ không phải các cuộc gọi khác. (Ngay cả trên x86, danh sách các tòa nhà cao tầng khác nhau giữa hạt nhân 32 bit và 64 bit.)
Nói tóm lại, có rất nhiều trường hợp một kernel cần phải biết rằng nó dành riêng cho một nền tảng. Nhân Linux cố gắng trừu tượng hóa hầu hết các thuật toán đó, vì vậy các thuật toán cấp cao hơn (như cách quản lý bộ nhớ và lập lịch hoạt động) có thể được thực hiện trong C và hoạt động giống nhau (hoặc hầu hết giống nhau) trên tất cả các kiến trúc.