Автор: Пользователь скрыл имя, 11 Января 2012 в 21:28, лекция
Мы не станем рассматривать самый низший уровень этой схемы – аппаратное обеспечение, а начнем на ступеньку выше – с посредника, находящегося между аппаратным обеспечением и медицинской программой, называемого операционной системой. Большинство из вас знакомо с двумя из операционных систем – Windows и MS DOS. Как вы увидите далее, это не единственные и не самые лучшие ОС, хотя и наиболее распространенные.
Особого внимания требует право на запись для каталога. Создание и удаление файлов в каталоге требуют изменения его содержимого, и, следовательно, права на запись в этот каталог. Самое важное, что при этом не учитываются права доступа для самого файла (!!!). То есть для того, чтобы удалить некоторый файл из каталога, не обязательно иметь какие-либо права доступа к этому файлу, важно лишь иметь право на запись для каталога, в котором находится этот файл.
Существует еще несколько атрибутов, изменяющих стандартное выполнение различных операций. Как и в случае прав доступа, эти атрибуты по-разному интерпретируются для каталогов и других типов файлов.
Дополнительные атрибуты для обычных файлов
Код | Название | Значение |
t | Sticky bit | Сохранить образ выполняемого файла в памяти после завершения выполнения |
s | Set UID, SUID | Установить UID процесса при выполнении |
s | Set GID, SGID | Установить GID процесса при выполнении |
1 | Блокирование | Установить обязательное блокирование файла |
Установка атрибута Sticky bit (действительное название — save text mode) редко используется в современных версиях UNIX для файлов. В ранних версиях этот атрибут применялся с целью уменьшить время загрузки наиболее часто запускаемых программ (например, редактора или командного интерпретатора). После завершения выполнения задачи ее образ (т.е. код и данные) оставались в памяти, поэтому последующие запуски этой программы занимали значительно меньше времени.
Атрибуты (или флаги) SUID и SGID позволяют изменить права пользователя при запуске на выполнение файла, имеющего эти атрибуты. При этом привилегии будут изменены (обычно расширены) лишь на время выполнения и только в отношении этой программы.
Обычно запускаемая программа получает права доступа к системным ресурсам на основе прав доступа пользователя, запустившего программу. Установка флагов SUID и SGID изменяет это правило, назначая права доступа исходя из прав доступа владельца файла. Таким образом, запущенный исполняемый файл, которым владеет суперпользователь, получает неограниченные права доступа к системным ресурсам, независимо от того, кто его запустил. При этом установка SUID приведет к наследованию прав владельца-пользователя, а установка SGID — владельца-группы.
В качестве примера использования этого свойства рассмотрим утилиту passwd(l), позволяющую пользователю изменить свой пароль. Очевидно, что изменение пароля должно привести к изменению содержимого определенных системных файлов (файла пароля /etc/passwd, или базы данных пользователей). Понятно, что предоставление права на запись в эти файлы всем пользователям системы является потенциально опасным. Установка SUID для программы смены пароля passwd(l) позволяет изящно разрешить это противоречие. Поскольку владельцем файла /usr/bin/passwd является системный администратор, то кто бы ни запустил утилиту passwd(l), во время работы данной программы он временно получает права администратора, т. е. может производить запись в системные файлы. Понятно, что требования по безопасности для такой программы должны быть повышены. Утилита passwd(l) должна производить изменение пароля только пользователя, запустившего ее, и не позволять никакие другие операции (например, вызов других программ).
Блокирование файлов позволяет устранить возможность конфликта, когда две или более задачи одновременно работают с одним и тем же файлом.
Дополнительные атрибуты для каталогов
Код | Название | Значение |
t | Sticky bit | Позволяет пользователю удалять только файлы, которыми он владеет или имеет права на запись |
s | Set GID, SGID | Позволяет изменить правило установки владельца-группы создаваемых файлов, аналогично реализованному в BSD UNIX |
При обсуждении прав доступа отмечалось, что предоставление права на запись в каталог дает достаточно большие полномочия. Имея такое право, пользователь может удалить из каталога любой файл, даже тот, владельцем которого он не является и в отношении которого не имеет никаких прав. Установка атрибута Sticky bit для каталога позволяет установить дополнительную защиту файлов, находящихся в каталоге. Теперь пользователь может удалить только файлы, которыми он владеет, или на которые он имеет явное право на запись, даже при наличии права на запись в каталог. Примером может служить каталог /tmp, который является открытым на запись для всех пользователей, но в котором может оказаться нежелательной возможность удаления пользователем чужих временных файлов.
Атрибут SGID также имеет иное значение для каталогов. При установке этого атрибута для каталога вновь созданные файлы этого каталога будут наследовать владельца-группу по владельцу-группе каталога.
Процессы в операционной системе UNIX играют ключевую роль. От оптимальной настройки подсистемы управления процессами и числа одновременно выполняющихся процессов зависит загрузка ресурсов процессора, что влияет на производительность системы в целом. Ядро операционной системы предоставляет задачам базовый набор услуг, определяемый интерфейсом системных вызовов. Все остальные функциональные возможности системы, определяются активными процессами. От того, какие процессы выполняются в вашей системе, зависит, является ли она сервером базы данных или сервером сетевого доступа, средством проектирования или вычислительным сервером.
Следует различать понятия программа и процесс. Обычно программой называют совокупность файлов, будь то набор исходных текстов, объектных файлов или собственно выполняемый файл. Для того чтобы программа могла быть запущена на выполнение, операционная система сначала создает окружение или среду выполнения задачи, куда относятся ресурсы памяти, возможность доступа к устройствам ввода/вывода и различным системным ресурсам, включая услуги ядра. Это окружение и получило название процесса. Таким образом, процесс состоит из инструкций, выполняемых процессором, данных и служебной информации о выполняемой задаче, такой как размещенная память, открытые файлы и статус процесса. Одна программа может породить более одного процесса.
Операционная система UNIX является многозадачной. Это значит, что одновременно может выполняться несколько процессов, причем часть процессов могут являться образцами одной программы. Все процессы изолированы друг от друга, однако могут обмениваться данными при помощи специальных средств межпроцессного взаимодействия.
Все процессы подразделяются на 3 категории:
Процесс также имеет целый набор атрибутов:
PID – уникальный идентификатор процесса (по имени обращаться нельзя – т.к. одна программа может породить несколько процессов)
PPID – идентификатор процесса, породившего данный процесс
NICE – относительный приоритет процесса, учитываемый планировщиком при определении очередности запуска. Нумерация идет в обратном порядке, т.е. чем больше номер, тем ниже приоритет.
TTY – терминальная линия, ассоциированная с процессом (если существует). Демоны не имеют своей терминальной линии.
Реальный (RUID) и эффективный (EUID) идентификаторы пользователя. Реальный – идентификатор пользователя, запустившего процесс, эффективный определяет права доступа процесса.
Реальный (RGID) и эффективный (EGID) идентификаторы группы.
Процесс в UNIX создается системным вызовом fork. Процесс, сделавший вызов fork называется родительским, а вновь созданный процесс — дочерним. Новый процесс является точной копией породившего его процесса. Как это ни удивительно, но новый процесс имеет те же инструкции и данные, что и его родитель. Более того, выполнение родительского и дочернего процесса начнется с одной и той же инструкции, следующей за вызовом fork. Единственно, чем они различаются — это идентификатором процесса PID и идентификатором родительского процесса PPID. Существует специальная системная функция, позволяющая по PPID определить, какой из процессов является родительским, а какой – дочерним. Каждый процесс имеет одного родителя, но может иметь несколько дочерних процессов.
Для запуска задачи, т. е. для загрузки новой программы, процесс должен выполнить системный вызов ехес. При этом новый процесс не порождается, а исполняемый код процесса полностью замещается кодом запускаемой программы. Тем не менее окружение новой программы во многом сохраняется, в частности сохраняются значения переменных окружения, назначения стандартных потоков ввода/вывода, вывода сообщений об ошибках, а также приоритет процесса.
В UNIX запуск на выполнение новой программы часто связан с порождением нового процесса, таким образом сначала процесс выполняет вызов fork(2), порождая дочерний процесс, который затем выполняет ехес(2), полностью замещаясь новой программой. Такой способ загрузки называется fork-and-exec.
При разработке сложных программ их часто разбивают на функционально законченные модули, каждый из которых выполняет определенную функцию и загружается по мере необходимости. Такой подход позволяет, с одной стороны, сэкономить ресурсы системы, с другой – является технологичным для разработчика. (Примером является система РеоКардиоМонитор.)
Казалось бы, первая задача решается автоматически операционной системой, но это не так. Например, в ОС Windows не используемые участки памяти перемещаются в файл подкачки, однако остальные ресурсы (графические, таймер, прерывания, …) не освобождаются и производительность системы падает по мере загрузаи новых приложений.
Что касается технологичности, то разбиение задачи на отдельные модули позволяет подключить к работе сразу нескольких специалистов. При этом оговариваются методы обмена данными между модулями, форматы входных и выходных данных и диапазоны допустимых значений. Такой подход позволяет ускорить работу над проектом и многократно использовать наиболее удачные модули. (например, модуль “Карта пациента” используется уже в 5й программе почти без изменений).
Если с предыдущим пунктом затруднений не возникло, то вам будет понятен следующий шаг в этом направлении – распределенные системы, когда разные процессы или группы процессов выполняются на разных компьютерах, объединенных каналом передачи данных (сетью). Моделью распределенной системы может служить информационная сеть поликлиники или госпиталя.
В настоящее время существуют несколько технологий создания подобных систем. В простейшем случае это системы типа клиент-сервер. В общем – каждый компонент системы является и клиентом и сервером.