Một điều kiện cuộc đua có nghĩa là gì?


10

Tôi là một kỹ sư điện mới nên chịu đựng tôi. Tôi nghe một số kỹ sư khác mà tôi làm việc cùng nói về tình trạng chủng tộc tồn tại trong một trong các mạch của chúng tôi.

Điều đó nghĩa là gì?


Nếu bạn muốn xem xét một ví dụ cụ thể, "De-Glitching RAM Writes" và hai bài viết sau đây có một cuộc thảo luận dài về một lỗi mà theo như tôi có thể nói, đã được kích hoạt bởi một điều kiện cuộc đua.
davidcary

Câu trả lời:


16

Điều đó có nghĩa là, rất đơn giản là hai thứ cùng một lúc "chạy đua" cho kết quả.

Một ví dụ là một mạch có Ghim đặt lại và Ghim cài đặt, nếu bạn kích hoạt cài đặt lại, đầu ra trở thành 0. Nếu bạn kích hoạt cài đặt, đầu ra trở thành 1. Nếu bạn kích hoạt lần đầu tiên thiết lập và sau đó thiết lập lại rất nhanh sau đó, hãy đặt lại sẽ được nhìn thấy, vì vậy đầu ra là 0.

Nhưng, nếu cả hai đều được kích hoạt cùng một lúc, điều gì xảy ra?

Nếu người thiết kế mạch chú ý, cần có câu trả lời, nếu điều đó quan trọng đối với chức năng. Nếu không có câu trả lời nhất định cho câu hỏi đó, mạch có điều kiện cuộc đua, trong đó tín hiệu từ tập hợp và thiết lập lại "cuộc đua" với nhau để xem cái nào thắng để xác định đầu ra.

Con đường có độ trễ ít nhất thường sẽ giành chiến thắng, nhưng sau đó bạn có thể thấy điều kiện cuộc đua là trình kích hoạt chính xác trong đó con đường bị trì hoãn nhiều nhất được kích hoạt chính xác đến mức đó trước khi nhanh hơn.

Nhiều mạch, bao gồm các khối xây dựng logic bên trong IC, có các điều kiện chủng tộc nhất định, nhưng thông thường chúng là như vậy khi bạn sử dụng mạch theo cách nó được dự định, mà bạn sẽ không nhận thấy. Vì vậy, thường khi các kỹ sư nói "điều kiện cuộc đua" một vài lần họ thực sự có nghĩa rằng đó cũng là một điều có thể xảy ra trong sử dụng bình thường, đó sẽ là một vấn đề, bởi vì trong điều kiện cuộc đua, hoạt động bình thường không thể dự đoán được.

Trong phần mềm, thuật ngữ này cũng được sử dụng, nhưng thường để chỉ các vấn đề về thời gian hoặc khóa. Đó là một nguyên tắc tương tự, mặc dù. Thông thường khi bạn có hai tiến trình trong một máy tính chạy độc lập, nhưng sử dụng cùng một bộ nhớ, bạn sẽ bảo vệ bộ nhớ đó khỏi bị ghi bởi một, trong khi quá trình kia đang sử dụng nó. Nếu bạn không gọi đó là điều kiện chủng tộc có thể xảy ra: Một quá trình có thể là đọc một giá trị đang trong quá trình cập nhật hoặc cả hai có thể viết cho nó cùng một lúc và sau đó bạn không biết điều gì sẽ xảy ra xảy ra


2
Để bổ sung cho câu trả lời hay này, tôi sẽ chỉ ra rằng phần cứng có thể hành xử rất kém trong những tình huống này. Phần cứng thực sự không bao giờ chuyển đổi tức thời từ 0 đến 1. Nó luôn phải tăng lên trong một khoảng thời gian ngắn giữa chúng. Hầu hết logic cho rằng đã có đủ thời gian trôi qua kể từ khi quá trình chuyển đổi mà các quá độ đã giải quyết thành "thực sự gần bằng 0" hoặc "thực sự gần với 1." Nếu thời điểm là ... không may, nó có thể gần hơn 0,5. Nhiều mạch trở nên "siêu bền" ở trạng thái này, có nghĩa là chúng có thể mất một lượng thời gian không xác định để chuyển đổi, làm mất ổn định toàn bộ mạch
Cort Ammon

1
Ngay cả khi mạch của bạn được thiết kế để xử lý trường hợp Cài đặt và Đặt lại được kích hoạt đồng thời, bạn không thể kích hoạt chúng đồng thời, do đó bạn sẽ không biết cái nào được kích hoạt trước.
dùng253751

Các hoạt động phi nguyên tử là một ví dụ tốt hơn về điều kiện chủng tộc trong phần mềm. Một chương trình có thể tạo một tệp mới bằng C's fopen(), ghi dữ liệu vào fclose()nó, sau chmod()đó để bảo mật nó. Cửa sổ ngắn đó nằm giữa fopen()chmod()mở một điều kiện cuộc đua có thể trong đó chế độ tệp mặc định có thể cho phép người ngoài không mong muốn làm việc với tệp theo cách bị từ chối sau chmod()cuộc gọi. Giải pháp là tạo tệp open()thay thế, cho phép thiết lập chế độ như một phần của hoạt động tạo tệp.
Warren Young

6

Thuật ngữ "điều kiện chủng tộc" ngụ ý rằng (1) hai hoặc nhiều tín hiệu có thể đến theo bất kỳ thứ tự nào, tùy ý gần nhau và (2) không thể chỉ ra một cách phân tích rằng về cơ bản không có xác suất nào về sự kết hợp có thể xảy ra lần đặt ra một vấn đề.

Từ quan điểm của một lần lật đơn có đầu vào dữ liệu có thể thay đổi bất cứ lúc nào đối với đồng hồ, các chuyển đổi gần như đồng thời trên đồng hồ và đầu vào dữ liệu có thể đặt ra một điều kiện cuộc đua. Tuy nhiên, từ quan điểm về hành vi mạch tổng thể, họ sẽ không đặt ra điều kiện cuộc đua nếu chúng chỉ có thể xảy ra vào những thời điểm mà không có sự tuần hoàn xuôi dòng sẽ quan tâm đến những gì chốt giữ và không có mạch hạ lưu nào bắt đầu quan tâm đến những gì chốt được giữ cho đến sau khi có xung đồng hồ không thể ở bất kỳ nơi nào gần bất kỳ chuyển đổi nào trên đầu vào dữ liệu.

Hơn nữa, vì thường không thể loại bỏ hoàn toàn mọi khả năng về thời gian đầu vào có vấn đề, nhiều phân tích về điều kiện cuộc đua sẽ nói rằng nếu đầu ra của một thanh ghi được đưa vào một thanh ghi khác được điều khiển bởi cùng một đồng hồ, thì thanh ghi thứ hai sẽ luôn luôn chốt mức cao "sạch" hoặc mức "sạch" ngay cả khi các đầu vào của thanh ghi đầu tiên khiến nó bắt được một mức đầu vào đúng ở ngưỡng chuyển đổi. Về lý thuyết, chốt đầu tiên có thể bắt được một mức vừa đủ trên hoặc dưới ngưỡng chuyển đổi chính xác của nó để mức đầu ra sẽ chuyển đổi chính xác khi xung đồng hồ tiếp theo đến.

Kết quả là, nếu một người ví dụ như lấy một đầu vào và chuyển nó thành một chuỗi gồm ba lần lật, và có một mạch phát ra cao bất cứ khi nào flop thứ hai cao nhưng thứ ba thấp, thì bất kỳ cạnh tăng nào xảy ra trên đầu vào dữ liệu đi trước thời gian thấp có giá trị toàn bộ thời gian thấp và sau đó là thời gian đầy đủ của thời gian cao, về cơ bản sẽ được đảm bảo để làm cho đầu ra của mạch cao trong chính xác một chu kỳ đồng hồ.

sơ đồ

mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab

Trong sơ đồ này, một tín hiệu có thời gian hơi bất thường được chuẩn hóa thành đồng hồ theo ba cách theo cách để tạo ra một đầu ra cao cho một chu kỳ đồng hồ sau mỗi cạnh tăng. Nỗ lực đầu tiên để bình thường hóa tín hiệu tạo ra một đầu ra trông khó chịu và có một điều kiện cuộc đua rõ ràng nếu đầu vào và đồng hồ thay đổi đồng thời. Cách tiếp cận thứ hai tốt hơn rất nhiều, nhưng vẫn có điều kiện cuộc đua (mà trình giả lập không thể kích hoạt) nếu thời gian của đồng hồ và dữ liệu khiến thanh ghi đầu tiên thu được giá trị trung gian. Cách tiếp cận thứ ba đại diện cho thông lệ chung và thường được coi là an toàn, vì ngay cả khi đăng ký đầu tiên không đạt được mức cao sạch hoặc mức thấp sạch, rất khó có khả năng đầu ra từ thanh ghi đầu tiên có hành vi chính xác để khiến thanh ghi thứ hai không lấy được sạch. Nếu dữ liệu thay đổi rất gần với đồng hồ, nó có thể bị lấy theo chu kỳ hiện tại hoặc không bị lấy cho đến lần tiếp theo, nhưng nếu một trong hai tình huống sẽ được chấp nhận thì không có điều kiện cuộc đua.


Bạn nói, "... một đầu ra trông thật khó chịu." Có phải đó là một cách khác để nói "trạng thái siêu bền?"
Solomon chậm

@jameslarge: Trình giả lập không xử lý các trạng thái siêu bền. Tôi mô tả đầu ra đầu tiên là xấu vì không có độ rộng xung tối thiểu và đầu ra thứ hai là rủi ro vì khả năng của các trạng thái siêu bền.
supercat

2

Tóm lại, điều đó có nghĩa là kết quả của một quá trình sẽ bị ảnh hưởng bởi chuỗi đến của hai đầu vào và chuỗi đó không xác định (không thể được đảm bảo).

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.