Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго




Скачать 17.46 Mb.
НазваниеUnix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго
страница7/143
Дата конвертации11.01.2013
Размер17.46 Mb.
ТипДокументы
1   2   3   4   5   6   7   8   9   10   ...   143
Глава 2. Стандарты и реализации UNIX

Таблица 2.5 (продолжение)



Код

Обязатель­ные для SUS

Символическая константа

Описание

~ТРР~




_POSIX_THREAD_PRIO__PROTECT

Защита приоритета потока (рас­ширение реального времени)

TPS




_POSIX_THREAD_PRIORITY_SCHE-DULING

Планирование выполнения пото­ков (расширение реального време­ни)

TRC




_POSIX_TRACE

Трассировка (расширение реаль­ного времени)

TRI




_POSIX_TRACE_INHERIT

Наследование трассировки

TRL




_P0SIX_TRACE_L0G

Журналирование трассировки

TSA



_POSIX_THREAD_ATTR_STACKADDR

Адрес стека потока

TSF



_POSIX_THREAD_SAFE_JUNCTIONS

Функции, безопасные в контексте потока

TSH



_POSIX_THREAD_PROCESS_SHARED

Синхронизация потоков, разделя­емая процессом

TSP




_POSIX_THREAD_SPORADIC_SERVER

Сервер непериодических (споради­ческих) потоков (расширение ре­ального времени)

TSS



_POSIX_THREAD_ATTR_STACKSIZE

Размер стека потока

TYM




_POSIX_TYPED_MEMORY_OBJECTS

Типизированная память (расши­рение реального времени)

XSI



_XOPEN_UNIX

Интерфейсы расширений Х/Ореп

XSR




__XOPEN_STREAMS

XSI STREAMS

POSIX.1 не включает в себя понятие суперпользователя. Вместо этого гово­рится, что некоторые действия требуют «соответствующих привилегий», но определение этого термина POSIX.1 оставляет на усмотрение конкретной реа­лизации. Версии UNIX, разработанные в соответствии с принципами безопас­ности Министерства обороны США, имеют многоуровневую систему безопас­ности. Однако в этой книге мы будем пользоваться традиционной терминоло­гией и называть такие действия требующими привилегий суперпользователя.

По прошествии почти двадцати лет работы сформировались стандарты, ко­торые можно считать достаточно зрелыми и устоявшимися. Стандарт PO­SIX.1 поддерживается открытой рабочей группой, известной как Austin Group (http://www.opengroup.org/austin). Чтобы стандарты оставались акту­альными, время от времени они должны подтверждаться или обновляться.

2.2. Стандартизация UNIX 63

2.2.3. Single UNIX Specification

Single Unix Specification (Единая спецификация UNIX) представляет собой надмножество стандарта POSIX.1 и определяет дополнительные интерфей­сы для расширения функциональных возможностей, предоставляемых ба­зовой спецификацией POSIX.1. Полный набор системных интерфейсов на­зывается Х/Ореп System Interface (XSI). Интерфейсы POSIX.1, которые яв­ляются частью расширений XSI, идентифицируются символьной констан­той _XOPEN_UNIX.

XSI также определяет дополнительные интерфейсы POSIX.1, которые долж­ны поддерживаться реализацией, чтобы она получила право именоваться «XSI-совместимой». Это синхронизация файлов, отображение файлов в па­мять, защита памяти, интерфейсы потоков - все они отмечены в табл. 2.5 как «Обязательные для SUS». Только XSI-совместимые реализации могут назы­ваться операционными системами UNIX.

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

Некоторые из дополнительных интерфейсов, определяемых XSI, являются обязательными для реализации, тогда как другие необязательны. По своим функциональным возможностям интерфейсы разделяются на группы следу­ющим образом:

  • Шифрование: обозначаются символьной константой _XOPEN_CRYPT

  • Расширения реального времени: обозначаются символьной константой

__XOPEN_REALTIME

  • Дополнения реального времени

  • Потоки реального времени: обозначаются символьной константой _Х0-PEN_REALTIME_JHREADS

  • Дополнения к потокам реального времени

  • Трассировка

  • XSI STREAMS: обозначаются символьной константой __XOPEN_STREAMS

  • Совместимость с предыдущими версиями: обозначаются символьной кон­стантой _XOPEN_LEGACY

Единая спецификация UNIX (SUS) публикуется The Open Group, сформиро­ванной в 1996 году в результате слияния Х/Open и Open Software Foundation (OSP). X/Open принадлежит издание «X/Open Portability Guide» (Руковод­ство X/Open по переносимости), которое заимствовало определенные стан­дарты и заполнило пробелы, связанные с отсутствующими функциональны­ми возможностями. Целью этих руководств было повышение переносимо­сти прикладных программ, которое стало возможным благодаря простому следованию опубликованным стандартам.

64

Глава 2. Стандарты и реализации UNIX

Первая версия Single UNIX Specification была издана Х/Open в 1994 году. Она известна также под названием «Spec 1170», поскольку содержала примерно 1170 интерфейсов. Своими корнями она уходит в инициативу Common Open Software Environment (COSE - Общая открытая программная среда), цель которой состояла в том, чтобы еще больше повысить переносимость прило­жений между различными реализациями UNIX. Группа COSE - Sun, IBM, HP, Novell/USL и OSF - шагнула значительно дальше простого одобрения стандартов. Дополнительно она исследовала интерфейсы, обычно исполь­зуемые коммерческими приложениями. В результате были отобраны 1170 интерфейсов и, кроме того, добавлены X/Open Common Application Environ­ment, Issue 4 (CAE - Общая среда приложений, известная также как XPG4, поскольку исторически ее предшественником было руководство Х/Ореп Portability Guide), System V Interface Definition, Issue 3 (SVID - Определение интерфейса System V) и OSF Application Environment Specification (AES -Спецификация среды приложений).

Вторая версия Single UNIX Specification была издана The Open Group в 1997 году. В новую версию была добавлена поддержка потоков, интерфей­сов реального времени, 64-битной арифметики, файлов большого размера и многобайтных символов.

Третья версия Single UNIX Specification (сокращенно - SUSv3) была опубли­кована The Open Group в 2001 году. Базовые спецификации SUSv3 те же, что и в стандарте IEEE Standard 1003.1-2001, и разделяются на четыре катего­рии: «Основные определения», «Системные интерфейсы», «Командная обо­лочка и утилиты» и «Обоснование». SUSv3 также включает в себя Х/Ореп Curses Issue 4, Version 2, но эта спецификация не является частью POSIX.1.

В 2002 Международная Организация по Стандартизации одобрила эту вер­сию как международный стандарт ISO/IEC 9945:2002. В 2003 году The Open Group снова обновила стандарт 1003.1, добавив в него исправления техниче­ского характера, после чего ISO одобрила его как ISO/IEC 9945:2003. В апре­ле 2004 года The Open Group опубликовала Single UNIX Specification, Ver­sion 3, 2004 Edition. В нее были включены дополнительные технические ис­правления основного текста стандарта.

2.2.4. FIPS

Аббревиатура FIPS означает Federal Information Processing Standard (Феде­ральный стандарт обработки информации). Этот стандарт был опубликован правительством США, которое использовало его при покупке компьютерных систем. Стандарт FIPS 151-1 (апрель 1989 года) был основан на IEEE Std. 1003.1-1988 и на проекте стандарта ANSI С. За ним последовал FIPS 151-2 (май 1993 года) на основе IEEE Standard 1003.1-1990. FIPS 151-2 требовал наличия некоторых возможностей, которые стандартом POSIX.1 были объ­явлены необязательными. Все они стали обязательными в стандарте РО-SIX.1-2001.

В результате любой разработчик, желавший продавать POSIX.1-совмести­мые компьютерные системы американскому правительству, должен был

2.3. Реализации UNIX

65

поддерживать некоторые из дополнительных особенностей POSIX.1. Позд­нее стандарт POSIX.1 FIPS был отменен, поэтому мы больше не будем воз­вращаться к нему в этой книге.

2.3. Реализации UNIX

В предыдущем разделе были описаны ISO С, IEEE POSIX и Single UNIX Specification - три стандарта, разработанные независимыми организациями. Однако стандарты - это лишь спецификации интерфейса. А как они связа­ны с реальностью? Производители берут эти стандарты и воплощают в кон­кретные реализации. Для нас интерес представляют как сами стандарты, так и их воплощение.

В разделе 1.1 [McKusick et al. 1996] приводится подробная (и отлично иллю­стрированная) история генеалогического дерева UNIX. Все началось с 6-й (1976) и 7-й (1979) редакций UNIX Time-Sharing System для PDP-11 (обычно они именуются Version 6 и Version 7). Они стали первыми версиями, полу­чившими широкое распространение за пределами Bell Laboratories. Начали самостоятельно развиваться три ветви UNIX:

  1. Одна в AT&T; она привела к появлению System III и System V (так назы­ваемые коммерческие версии UNIX).

  2. Другая - в Калифорнийском университете города Беркли; она привела к появлению 4.xBSD.

  3. Третья - исследовательская версия UNIX, которая продолжала разраба­тываться в исследовательском центре вычислительной техники (Comput­ing Science Research Center) AT&T Bell Laboratories и привела к появле­нию UNIX Time-Shared System 8-й и 9-й редакций и завершилась выхо­дом 10-й редакции в 1990 году.

2.3.1. UNIX System V Release 4

Версия UNIX System V Release 4 (SVR4) была выпущена подразделением AT&T - UNIXSystem Laboratories (USL, ранее - UNIX Software Operation). Версия SVR4 объединила функциональность AT&T UNIX System Release 3.2 (SVR3.2), SunOS - операционной системы от Sun Microsystems, 4.3BSD, вы­пущенной Калифорнийским университетом, и Xenix - операционной систе­мы от корпорации Microsoft - в единую операционную систему. (Изначаль­но Xenix разрабатывалась на основе 7-й редакции и позднее вобрала в себя многие особенности, присущие System V.) Исходные тексты SVR4 появи­лись в конце 1989 года, а первые копии стали доступны конечным пользова­телям в 1990 году. Реализация SVR4 соответствовала как стандарту POSIX Ю03.1, так и X/Open Portability Guide, Issue 3 (XPG3).

Корпорация AT&T также опубликовала «System V Interface Definition» (SVID, Определение интерфейса System V) [AT&T 1989]. Выпуск 3 SVID опре­делил функциональные возможности, которые должны поддерживаться опе­рационной системой, чтобы она могла быть квалифицирована как реализа-

66

Глава 2. Стандарты и реализации UNIX

ция, соответствующая System V Release 4. Как и в случае с POSIX.l, SVID определяет интерфейс, но не реализацию. В SVID не проводится каких-либо различий между системными вызовами и библиотечными функциями. Что­бы обнаружить эти различия, необходимо обращаться к справочному руко­водству по фактической реализации SVR4 [AT&T 1990е].

2.3.2.4.4BSD

Версии Berkeley Software Distribution (BSD) разрабатывались и распространя­лись Computer Systems Research Group (CSRG) - Группой исследования ком­пьютерных систем Калифорнийского университета в городе Беркли. Версия 4.2BSD была выпущена в 1983, a 4.3BSD - в 1986 году. Обе эти версии работа­ли на миникомпьютерах VAX. Следующая версия, 4.3BSD Tahoe, была вы­пущена в 1988 году и также работала на специфическом миникомпьютере под названием Tahoe. (Книга Леффлера (Leffler) и др. [1989] описывает версию 4.3BSD Tahoe.) Затем в 1990 году последовала версия 4.3BSD Reno, которая поддерживала большую часть функциональных возможностей, определяе­мых стандартом POSIX.l.

Изначально BSD-системы содержали исходный код, запатентованный AT&T, и подпадали под действие лицензий AT&T. Чтобы получить исход­ный код BSD-системы, требовалась лицензия AT&T на UNIX. С тех пор по­ложение вещей изменилось, так как на протяжении нескольких лет все большая часть исходного кода AT&T замещалась кодом сторонних разработ­чиков; кроме того, в системе появилось много новых функциональных воз­можностей, исходный код которых был получен из сторонних источников.

В 1989 году в версии 4.3BSD Tahoe большая часть кода, не принадлежащего AT&T, была идентифицирована и выложена в публичный доступ под назва­нием BSD Networking Software, Release 1.0. Затем, в 1991 году, последовал второй выпуск BSD Networking Software (Release 2.0), который был разви­тием версии 4.3BSD Reno. Основная цель состояла в том, чтобы освободить большую часть или даже всю систему 4.4BSD от любых лицензионных огра­ничений AT&T, сделав исходные тексты общедоступными.

Версия 4.4BSD-Lite должна была стать заключительным релизом CSRG. Од­нако ее официальный выпуск был отложен из-за юридических споров с USL. Как только в 1994 году юридические разногласия были устранены, вышла 4.4BSD-Lite, полностью свободно распространяемая, так что теперь, чтобы получить ее, уже не требовалось приобретать какие-либо лицензии на исход­ные тексты UNIX. Вслед за этим, в 1995 году, CSRG выпустила вторую, ис­правленную версию. Второй выпуск 4.4BSD-Lite стал заключительной вер­сией BSD от CSRG. (Эта версия BSD описана в книге Мак-Кьюсика [1996].)

Разработка операционной системы UNIX в Беркли началась с PDP-11, пере­местилась на миникомпьютеры VAX и затем на так называемые рабочие станции. В первой половине 90-х годов была добавлена поддержка популяр­ных персональных компьютеров, собранных на базе микропроцессора 80386, что привело к появлению версии 386BSD. Реализация была выполне­на Биллом Джолитцом (Bill Jolitz) и описана в серии ежемесячных статей

2.3. Реализации UNIX

67

в журнале «Dr. Dobb's Journal» за 1991 год. Значительная часть исходного кода была заимствована из BSD Networking Software, Release 2.0.

2.3.3. FreeBSD

Операционная система FreeBSD базируется на 4.4BSD-Lite. Проект FreeBSD был образован с целью дальнейшего развития линейки BSD-систем после того, как в Беркли было принято решение о прекращении работ над BSD-версиями операционной системы UNIX, и проект 386BSD оказался заброшенным.

Все программное обеспечение, разработанное в рамках проекта FreeBSD, яв­ляется свободно распространяемым, как в исходных текстах, так и в виде бинарных дистрибутивов. ОС FreeBSD 5.2.1 стала одной из четырех плат­форм, на которых тестировались примеры для данной книги.

Существует еще несколько свободных операционных систем, основанных на BSD. Про­ект NetBSD (http://www.netbscl.org) аналогичен проекту FreeBSD, основной акцент в нем сделан на переносимости между различными аппаратными платформами. Про­ект OpenBSD (http://www.openbsd.org) также аналогичен FreeBSD, но с акцентом на без­опасности.

2.3 A Linux

Linux - это операционная система, которая предоставляет все богатства про­граммного окружения UNIX и свободно распространяется в соответствии с Общественной Лицензией GNU (GNU Public License). Популярность Linux -это нечто феноменальное в компьютерной индустрии. Linux часто отличает­ся тем, что первой из операционных систем начинает поддерживать новей­шие аппаратные решения.

ОС Linux была создана Линусом Торвальдсом (Linus Torvalds) в 1991 году в качестве замены ОС MINIX. Семена дали быстрые всходы, потому что мно­жество разработчиков по всему миру добровольно взялись за работу по ее улучшению.

Дистрибутив Linux Mandrake 9.2 стал одной из систем, на которых тестиро­вались примеры из этой книги. В этом дистрибутиве используется ядро Linux версии 2.4.22.

2.3.5. Mac OS X

Mac OS X отличается от предыдущих версий этой системы тем, что она осно-вана на совершенно иных технологиях. Ядро этой операционной системы называется Darwin и представляет собой комбинацию ядра Mach ([Accetta et al- 1^86]) и ОС FreeBSD. Ядро Darwin является проектом с открытым исход­ном кодом, подобно FreeBSD и Linux.

Mac OS X 10.3 (Darwin 7.4.0) использовалась как одна из тестовых платформ пРи написании этой книги.

68

Глава 2. Стандарты и реализации UNIX

2.3.6. Solaris

Solaris - это разновидность ОС UNIX, разработанная в Sun Microsystems. Ос­нованная на System V Release 4, она совершенствовалась инженерами из Sun Microsystems в течение более 10 лет. Это единственный коммерчески успеш­ный потомок SVR4, формально сертифицированный как UNIX-система. (Дополнительную информацию о сертификации UNIX-систем вы найдете по адресу http://www.opengroup.org/certification/idx/unix.html.)

Версия Solaris 9 использовалась при написании этой книги в качестве одной из тестовых платформ.

2.3.7. Прочие версии UNIX

Среди прочих операционных систем, которые были сертифицированы как UNIX-системы, можно назвать:

  • AIX, версия UNIX от ЮМ

  • HP-UX, версия UNIX от Hewlett-Packard

  • IRIX, UNIX-система, распространяемая компанией Silicon Graphics

  • UnixWare, версия UNIX, которая происходит от SVR4 и ныне принадле­жит корпорации SCO

2.4. Связь между стандартами и реализациями

Упомянутые выше стандарты определяют подмножество любой фактически существующей системы. Основное внимание в этой книге будет уделяться че­тырем операционным системам: FreeBSD 5.2.1, Linux 2.4.22, Mac OS X 10.3 и Solaris 9. Несмотря на то, что только Solaris может называться UNIX-сис­темой, тем не менее, все четыре предоставляют программную среду UNIX. Поскольку все четыре системы в различной степени являются POSIX-co-вместимыми, мы сосредоточимся на тех функциональных возможностях, которые считаются обязательными в соответствии со стандартом POSIX.1, указывая любые различия между POSIX и фактической реализацией в этих системах. Особенности и технические приемы, характерные только для кон­кретной реализации, будут отмечены особо. Так как SUSv3 является над­множеством POSIX.1, мы также обратим внимание на любые особенности, которые являются частью SUSv3, но не являются частью POSIX.1.

Следует знать, что реализации обеспечивают обратную совместимость no-функциональным особенностям с более ранними версиями, такими как SVR3.2 и 4.3BSD. Например, Solaris поддерживает как спецификацию не­блокирующих операций ввода-вывода (0_N0NBL0CK) стандарта POSIX.1, так и традиционный для System V метод (0_NDELAY). В этой книге мы будем гово­рить о тех характеристиках, которые предписываются стандартом POSIX.1, и при этом будем лишь иногда упоминать нестандартные особенности, со­храняемые для обратной совместимости. Например, и SVR3.2, и 4.3BSD реализуют механизм сигналов способом, который отличается от стандарта POSIX.1. В главе 10 мы опишем только сигналы POSIX.1.

2.5. Пределы 59

2.5. Пределы

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

Существует два типа пределов:

  1. Пределы времени компиляции (например, наибольшее значение, которое может принимать переменная типа short int).

  2. Пределы времени выполнения (например, максимальная длина имени файла).

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

Кроме того, некоторые пределы для одной реализации имеют фиксирован­ные значения и потому могут определяться статически в заголовочных фай­лах. Для других реализаций они могут варьироваться, вследствие чего для получения их значений требуется обращаться к соответствующим функци­ям во время исполнения. Примером предела такого типа может служить максимальная длина имени файла. System V до появления SVR4 ограничи­вала длину имени файла 14 символами, тогда как BSD-системы увеличили это значение до 255 символов. Сегодня большинство реализаций UNIX под­держивают множество различных типов файловых систем, и каждая из них имеет свои собственные пределы - это случай предела времени выполнения, который зависит от того, в какой файловой системе находится рассматри­ваемый файл. Например, корневая файловая система может ограничивать длину имени файла 14 символами, тогда как в другой файловой системе это ограничение может составлять 255 символов.

Для решения этих проблем существует три типа пределов: 1- Пределы времени компиляции (заголовочные файлы).

  1. Пределы времени выполнения, не связанные с файлами или каталогами (функция sysconf).

  2. Пределы времени выполнения, связанные с файлами или каталогами (функции pathconf и f pathconf).

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

70

1   2   3   4   5   6   7   8   9   10   ...   143

Похожие:

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconСтивене Д. 80 Сознавание: исследуем, экспериментируем, упражняемся/ Пер с англ. А. Пилюгина
Разработка серийного оформления художника В. Щербакова Серия основана в 1999 году

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Д. Деловые культуры в международном бизнесе. От столкновения к взаимопониманию / Льюис Ричард Д.; пер с англ. Т. А. Нестика
Европа: вчера, сегодня, завтра / ран, Ин-т Европы; отв ред., авт предисл. Н. П. Шмелев. – М.: Экономика, 2002. – 823с

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Докинз. Эгоистичный ген
Ричард Докинз профессор Оксфордского университета, автор таких известных книг, как "Эгоистический ген", "Слепой часовщик", "Расширенный...

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconСтивен Кинг После заката Стивен Кинг После заката Посвящается Хайди Питлор
Он, бесформенный, присвоил чужую форму. Как такое могло случиться, Остин? Нет, как такое может быть? И почему тогда солнце не померкнет,...

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Флорида, «Креативный класс: люди, которые меняют будущее». М
Ричард Флорида, «Креативный класс: люди, которые меняют будущее». М.: Классика-xxi, 2005. (Richard Florida, “The Rise of The Creative...

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Фарсон Менеджмент абсурда. Парадоксы лидерства Публикуется по: © "София", 2001 Перевод с англ. © А. Левицкий Об
Роджерсом (одним из этих проектов был получивший академическую премию документальный фильм "Путешествие в себя"). Ричард Фарсон получил...

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconThe Roles of Intermediaries in Cluster Development: The Thai Experiences from High-Tech and mid-tech manufacturing, knowledge-intensive services, to

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconHigh School/High Tech Program Guide

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconКультура Социогуманитарные исследования Издание второе, дополненное
Борисов С. Б. Человек. Текст. Культура. Социогуманитарные исследования. Издание второе, дополненное. – Шадринск, 2007 – 556 с

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconЕстественно-математические науки. Техника Барр, С. Россыпи головоломок [Текст] / Стивен Барр; пер с англ. Ю. Н. Сударева. М. Мир, 1987. 415 с
Барр, С. Россыпи головоломок [Текст] / Стивен Барр; пер с англ. Ю. Н. Сударева. М. Мир, 1987. 415 с


Разместите кнопку на своём сайте:
lib.convdocs.org


База данных защищена авторским правом ©lib.convdocs.org 2012
обратиться к администрации
lib.convdocs.org
Главная страница