mirror of https://github.com/t1meshift/os_labs.git
Update 6th lab
parent
e69a88c336
commit
037a74ed69
17
lab6/.execme
17
lab6/.execme
|
@ -54,13 +54,26 @@ assert crc "Test string" "0x5e4c"
|
||||||
assert crc "Try not to laugh1!%&<>z" "0x6579"
|
assert crc "Try not to laugh1!%&<>z" "0x6579"
|
||||||
assert crc "tEsTTa" "0x0763"
|
assert crc "tEsTTa" "0x0763"
|
||||||
|
|
||||||
# Big file tests
|
echo "Allocating 512B file with random data..."
|
||||||
|
head -c 512 </dev/urandom >smallfile.bin
|
||||||
|
run_bench xor smallfile.bin
|
||||||
|
run_bench fletcher smallfile.bin
|
||||||
|
run_bench crc smallfile.bin
|
||||||
|
rm smallfile.bin
|
||||||
|
|
||||||
|
echo "Allocating 64KB file with random data..."
|
||||||
|
head -c 64K </dev/urandom >midfile.bin
|
||||||
|
run_bench xor midfile.bin
|
||||||
|
run_bench fletcher midfile.bin
|
||||||
|
run_bench crc midfile.bin
|
||||||
|
rm midfile.bin
|
||||||
|
|
||||||
|
echo "Allocating 128MB file with random data..."
|
||||||
head -c 128M </dev/urandom >bigfile.bin
|
head -c 128M </dev/urandom >bigfile.bin
|
||||||
|
|
||||||
run_bench xor bigfile.bin
|
run_bench xor bigfile.bin
|
||||||
run_bench fletcher bigfile.bin
|
run_bench fletcher bigfile.bin
|
||||||
run_bench crc bigfile.bin
|
run_bench crc bigfile.bin
|
||||||
|
rm bigfile.bin
|
||||||
|
|
||||||
echo "Create & check checksum..."
|
echo "Create & check checksum..."
|
||||||
head -c 16385 <(yes 4) > testfile.bin
|
head -c 16385 <(yes 4) > testfile.bin
|
||||||
|
|
|
@ -1,3 +1,59 @@
|
||||||
# Лабораторная работа №6
|
# Лабораторная работа №6
|
||||||
|
|
||||||
|
Входные данные тестов находятся в файле [.execme](.execme), там же находятся и сами тесты.
|
||||||
|
|
||||||
## Задание 1
|
## Задание 1
|
||||||
|
|
||||||
|
Был реализован алгоритм вычисления контрольной суммы с использованием XOR.
|
||||||
|
|
||||||
|
Тестовые данные были проверены онлайн-калькулятором
|
||||||
|
https://www.scadacore.com/tools/programming-calculators/online-checksum-calculator/
|
||||||
|
|
||||||
|
## Задание 2
|
||||||
|
|
||||||
|
Был реализован алгоритм вычисления контрольной суммы Флетчера.
|
||||||
|
|
||||||
|
Тестовые данные были проверены онлайн-калькулятором
|
||||||
|
https://gchq.github.io/CyberChef/#recipe=Fletcher-16_Checksum()
|
||||||
|
|
||||||
|
## Задание 3
|
||||||
|
|
||||||
|
Был реализован быстрый алгоритм вычисления контрольной суммы CRC-16-IBM (он же CRC-16).
|
||||||
|
|
||||||
|
Тестовые данные были проверены онлайн-калькулятором
|
||||||
|
https://emn178.github.io/online-tools/crc16.html
|
||||||
|
|
||||||
|
## Задание 4
|
||||||
|
|
||||||
|
Для бенчмаркинга алгоритмов в программах был реализован ключ `-b`.
|
||||||
|
|
||||||
|
Результаты можно увидеть ниже:
|
||||||
|
```text
|
||||||
|
Allocating 512B file with random data...
|
||||||
|
XOR execution time: 0.000018s
|
||||||
|
Fletcher execution time: 0.000017s
|
||||||
|
CRC execution time: 0.000015s
|
||||||
|
|
||||||
|
Allocating 64KB file with random data...
|
||||||
|
XOR execution time: 0.000621s
|
||||||
|
Fletcher execution time: 0.001165s
|
||||||
|
CRC execution time: 0.000962s
|
||||||
|
|
||||||
|
Allocating 128MB file with random data...
|
||||||
|
XOR execution time: 0.876024s
|
||||||
|
Fletcher execution time: 1.921205s
|
||||||
|
CRC execution time: 1.235906s
|
||||||
|
```
|
||||||
|
|
||||||
|
Из этого можно сделать вывод, что наилучший из представленных алгоритм вычисления
|
||||||
|
контрольной суммы -- CRC-16. XOR-сумма имеет слишком много коллизий, а также нечувствительна
|
||||||
|
к перестановкам байтов, хотя она является наиболее быстрой. CRC-16 на больших файлах оказывается
|
||||||
|
ощутимо производительнее суммы Флетчера, хотя и требует на 256 байт больше памяти.
|
||||||
|
|
||||||
|
## Задание 5
|
||||||
|
|
||||||
|
В данном задании был использован алгоритм CRC-8-Maxim/Dallas для вычисления контрольных сумм
|
||||||
|
4Кб-блоков в файле, а также их сверки.
|
||||||
|
|
||||||
|
В тестах проверяется адекватность программ (создание контрольной суммы с последующей сверкой),
|
||||||
|
а так же поведение при повреждении файла.
|
Loading…
Reference in New Issue