
- •41. Программные семафоры с внутренним счетчиком в posix
- •Int sem_init(sem_t *sem, int pshared, int value);
- •42. Программные семафоры с внутренним счетчиком в System V
- •43. Проблема тупиков при взаимодействии программных единиц
- •44. Средства реализации виртуальной памяти; страничная переадресация.
- •45. Средства реализации виртуальной памяти; стратегия подкачки страниц
- •46. Системные функции распределения памяти в Unix
- •Void* malloc(size_t nbytes)
- •Void* MapViewOfFile(handle hFileMappingObject, dword DesiredAccess, dword OffsetHigh, dword OffsetLow, dword size)
- •49. Совместное использование оперативной памяти в Unix
- •Int shmget(key_t key, int size, int flag),
- •53. Программный опрос файловой системы в Windows
- •54. Программный опрос файловой системы в Unix
- •Int closedir(dir* dirptr),
- •Void rewinddir(dir* dirptr),
- •55. Получение информации об ошибках выполнения системной функции Windows
- •56. Получение информации об ошибках выполнения системной функции Unix.
- •Int имяфункции(список_аргументов),
- •Void perror(const char *s)
- •57. Групповое выполнение и фоновый запуск команд в командных оболочках ос.
- •59. Использование переменных в командных оболочках ос.
- •60. Ввод и вывод данных в командных сценариях.
49. Совместное использование оперативной памяти в Unix
В ОС Unix разделяемая память находится под непосредственным управлением ядра, которое содержит таблицу описания областей разделяемой памяти. Каждая из областей обозначается в этой таблице целочисленным идентификатором (а не текстовым именем, как в других ОС). Кроме того, каждая такая область описывается в этой таблице атрибутами доступа и размером. Области разделяемой памяти относятся к адресному пространству ядра ОС.
Доступ к разделяемой памяти со стороны процесса осуществляется в два этапа. На первом из них получается хэндл области памяти, причем на этом этапе либо открывается доступ к уже имеющейся в ОС области памяти, либо такая область создается операционной системой. На втором этапе процесс подключается к разделяемой области (to attach), используя ранее полученный хэндл.
Для получения разделяемой памяти предназначена функция с прототипом
Int shmget(key_t key, int size, int flag),
возвращающая при удачном выполнении целочисленное значение требуемого идентификатора.
Для подключения процесса к запрошенной ранее области разделяемой памяти служит функция с прототипом
void* shmat(int shmid, void* addr, int flag)
Для отсоединения разделяемой памяти должна использоваться функция с прототипом
int shmdt(void* addr)
аргументом которой является адрес, ранее полученный от функции shmat. При успешном выполнении она возвращает 0, а при неудаче -1.
Кроме рассмотренных базовых функций для разделяемой памяти, в Unix имеется функция расширенного управления разделяемой памятью с прототипом
int shmctl(int shmid, int cmd, struct shmid_ds *buf)
При использовании разделяемой памяти в Linux программисту предоставляется очень удобное системное средство – команда ipcs. Для получения информации о разделяемой памяти эту команду следует вызвать с опцией m, так что весь вызов имеет вид ipcs -m
Эта команда выводит информацию о присвоенном ключе-идентификаторе, идентификаторе области памяти, владельце, размере и правах доступа к ней.
50. Структуры файловых систем для пользователя
ФС подразделяются на использующие и на не использующие обозначения логических дисков. FAT, NTFS и HPFS используют логические диски, а ФС для Unix логических дисков не используют. Применение логических дисков заметно упрощает для пользователя обозначения файлов: можно указать нахождение файла на логическом диске, где этот файл находится. В ФС с логическими дисками внешняя структура ФС описывается в виде дерева. В ОС, использующих логические диски принято обозначать их одной латинской буквой, за которой символ двоеточие. Последовательность каталогов от корневого узла к данному файлу называется путь (path). В FAT, NTFS и HPFS разделителем в такой последовательности каталогов служит символ \. Все файлы имеют атрибуты доступа. В системах FAT, HPFS и NTFS для обслуживания таких атрибутов служит команда ATTRIB. Аргументом команды может быть имя отдельного файла и задание совокупности файлов. В простейшей форме эта команды выводит атрибуты, обозначаемые символами S, H, R, A (System, Hidden, ReadOnly, Archive).
В UNIX все файлы собраны в одно дерево, включает три разновидности объектов: обычные файлы, каталоги и специальные файлы. Специальные файлы соответствуют устройствам компьютера: реальным или виртуальным. Дерево внешней структуры ФС Unix имеет единственный корень, обозначаемый /. Этот корень является корневым каталогом, перечисляющим каталоги следующего уровня. Любой каталог, отличный от корневого, может содержать любое число обычных файлов и каталогов следующего уровня. В ФС Unix символом разделения в обозначении последовательности каталогов является прямая разделительная черта /. В Unix вместо атрибутов используются характеристики доступа для трех категорий пользователей: самого владельца (u), для членов его группы (g) и всех остальных, обозначаемых символом o (others). Для каждой категории можно задать три типа доступа: по чтению (r), по записи (w) и по выполнению (x).