added disk scheduling diagrams
This commit is contained in:
62
disk-scheduling/algorithms.typ
Normal file
62
disk-scheduling/algorithms.typ
Normal file
@@ -0,0 +1,62 @@
|
||||
#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
|
||||
}
|
||||
Reference in New Issue
Block a user