1classdef CacheTask < Task
2 % A software server in a LayeredNetwork.
4 % Supports multi-level cache hierarchies with configurable capacities
5 % per level (e.g., L1, L2, L3 caches).
7 % Copyright (c) 2012-2026, Imperial College London
13 itemLevelCap; % Scalar or array
for multi-level cache capacities
19 %
public methods, including constructor
22 function self = CacheTask(model, name, nitems, itemLevelCap, replStrat, multiplicity, scheduling)
23 %self = CacheTask(model, name, nitems, itemLevelCap, replStrat, multiplicity, scheduling)
25 % itemLevelCap can be:
26 % - Scalar: Single-level cache with given capacity
27 % - Vector: Multi-level cache with capacity per level
29 if ~exist(
'name',
'var')
30 line_error(mfilename,'Constructor requires to specify at least a name.');
38 scheduling = SchedStrategy.FCFS;
40 self@Task(model, name, multiplicity, scheduling);
44 % Validate and store itemLevelCap (scalar or array)
45 if isscalar(itemLevelCap)
46 self.itemLevelCap = itemLevelCap;
47 elseif isvector(itemLevelCap)
48 self.itemLevelCap = itemLevelCap(:)'; % Ensure row vector
50 line_error(mfilename, 'itemLevelCap must be scalar or vector');
53 self.replacestrategy = replStrat;
56 % Get item level capacity
57 function cap = getItemLevelCap(self, level)
58 % CAP = GETITEMLEVELCAP(SELF, LEVEL)
60 % Get capacity for a specific cache level or all levels.
63 % level: (optional) Cache level index (1-based)
66 % cap: Capacity value(s) - scalar if level specified, array otherwise
70 cap = self.itemLevelCap;
72 % Return specific level
73 if isscalar(self.itemLevelCap)
76 line_error(mfilename, 'Single-level cache only has level 1');
78 cap = self.itemLevelCap;
81 if level < 1 || level > length(self.itemLevelCap)
82 line_error(mfilename, sprintf('Level %d out of range [1, %d]', level, length(self.itemLevelCap)));
84 cap = self.itemLevelCap(level);
89 % Get total capacity across all levels
90 function total = getTotalCapacity(self)
91 % TOTAL = GETTOTALCAPACITY(SELF)
93 % Get the sum of capacities across all cache levels.
96 % total: Sum of all level capacities
98 total = sum(self.itemLevelCap);
101 % Set item level capacity
102 function setItemLevelCap(self, caps)
103 % SETITEMLEVELCAP(SELF, CAPS)
105 % Set cache level capacities.
108 % caps: Scalar for single-level or vector for multi-level
111 self.itemLevelCap = caps;
112 elseif isvector(caps)
113 self.itemLevelCap = caps(:)'; % Ensure row vector
115 line_error(mfilename, 'caps must be scalar or vector');
119 % Get number of cache levels
120 function n = getNumberOfLevels(self)
121 % N = GETNUMBEROFLEVELS(SELF)
123 % Get the number of cache levels.
126 % n: Number of levels (1 for single-level, >1 for multi-level)
128 if isscalar(self.itemLevelCap)
131 n = length(self.itemLevelCap);