Hãy sửa tôi nếu tôi sai. Dưới đây là hiểu biết của tôi về tín hiệu:Làm thế nào để một quy trình biết rằng nó đã nhận được tín hiệu
Theo như tôi biết, tạo tín hiệu và gửi tín hiệu là 2 khác nhau điều. Để tạo ra một tín hiệu, hệ điều hành chỉ đơn giản là đặt một chút trong một bitarray được duy trì trong Quy trình kiểm soát Khối (PCB) của quy trình. Mỗi bit tương ứng với một tín hiệu cụ thể, và khi bit được đặt, điều đó có nghĩa là tín hiệu tương ứng với bit là đang chờ xử lý.
Phân phối: Trước khi chuyển quyền kiểm soát quay lại quy trình trong chế độ người dùng, hạt nhân luôn kiểm tra tín hiệu đang chờ xử lý cho quá trình này. Kiểm tra này phải xảy ra trong không gian hạt nhân vì một số tín hiệu không bao giờ có thể bị bỏ qua bởi một quá trình - cụ thể là SIGSTOP và SIGKILL.
Vậy điều này có nghĩa là các tín hiệu chỉ có thể được gửi đến một quá trình khi hạt nhân đang lên lịch cho quá trình đó, tức là cấp phát CPU của nó? Một quá trình có thể nhận được một tín hiệu khi nó thực sự thực hiện trên CPU? Nếu vậy, làm thế nào là nó có thể tức là làm thế nào quá trình đến để biết rằng một tín hiệu đang chờ xử lý cho nó (vì nó đang thực hiện trong chế độ người dùng và không thể truy cập PCB)
Nói rằng có nhiều bộ xử lý máy và vì vậy có thật song song tức là nhiều quá trình đang thực hiện cùng một lúc. Quy trình P1 đang thực hiện trên cpu 1 và quá trình P2 đang thực thi trên cpu2 và bây giờ quá trình P2 (có đủ đặc quyền) gửi một tín hiệu để xử lý P1. Liệu tín hiệu này có được chuyển tới P1 ngay bây giờ hay không sẽ được phân phối sau khi P1 từ bỏ CPU vì một lý do nào đó và được nhân lại sau một thời gian sau đó và sau đó tín hiệu này được phân phối để xử lý P1.
Vui lòng không nói câu hỏi này phụ thuộc vào việc triển khai. Nếu bạn thấy rằng câu trả lời đúng là thực hiện được xác định sau đó tôi đang tìm kiếm câu trả lời trong Linux, FreeBSD hoặc bất kỳ nền tảng * nix mà bạn có kiến thức về.
Cảm ơn rất nhiều sự giúp đỡ và sự kiên nhẫn của bạn :)
Trân
lali
Điều này có nghĩa là tín hiệu chỉ được gửi khi quá trình đó được lên lịch? Điều gì xảy ra nếu quá trình này là CPU chuyên sâu và hiện đang chạy trên cpu1 của một máy có 2 CPU và lập kế hoạch không phải là năm đầu tiên, vì vậy quá trình sẽ không nhận được bất kỳ tín hiệu nào ngay cả khi quá trình chạy trên cpu2 gửi cho nó một tín hiệu (như quá trình trên cpu1 không bao giờ từ bỏ cpu1)? Là nó ? – ghayalcoder
@Graham: Tại sao quá trình # 2 không bao giờ chạy trên máy 2+ lõi? – SiegeX
Xin lỗi @SiegeX, bạn đã chính xác, vì vậy tôi đã xóa nhận xét của mình. Tôi bối rối khi cố gắng phân tích câu của Iali. –