Создание процессов в операционных системах. Библиотеки. — КиберПедия 

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Создание процессов в операционных системах. Библиотеки.



Каждый процесс в операционной системе получает уникальный идентификационный номерPID (process identificator). При создании нового процесса операционная система пытается присвоить ему свободный номер больший, чем у процесса, созданного перед ним. Если таких свободных номеров не оказывается (например, мы достигли максимально возможного номера для процесса), то операционная система выбирает минимальный номер из всех свободных номеров. В операционной системе Linux присвоение идентификационных номеров процессов начинается с номера 0, который получает процесс kernel при старте операционной системы. Этот номер впоследствии не может быть присвоен никакому другому процессу. Максимально возможное значение для номера процесса в Linux на базе 32-разрядных процессоров Intel составляет 231-1.

Создание процесса в UNIX.

Системный вызов fork(). Для порождения нового процесса предназначен системный вызов fork(), объявленный в заголовочном файле unistd.h следующим образом: pid_t fork(void);

Системный вызов fork() порождает процесс методом «клонирования». Это значит, что новый процесс является точной копией своего родителя и выполняет ту же самую программу. Чтобы в контексте программы отделить один процесс от другого, достаточно знать, что системный вызов fork() возвращает в текущем процессе PID порожденного потомка (или -1 в случае ошибки). А в новый процесс fork() возвращает 0.

Пример.

int main(void){

pid_t result = fork();

if (result == -1){

//выводим сообщение об ошибке

}

if (result == 0) printf(“I am child”);

else printf(“I am parent”);

}

После fork() процесс-потомок чаще всего выполняет системный вызов exec, загружающий в пространство процесса новую программу (именно так, и только так, в Unix-системе выполняется запуск программы в отдельном процессе). Вызов exec заменяет пользовательский контекст текущего процесса на содержимое некоторого исполняемого файла и устанавливает начальные значения регистров процессора на начало загружаемой программы. Этот вызов требует для своей работы задания имени исполняемого файла, аргументов командной строки и параметров окружающей среды. Для осуществления вызова программист может воспользоваться одной из шести функций: execl(), execv(), execlp(), execvp(), execle(), execve(), отличающихся друг от друга представлением параметров, необходимых для работы системного вызова exec.

spawn().Вызов spawn создает и исполняет новый процесс – потомок (одним шагом выполняет как бы fork() и exec).Для осуществления вызова программист может воспользоваться одной из четырех функций: spawnl(), spawnlp(), spawnv(), spawnvp().



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

clone().Вызов clone() создает новый процесс со своим новым идентификатором личности, но такой, которому разрешено совместно использовать структуры данных со своим родителем (в отличие от fork(), который создает новый процесс со своим полностью новым контекстом). Использование системного вызова clone() дает процессам возможность явного контроля над тем, какие ресурсы совместно используются потоками.

Библиотеки.

Библиотека — сборник подпрограмм или объектов, используемых для разработки программного обеспечения. Чтобы подключить библиотеку к программе, нужно передать компоновщику опцию –l, указав после нее (можно без разделяющего пробела) имя библиотеки. Если, например, к программе нужно подключить библиотеку mylibrary, то для осуществления компоновки следует задать такую команду:

$ gcc –o myprogram myprogram.o –lmylibrary

Чаще всего файлы библиотек располагаются в специальных каталогах (/lib, /usr/lib и т.п.). Если же требуется подключить библиотеку из другого места, то при компоновке следует указать опцию –L, после которой (можно без разделяющего пробела) указывается нужный каталог. Т.о., при необходимости подключения библиотеки mylibrary, находящейся в каталоге /usr/lib/particular, для выполнения компоновки указывают такую команду:

$ gcc –o myprogram myprogram.o -L/usr/lib/particular –lmylibrary

С точки зрения ОС и прикладного ПО библиотеки разделяются на две категории:

1. Статические библиотеки. Это архивы, создаваемые специальным архиватором ar и имеющие расширение .a.

Утилита ar создает архив, который может подключаться к программе во время компоновки на правах библиотеки. Этот архиватор поддерживает следующие опции:



- Опция r создает архив, а также добавляет или заменяет файлы в существующем архиве. Например, если нужно создать статическую библиотеку libfoo.a из файлов foo1.o и foo2.o, то для этого достаточно ввести следующую команду:

$ ar r libfoo.a foo1.o foo2.o

- Опция x извлекает файлы из архива:

$ ar x libfoo.a

2. Динамические библиотеки. Создаются компоновщиком при вызове gcc с опцией и имеют расширение .so. Динамические библиотеки не помещают свой код непосредственно в программу, а лишь создают специальные ссылки. Поэтому любая программа, скомпонованная с динамической библиотекой, при запуске требует наличие данной библиотеки в системе.

Динамические библиотеки создаются при помощи gcc по следующему шаблону:

$ gcc –shared –o LIBRARY_NAME FILE1.o FILE2.o …

При создании динамических библиотек следует учитывать два нюанса:

1. В процессе компоновки динамической библиотеки должны участвовать объектные файлы, содержащие позиционно-независимый код. Этот код имеет возможность подгружаться к программе в момент ее запуска. Чтобы получить объектный файл с позиционно-независимым кодом, нужно откомпилировать исходный файл с опцией –fPIC. Например, чтобы получить объектный файл foo1.o с позиционно-независимым кодом, надо выполнить команду:

$ gcc –fPIC –c foo1.c

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

 


Языки программирования:

Языки программирования.

Программа — это последовательность символов, определяющая вычисление.

Язык программирования — это набор правил, определяющих, какие по­следовательности символов составляют программу и какое вычисление описывает программа.

Компилятортранслирует символы из исходного файла в объектный модуль, который содержит команды в машинном коде для конкретного компьютера.

Интерпретаторнепосредственно выполняет исходный код программы в от­личие от компилятора, переводящего исходный файл в объектный.

Чем выше уровень абстракции, тем больше деталей исчезает. Если вы пишете программу на С, то теряете возможность задать распреде­ление регистров, которая есть в языке ассемблера; если вы пишете на языке Prolog, то теряете имеющуюся в С возможность определить произвольные связанные структуры с помощью указателей.

Парадигма программирования определяет то, в каких терминах программист описывает логику программы






Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...





© cyberpedia.su 2017 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав

0.006 с.