Có bao nhiêu ngăn xếp trong một bộ xử lý? [đóng cửa]


-2

Tôi đang tìm hiểu về CPU và các tương tác bộ nhớ trong lớp Hệ điều hành của tôi và đã bị nhầm lẫn về cách hoạt động của ngăn xếp bộ nhớ. Tôi hiểu rằng ngăn xếp đi xuống từng dòng một và lưu trữ dữ liệu trong Accumulator hoặc gửi một hướng dẫn tới IR.

Câu hỏi của tôi là: mỗi quá trình có ngăn xếp bộ nhớ riêng hay mỗi bộ xử lý có một ngăn bộ nhớ khổng lồ liên tục chuyển đổi giữa các quy trình khác nhau (và đôi khi bị gián đoạn bởi các cuộc gọi I / O)? Nếu có một ngăn xếp khổng lồ thì chỉ có một ngăn xếp vì hầu hết các bộ xử lý hiện đại có thể thực thi rất nhiều lệnh mỗi giây đến nỗi nó chỉ giống như các quá trình đang chạy đồng thời đến bộ não con người chậm chạp của chúng ta?

Câu trả lời:


2

Hầu hết các CPU hiện đại về mặt kỹ thuật không có ngăn xếp phần cứng (nghĩa là không có bộ nhớ chuyên dụng chỉ được sử dụng cho ngăn xếp, phần lớn là do nó không hiệu quả và bạn không thể chắc chắn chính xác mình cần bao nhiêu dung lượng trên bất kỳ hệ thống thực nào). Hầu như tất cả chúng đều có một thanh ghi con trỏ ngăn xếp, tuy nhiên, đó là những gì được sử dụng bởi các hướng dẫn hoạt động trên ngăn xếp. Tuy nhiên, mỗi quy trình vẫn có ngăn xếp riêng của nó (thực tế, thường là ít nhất hai ngăn xếp, nhưng điều đó gây ra sự phức tạp của sự phân tách đặc quyền giữa các chương trình hệ điều hành và người dùng và không hoàn toàn phù hợp với câu hỏi), nhưng đăng ký con trỏ ngăn xếp được chia sẻ bởi tất cả các quy trình (thanh ghi này là một phần của những gì được lưu và khôi phục trong quá trình chuyển đổi ngữ cảnh, cùng với hầu hết các phần còn lại của trạng thái CPU).

Để trả lời nửa sau câu hỏi của bạn một cách thẳng thắn, đa nhiệm là một ảo ảnh, nó chỉ phụ thuộc vào quy mô. Mỗi lõi CPU riêng lẻ có thể chạy một tiến trình cùng một lúc và nó (thường) sẽ chuyển đổi giữa tất cả các quy trình trên hệ thống không chờ đợi ở một tần số đủ cao để chúng hoạt động đồng thời theo quan điểm của con người (hầu hết hoạt động các hệ thống có các tiến trình với tốc độ 100 đến 1000 lần một giây, vẫn còn quá đủ thời gian để hàng trăm triệu lệnh CPU được thực thi trong mỗi quy trình). Nhìn khác đi một chút, CPU lõi đơn giống như một người, nó phải chuyển trọng tâm thường xuyên sang 'đa tác vụ' và CPU đa lõi giống như một nhóm người, mỗi người chỉ có thể làm một việc tại một thời điểm đáng tin cậy, nhưng nói chung, nhóm có thể dễ dàng làm việc nhiều nhiệm vụ như có các thành viên trong nhóm.

Tuy nhiên, với mục đích của lớp học của bạn, tất cả những điều này đều không liên quan (nếu lớp được dạy sử dụng một hệ điều hành tối giản như CP / M hoặc DOS, không thực hiện đa nhiệm và do đó có một ngăn xếp, thời gian) hoặc sẽ được bảo hiểm đúng hạn (nếu được dạy sử dụng một hệ điều hành thực tế như UNIX, MINIX hoặc thậm chí một trong những dịch vụ thương mại hiện đại khác nhau, tất cả đều thực hiện đa nhiệm, thường được bao phủ gần cuối lớp vì hiểu nó đòi hỏi phải hiểu những điều cơ bản (như cách một ngăn xếp hoạt động)).


Tôi chắc chắn đã không thực hiện tốt nhưng điều tôi đang cố hỏi là vì CPU chỉ có thể chạy một tiến trình tại một thời điểm, điều đó có nghĩa là mỗi tiến trình này sẽ được đặt trong cùng một ngăn xếp?
Darien Springer

1
@DarienSpringer À, xin lỗi, tôi hiểu nhầm rồi. Câu trả lời ngắn gọn là không, mỗi quy trình có ngăn xếp riêng, nhưng con trỏ ngăn xếp là một phần của bối cảnh bộ xử lý được lưu và khôi phục trong quá trình chuyển đổi ngữ cảnh.
Austin Hemmelgarn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.