Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

9_Appendix

.pdf
Скачиваний:
1
Добавлен:
22.08.2019
Размер:
113 Кб
Скачать

ПРИЛОЖЕНИЕ

ПРОТОКОЛЫ ВЗАИМОДЕЙСТВИЯ КЛИЕНТСКОЙ И СЕРВЕРНОЙ ЧАСТЕЙ

СИСТЕМЫ ХРАНЕНИЯ ДАННЫХ

ЧТЕНИЕ СТРАНИЦЫ С ДИСКА

Т

Клиент

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]