Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мои шпоры ОСиСП(1).doc
Скачиваний:
30
Добавлен:
26.09.2019
Размер:
1.63 Mб
Скачать

3. Концепция потока, как составной части процесса (8) – 139

Концепция процесса характеризуется: владением ресурсами, планированием и выполнением.

Многопоточность – это способность ОС поддерживать в рамках одного процесса выполнение нескольких потоков. Процесс, представляющий собой единый поток выполнения, называется однопоточным.

Есть различные конфигурации ОС:

  1. один процесс – один поток (MS-DOS)

  2. один процесс – несколько потоков (система типа Java)

  3. несколько процессов – один поток (ОС UNIX на первых этапах)

  4. несколько процессов и несколько потоков в процессе (Windows, OS/2, LINUX)

В многопоточной среде с каждым процессом также связаны управляющий блок и адресное пространство. Но для каждого потока создаётся свой отдельный стек и свой управляющий блок, в котором содержится значение регистров, приоритет и другая информация о состоянии потока. Все потоки процесса разделяют между собой состояние и ресурсы этого процесса. Они находятся в адресном пространстве и имеют доступ к данным. Если один поток изменяет какие-то данные, то другие потоки во время своего доступа к данным могут отследить эти изменения. Если один поток открывает файл, то другие потоки могут читать информацию из этого файла. Порождение новых потоков создаёт новую линию выполнения команд притом, что доступ идёт к одним и тем же данным. С точки зрения производительности, использование потоков имеет следующие преимущества:

1 . Создание нового потока в существующем процессе занимает на много меньше времени, чем создание нового процесса.

2. Поток можно завершить на много быстрее, чем процесс.

3. Переключение потоков в рамках одного процесса происходит намного быстрее, чем переключение процессов.

4. При использовании потоков повышается эффективность обмена информацией между двумя выполняющимися программами.

В большинстве ОС обмен данными между независимыми процессами происходит с участием ядра. А так как потоки используют одно и то же адресное пространство, то они могут обмениваться информацией без участия ядра. Примером приложения, в котором можно применить поток, является файловый сервер. Так как серверу приходится обрабатывать большое количество запросов, то необходимо создание потоков. Если серверная программа работает на многопроцессорной машине, то на разных процессорах в рамках одного процесса могут выполняться одновременно несколько потоков.

Билет 9

1. Разработка программ в ос unix. Обработка ошибок, переменные окружения (9)

Выполнение программы начинается с создания в памяти её образа и связывания с процессом структур ядра ОС, инициализации и передачи управления инструкциям программы. Завершение программы приводит к освобождению памяти и соответствующих структур ядра. Образ программы в памяти содержит сегменты инструкций и данных, созданных компилятором, а также стек, которым пользуется программа в ходе выполнения.

Окружение – набор переменных и их значений, с помощью которых программе можно передавать данные общего назначения.

Описание головной функции программы может выглядеть так:

main (int argc, char *argv[], char *envp[]);

или

extern char **environ; // глобальная переменная, указывающая на строки с

// переменными окружения.

main (int argc, char *argv[]);

argc равен количеству аргументов;

argv - массив указателей на аргументы;

envp - массив указателей на цепочки символов, образующие окружение.

Принято соглашение, по которому значение argc не меньше 1, а первый элемент массива argv указывает на цепочку символов, содержащую имя нового выполняемого файла.

Перед началом выполнения любой программы во внешнюю переменную environ помещается адрес массива указателей на цепочки символов, образующие окружение процесса. С помощью этой переменной (как и с помощью аргумента envp функции main) в новом процессе всегда можно получить доступ к окружению.

Каждая переменная содержит строку вида:

HOME=/home/student/851003.

Основные переменные окружения следующие:

HOME - имя каталога, который становится текущим после входа пользователя в систему.

PATH - последовательность полных файловых путей, разделенных двоеточием, которые используются некоторыми программами для поиска файлов, заданных относительным именем.

TERM - тип терминала

TZ - информация о часовом поясе.

LOGNAME - регистрационное имя пользователя.

LC_NUMERIC - значение категории локализации, определяющей правила национального представления чисел с плавающей точкой.

LC_TIME - значение категории локализации, определяющей правила национального представления времени и даты.

char *getenv (const char *name);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]