Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS_REDACTED_БИЛЕТЫ.docx
Скачиваний:
9
Добавлен:
01.04.2022
Размер:
1.15 Mб
Скачать
  1. Перечислите основные команды языка сценариев 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 Копирование файлов и дерева папок.

  1. Решите задачу производителя/потребителя через 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); /* распечатка записи */ } }