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 в целом достаточно похожа предоставляемой функциональностью. Основной проблемой при таком взаимодействии процессов может стать совместное использование канала несколькими процессами, однако для однонаправленной передачи данных одним процессом другому этот способ подходит идеально.

Приложение

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


 

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

74194. Multiparadigm programming language – Python 50 KB
  Multiprdigm progrmming lnguge Python.1 Python is generlpurpose progrmming lnguge tht blends procedurl functionl nd objectoriented prdigms. Python is powerful multiprdigm computer progrmming lnguge optimized for progrmmer productivity code redbility nd softwre qulity. Python is populr open source progrmming lnguge used for both stndlone progrms nd scripting pplictions in wide vriety of domins.
74195. Version control software and tools 39 KB
  Version control softwre nd tools1 Version control lso clled subversion control or revision control helps lrge projects from spinning out of control by letting individul progrmmers writers or project mngers tckle project from different ngles without getting in ech others wy nd without doing dmge tht cnt be undone. Version Control lets you trck your files over time. Youve probbly cooked up your own version control system got ny files like this: Lb1_1. dd version number or dte: Document_V1.
74196. Cloud computing: programming models 35 KB
  Cloud computing: progrmming models1 Cloud computing is computing in which lrge groups of remote servers re networked to llow centrlized dt storge nd online ccess to computer services or resources. Clouds cn be clssified s public privte or hybrid. Cloud computing relies on shring of resources to chieve coherence nd economies of scle similr to utility like the electricity grid over network. t the foundtion of cloud computing is the broder concept of converged infrstructure nd shred services.
74197. History of programming languages and tools 242.5 KB
  History of progrmming lnguges nd tools. PreHistory The first progrmming lnguges predte the modern computer. Figure 1 Punch crd Like mny firsts in history the first modern progrmming lnguge is hrd to identify. To some people the nswer depends on how much power nd humnredbility is required before the sttus of ldquo;progrmming lngugerdquo; is grnted.
74198. Evolution of programming languages and tools 56.5 KB
  The earliest practical form of programming was probably done by Jaquard (1804, France). He designed a loom that performed predefined tasks through feeding punched cards into a reading contraption.
74199. Programming paradigms 45 KB
  Progrmming prdigms. The word progrmming prdigm is used in severl different lthough relted menings in computer science. Progrmming prdigm pttern tht serves s school of thoughts for progrmming of computers. Progrmming technique relted to n lgorithmic ide for solving prticulr clss of problems.
74200. Imperative programming languages and tools 78 KB
  Impertive progrmming lnguges nd tools. Progrmming lnguges bsed on the impertive prdigm hve the following chrcteristics: 1 The bsic unit of bstrction is the PROCEDURE whose bsic structure is sequence of sttements tht re executed in succession bstrcting the wy tht the progrm counter is incremented so s to proceed through series of mchine instructions residing in sequentil hrdwre memory cells. Typiclly given vrible my ssume mny different vlues of the course of the execution of progrm just s hrdwre memory cell my contin mny different vlues.1...
74201. Imperative programming languages and tools 56.5 KB
  LGOL gretly influenced mny other lnguges its mjor contribution is being the root of the tree tht gve rise to mny other progrmming lnguges including BCPL B Pscl PL I Simul C C nd Jv. Niklus Wirth bsed his own LGOL W on LGOL 60 before developing Pscl. This led to the doption of smller nd more compct lnguges such s Pscl...
74202. Functional programming languages and tools 55 KB
  Functional programming languages (FPL) were originally developed specifically to handle symbolic computation and list-processing applications. In FPLs the programmer is concerned only with functionality, not with memory-related variable storage and assignment sequences.