2012-11-19 28 views
5

này liên quan đến: https://stackoverflow.com/a/13413099/1284631Linux reboot() gọi hệ thống: tại sao nó gọi do_exit (0) sau kernel_halt()?

Bây giờ, câu hỏi là:

Tại sao khi khởi động lại() hệ thống gọi, khi gọi với LINUX_REBOOT_CMD_HALT tham số (xem ở đây: http://lxr.linux.no/linux+v3.6.6/kernel/sys.c#L480) đang kêu gọi do_exit(0) sau khi đã gọi kernel_halt(), khi gọi số kernel_halt(), hãy gọi điện đến số stop_this_cpu() (xem tại đây: http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/process.c#L519), như một phần của native_machine_halt() (xem tại đây: http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/reboot.c#L680).

Hoặc, có vẻ như với tôi rằng stop_this_cpu() không bao giờ trả lại (kết thúc bằng vòng lặp vô hạn).

Vì vậy, nó là do_exit(0) được gọi là chỉ trong trường hợp đó kernel_halt() không thực hiện công việc của mình và nó quay trở lại? Tại sao không thay thế trực tiếp panic()?

+0

panic làm cho gian hàng hạt nhân, thoát, có thể khởi động lại –

+0

@eicto: vâng, tôi đồng ý với điều đó, tôi đã nói điều tương tự trong cụm từ kết thúc bài đăng của tôi. Câu hỏi thực sự là: tại sao cuộc gọi đến do_exit (0) * trước * hoảng loạn()? Nếu bạn muốn làm cho các hạt nhân gian hàng, thoát hoặc khởi động lại, tại sao không gọi hoảng loạn() trực tiếp? – user1284631

Trả lời

2

Một số ý tưởng:

  • Nó có thể là kernel_halt() từ chối để thực sự ngăn chặn vì một lý do chính đáng, mặc dù tôi không thể nghĩ ra bất kỳ.
  • kernel_halt() thể được thiết kế cũng được gọi bằng một hypervisor hoặc một cái gì đó ở một mức độ cao hơn hoặc tương đương so với hạt nhân (tùy chỉnh đang SMI maybe?)
  • Có lẽ kernel_halt() hàm trả về sớm, "lên lịch" ngưng hoạt động, và thực tế tạm dừng diễn ra một thời gian sau đó trên một số phần cứng. Tôi nhớ đọc về việc thực hiện một ATX tắt nguồn trong DOS trong lắp ráp - bạn sẽ phát hành các hướng dẫn outb để intiate tắt nguồn, nhưng bạn phải có một số nops, một vòng lặp vô tận, hoặc hlt ngay sau đó, như sức mạnh thực tế có thể xảy ra một số chu kỳ sau đó.
  • Quá trình gọi có thể muốn xử lý sự cố không khởi động lại được một số cách khác so với hoảng loạn hạt nhân.
+0

Cảm ơn bạn. Tôi đánh giá cao. – user1284631