Архитектура операционной системы UNIX - [160]
11.2.3 Семафоры
Системные функции работы с семафорами обеспечивают синхронизацию выполнения параллельных процессов, производя набор действий единственно над группой семафоров (средствами низкого уровня). До использования семафоров, если процессу нужно было заблокировать некий ресурс, он прибегал к созданию с помощью системной функции creat специального блокирующего файла. Если файл уже существовал, функция creat завершалась неудачно, и процесс делал вывод о том, что ресурс уже заблокирован другим процессом. Главные недостатки такого подхода заключались в том, что процесс не знал, в какой момент ему следует предпринять следующую попытку, а также в том, что блокирующие файлы случайно оставались в системе в случае ее аварийного завершения или перезагрузки.
Дийкстрой был опубликован алгоритм Деккера, описывающий реализацию семафоров как целочисленных объектов, для которых определены две элементарные операции: P и V (см. [Dijkstra 68]). Операция P заключается в уменьшении значения семафора в том случае, если оно больше 0, операция V — в увеличении этого значения (и там, и там на единицу). Поскольку операции элементарные, в любой момент времени для каждого семафора выполняется не более одной операции P или V. Связанные с семафорами системные функции являются обобщением операций, предложенных Дийкстрой, в них допускается одновременное выполнение нескольких операций, причем операции уменьшения и увеличения выполняются над значениями, превышающими 1. Ядро выполняет операции комплексно; ни один из посторонних процессов не сможет переустанавливать значения семафоров, пока все операции не будут выполнены. Если ядро по каким-либо причинам не может выполнить все операции, оно не выполняет ни одной; процесс приостанавливает свою работу до тех пор, пока эта возможность не будет предоставлена.
Семафор в версии V системы UNIX состоит из следующих элементов:
• Значение семафора,
• Идентификатор последнего из процессов, работавших с семафором,
• Количество процессов, ожидающих увеличения значения семафора,
• Количество процессов, ожидающих момента, когда значение семафора станет равным 0.
Для создания набора семафоров и получения доступа к ним используется системная функция semget, для выполнения различных управляющих операций над набором — функция semctl, для работы со значениями семафоров — функция semop.
>#include ‹sys/types.h›
>#include ‹sys/ipc.h›
>#include ‹sys/shm.h›
>#define SHMKEY 75
>#define K 1024
>int shmid;
>main() {
> int i, *pint;
> char *addr1, *addr2;
> extern char *shmat();
> extern cleanup();
> for (i = 0; i ‹ 20; i++) signal(i, cleanup);
> shmid = shmget(SHMKEY, 128*K, 0777IPC_CREAT);
> addr1 = shmat(shmid, 0, 0);
> addr2 = shmat(shmid, 0, 0);
> printf("addr1 0x%x addr2 0x%x\n", addr1, addr2);
> pint = (int *) addr1;
> for (i = 0; i ‹ 256, i++) *pint++ = i;
> pint = (int *) addr1;
> *pint = 256;
> pint = (int *) addr2;
> for (i = 0; i ‹ 256, i++) printf("index %d\tvalue %d\n", i, *pint++);
> pause();
>}
>cleanup() {
> shmctl(shmid, IPC_RMID, 0);
> exit();
>}
Рисунок 11.11. Присоединение процессом одной и той же области разделяемой памяти дважды
>#include ‹sys/types.h›
>#include ‹sys/ipc.h›
>#include ‹sys/shm.h›
>#define SHMKEY 75
>#define K 1024
>int shmid;
>main() {
> int i, *pint;
> char *addr;
> extern char *shmat();
> shmid = shmget(SHMKEY, 64*K, 0777);
> addr = shmat(shmid, 0, 0);
> pint = (int *) addr;
> while (*pint == 0);
> for (i = 0; i ‹ 256, i++) printf("%d\n", *pint++);
>}
Рисунок 11.12. Разделение памяти между процессами
Рисунок 11.13. Структуры данных, используемые в работе над семафорами
Синтаксис вызова системной функции semget:
id = semget(key, count, flag);
где key, flag и id имеют тот же смысл, что и в других механизмах взаимодействия процессов (обмен сообщениями и разделение памяти). В результате выполнения функции ядро выделяет запись, указывающую на массив семафоров и содержащую счетчик count (Рисунок 11.13). В записи также хранится количество семафоров в массиве, время последнего выполнения функций semop и semctl. Системная функция semget на Рисунке 11.14, например, создает семафор из двух элементов.
Синтаксис вызова системной функции semop:
oldval = semop(id, oplist, count);
где id — дескриптор, возвращаемый функцией semget, oplist — указатель на список операций, count — размер списка. Возвращаемое функцией значение oldval является прежним значением семафора, над которым производилась операция. Каждый элемент списка операций имеет следующий формат:
• номер семафора, идентифицирующий элемент массива семафоров, над которым выполняется операция,
• код операции,
• флаги.
>#include ‹sys/types.h›
>#include ‹sys/ipc.h›
>#include ‹sys/sem.h›
>#define SEMKEY 75
>int semid;
>unsigned int count;
>/* определение структуры sembuf в файле sys/sem.h
>struct sembuf {
> unsigned shortsem_num;
> short sem_op;
> short sem_flg;
>}
>; */
>struct sembuf psembuf, vsembuf;
>/* операции типа P и V */
>main(argc, argv)
>int argc;
>char *argv[];
>{
> int i, first, second;
> short initarray[2], outarray[2];
> extern cleanup();
> if (argc == 1) {
> for (i = 0; i ‹ 20; i++) signal(i,cleanup);
> semid = semget(SEMKEY, 2, 0777IPC_CREAT);
> initarray[0] = initarray[1] = 1;

Применение виртуальных машин дает различным категориям пользователей — от начинающих до IT-специалистов — множество преимуществ. Это и повышенная безопасность работы, и простота развертывания новых платформ, и снижение стоимости владения. И потому не случайно сегодня виртуальные машины переживают второе рождение.В книге рассмотрены три наиболее популярных на сегодняшний день инструмента, предназначенных для создания виртуальных машин и управления ими: Virtual PC 2004 компании Microsoft, VMware Workstation от компании VMware и относительно «свежий» продукт — Parallels Workstation, созданный в компании Parallels.

Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. В ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows.

Эта книга поможет вам разобраться в премудростях операционной системы Windows Vista.Информационная насыщенность учебного материала позволяет утверждать, что мультимедийный курс будет интересен и новичкам, и опытным пользователям.

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

Количество персональных компьютеров в нашей стране растет год от года. Сегодня во многих семьях имеется два или даже три компьютера.Чтобы воспользоваться всеми преимуществами такой ситуации, компьютеры в вашей квартире стоит объединить сетью. Это позволит вам играть по сети в компьютерные игры, совместно использовать дисковое пространство, принтеры, модемы и другие устройства, всю сеть можно соединить с Интернетом. А в офисах сеть между компьютерами просто необходима.Открывающиеся перспективы выглядят очень заманчиво.

Курс лекций, включенных в брошюру, знакомит читателя с популярными свободными программами и системами, полезными при преподавании информатики в средней школе. В обзор вошли основы открытых операционных систем, сведения о пакете «офисных» программ OpenOffice.org, коммуникационном пакете Mozilla, графическом редакторе GIMP, современных графических средах GNOME и KDE и других программах.Для преподавателей информатики и методистов, а также для студентов и аспирантов соответствующих специальностей.© 2002-3, Максим Отставнов.© 2002, Андрей Добровольский (раздел 3.1).Использован текст лекций, публиковавшихся автором в приложении к газете «Первое сентября» «Информатика» (http://inf.1september.ru) в 2002-3 г., материалы брошюры «Прикладные свободные программы в школе» (М.: 2003 г.), а также фрагменты статей, ранее публиковавшихся в журналах «Компьютерра» и «Домашний компьютер».Материалы, представленные в этой книге, также доступны в Интернет на странице www.otstavnov.com/fsft на условиях Свободной лицензии ГНУ на документацию (GNU FDL)