Главная » Просмотр файлов » Гордеев А.В. Операционные системы (2-е изд., 2004)

Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 83

Файл №1186250 Гордеев А.В. Операционные системы (2-е изд., 2004) (Гордеев А.В. Операционные системы (2-е изд., 2004)) 83 страницаГордеев А.В. Операционные системы (2-е изд., 2004) (1186250) страница 832020-08-27СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 83)

Если командному ин­терпретатору встречается команда, соответствующая выполняемому файлу, то онсоздает новый процесс и запускает в нем соответствующую программу, начиная сфункции main. Эта запущенная программа, в свою очередь, может создать процесс изапустить в нем другую программу (та тоже должна содержать функцию main) и т. д.Для образования нового процесса и запуска в нем программы используются двасистемных вызова API — fork() и ехес(имя_выполняемого_файла). Системный вызовfork() приводит к созданию нового адресного пространства, состояние которого аб­солютно идентично состоянию адресного пространства основного процесса (то естьв нем содержатся те же программы и данные). Для дочернего процесса заводятсякопии всех сегментов данных.Другими словами, сразу после выполнения системного вызова forkQ основной (ро­дительский) и порожденный процессы являются абсолютными близнецами; управ­ление в том и другом находится в точке, непосредственно следующей за вызовомfork().

Чтобы программа могла разобраться, в каком процессе (основном или по­рожденном) она теперь работает, функция fork() возвращает разные значения:О в порожденном процессе и целое положительное число в основном процессе. Этимцелым положительным числом является уже упоминавшийся идентификатор про­цесса (PID).

Таким образом, родительский процесс будет знать идентификаторсвоего дочернего процесса и может при необходимости управлять им.Теперь, если мы хотим запустить новую программу в порожденном процессе, нуж­но обратиться к системному вызову exec, указав в качестве аргументов вызова имяфайла, содержащего новую выполняемую программу, и, возможно, одну или не­сколько текстовых строк, которые будут переданы в качестве аргументов функ­ции main новой программы. Выполнение системного вызова exec приводит к тому,что в адресное пространство порожденного процесса загружается новая выполня­емая программа и запускается с адреса, соответствующего входу в функцию main.Другими словами, это приводит к замене текущего программного сегмента и теку­щего сегмента данных, которые были унаследованы при выполнении вызова fork,соответствующими сегментами, заданными в файле. Прежние сегменты теряются.Это эффективный метод смены выполняемой процессом программы, но не самогопроцесса.

Файлы, уже открытые до вызова примитива exec, остаются открытымипосле его выполнения.В следующем примере пользовательская программа, вызываемая как команда обо­лочки, выполняет в отдельном процессе стандартную команду Is оболочки, кото­рая выдает на экран содержимое текущего каталога.mainO{if(forkO--O) wait(O);/* родительский процесс */else exec!("Is". "Is".

0): /* порожденный процесс */}320Глава 10, Краткий обзор современных операционных системТаким образом, с практической точки зрения процесс в UNIX является объектомсоздаваемым в результате выполнения функции fork(). Каждый процесс за исклю­чением начального (нулевого) порождается в результате вызова другим процес­сом функции fork(). Каждый процесс имеет одного родителя, но может породитьмного процессов. Начальный (нулевой) процесс является особенным процессомкоторый создается в результате загрузки системы. После порождения нового про­цесса с идентификатором 1 нулевой процесс становится процессом подкачки иреализует механизм виртуальной памяти. Процесс с идентификатором 1, извест­ный под именем init, является предком любого другого процесса в системе и свя­зан с каждым процессом особым образом.ФункционированиеТеперь, когда мы познакомились с основными понятиями, рассмотрим наиболеехарактерные моменты функционирования UNIX-системы.Выполнение процессовПроцесс может выполняться в одном из двух состояний, а именно пользователь­ском и системном.

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

Стек задачи содержит аргументы,локальные переменные и другую информацию относительно функций, выпол­няемых в режиме задачи. Диспетчерский процесс не имеет пользовательскойфазы.В UNIX-системах организуется разделение времени (time sharing), то есть каждо­му процессу выделяется квант времени.

Либо процесс завершается сам до истече­ния отведенного ему кванта времени, либо он приостанавливается по истечениикванта и продолжает свое исполнение при очередном получении нового квантавремени. Механизм диспетчеризации характеризуется достаточно справедливымраспределением процессорного времени между всеми процессами. Пользователь­ским процессам приписываются приоритеты в зависимости от получаемого имипроцессорного времени. Процессам, которые получили много процессорного вре­мени, назначают более низкие приоритеты, в то время как процессам, которые по­лучили лишь немного процессорного времени, наоборот, повышают приоритет.Вспомните рассмотренные ранее механизмы динамических приоритетов.

Такометод диспетчеризации обеспечивает хорошее время реакции для всех пользователей системы. Все системные процессы имеют более высокие приоритеты по еранению с пользовательскими и поэтому всегда обслуживаются в первую очередь.Подсистема ввода-выводафункции ввода-вывода в UNIX задаются в основном с помощью пяти системныхвызовов: open, close, read, write и seek.Открыть файл можно следующей командой:file_descriptor = open (filejiame.

mode)Здесь mode — режим открытия файла (чтение, запись или то и другое); file_descriptor — дескриптор файла, служит для последующих ссылок на данный файл;file_name — имя открываемого файла.Чтение и запись осуществляются командами следующего вида:after_reading_bytes = read (file_descriptor. buffer, bytes)after_writing_bytes = write (file_descriptor, buffer, bytes)Здесь bytes — количество байтов, которые должны быть прочитаны или записаны;after_reading_bytes и after_writing_bytes — реально прочитанное и записанное коли­чество байтов соответственно.При чтении возможны три ситуации, в каждой из которых чтение происходит по­следовательно:О если это первое чтение из файла, то оно осуществляется последовательно с са­мого начала файла;Q если операции чтения предшествовала другая операция чтения из этого файла,то текущая операция предоставит данные, непосредственно следующие за пре­дыдущими;• если предшествовала операция поиска seek (см.

далее), то чтение осуществля­ется последовательно от точки смещения, указанной в операции seek.Это же справедливо и по отношению к операции записи в файл. Обратите внима­ние, что все эти вызовы относятся к последовательному доступу и эффект прямойадресации достигается с помощью команды seek, смещающей текущую позициюфайла:Seek (fi 1 ejdescriptor,displacement,displacement_type)Здесь параметр displacement_type (тип смещения) определяет, является смещениеабсолютным или относительным, а также задано оно числом байтов или числомблоков по 512 байт.Важно заметить, что команда seek исполняется для магнитных дисков так же, каки для магнитных лент, которые нынче уже практически не используются, но вовремена появления и становления UNIX-систем были часто используемым уст­ройством.Чтобы закрыть файл, достаточно выполнить следующую команду:close (file_descriptor)Еще три примитива — gtty, stty, stat — позволяют получать и задавать информа­цию о файлах и терминалах.Те же самые команды ввода-вывода применяются и к физическим устройствам.В UNIX-системах физические устройства представлены специальными файламивединой структуре файловой системы.

Это означает, что пользователь не может322Глава 10, Краткий обзор современных операционных системнаписать зависящую от устройств программу, если только эта зависимость не от­ражена в самом потоке передаваемых данных. Стандартные файлы ввода и выво­да, приписываемые пользовательскому терминалу, открывать обычным путем нетребуется. Терминал открывается автоматически по команде входа в систему login.Система ввода-вывода UNIX в отличие от большинства других систем ориентиро­вана на работу скорее с потоком данных, а не с записями. Здесь поток данных1(stream) — это последовательность байтов, закапчивающаяся разделителем (то естьсимволом конца потока). Понятие потока данных позволяет проще добиться неза­висимости от устройств и унификации файлов с физическими устройствами и кон­вейерами.

Тем самым пользователь получает гибкость в работе с группами дан­ных, но на него ложатся и дополнительные заботы, поскольку ему приходитсяписать программы управления данными. Пользователь может при необходимостиотносительно легко самостоятельно реализовать работу с записями. Чтобы рабо­тать с записями фиксированной длины, достаточно просто задавать постояннуюдлину во всех командах чтения и записи. Для нахождения позиции нужной записипри фиксированной длине записей нужно умножить длину записи на номер запи­си и выполнить команду seek.

Работу с записями переменной длины можно орга­низовать, если разместить в начале каждой записи поле фиксированного размера,содержащее значение длины записи.Перенаправление ввода-выводаМеханизм перенаправления ввода-вывода является одним из наиболее элегант­ных, мощных и одновременно простых механизмов UNIX. Цель, которая стави­лась при разработке этого механизма, состоит в следующем. Поскольку UNIX —это интерактивная система, которая создавалась в конце 60-х — начале 70-х годов,то обычно программы считывали текстовые строки с алфавитно-цифрового тер­минала и выводили результирующие текстовые строки на экран терминала.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6549
Авторов
на СтудИзбе
300
Средний доход
с одного платного файла
Обучение Подробнее