Contur 2
Educational OS kernel simulator
Loading...
Searching...
No Matches
contur::DeadlockDetector Class Reference

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.
DeadlockDetectoroperator= (const DeadlockDetector &)=delete
 Copy assignment is disabled.
 DeadlockDetector (DeadlockDetector &&) noexcept
 Move-constructs detector state.
DeadlockDetectoroperator= (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< ProcessIdgetDeadlockedProcesses () 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< ResourceIdgetInternalLockOrderCycle () const
 Returns lock IDs involved in lock-order cycles.
bool isSafeState (const std::vector< ResourceAllocation > &current, 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_

Detailed Description

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.

Constructor & Destructor Documentation

◆ DeadlockDetector() [1/3]

contur::DeadlockDetector::DeadlockDetector ( )

Constructs deadlock detector with empty graphs.

Referenced by DeadlockDetector(), DeadlockDetector(), operator=(), and operator=().

◆ ~DeadlockDetector()

contur::DeadlockDetector::~DeadlockDetector ( )

Destroys deadlock detector.

◆ DeadlockDetector() [2/3]

contur::DeadlockDetector::DeadlockDetector ( const DeadlockDetector & )
delete

Copy construction is disabled.

References DeadlockDetector().

◆ DeadlockDetector() [3/3]

contur::DeadlockDetector::DeadlockDetector ( DeadlockDetector && )
noexcept

Move-constructs detector state.

References DeadlockDetector().

Member Function Documentation

◆ getDeadlockedProcesses()

std::vector< ProcessId > contur::DeadlockDetector::getDeadlockedProcesses ( ) const
nodiscard

Returns process IDs involved in deadlock cycles.

References getDeadlockedProcesses().

Referenced by getDeadlockedProcesses().

◆ getInternalLockOrderCycle()

std::vector< ResourceId > contur::DeadlockDetector::getInternalLockOrderCycle ( ) const
nodiscard

Returns lock IDs involved in lock-order cycles.

References getInternalLockOrderCycle().

Referenced by getInternalLockOrderCycle().

◆ hasDeadlock()

bool contur::DeadlockDetector::hasDeadlock ( ) const
nodiscard

Returns true if the current wait-for graph has a cycle.

References hasDeadlock().

Referenced by hasDeadlock().

◆ hasInternalLockOrderCycle()

bool contur::DeadlockDetector::hasInternalLockOrderCycle ( ) const
nodiscard

Returns true when internal lock-order graph contains a cycle.

References hasInternalLockOrderCycle().

Referenced by hasInternalLockOrderCycle().

◆ isSafeState()

bool contur::DeadlockDetector::isSafeState ( const std::vector< ResourceAllocation > & current,
const std::vector< ResourceAllocation > & maximum,
const std::vector< std::uint32_t > & available ) const
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.

Parameters
currentCurrently allocated resources per process.
maximumMaximum claims per process.
availableCurrently available resource vector.
Returns
True when the state is safe; false otherwise.

References isSafeState().

Referenced by isSafeState().

◆ onAcquire() [1/2]

void contur::DeadlockDetector::onAcquire ( ProcessId pid,
ResourceId resource )

Records successful acquisition of a resource by a process.

Parameters
pidProcess that acquired resource.
resourceAcquired resource identifier.

References onAcquire().

Referenced by onAcquire(), and onAcquire().

◆ onAcquire() [2/2]

void contur::DeadlockDetector::onAcquire ( ProcessId pid,
ResourceId resource,
ThreadToken threadToken )

Thread-aware variant of resource acquisition tracking.

References onAcquire().

◆ onInternalLockAcquire()

void contur::DeadlockDetector::onInternalLockAcquire ( ThreadToken threadToken,
ResourceId lockId )

Records internal lock acquisition order for lock-order analysis.

References onInternalLockAcquire().

Referenced by onInternalLockAcquire().

◆ onInternalLockRelease()

void contur::DeadlockDetector::onInternalLockRelease ( ThreadToken threadToken,
ResourceId lockId )

Records internal lock release for lock-order analysis.

References onInternalLockRelease().

Referenced by onInternalLockRelease().

◆ onRelease() [1/2]

void contur::DeadlockDetector::onRelease ( ProcessId pid,
ResourceId resource )

Records release of a resource by a process.

Parameters
pidProcess that released resource.
resourceReleased resource identifier.

References onRelease().

Referenced by onRelease(), and onRelease().

◆ onRelease() [2/2]

void contur::DeadlockDetector::onRelease ( ProcessId pid,
ResourceId resource,
ThreadToken threadToken )

Thread-aware variant of resource release tracking.

References onRelease().

◆ onWait() [1/2]

void contur::DeadlockDetector::onWait ( ProcessId pid,
ResourceId resource )

Records waiting on a resource and updates wait-for graph.

Parameters
pidWaiting process.
resourceRequested resource identifier.

References onWait().

Referenced by onWait(), and onWait().

◆ onWait() [2/2]

void contur::DeadlockDetector::onWait ( ProcessId pid,
ResourceId resource,
ThreadToken threadToken )

Thread-aware variant of wait edge tracking.

References onWait().

◆ operator=() [1/2]

DeadlockDetector & contur::DeadlockDetector::operator= ( const DeadlockDetector & )
delete

Copy assignment is disabled.

References DeadlockDetector().

◆ operator=() [2/2]

DeadlockDetector & contur::DeadlockDetector::operator= ( DeadlockDetector && )
noexcept

Move-assigns detector state.

References DeadlockDetector().

Member Data Documentation

◆ impl_

std::unique_ptr<Impl> contur::DeadlockDetector::impl_
private

Definition at line 109 of file deadlock_detector.h.


The documentation for this class was generated from the following file: