Quay lại những ngày cũ của các hệ điều hành tác vụ đơn lẻ, những thứ duy nhất có thể cản trở việc thực thi chương trình của bạn bị gián đoạn. Bây giờ, các trình xử lý ngắt có cùng vấn đề mà bạn đang nói, chương trình của bạn đang tính toán điều gì đó, người dùng nhấn phím - ngắt - thường xuyên dịch vụ ngắt có để thực hiện một số công việc, nhưng không được sửa đổi một thanh ghi duy nhất trong quy trình . Đó là lý do chính, ngăn xếp được phát minh ở nơi đầu tiên. Một thói quen dịch vụ 80x86 DOS ngắt thông thường sẽ trông như thế này:
push ax
push cx
push dx
push bx
push si
push di
push bp
// no need to push sp
[do actual work, caller registers avaiable on stack if needed]
pop bp
pop di
pop si
pop bx
pop dx
pop cx
pop ax
iret
này thậm chí còn rất phổ biến, đó là một cặp mới hướng dẫn pusha
và popa
(đối với push/pop tất cả) được tạo ra để giảm bớt nhiệm vụ này. Trong các CPU ngày nay có cách ly không gian địa chỉ giữa các hệ điều hành và ứng dụng, CPU cung cấp một số hệ thống trạng thái nhiệm vụ và cho phép hệ điều hành chuyển đổi công việc (ngắt có thể vẫn hoạt động tương tự như đã nêu ở trên, nhưng cũng có thể được xử lý thông qua tác vụ.). chuyển đổi). Tất cả các hệ điều hành hiện đại đều sử dụng hệ thống trạng thái nhiệm vụ này, nơi mà CPU lưu tất cả các thanh ghi của một tiến trình trong khi nó không được thực thi một cách chủ động. Giống như Jester đã được giải thích, gdb
chỉ yêu cầu hệ điều hành cho các giá trị này trên quy trình được gỡ lỗi và sau đó in chúng.
Nguồn
2016-12-05 01:10:40
Câu hỏi khái niệm hay. Trong quá trình học tập của bạn, hãy chắc chắn xem xét cách 'stack stack' và' pointer pointer' được điều khiển. _One_ cách để sử dụng thanh ghi, và vẫn biết những gì họ _were_, là để đẩy chúng vào ông ngăn xếp trước khi bạn thay đổi chúng. Bởi vì bạn biết có bao nhiêu byte bạn đã đẩy lên ngăn xếp, thậm chí bạn có thể suy ra con trỏ ngăn xếp trước khi bạn bắt đầu thay đổi mọi thứ. Tuy nhiên, nhiều CPU có một hướng dẫn nhanh để sao chép tất cả các thanh ghi đến/từ bộ đệm. Chủ yếu được sử dụng để trao đổi các quy trình ra để CPU và đăng ký có thể được chia sẻ, nhưng một trình gỡ lỗi thực hiện điều này cũng. –