9_Appendix
.pdfПРИЛОЖЕНИЕ
ПРОТОКОЛЫ ВЗАИМОДЕЙСТВИЯ КЛИЕНТСКОЙ И СЕРВЕРНОЙ ЧАСТЕЙ
СИСТЕМЫ ХРАНЕНИЯ ДАННЫХ
ЧТЕНИЕ СТРАНИЦЫ С ДИСКА
Т |
Клиент |
1. |
if (запись_блокирована) { |
|
такт--; |
|
break; |
|
} |
|
запись_блокирована= TRUE; |
|
запись_запущена = TRUE; |
|
r_write(сервер, {ИД; клиент; |
|
"чтение_стр"; номер_страницы}); |
|
|
2. |
if (!заголовок_получен) { |
|
такт--; |
|
break; |
|
} |
|
if (дескриптор.ИД_операции != |
|
заголовок.ИД_операции) { |
|
такт--; |
|
break; |
|
} |
|
запись_блокирована = FALSE; |
|
заголовок_получен = FALSE; |
|
чтение_блокировано = TRUE; |
|
чтение_запущено = TRUE; |
|
r_read(сервер, info); |
3. |
if (!t_read(сервер)) { |
|
такт--; |
|
break; |
|
} |
|
чтение_блокировано = FALSE; |
|
такт = -1; |
|
|
ТСервер
1.if (загрузка_диска) {
такт --; break;
}
if (запись_блокирована[клиент]) { такт --;
break;
}
чтение_страницы = TRUE; r_diskread(номер_страницы, info);
запись_блокирована[клиент] = TRUE; r_write(клиент, {ИД; клиент; "читай_info"});
2. if (!t_diskread()) {
такт --; break;
}
if (!t_write(клиент)) {
такт --; break;
}
r_write(клиент, info);
3. if (!t_write(клиент)) {
такт--; break;
}
запись_блокирована[клиент] = FALSE; чтение_страницы = FALSE;
такт = -1;
116
ЗАПИСЬ СТРАНИЦЫ НА ДИСК
Т |
Клиент |
1. |
if (запись_блокирована) { |
|
такт--; |
|
break; |
|
} |
|
запись_блокирована = TRUE; |
|
запись_запущена = TRUE; |
|
r_write(сервер, {ИД; клиент; |
|
"запись_стр"; номер_страницы}); |
|
|
2. |
if (!t_write(сервер)) { |
|
такт --; |
|
break; |
|
} |
|
запись_запущена = TRUE; |
|
r_write(сервер, info); |
3. |
if (!t_write(сервер)) { |
|
такт --; |
|
break; |
|
} |
|
запись_блокирована = FALSE; |
|
такт=-1; |
Т |
Сервер |
1. |
if (сохранение_диска) { |
|
такт --; |
|
break; |
|
} |
|
if (чтение_блокировано[клиент]) { |
|
такт --; |
|
break; |
|
} |
|
запись_страницы = TRUE; |
|
чтение_блокировано[клиент] = TRUE; |
|
r_read(клиент, info); |
2. |
if (!t_read(клиент)) { |
|
такт --; |
|
break; |
|
} |
|
r_diskwrite(номер_страницы, info); |
|
чтение_блокировано[клиент] = FALSE; |
3. |
if (!t_ diskwrite()) { |
|
такт --; |
|
break; |
|
} |
|
запись_страницы = FALSE; |
|
такт=-1; |
ЗАГРУЗКА ОБРАЗА ДИСКА ИЗ ФАЙЛА НА HOST-МАШИНЕ
Т |
Клиент |
1. |
if (запись_блокирована) { |
|
такт--; |
|
break; |
|
} |
|
запись_блокирована = TRUE; |
|
запись_запущена = TRUE; |
|
r_write(сервер, {ИД; клиент; |
|
"загрузка_диска"; имя_файла}); |
|
|
2. |
if (!пришел_заголовок) { |
|
такт--; |
|
break; |
|
} |
|
if (дескриптор.ИД_операции != |
|
заголовок.ИД_операции) { |
|
такт--; |
|
break; |
|
} |
|
заголовок_получен = FALSE; |
|
запись_блокирована = FALSE; |
|
такт = -1; |
Т |
Сервер |
1. |
if (чтение_страницы || сброс_диска) { |
|
такт --; |
|
break; |
|
} |
|
if (запись_блокирована[клиент]) { |
|
такт --; |
|
break; |
|
} |
|
загрузка_диска = TRUE; |
|
запись_блокирована[клиент] = TRUE; |
|
disk_reset(имя_файла); |
|
r_write(клиент, {ИД; "завершена"}); |
2. |
if (!t_write(клиент)) { |
|
такт--; |
|
break; |
|
} |
|
загрузка_диска = FALSE; |
|
запись_блокирована[клиент] = FALSE; |
|
такт = -1; |
|
|
117
СОХРАНЕНИЕ ОБРАЗА ДИСКА В ФАЙЛ НА HOST-МАШИНЕ
Т |
Клиент |
1. |
if (запись_блокирована) { |
|
такт--; |
|
break; |
|
} |
|
запись_блокирована = TRUE; |
|
запись_запущена = TRUE; |
|
r_write(сервер, {ИД; клиент; |
|
"сброс_диска"; имя_файла}); |
|
|
2. |
if (!пришел_заголовок) { |
|
такт--; |
|
break; |
|
} |
|
if (дескриптор.ИД_операции != |
|
заголовок.ИД_операции) { |
|
такт--; |
|
break; |
|
} |
|
заголовок_получен = FALSE; |
|
запись_блокирована = FALSE; |
|
такт = -1; |
Т |
Сервер |
1. |
if (запись_страницы || загрузка_диска) { |
|
такт --; |
|
break; |
|
} |
|
if (запись_блокирована[клиент]) { |
|
такт --; |
|
break; |
|
} |
|
сброс_диска = TRUE; |
|
запись_блокирована[клиент] = TRUE; |
|
disk_dump(имя_файла); |
|
r_write(клиент, {ИД; "завершена"}); |
2. |
if (!t_write(клиент)) { |
|
такт--; |
|
break; |
|
} |
|
сброс_диска = FALSE; |
|
запись_блокирована[клиент] = FALSE; |
|
такт = -1; |
|
|
118