![]() |
Contur 2
Educational OS kernel simulator
|
Deadlock detection/prevention helper. More...
#include <deadlock_detector.h>
Public Member Functions | |
| DeadlockDetector () | |
| Constructs deadlock detector with empty graphs. | |
| ~DeadlockDetector () | |
| Destroys deadlock detector. | |
| DeadlockDetector (const DeadlockDetector &)=delete | |
| Copy construction is disabled. | |
| DeadlockDetector & | operator= (const DeadlockDetector &)=delete |
| Copy assignment is disabled. | |
| DeadlockDetector (DeadlockDetector &&) noexcept | |
| Move-constructs detector state. | |
| DeadlockDetector & | operator= (DeadlockDetector &&) noexcept |
| Move-assigns detector state. | |
| void | onAcquire (ProcessId pid, ResourceId resource) |
| Records successful acquisition of a resource by a process. | |
| void | onAcquire (ProcessId pid, ResourceId resource, ThreadToken threadToken) |
| Thread-aware variant of resource acquisition tracking. | |
| void | onRelease (ProcessId pid, ResourceId resource) |
| Records release of a resource by a process. | |
| void | onRelease (ProcessId pid, ResourceId resource, ThreadToken threadToken) |
| Thread-aware variant of resource release tracking. | |
| void | onWait (ProcessId pid, ResourceId resource) |
| Records waiting on a resource and updates wait-for graph. | |
| void | onWait (ProcessId pid, ResourceId resource, ThreadToken threadToken) |
| Thread-aware variant of wait edge tracking. | |
| bool | hasDeadlock () const |
| Returns true if the current wait-for graph has a cycle. | |
| std::vector< ProcessId > | getDeadlockedProcesses () const |
| Returns process IDs involved in deadlock cycles. | |
| void | onInternalLockAcquire (ThreadToken threadToken, ResourceId lockId) |
| Records internal lock acquisition order for lock-order analysis. | |
| void | onInternalLockRelease (ThreadToken threadToken, ResourceId lockId) |
| Records internal lock release for lock-order analysis. | |
| bool | hasInternalLockOrderCycle () const |
| Returns true when internal lock-order graph contains a cycle. | |
| std::vector< ResourceId > | getInternalLockOrderCycle () const |
| Returns lock IDs involved in lock-order cycles. | |
| bool | isSafeState (const std::vector< ResourceAllocation > ¤t, const std::vector< ResourceAllocation > &maximum, const std::vector< std::uint32_t > &available) const |
| Banker's algorithm safety check. | |
Private Attributes | |
| std::unique_ptr< Impl > | impl_ |
Deadlock detection/prevention helper.
Maintains a wait-for graph for cycle detection and provides Banker's safety check for allocation state validation.
Definition at line 30 of file deadlock_detector.h.
| contur::DeadlockDetector::DeadlockDetector | ( | ) |
Constructs deadlock detector with empty graphs.
Referenced by DeadlockDetector(), DeadlockDetector(), operator=(), and operator=().
| contur::DeadlockDetector::~DeadlockDetector | ( | ) |
Destroys deadlock detector.
|
delete |
Copy construction is disabled.
References DeadlockDetector().
|
noexcept |
Move-constructs detector state.
References DeadlockDetector().
|
nodiscard |
Returns process IDs involved in deadlock cycles.
References getDeadlockedProcesses().
Referenced by getDeadlockedProcesses().
|
nodiscard |
Returns lock IDs involved in lock-order cycles.
References getInternalLockOrderCycle().
Referenced by getInternalLockOrderCycle().
|
nodiscard |
Returns true if the current wait-for graph has a cycle.
References hasDeadlock().
Referenced by hasDeadlock().
|
nodiscard |
Returns true when internal lock-order graph contains a cycle.
References hasInternalLockOrderCycle().
Referenced by hasInternalLockOrderCycle().
|
nodiscard |
Banker's algorithm safety check.
current[i].resources[r] is currently allocated count for process i, resource r. maximum[i].resources[r] is maximum demand for process i, resource r. available[r] is currently available count for resource r.
| current | Currently allocated resources per process. |
| maximum | Maximum claims per process. |
| available | Currently available resource vector. |
References isSafeState().
Referenced by isSafeState().
| void contur::DeadlockDetector::onAcquire | ( | ProcessId | pid, |
| ResourceId | resource ) |
Records successful acquisition of a resource by a process.
| pid | Process that acquired resource. |
| resource | Acquired resource identifier. |
References onAcquire().
Referenced by onAcquire(), and onAcquire().
| void contur::DeadlockDetector::onAcquire | ( | ProcessId | pid, |
| ResourceId | resource, | ||
| ThreadToken | threadToken ) |
Thread-aware variant of resource acquisition tracking.
References onAcquire().
| void contur::DeadlockDetector::onInternalLockAcquire | ( | ThreadToken | threadToken, |
| ResourceId | lockId ) |
Records internal lock acquisition order for lock-order analysis.
References onInternalLockAcquire().
Referenced by onInternalLockAcquire().
| void contur::DeadlockDetector::onInternalLockRelease | ( | ThreadToken | threadToken, |
| ResourceId | lockId ) |
Records internal lock release for lock-order analysis.
References onInternalLockRelease().
Referenced by onInternalLockRelease().
| void contur::DeadlockDetector::onRelease | ( | ProcessId | pid, |
| ResourceId | resource ) |
Records release of a resource by a process.
| pid | Process that released resource. |
| resource | Released resource identifier. |
References onRelease().
Referenced by onRelease(), and onRelease().
| void contur::DeadlockDetector::onRelease | ( | ProcessId | pid, |
| ResourceId | resource, | ||
| ThreadToken | threadToken ) |
Thread-aware variant of resource release tracking.
References onRelease().
| void contur::DeadlockDetector::onWait | ( | ProcessId | pid, |
| ResourceId | resource ) |
| void contur::DeadlockDetector::onWait | ( | ProcessId | pid, |
| ResourceId | resource, | ||
| ThreadToken | threadToken ) |
Thread-aware variant of wait edge tracking.
References onWait().
|
delete |
Copy assignment is disabled.
References DeadlockDetector().
|
noexcept |
Move-assigns detector state.
References DeadlockDetector().
|
private |
Definition at line 109 of file deadlock_detector.h.