
- •Дайте определение диспетчеру памяти и адресным пространствам. Поясните механизм использования базового и ограничительного регистров.
- •Приведите классификацию ос
- •Проведите обзор файловых систем (ntfs и ufs) Структура ntfs
- •Структура ufs
- •Дайте определение ос, опишите функции ос
- •Опишите основные этапы развития ос
- •Дайте определение виртуальной памяти, страничной организации памяти. Опишите структуру таблиц страниц
- •Опишите механизмы работы буфера быстрого преобразования адреса, многоуровневых и инвертированных таблицы страниц.
- •Дайте определение процессу и опишите блок управления процессом.
- •Опишите механизмы создания и уничтожения процессов Создание процесса
- •Удаление процесса
- •Опишите основные состояния процессов и возможные переходы между ними. Дайте определение переключению контекста.
- •Опишите механизмы диспетчеризации процессов.
- •Дайте определение свопинг. Опишите механизм управления свободной памятью при свопинге (битовые матрицы)
- •Опишите механизм управления свободной памятью при свопинге (связные списки и поиск по ним)
- •Проведите обзор аппаратного обеспечения пк
- •Дайте определение состязательной ситуации, критической области. Поясните механизм работы барьеров и обмена сообщениями
- •Проведите обзор файловых систем (общая информация и fat)
- •Опишите алгоритм замещения страниц wsClock
- •Опишите алгоритм замещения страниц lru
- •Опишите алгоритм замещения страниц ws.
- •Опишите алгоритм замещения страниц Clock
- •Опишите алгоритм замещения страниц nru
- •Опишите оптимальный алгоритм замещения страниц
- •Опишите алгоритм замещения страниц Second Chance
- •Опишите алгоритм замещения страниц fifo
- •Опишите алгоритм диспетчеризации процессов rr
- •Опишите алгоритм диспетчеризации процессов srtf
- •Опишите алгоритм диспетчеризации процессов fcfs
- •Опишите алгоритм диспетчеризации процессов sjf
- •Перечислите основные команды языка сценариев bat
- •Решите задачу производителя/потребителя через sleep и wakeup
- •Решите задачу производителя/потребителя через алгоритм Петерсона
- •Решите задачу производителя/потребителя через семафоры и мьютексы
- •Решите задачу обедающих философов через семафоры и мьютексы
Перечислите основные команды языка сценариев bat
Batch является языком программирования, используется для создания файлов сценарий которые можно выполнять на операционной системе Windows.
BREAK Включение/выключение режима обработки комбинации клавиш
CALL Вызов одного пакетного файла из другого.
CD Вывод имени либо смена текущей папки.
CHKDSK Проверка диска и вывод статистики.
CLS Очистка экрана. RD Удаление папки.
CMD Запуск еще одного интерпретатора командных строк Windows.
COMP Сравнение содержимого двух файлов или двух наборов файлов.
COPY Копирование одного или нескольких файлов в другое место.
DATE Вывод либо установка текущей даты.
DEL Удаление одного или нескольких файлов.
DIR Вывод списка файлов и подпапок из указанной папки.
DISKCOMP Сравнение содержимого двух гибких дисков.
DISKCOPY Копирование содержимого одного гибкого диска на другой.
ECHO Вывод сообщений и переключение режима отображения команд на экране.
EXIT Завершение работы программы CMD.EXE (интерпретатора командных строк).
FIND Поиск текстовой строки в одном или нескольких файлах.
FOR Запуск указанной команды для каждого из файлов в наборе.
GOTO Передача управления в отмеченную строку пакетного файла.
IF Оператор условного выполнения команд в пакетном файле.
LABEL Создание, изменение и удаление меток тома для дисков.
MD Создание папки. VER Вывод сведений о версии Windows.
MOVE Перемещение одного или нескольких файлов из одной папки в другую.
PATH Вывод либо установка пути поиска исполняемых файлов.
PAUSE Приостановка выполнения пакетного файла и вывод сообщения.
PRINT Вывод на печать содержимого текстовых файлов.
REM Помещение комментариев в пакетные файлы и файл CONFIG.SYS.
RENAME Переименование файлов и папок.
REPLACE Замещение файлов SORT Сортировка ввода.
SET Вывод, установка и удаление переменных среды Windows.
SHIFT Изменение содержимого (сдвиг) подставляемых параметров для пакетного файла.
START Запуск программы или команды в отдельном окне.
TIME Вывод и установка системного времени.
TREE Графическое отображение структуры папок заданного диска или заданной папки. TYPE Вывод на экран содержимого текстовых файлов.
XCOPY Копирование файлов и дерева папок.
Решите задачу производителя/потребителя через sleep и wakeup
Рассмотрим некоторые примитивы взаимодействия процессов, которые блокируют работу, пока им не разрешается входить в критическую область. Представителями простейшей пары таких примитивов являются sleep и wakeup. Системный вызов sleep блокирует вызывающий его процесс, который приостанавливается до тех пор, пока его не активизирует другой процесс. Активизирующий вызов wakeup использует один аргумент — активизируемый процесс. Дополнительно и sleep и wakeup используют еще один аргумент — адрес памяти, используемой для соотнесения вызовов sleep с вызовами wakeup.
В качестве примера применения этих примитивов рассмотрим задачу производителя и потребителя (задачу ограниченного буфера). Два процесса используют общий буфер фиксированного размера. Один из них, производитель, помещает информацию в буфер, а другой, потребитель, извлекает ее оттуда. (Можно также расширить проблему до m производителей и n потребителей, но мы будем рассматривать только случай с одним производителем и одним потребителем, поскольку такое допущение упрощает решение.) Проблемы возникаю, когда производителю требуется поместить новую запись в уже заполненный буфер. Решение заключается в блокировании производителя до тех пор, пока потребитель не извлечет как минимум одну запись. Также, если потребителю нужно извлечь запись из буфера и видит, что буфер пуст, он блокируется до тех пор, пока производитель не поместит что-нибудь в буфер и не активизирует этого потребителя. На первый взгляд этот подход выглядит довольно простым, но он приводит к разновидности состязательной ситуации. Для отслеживания количества записей в буфере нам потребуется переменная count. Если максимальное количество записей, которое может содержаться в буфере, равно N, то программа производителя должна сначала проверить, не имеет ли count значение N. Если переменная имеет такое значение, производитель должен заблокировать свое выполнение, а если не имеет — добавить запись и увеличить показание счетчика count. Программа потребителя работает схожим образом: сначала проверяет, не является ли значение count нулевым. Если оно равно нулю, процесс блокирует свое выполнение, а если не равно нулю, он извлекает запись и уменьшает значение счетчика. Каждый из процессов также проверяет, не нужно ли активизировать другой процесс, и если нужно, проводит эту активизацию. Вызовы sleep и wakeup в виде вызовов библиотечных процедур.
#define N 100 /* количество мест для записей в буфере */
int count = 0; /* количество записей в буфере */
void producer(void) {
int item;
while (TRUE) { /* бесконечное повторение */
item = produce_item( ); /* генерация новой записи */
if (count == N) sleep( ); /* если буфер полон, заблокироваться */
insert_item(item); /* помещение записи в буфер */
count = count + 1; /* увеличение счетчика записей в буфере */
if (count == 1) wakeup(consumer); /* был ли буфер пуст? */ } }
void consumer(void) {
int item; while (TRUE) { /* бесконечное повторение */
if (count == 0) sleep(); /* если буфер пуст, заблокироваться */
item = remove_item( ); /* извлечь запись из буфера */
count = count− 1; /* уменьшение счетчика записей в буфере */
if (count == N − 1) wakeup(producer); /* был ли буфер полон? */
consume_item(item); /* распечатка записи */ } }