66555

Работа с терминалом. Управление процессами. Взаимодействие процессов: каналы

Лабораторная работа

Информатика, кибернетика и программирование

Цель работы - изучение механизмов управления устройствами ввода-вывода UNIX при помощи специальных файлов устройств, основных принципов управления процессами, способов создания и уничтожения процессов, механизмов планирования процессов...

Русский

2014-08-22

50.5 KB

1 чел.

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

—————————

Кафедра информационной безопасности компьютерных систем

ОТЧЕТ

по лабораторной работе №6

«Работа с терминалом. Управление процессами.Взаимодействие процессов: каналы»

по курсу «Операционные системы»

Студент:

Никитин А. С.

гр. 2088/1

Преподаватель:

Степанова Т. В.

Санкт-Петербург — 2011

1. Формулировка задания

Цель работы - изучение механизмов управления устройствами ввода-вывода UNIX при помощи специальных файлов устройств, основных принципов управления процессами, способов создания и уничтожения процессов, механизмов планирования процессов, простейших видов взаимодействия процессов (посредством каналов pipe) в ОС UNIX и Windows.

2. Использованные теоретические сведения

3. Результаты работы

3.1. Выполнение примеров

3.2. Выполнение индивидуального задания

  1.  UNIX. Разработать программу, осуществляющую взаимодействие с терминалом через специальный файл устройства /dev/tty. Программа должна выполнять следующие операций при нажатии отдельных клавиш:
    •  переключение между каноническим (строковым) и неканоническим (символьным) режимами работы терминала;
    •  отображение курсора на экране и его перемещение по экрану (в неканоническом режиме).

Комбинации клавиш, используемые для выполнения перечисленных операций, должны задаваться в конфигурационном файле программы перед ее запуском или переназначаться во время ее работы.
#include <stdio.h>
#
include <stdlib.h>
#
include <termio.h>
#
include <unistd.h>
#
include <fcntl.h>
#
include <signal.h>

static int td; //Дескриптор файла терминала
static struct termio trest; //Структура, хранящая начальное состояние
//терминала

void clean(int sig) { //Обработчик сигнала QUIT
   
ioctl(td, TCSETA, &trest);
   
close(td);
   
exit(0);
}

int main(int argc, char **argv) {
   
struct termio tstr, tsym; //Структуры для двух режимов терминала
   
int c, md = 0; //Переменные для чтения символов и хранения режима
   
char cmod = ' '; //Изначально режим меняется пробелом
   
char up = 'w'; //Кнопки WSDA используются для передвижения курсора
   
char down = 's';
   
char right = 'd';
   
char left = 'a';
   
td = open("/dev/tty", O_RDWR | O_NDELAY); //Открытие файла терминала
   
ioctl(td, TCGETA, &trest); //Получение атрибутов
   
tstr = trest;
   
tsym = tstr;
   
tsym.c_lflag &= ~(ICANON | ECHO); //Задание атрибутов символьного
//режима
   
tsym.c_cc[VMIN] = 1;
   
tsym.c_cc[VTIME] = 0;
   
signal(SIGQUIT, clean); //Установка обработчика сигнала
   
while (1) { //Основной цикл
       
c = 0;
       
read(td, &c, 1); //Чтение символа
       
if (c == '\x10') { //Если нажата комбинация Ctlr+P, то
//переход в режим изменения настроек
           
ioctl(td, TCSETA, &tsym); //Переключение в символьный режми

//для удобства
           
write(td, "\033[J", 4);
           
write(td, "Keyboard setup\n", 15);
           
do { //Пропустить остаточные символы
               
c = 0;
               
read(td, &c, 1);
           }
while (c != 0);
           
write(td, "cmod\n", 5); //Настройка соответствующих клавиш
           
do {
               
cmod = 0;
               
read(td, &cmod, 1);
           }
while (cmod == 0);
           
write(td, "up\n", 3);
           
do {
               
up = 0;
               
read(td, &up, 1);
           }
while (up == 0);
           
write(td, "down\n", 5);
           
do {
               
down = 0;
               
read(td, &down, 1);
           }
while (down == 0);
           
write(td, "right\n", 6);
           
do {
               
right = 0;
               
read(td, &right, 1);
           }
while (right == 0);
           
write(td, "left\n", 5);
           
do {
               
left = 0;
               
read(td, &left, 1);
           }
while (left == 0);
           
if (md) //Переключение в прошлый режим
               
ioctl(td, TCSETA, &tsym);
           
else
               
ioctl(td, TCSETA, &tstr);
       }
       
if (c == cmod) { //Нажатие кнопки переключения режима
           
if (!md)
               
ioctl(td, TCSETA, &tsym);
           
else
               
ioctl(td, TCSETA, &tstr);
           
md = !md;
       }
       
if (md) { //В символьном режиме обработка клавиш перемещения
//курсора
           
if (c == up) write(td, "\033[1A", 4);
           
if (c == down) write(td, "\033[1B", 4);
           
if (c == right) write(td, "\033[1C", 4);
           
if (c == left) write(td, "\033[1D", 4);
       }
   }
   
return 0;
}

3.3. Ответы на контрольные вопросы

  1.  Опишите алгоритмы планирования процессов в Windows.
    Процессы просматриваются в порядке уменьшения приоритетов, а потом среди процессов с одинаковым приоритетом выбирается один для выполнения по алгоритму
    Round-Robin. При этом обычно процессу выделяется целый квант времени, после которого его выполнения прерывается. Однако, процессы с более высоким приоритетом могут вытеснять текущий процесс.
  2.  Для чего нужны приоритеты процессов в Windows?
    Приоритеты процессов необходимы для более эффективного планирования, а также для более рационального распределения процессорного времени, так как различным процессам нужно различное его количество.
  3.  Опишите реализацию приоритетов в Windows.
    В
    Windows есть 32 приоритета от 0 до 31, большее значение означает более высокий приоритет. Базовый приоритет процесса задаётся самим процессом, этот приоритет является основным для всех потоков, выполняющихся в процессе. Однако при планировании системой учитывается динамический приоритет потока, который основывается на базовом. Это сделано для более честного планирования, так как иначе потоки с очень низким приоритетом будут постоянно вытесняться другими потоками. Динамический приоритет повышается при нехватке процессорного времени, или после выхода потока из состояния ожидания.

4. Выводы

ОС UNIX предоставляет достаточно удобный интерфейс для работы с терминалом. Одной из составляющих удобства является файл терминала.

В Windows реализован достаточно гибкий алгоритм планирования процессов, однако не всегда планирование оказывается удачным, что связано с вытеснением процессов с низким приоритетом процессами с более высоким приоритетом.

Реализация каналов в операционных системах UNIX и Windows в целом достаточно похожа предоставляемой функциональностью. Основной проблемой при таком взаимодействии процессов может стать совместное использование канала несколькими процессами, однако для однонаправленной передачи данных одним процессом другому этот способ подходит идеально.

Приложение

Исходные тексты программ


 

А также другие работы, которые могут Вас заинтересовать

85175. Восстание 1863-1864 гг. и его итоги 28.15 KB
  Белые рассчитывали этого путем переговоров с царем с помощью Франции других стран Запада а красные опирались на восстание населения на свои силы.Калиновский который готовил восстание издавал газету Мужицкая правда боролся за свободу народа. Восстание началось зимой 1863 Для руководства восстанием были созданы руководящие органы: Центральный нац.Калиновский возглавил восстание в Гродненской губернии.
85176. Развитие капитализма в Беларуси в 1860 - 1890-е годах 29.42 KB
  Ускорили развитие капиталистических отношений в эк. Сохранилась сельская община чересполосица что сдерживало развитие с х. Быстрое развитие всех форм хозяйствования и в первую очередь укрупнение промышленного прова потребовало создания кредитной системы.
85177. Общественно-политическое движение в белорусских губерниях в 1860-е гг. - начале XX века 27.66 KB
  Во второй половине XIX века в общественнополитическую жизнь Беларуси активно включились представители третьего сословияразночинцы получившие название народников. С возникновением в Петербурге организации Земля и воля 1876 народническое движение в Беларуси развивалось под ее непосредственным влиянием. В начале 1884 года с инициативой объединения в общую организацию всех кружков Беларуси выступила группа Гомон. Гомоновцы впервые в истории общественной мысли Беларуси заявили о существовании белорусской нации.
85178. Революция 1905-1907 гг. Белорусские земли в условиях ускорения буржуазной модернизации (начало XX в.) 29.88 KB
  Основными причинами революции 1905-07гг стали недовольство царизмом,нерешенность аграрного, рабочего и национального вопросов. Начало революции ускорило поражение России в войне с Японией (1904-05гг). Революция нач.9 янв 1905 в Петербкрге с расстрела мирной демонстрации рабочих (Кровавое воскресенье).
85179. Первая мировая война и Февральская революция 1917г. Борьба политических партий за выбор путей общественного развития 28.2 KB
  Значительная часть территории Беларуси стала ареной военных действий. Около половины территории Беларуси оказалась под немецкой оккупацией. На захваченной германскими войсками территории Беларуси был введен жесткий режим деспотизма грабежа и насилия. Тяжёлое положение сложилось и на неоккупированной территории Беларуси.
85180. Культура Беларуси во второй половине XIX - начале XX века 27.25 KB
  Начинается новый этап в развитии белорусской литературы. Писатели постепенно становились на путь создания развитой литературы. Шел процесс ее жанрового обогащения литературы совершенствовалась стихотворение. Вершиной развития белорусского литературы стало творчество Франтишка Богушевича.
85181. Становление белорусской нации: закономерности и особенности 27.44 KB
  Продолжался процесс формирования белорусского нации. Существование нации характеризовалась наличием следующих признаков: сообщество территории и экономической жизни культуры и литературного языка общностью черт национального характера. Формирование белорусской нации сдерживалось русификаторской политикой царизма: расширение российского землевладения переводом начальной школы полностью на русскую язык обучения отсутствием высших учебных заведений белорусской печати.
85182. Октябрьская революция 1917 г. и белорусские земли. Первые социалистические преобразования 29.63 KB
  Что касается крестьянских советов то их абсолютное большинство находилось под влиянием эсэров и БСГ. 26 октября 2ой Всероссийский съезд Советов объявил советскую власть в центре и на местах принял Декрет о мире и земле. Это были 1 съезд Советов рабочих и крестьянских депутатов Западной области 3 съезд Советов крестьянских депутатов Минской и Виленской губерний и 2 съезд армии Западного фронта.
85183. Формирование белорусской государственности. БНР, БССР, Литбел 27.36 KB
  БНР БССР Литбел. Провозглашение БНР 21 февраля 1918 г. Исполком Всебелорусского съезда принял другую уставную грамоту в которой объявил Беларусь народной республикой БНР. Исполком был переименован в Раду БНР.