3. В архитектуре системы VAX-11 поддерживаются два набора регистров защиты
памяти, используемых машиной в процессе трансляции пользовательских ад-
ресов. Механизм трансляции используется тот же, что и в предыдущем пун-
кте, за одним исключением: указателей на таблицу страниц здесь два. Ес-
ли процесс располагает тремя областями - команд, данных и стека - то
каким образом, используя два набора регистров, следует производить
отображение областей на таблицы страниц ? Увеличение стека в архитекту-
ре системы VAX-11 идет в направлении младших виртуальных адресов. Какой
тогда вид имела бы область стека ? В главе 11 будет рассмотрена область
разделяемой памяти: как она может быть реализована в архитектуре систе-
мы VAX-11 ?
4. Составьте алгоритм выделения и освобождения страниц памяти и таблиц
страниц. Какие структуры данных следует использовать, чтобы достичь на-
ивысшей производительности или наибольшей простоты реализации алгоритма?
5. Устройство управления памятью MC68451 для семейства микропроцессоров
Motorola 68000 допускает выделение сегментов памяти размером от 256
байт до 16 мегабайт. Каждое (физическое) устройство управления памятью
поддерживает 32 дескриптора сегментов. Опишите эффективный метод выде-
ления памяти для этого случая. Каким образом осуществлялась бы реализа-
ция областей ?
6. Рассмотрим отображение виртуальных адресов, представленное на Рисунке
6.5. Предположим, что ядро выгружает процесс (в системе с подкачкой
процессов) или откачивает в область стека большое количество страниц (в
системе с замещением страниц). Если через какое-то время процесс обра-
тится к виртуальному адресу 68432, будет ли он должен обратиться к со-
ответствующей ячейке физической памяти, из которой он считывал данные
до того, как была выполнена операция выгрузки (откачки) ? Если нижние
уровни системы управления памятью реализуются с использованием таблицы
страниц, следует ли эти таблицы располагать в тех же, что и сами стра-
ницы, местах физической памяти ?
*7. Можно реализовать систему, в которой стек ядра располагается над верши-
176
ной стека задачи. Подумайте о достоинствах и недостатках подобной сис-
темы.
8. Каким образом, присоединяя область к процессу, ядро может проверить то,
что эта область не накладывается на виртуальные адреса областей, уже
присоединенных к процессу ?
9. Обратимся к алгоритму переключения контекста. Допустим, что в системе
готов к выполнению только один процесс. Другими словами, ядро выбирает
для выполнения процесс с только что сохраненным контекстом. Объясните,
что произойдет при этом.
10. Предположим, что процесс приостановился, но в системе нет процессов,
готовых к выполнению. Что произойдет, когда приостановившийся процесс
переключит контекст ?
11. Предположим, что процесс, выполняемый в режиме задачи, израсходовал вы-
деленный ему квант времени и в результате прерывания по таймеру ядро
выбирает для выполнения новый процесс. Объясните, почему переключение
контекста произойдет на системном контекстном уровне 2.
12. В системе с замещением страниц процесс, выполняемый в режиме задачи,
может столкнуться с отсутствием нужной страницы, которая не была загру-
жена в память. В ходе обработки прерывания ядро считывает страницу из
области подкачки и приостанавливается. Объясните, почему переключение
контекста (в момент приостанова) произойдет на системном контекстном
уровне 2.
13. Процесс использует системную функцию read с форматом вызова
read(fd,buf,1024);
в системе с замещением страниц памяти. Предположим, что ядро исполняет
алгоритм read для считывания данных в системный буфер, однако при по-
пытке копирования данных в адресное пространство задачи сталкивается с
отсутствием нужной страницы, содержащей структуру buf, вследствие того,
что она была ранее выгружена из памяти. Ядро обрабатывает возникшее
прерывание, считывая отсутствующую страницу в память. Что происходит на
каждом из системных контекстных уровней ? Что произойдет, если програм-
ма обработки прерывания приостановится в ожидании завершения считывания
страницы ?
14. Что произошло бы, если бы во время копирования данных из адресного
пространства задачи в память ядра (Рисунок 6.17) обнаружилось, что ука-
занный пользователем адрес неверен ?
*15. При выполнении алгоритмов sleep и wakeup ядро повышает приоритет работы
процессора так, чтобы не допустить прерываний, препятствующих ей. Какие
отрицательные последствия могли бы возникнуть, если бы ядро не предпри-
нимало этих действий ? (Намек: ядро зачастую возобновляет приостанов-
ленные процессы прямо из программ обработки прерываний).
*16. Предположим, что процесс пытается приостановиться до наступления собы-
тия A, но, запуская алгоритм sleep, еще не заблокировал прерывания; до-
пустим, что в этот момент происходит прерывание и программа его обра-
ботки пытается возобновить все процессы, приостановленные до наступле-
ния события A. Что случится с первым процессом ? Не представляет ли эта
ситуация опасность ? Если да, то может ли ядро избежать ее возникнове-
ния ?
17. Что произойдет, если ядро запустит алгоритм wakeup для всех процессов,
приостановленных по адресу A, в то время, когда по этому адресу не ока-
жется ни одного приостановленного процесса ?
18. По одному адресу может приостановиться множество процессов, но ядру мо-
жет потребоваться возобновление только некоторых из них - тех, которым
будет послан соответствующий сигнал. С помощью механизма посылки сигна-
лов можно идентифицировать отдельные процессы. Подумайте, какие измене-
ния следует произвести в алгоритме wakeup для того, чтобы можно было
возобновлять выполнение только одного процесса, а не всех процессов,
приостановленных по заданному адресу.
19. Обращения к алгоритмам sleep и wakeup в системе Multics
177
имеют следующий синтаксис:
sleep (событие);
wakeup (событие, приоритет);
Таким образом, в алгоритме wakeup возобновляемому процессу присваивает-
ся приоритет. Сравните форму вызова этих алгоритмов с формой вызова со-
178
памяти, используемых машиной в процессе трансляции пользовательских ад-
ресов. Механизм трансляции используется тот же, что и в предыдущем пун-
кте, за одним исключением: указателей на таблицу страниц здесь два. Ес-
ли процесс располагает тремя областями - команд, данных и стека - то
каким образом, используя два набора регистров, следует производить
отображение областей на таблицы страниц ? Увеличение стека в архитекту-
ре системы VAX-11 идет в направлении младших виртуальных адресов. Какой
тогда вид имела бы область стека ? В главе 11 будет рассмотрена область
разделяемой памяти: как она может быть реализована в архитектуре систе-
мы VAX-11 ?
4. Составьте алгоритм выделения и освобождения страниц памяти и таблиц
страниц. Какие структуры данных следует использовать, чтобы достичь на-
ивысшей производительности или наибольшей простоты реализации алгоритма?
5. Устройство управления памятью MC68451 для семейства микропроцессоров
Motorola 68000 допускает выделение сегментов памяти размером от 256
байт до 16 мегабайт. Каждое (физическое) устройство управления памятью
поддерживает 32 дескриптора сегментов. Опишите эффективный метод выде-
ления памяти для этого случая. Каким образом осуществлялась бы реализа-
ция областей ?
6. Рассмотрим отображение виртуальных адресов, представленное на Рисунке
6.5. Предположим, что ядро выгружает процесс (в системе с подкачкой
процессов) или откачивает в область стека большое количество страниц (в
системе с замещением страниц). Если через какое-то время процесс обра-
тится к виртуальному адресу 68432, будет ли он должен обратиться к со-
ответствующей ячейке физической памяти, из которой он считывал данные
до того, как была выполнена операция выгрузки (откачки) ? Если нижние
уровни системы управления памятью реализуются с использованием таблицы
страниц, следует ли эти таблицы располагать в тех же, что и сами стра-
ницы, местах физической памяти ?
*7. Можно реализовать систему, в которой стек ядра располагается над верши-
176
ной стека задачи. Подумайте о достоинствах и недостатках подобной сис-
темы.
8. Каким образом, присоединяя область к процессу, ядро может проверить то,
что эта область не накладывается на виртуальные адреса областей, уже
присоединенных к процессу ?
9. Обратимся к алгоритму переключения контекста. Допустим, что в системе
готов к выполнению только один процесс. Другими словами, ядро выбирает
для выполнения процесс с только что сохраненным контекстом. Объясните,
что произойдет при этом.
10. Предположим, что процесс приостановился, но в системе нет процессов,
готовых к выполнению. Что произойдет, когда приостановившийся процесс
переключит контекст ?
11. Предположим, что процесс, выполняемый в режиме задачи, израсходовал вы-
деленный ему квант времени и в результате прерывания по таймеру ядро
выбирает для выполнения новый процесс. Объясните, почему переключение
контекста произойдет на системном контекстном уровне 2.
12. В системе с замещением страниц процесс, выполняемый в режиме задачи,
может столкнуться с отсутствием нужной страницы, которая не была загру-
жена в память. В ходе обработки прерывания ядро считывает страницу из
области подкачки и приостанавливается. Объясните, почему переключение
контекста (в момент приостанова) произойдет на системном контекстном
уровне 2.
13. Процесс использует системную функцию read с форматом вызова
read(fd,buf,1024);
в системе с замещением страниц памяти. Предположим, что ядро исполняет
алгоритм read для считывания данных в системный буфер, однако при по-
пытке копирования данных в адресное пространство задачи сталкивается с
отсутствием нужной страницы, содержащей структуру buf, вследствие того,
что она была ранее выгружена из памяти. Ядро обрабатывает возникшее
прерывание, считывая отсутствующую страницу в память. Что происходит на
каждом из системных контекстных уровней ? Что произойдет, если програм-
ма обработки прерывания приостановится в ожидании завершения считывания
страницы ?
14. Что произошло бы, если бы во время копирования данных из адресного
пространства задачи в память ядра (Рисунок 6.17) обнаружилось, что ука-
занный пользователем адрес неверен ?
*15. При выполнении алгоритмов sleep и wakeup ядро повышает приоритет работы
процессора так, чтобы не допустить прерываний, препятствующих ей. Какие
отрицательные последствия могли бы возникнуть, если бы ядро не предпри-
нимало этих действий ? (Намек: ядро зачастую возобновляет приостанов-
ленные процессы прямо из программ обработки прерываний).
*16. Предположим, что процесс пытается приостановиться до наступления собы-
тия A, но, запуская алгоритм sleep, еще не заблокировал прерывания; до-
пустим, что в этот момент происходит прерывание и программа его обра-
ботки пытается возобновить все процессы, приостановленные до наступле-
ния события A. Что случится с первым процессом ? Не представляет ли эта
ситуация опасность ? Если да, то может ли ядро избежать ее возникнове-
ния ?
17. Что произойдет, если ядро запустит алгоритм wakeup для всех процессов,
приостановленных по адресу A, в то время, когда по этому адресу не ока-
жется ни одного приостановленного процесса ?
18. По одному адресу может приостановиться множество процессов, но ядру мо-
жет потребоваться возобновление только некоторых из них - тех, которым
будет послан соответствующий сигнал. С помощью механизма посылки сигна-
лов можно идентифицировать отдельные процессы. Подумайте, какие измене-
ния следует произвести в алгоритме wakeup для того, чтобы можно было
возобновлять выполнение только одного процесса, а не всех процессов,
приостановленных по заданному адресу.
19. Обращения к алгоритмам sleep и wakeup в системе Multics
177
имеют следующий синтаксис:
sleep (событие);
wakeup (событие, приоритет);
Таким образом, в алгоритме wakeup возобновляемому процессу присваивает-
ся приоритет. Сравните форму вызова этих алгоритмов с формой вызова со-
178