Là một người đã viết các chương trình thực thi mà không có HĐH, tôi đưa ra một câu trả lời dứt khoát.
Một thực thi sẽ cần một nhân hệ điều hành để chạy?
Điều đó phụ thuộc vào cách chương trình đó được viết và xây dựng.
Bạn có thể viết một chương trình (giả sử bạn có kiến thức) hoàn toàn không yêu cầu HĐH.
Một chương trình như vậy được mô tả là độc lập .
Bộ tải khởi động và chương trình chẩn đoán là sử dụng điển hình cho các chương trình độc lập.
Tuy nhiên, chương trình điển hình được viết và xây dựng trong một số môi trường HĐH máy chủ sẽ mặc định thực thi trong cùng môi trường HĐH máy chủ đó.
Các quyết định và hành động rất rõ ràng được yêu cầu để viết và xây dựng một chương trình độc lập.
... Đầu ra từ trình biên dịch là mã máy (có thể thực thi) mà tôi nghĩ là hướng dẫn trực tiếp đến CPU.
Chính xác.
Gần đây tôi đã đọc về hạt nhân và tôi phát hiện ra rằng các chương trình không thể truy cập trực tiếp vào phần cứng mà phải thông qua kernel.
Đó là một hạn chế được áp đặt bởi chế độ CPU mà HĐH sử dụng để thực thi các chương trình và được hỗ trợ bởi một số công cụ xây dựng nhất định như trình biên dịch và thư viện.
Nó không phải là một giới hạn nội tại trên mỗi chương trình từng được viết.
Vì vậy, khi chúng tôi biên dịch một số mã nguồn đơn giản, chỉ bằng một hàm printf () và quá trình biên dịch tạo ra mã máy thực thi, mỗi lệnh trong mã máy này sẽ được thực thi trực tiếp từ bộ nhớ (một khi mã được hệ điều hành nạp vào bộ nhớ ) hoặc mỗi lệnh trong mã máy vẫn cần phải đi qua HĐH (kernel) để được thực thi?
Mỗi lệnh được thực thi bởi CPU.
Một lệnh không được hỗ trợ hoặc bất hợp pháp (ví dụ: quá trình không có đủ đặc quyền) sẽ gây ra ngoại lệ ngay lập tức và thay vào đó, CPU sẽ thực hiện một thói quen để xử lý tình trạng bất thường này.
Không nên sử dụng hàm printf () làm ví dụ về "mã nguồn đơn giản" .
Việc dịch từ ngôn ngữ lập trình cấp cao hướng đối tượng sang mã máy có thể không tầm thường như bạn ngụ ý.
Và sau đó bạn chọn một trong những hàm phức tạp nhất từ thư viện thời gian thực hiện chuyển đổi dữ liệu và I / O.
Lưu ý rằng câu hỏi của bạn quy định một môi trường với HĐH (và thư viện thời gian chạy).
Khi hệ thống được khởi động và HĐH được trao quyền kiểm soát máy tính, các hạn chế được áp dụng cho những gì chương trình có thể làm (ví dụ: I / O phải được thực hiện bởi HĐH).
Nếu bạn muốn thực hiện một chương trình độc lập (tức là không có HĐH), thì bạn không được khởi động máy tính để chạy HĐH.
... Điều gì xảy ra sau khi mã máy được tải vào bộ nhớ?
Điều đó phụ thuộc vào môi trường.
Đối với một chương trình độc lập, nó có thể được thực thi, tức là điều khiển được chuyển giao bằng cách chuyển đến địa chỉ bắt đầu của chương trình.
Đối với một chương trình được tải bởi HĐH, chương trình phải được liên kết động với các thư viện dùng chung mà nó phụ thuộc vào. HĐH phải tạo một không gian thực thi cho quá trình sẽ thực thi chương trình.
Nó sẽ đi qua kernel hoặc nói chuyện trực tiếp với bộ xử lý?
Mã máy được thực thi bởi CPU.
Họ không "đi qua kernel" , nhưng họ cũng không "nói chuyện với bộ xử lý" .
Mã máy (bao gồm mã op và toán hạng) là một lệnh cho CPU được giải mã và thao tác được thực hiện.
Có lẽ chủ đề tiếp theo bạn nên điều tra là chế độ CPU .