tasty-tacos/disk-scheduling/algorithms.typ

62 lines
1.4 KiB
Typst
Raw Normal View History

2024-12-02 21:29:28 +01:00
#let schedule-fcfs(places) = {
return places
}
#let schedule-sstf(places) = {
let places = places
let cur = places.remove(0)
let result = (cur,)
while places.len() != 0 {
let best-d = none
let best-i = none
for (i, val) in places.enumerate() {
let d = calc.abs(cur - val)
if best-i == none or d < best-d {
best-d = d
best-i = i
}
}
cur = places.remove(best-i)
result.push(cur)
}
return result
}
#let schedule-scan(places, initial-dir, min, max) = {
assert(initial-dir in (left, right))
let first = places.first()
let places = places.sorted()
let i = places.position(v => v == first)
let left-side = places.slice(0, i)
let right-side = places.slice(i+1)
let result = if initial-dir == left {
(first,) + left-side.rev() + (min,) + right-side
} else {
(first,) + right-side + (max,) + left-side.rev()
}
return result
}
#let schedule-cscan(places, min, max) = {
let first = places.first()
let places = places.sorted()
let i = places.position(v => v == first)
let left-side = places.slice(0, i)
let right-side = places.slice(i+1)
return (first,) + right-side + (max, min) + left-side
}
#let schedule-clook(places) = {
let first = places.first()
let places = places.sorted()
let i = places.position(v => v == first)
let left-side = places.slice(0, i)
let right-side = places.slice(i+1)
return (first,) + right-side + left-side
}