diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/anatomy.html unix_and_internet_fundamentals_howto.kvas.050218/doc/anatomy.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/anatomy.html 2005-02-05 00:08:32 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/anatomy.html 2005-08-26 22:25:35 +0400 @@ -2,7 +2,7 @@ Основы анатомии вашего компьютера - + @@ -17,15 +17,15 @@ След.

2. Основы анатомии вашего компьютера

-

Внутри вашего компьютера есть процессор представляющий из себя интегральную схему (чип), который фактически и выполняет вычисления. Так же есть внутренняя память (которую пользователи DOS/Windows называют "RAM", пользователи Unix часто называют ее "core" (стержень); термин употребляемый для Unix восходит к отцам-основателям, когда RAM состояла из наборов битов на ферритовых сердечниках). Процессор и память обитают на материнской плате (motherboard) — сердце вашего компьютера.

-

У вашего компьютера есть экран и клавиатура. У него есть жесткие диски, привод CD-ROM и возможно дисковод для гибких дисков (floppy). Чтобы помочь компьютеру работать с этими устройствами к материнской плате подключены контроллеры, которые управляют некоторыми из этих устройств, другими управляют специализированные микросхемы (чипсеты, наборы системной логики, интегрированные контроллеры) встроенные непосредственно в материнскую плату. Ваша клавиатура слишком проста чтобы иметь отдельный контроллер, он встроен в ее корпус.

+

Внутри вашего компьютера есть процессор, представляющий собой интегральную схему (чип), который фактически и выполняет вычисления. Также есть внутренняя память (которую пользователи DOS/Windows называют «RAM», пользователи Unix часто называют её «core» (стержень); термин, употребляемый для Unix, восходит к отцам-основателям, когда RAM состояла из наборов битов на ферритовых сердечниках). Процессор и память обитают на материнской плате (motherboard) — сердце вашего компьютера.

+

У вашего компьютера есть экран и клавиатура. У него есть жёсткие диски, привод CD-ROM и, возможно, дисковод для гибких дисков (floppy). Чтобы помочь компьютеру работать с этими устройствами, к материнской плате подключены контроллеры, которые управляют некоторыми из этих устройств, другими управляют специализированные микросхемы (чипсеты, наборы системной логики, интегрированные контроллеры), встроенные непосредственно в материнскую плату. Ваша клавиатура слишком проста, чтобы иметь отдельный контроллер, он встроен в её корпус.

Мы углубимся в рассмотрение деталей работы устройств несколько позже. Сейчас нам надо запомнить несколько вещей о том, как все эти устройства работают вместе:

-

Внутри корпуса все части вашего компьютера соединяются посредством шин (bus). Физически шина это разъем куда подключаются ваши карты-контроллеры (видеокарта, контроллер жестких дисков, аудиокарта). Шина это магистраль по которой данные передаются между вашим процессором, вашим экраном, вашим диском и всем остальным.

-

(Если вы видели ссылки на ‘ISA’, ‘PCI’, -и ‘PCMCIA’ в описаниях устройств для их подключения к PC и не понимали что это значит, знайте это типы шин. ISA это, исключая незначительные детали, таже шина, которую использовала IBM в оригинальных PC в 1980; сейчас она выходит из употребления. PCI, означает Peripheral Component Interconnection (шина подключения перефирийных компонентов), это шина используется в большинстве современных PC, а также в современных Макинтошах (Macintosh). PCMCIA это вариант ISA с меньшими физическими соединителями используемая в портативных компьютерах.)

-

Процессор, который делает возможной работу всего остального, на самом деле не может видеть любые другие части компьютера напрямую; он общается с ними через шину. И только к действительно быстрой своей подсистеме осуществляется прямой доступ, к памяти (core). Прежде чем программы начнут выполнятся, они помещаются в память (in core).

-

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

-

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

+

Внутри корпуса все части вашего компьютера соединяются посредством шин (bus). Физически шина — это разъём, куда подключаются карты-контроллеры (видеокарта, контроллер жёстких дисков, звуковая карта). Шина — это магистраль, по которой данные передаются между процессором, экраном, диском и всем остальным.

+

(Если вы видели упоминания «ISA», «PCI», +и «PCMCIA» в описаниях подключения устройств к PC, и не понимали, что это значит, знайте — это типы шин. ISA — это, исключая незначительные детали, та же шина, которую использовала IBM в оригинальных PC в 1980; сейчас она выходит из употребления. PCI, означает Peripheral Component Interconnection (шина подключения периферийных компонентов), это шина используется в большинстве современных PC, а также в современных Макинтошах (Macintosh). PCMCIA — это вариант ISA с контактами меньшего размера, используемая в портативных компьютерах.)

+

Процессор, который делает возможной работу всего остального, на самом деле не может видеть остальные части компьютера напрямую; он общается с ними через шину. Прямой доступ осуществляется только к действительно быстрой подсистеме — памяти (core). Прежде чем программы начнут выполнятся, они помещаются в память (in core).

+

Когда ваш компьютер читает программу или данные с диска, фактически происходит следующее: процессор, используя шину, отправляет запрос на чтение с диска контроллеру диска. Некоторое время спустя контроллер диска сигнализирует процессору через шину, что данные считаны и размещены в такой-то области памяти. Теперь процессор может, используя шину, увидеть эти данные.

+

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

\ В конце файла нет новой строки +> diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/bootup.html unix_and_internet_fundamentals_howto.kvas.050218/doc/bootup.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/bootup.html 2005-02-05 00:08:40 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/bootup.html 2005-08-26 22:25:35 +0400 @@ -2,11 +2,11 @@ Что происходит когда вы включаете компьютер?Что происходит, когда вы включаете компьютер? - +

3. Что происходит когда вы включаете компьютер?

-

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

-

Процеесс приведения операционной системы в готовность называется загрузка (booting) (первоначально это было bootstrapping и намекало на процесс поднимания самого себя за шнурки "by your bootstraps"). Ваш компьютер знает как загрузиться потому что инструкции для загрузки встроены один из его чипов, в чип BIOS (Basic Input/Output System) (основная система ввода/вывода).

-

BIOS указывает ему где искать специальную программу загрузчик (в Linux это Grub или LILO) в закрепленном за ней месте, обычно на жестком диске имеющем наименьший порядковый номер (загрузочный диск). Загрузчик извлекается, помещается в память и начинает выполняться. Работа загрузчика в том чтобы запусть реальную опреационную систему.

-

Чтобы сделать это загрузчику надо найти ядро (kernel), загрузить его в память, и дать ему старт. Когда вы загружаете Linux и видите на экране монитора надпись "LILO" с бегущей вереницей точек после нее, это загружается ядро. (Каждая точка означает что с диска загружен очередной блок данных (disk block) кода ядра.

-

(Вы можете удивиться почему BIOS не загружает ядро напрямую — зачем нужен двухшаговый процесс с использованием загрузчика? Что ж, BIOS не очень умна. На поверку, она очень бестолкова, и Linux после загрузки не использует ее вовсе. Первоначально, BIOS была написана для примитивных 8-битовых PC с крошечными дисками, и буквально не может получить достаточный доступ к диску для прямой загрузки ядра. Используя загрузчик вы также имеете возможность выбрать одну из нескольких операционных систем размещенных на разных частях вашего диска, в случае если Unix недостаточно хороша для вас.)

-

Стартовав, ядро осматривается, обнаруживает все аппаратное обеспечение, и делает все необходимые приготовления для запуска программ. Оно делает это опрашивая не обычные адреса памяти, а правильные порты ввода/ввывода (I/O ports) — специальные адреса шин, которые прослушивают для получения команд вероятные контроллеры. Ядро не опрашивает случайные адреса; оно имеет встроенные знания о том что и где искать и как карты контроллеров отвечают, если они присутствуют. Этот процесс называется автопробы (autoprobing).

-

Большинство сообщений которые вы видите во время загрузки это вывод ответов портов ввода/ввыдвода на запросы ядра в результате автопроб вашего аппаратного обеспечения, оно вычисляет что имеется в наличии и адапртирует само себя к вашей машине. Ядро Linux чрезвычайно хорошо с этим справляется, лучше чем большинство других Unix и значительно лучше чем DOS или Windows. Много ветеранов Linux полагали, что искусность проб (probe) Linux при загрузке (что сделало ее сответственно простой в установке), стало важной причиной и по сути привело к тому что она перестала быть набором для экспериментов со свободной Unix и привлекла критическую массу пользователей.

-

Но полная загрузка ядра и его запуск это не конец процесса загрузки; это только первая ступень (иногда называемая уровень выполнения 1 (run level 1). После этой первой фазы ядро передает контроль специальному процессу называемому ‘init’, который порождает несколько процессов занимающихся домашним хозяйством.

-

Обычно, первая работа процесса init это проверка что ваши диски в порядке. Дисковые файловые системы хрупкие вещи; если они были повреждены вследствии аппаратного сбоя или внезапного перебоя в сети электропитания, то это хороший повод сделать несколько шагов в направлении их восстановления прежде чем загрузить вашу Unix полностью. Мы обратимся к этой теме позже, когда будем говорить о О неисправностях файловых систем.

-

Следующий шаг init это запуск нескольких демонов (daemons). Демоны (сервисы, службы) это такие программы как диспетчер печати, почтовый агент или сервер WWW, которые выполняются в фоновом режиме, ожидая наступления определенных событий для того чтобы приступить к работе. Часто это специальные программы координирующие обработку несколько отдельных запросов которые могут конфликтовать с друг другом. Они демоны (работают как черти), потому что проще написать одну программу, которая выполняется в постоянном режиме и знает все о запросах, чем пытаться убедиться, что табун копий программы (каждая из которых обрабатывает отдельный запрос и все они выполняются одновременно) не мешают друг другу. Набор демонов которые стартуют при загрузке вашей системы может может варьироваться, но диспетчер печати (привратник вашего принтера) почти всегда там будет.

-

Следующий шаг это приготовиться к работе с пользователем. Init запускает копию программы называемой getty, которая ожидает ввода с вашей консоли (и возможно еще копии, которые ожидают подключения удаленных пользователей через последовательные порты). Результат работы этой программы это приглашение login на вашей консоле. После запуска всех демонов и процессов getty для каждого терминала, мы переходим на 2-ой уровень выполнения (run level 2). На этом уровне вы можете войти в систему и запускать программы.

-

Но мы еще не закончили. Следующий шаг это запуск различных демонов, поддерживающих работу с сетью и другие устройства. После того как это будет сделано, мы переходим на уровень выполнения 3 (run level 3) и теперь система полностью готова к использованию.

+>

3. Что происходит, когда вы включаете компьютер?

+

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

+

Процесс приведения операционной системы в готовность называется загрузка (booting) (первоначально использовалось слово bootstrapping и намекало на процесс поднимания самого себя за шнурки «by your bootstraps»). Ваш компьютер знает, как загрузиться, потому что инструкции для загрузки встроены в один из его чипов, в чип BIOS (Basic Input/Output System) (основная система ввода/вывода).

+

BIOS указывает ему, где искать специальную программу-загрузчик (в Linux это Grub или LILO) — в закреплённом за ней месте, обычно на жёстком диске, имеющем наименьший порядковый номер (загрузочный диск). Загрузчик извлекается, помещается в память и начинает выполняться. Работа загрузчика состоит в том, чтобы запустить настоящую операционную систему.

+

Чтобы это сделать, загрузчику надо найти ядро (kernel), загрузить его в память, и дать ему старт. Когда вы загружаете Linux и видите на экране монитора надпись "LILO" с бегущей вереницей точек после неё, это загружается ядро. (Каждая точка означает, что с диска загружен очередной блок данных (disk block) кода ядра.

+

(Вы можете удивиться, почему BIOS не загружает ядро напрямую — зачем нужен двухшаговый процесс с использованием загрузчика? Что ж, BIOS не очень умна. На поверку, она очень бестолкова, и Linux после загрузки не использует её вовсе. Первоначально, BIOS была написана для примитивных 8-битовых PC с крошечными дисками, и буквально не может получить достаточный доступ к диску для прямой загрузки ядра. Используя загрузчик, вы также имеете возможность выбрать одну из нескольких операционных систем, размещённых на разных частях вашего диска, в случае, если Unix недостаточно хороша для вас.)

+

Стартовав, ядро осматривается, обнаруживает все аппаратное обеспечение и делает все необходимые приготовления для запуска программ. Оно делает это, опрашивая не обычные адреса памяти, а правильные порты ввода/вывода (I/O ports) — специальные адреса шин, которые могут прослушивать контроллеры для получения команд. Ядро не опрашивает случайные адреса; у него есть встроенные знания о том, что и где искать и как карты контроллеров отвечают, если они присутствуют. Этот процесс называется автопробы (autoprobing).

+

Большинство сообщений, которые вы видите во время загрузки, — это ответы портов ввода/вывода на запросы ядра в результате автопроб вашего аппаратного обеспечения, ядро вычисляет, что имеется в наличии и адаптирует само себя к вашей машине. Ядро Linux чрезвычайно хорошо с этим справляется, лучше, чем большинство других Unix и значительно лучше, чем DOS или Windows. Многие ветераны Linux полагали, что искусность проб (probe) Linux при загрузке (что, соответственно, сделало её простой в установке), стало важной причиной её распространения и, по сути, привело к тому, что Linux перестала быть набором для экспериментов со свободной Unix и привлекла критическую массу пользователей.

+

Но полная загрузка ядра и его запуск — это не конец процесса загрузки; это только первая ступень (иногда называемая уровень выполнения 1 (run level 1). После этой первой фазы ядро передаёт управление специальному процессу, называемому «init», который порождает несколько процессов, занимающихся домашним хозяйством.

Обычно, первая работа процесса init — это проверка, в порядке ли ваши диски. Дисковые файловые системы — хрупкие вещи; если они повредились вследствие аппаратного сбоя или внезапного перебоя в сети электропитания, то это хороший повод сделать несколько шагов для их восстановления, прежде чем загрузить вашу Unix полностью. Мы обратимся к этой теме позже, когда будем говорить о неисправностях файловых систем.

+

Следующий шаг init — это запуск нескольких демонов (daemons). Демоны (сервисы, службы) — это такие программы как диспетчер печати, почтовый агент или сервер WWW, которые выполняются в фоновом режиме, ожидая наступления определённых событий для того, чтобы приступить к работе. Часто это специальные программы, координирующие обработку нескольких отдельных запросов, которые могут конфликтовать друг с другом. Они демоны (работают как черти), потому что проще написать одну программу, которая выполняется в постоянном режиме и знает все о запросах, чем пытаться убедиться, что табун копий программы (каждая из которых обрабатывает отдельный запрос и все они выполняются одновременно) не мешают друг другу. Набор демонов, которые запускаются при загрузке вашей системы, может варьироваться, но диспетчер печати (привратник вашего принтера) почти всегда там будет.

+

Следующий шаг — приготовиться к работе с пользователем. Init запускает копию программы под названием getty, которая ожидает ввода с вашей консоли (и возможно другие копии этой программы, которые ожидают подключения удалённых пользователей через последовательные порты). Результат работы этой программы — приглашение login на вашей консоли (на экране вашего монитора). После запуска всех демонов и процессов getty для каждого терминала, мы переходим на 2-ой уровень выполнения (run level 2). На этом уровне вы можете войти в систему и запускать программы.

+

Но мы ещё не закончили. Следующий шаг — запуск различных демонов, поддерживающих работу с сетью и другие устройства. После того как это будет сделано, мы переходим на уровень выполнения 3 (run level 3) и теперь система полностью готова к использованию.

\ В конце файла нет новой строки +> diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/core-formats.html unix_and_internet_fundamentals_howto.kvas.050218/doc/core-formats.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/core-formats.html 2005-02-02 15:56:55 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/core-formats.html 2005-08-26 22:25:34 +0400 @@ -5,10 +5,13 @@ >Как мой компьютер хранит информацию в памяти? + + +9. Как мой компьютер хранит информацию в памяти?

Вероятно, вам известно, что вся хранимая информация представляет из себя строки битов (bits) (binary digits; вы можете думать о них как большом количестве маленких переключателей вкл/выкл). Здесь мы разъясним как эти биты используются для представления букв и цифр, которые перемалывает ваш компьютер.

-

Прежде чем мы продолжим, вам необходимо понять что такое размер слова (word size) вашего компьютера. Размер слова это определяемый компьютером размер единицы информации с которой он работает; технически это ширина регистров (registers) процессора, это области которые использует процессор для арифметических и логических вычислений. Когда люди пишут или говорят о разрядности компьютера (называя их "32-битными" или "64-битными" компьютерами), вот что они имеют ввиду.

-

Большинство компьютеров (включая 386, 486, и Pentium) имеют размер слова в 32 бита. У старых 286 машин размер слова 16 бит. В мэйнфреймах старого стиля часто встречаются слова разрядностью 36 бит. Процессоры AMD Opteron, AMD Athlon64, Intel Itanium, и Alpha использованные в машинах DEC, а сейчас Compaq имеют 64-битные слова.

-

Компьютер видит память как последовательность слов пронумерованных от нуля до некоторого большого значения в зависимости от размера вашей памяти. Это значение ограничено размером слова, вот почему адресация больших объемов памяти в программах на старых машинах, таких как 286, происходила через мучительные вывихи. Я не хочу обсуждать их здесь, они до сих пор снятся бывалым программистам в кошмарных снах.

+>Вероятно, вам известно, что вся хранимая информация представляет собой строки битов (bits) (binary digits; вы можете думать о них как большом количестве маленьких переключателей вкл/выкл). Здесь мы разъясним, как эти биты используются для представления букв и цифр, которые перемалывает ваш компьютер.

+

Прежде чем мы продолжим, вам необходимо понять, что такое размер слова (word size) вашего компьютера. Размер слова — это определяемый компьютером размер единицы информации с которой он работает; технически это ширина регистров (registers) процессора, областей которые процессор использует для арифметических и логических вычислений. Когда люди пишут или говорят о разрядности компьютера (называя их «32-битными» или «64-битными» компьютерами), вот что они имеют ввиду.

+

Большинство компьютеров (включая 386, 486, и Pentium) имеют размер слова в 32 бита. У старых 286 машин размер слова 16 бит. В мэйнфреймах старого стиля часто встречаются слова разрядностью 36 бит. Процессоры AMD Opteron, AMD Athlon64, Intel Itanium, и Alpha, использованные в машинах DEC, а сейчас Compaq имеют 64-битные слова.

+

Компьютер видит память как последовательность слов, пронумерованных от нуля до некоторого большого значения в зависимости от размера вашей памяти. Это значение ограничено размером слова, вот почему адресация больших объёмов памяти в программах на старых машинах, таких как 286, происходила через мучительные вывихи. Я не хочу обсуждать их здесь, они до сих пор снятся бывалым программистам в кошмарных снах.

9.1. Числа

Целые числа представляются словом или парой слов, в зависимости от размера слова вашего процессора. Самое распространенное представление целых чисел одно 32-битное машинное слово.

-

Арифметика целых чисел близка к математической по основанию два, но не совсем. Бит младшего порядка это 1, следующий 2, затем 4 и так далее как в чистом двоичном счислении. Но числа со знаком представляются с помощью дополонительной нотации (twos-complement). Бит самого высокого порядка знаковый (sign bit), делает значение отрицательным, и каждое отрицательное число может быть получено из соответсвующего ему положительного путем инвертирования всех битов и добавления единицы. Вот почему диапазон целых чисел на 32-битных машинах имеет представление от -231 до 231 - 1. 32-ой бит используется под знак; 0 означает положительное число или ноль, 1 отрицательное.

+>Целые числа представляются словом или парой слов, в зависимости от размера слова вашего процессора. Самое распространённое представление целых чисел — одно 32-битное машинное слово.

+

Арифметика целых чисел близка к математической по основанию два, но не совсем. Бит младшего порядка это 1, следующий 2, затем 4 и так далее как в чистом двоичном счислении. Но числа со знаком представляются с помощью дополнительной нотации (twos-complement). Бит самого высокого порядка знаковый (sign bit) делает значение отрицательным, и каждое отрицательное число может быть получено из соответствующего ему положительного путём инвертирования всех битов и добавления единицы. Вот почему диапазон целых чисел на 32-битных машинах имеет представление от -231 до 231 - 1. 32-ой бит используется под знак; 0 означает положительное число или ноль, 1 отрицательное.

Некоторые языки программирования предоставляют вам доступ к беззнаковой арифметике (unsigned arithmetic) по основанию 2 и оперирует только положительными числами.

-

Большинство процессоров и некоторые компьютерные языки могут совершать операции над числами с плавающей запятой (floating-point) (эта способность встроена во все современные процессоры). Числа с плавающей запятой дают вам более широкий диапазон значений чем целые и позволяют вычислять дробную часть. Пути которыми это достигается разнятся, и довольно сложны для детального обсуждения здесь, но их общая идея называется ‘научная нотация’ (‘scientific notation’) и она такова: дано, например, число 1.234 * 1023, при кодировании оно разделяется на мантиссу (mantissa) (1.234) и экпоненту (23) степень в которую возведено десять, это означает что перемножив получим наше число с двадццатью нулями, 23 минус три знака после запятой.

+

Большинство процессоров и некоторые компьютерные языки могут совершать операции над числами с плавающей запятой (floating-point) (эта способность встроена во все современные процессоры). Числа с плавающей запятой дают вам более широкий диапазон значений, чем целые, и позволяют вычислять дробную часть. Пути, которыми это достигается разнятся, и довольно сложны для детального обсуждения здесь, но их общая идея называется «научная нотация» («scientific notation») и она такова: дано, например, число 1.234 * 1023, при кодировании оно разделяется на мантиссу (mantissa) (1.234) и экспоненту (23) степень в которую возведено десять, это означает, что перемножив их, мы получим наше число с двадцатью нулями, 23 минус три знака после запятой.

9.2. Символы

-

Обычно символы представляются строками из семи битов, каждая из которых соответствует кодировке называемой ASCII (American Standard Code for Information Interchange) (Американский стандартный код обмена информацией). В современных машинах, все 128 ASCII символов представляются семью младшими битами октета (octet) или иначе 8-битовго байта; октеты упаковываются в слова (например, строка из 6 символов займет в памяти только два слова). Если хотите посмотреть на таблицу кодов ASCII, в ответ на приглашение Unix наберите ‘man 7 ascii’.

-

Предыдущий абзац вводит в заблуждение сразу по двум пунктам. Первый незначительный и касается понятия ‘октет’, который формально правилен, но на самом деле используется редко; большинство людей говорят об октете как о байте (byte), имея ввиду что байт длиной 8 бит. Строго говоря, термин ‘байт’ юолее общий; например, в 36-битных машинах использовались 9-битные байты (хотя возможно подобного больше не произойдет).

-

Следующий заблуждение более важное — не весь мир использует ASCII. В действительности, большая часть мира не может использовать ASCII, отлично подходящий для американского английского; в коде не хватает акцентированных и других специальных символов нужных пользователям использующих другие языки. Даже для британского английского имеется проблема  — отсутствует знак для обозначения национальной валюты (фунта).

-

Есть несколько попыток решить эту проблему. Все они используют старший восьмой бит, который не задействован в ASCII, образуя нижнюю половину набора из 256 символов. Наиболее широко используемый способ называется набор символов ‘Latin-1’ (более формально ISO 8859-1). Это стандартный набор символов для Linux, HTML, и X. Microsoft Windows использует измененныую версию Latin-1, в которой добавлены ряд символов, такие как правые и левые двойные кавычки в местах неиспользованных Latin-1 по историческим причинам (критику и записки о том какие это породило проблемы читайте на странице demoroniser).

-

Latin-1 поддерживает заподноевропейские языки, включая английский, французский, немецкий, испанский, итальянский, голландский, норвежский, шведский, датский. Однако, этого также недостаточно, и как результат целую имеем серию кодировок от Latin-2 до -9, которые поддерживают такие языки как греческий, арабский, еврейский, эсперанто и сербскохорватский. Подробности можно найти на странице ISO alphabet soup.

-

Окончательное решение вопроса кодировок доает мощный стандарт названный Unicode (и его близнец ISO/IEC 10646-1:1993). Unicode идентичен Latin-1 в нижних 256 позициях. Над ними 16-битное пространство включающее греческий, кириллицу, армянский, еврейский, арабский, Devanagari, бенгальский, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, Malayalam, тайский, лаоский, грузинский, тибетский, японскую Кана, полный нобор современного корейского Хангул, и унифицированный набор идеограмм китайского/японского/корейского (CJK). Подробная информация находится на домашней странице Unicode Unicode Home Page.

+

Обычно символы представляются строками из семи битов, каждая из которых соответствует кодировке называемой ASCII (American Standard Code for Information Interchange) (Американский стандартный код обмена информацией). В современных машинах, все 128 ASCII символов представляются семью младшими битами октета (octet) или иначе 8-битного байта; октеты упаковываются в слова (например, строка из 6 символов займёт в памяти только два слова). Если хотите посмотреть на таблицу кодов ASCII, в ответ на приглашение Unix наберите «man 7 ascii».

+

Предыдущий абзац вводит в заблуждение сразу по двум пунктам. Первый незначительный и касается понятия «октет», который формально правилен, но на самом деле используется редко; большинство людей говорят об октете как о байте (byte), имея ввиду что байт длиной 8 бит. Строго говоря, термин «байт» более общий; например, в 36-битных машинах использовались 9-битные байты (хотя, возможно, подобного больше не произойдёт).

+

Следующее заблуждение более важное — не весь мир использует ASCII. В действительности, большая часть мира не может использовать ASCII, отлично подходящий только для американского английского; в коде не хватает акцентированных и других специальных символов, нужных пользователям, использующим другие языки. Даже для британского английского имеется проблема  — отсутствует знак для обозначения национальной валюты (фунта).

+

Есть несколько попыток решить эту проблему. Все они используют старший восьмой бит, который не задействован в ASCII, образуя нижнюю половину набора из 256 символов. Наиболее широко используемый способ называется набор символов «Latin-1» (более формально ISO 8859-1). Это стандартный набор символов для Linux, HTML, и X. Microsoft Windows использует изменённую версию Latin-1, в которой добавлены ряд символов, такие как правые и левые двойные кавычки на тех позициях, которые не были использованы в Latin-1 по историческим причинам (критику и записки о том, какие это породило проблемы, читайте на странице demoroniser).

+

Latin-1 поддерживает западноевропейские языки, включая английский, французский, немецкий, испанский, итальянский, голландский, норвежский, шведский, датский. Однако этого также недостаточно, и как результат целую имеем серию кодировок от Latin-2 до -9, которые поддерживают такие языки как греческий, арабский, еврейский, эсперанто, сербский и хорватский. Подробности можно найти на странице ISO alphabet soup.

+

Окончательное решение вопроса кодировок даёт мощный стандарт, названный Unicode (и его близнец ISO/IEC 10646-1:1993). Unicode идентичен Latin-1 в нижних 256 позициях. Над ними 16-битное пространство, включающее греческий, кириллицу, армянский, еврейский, арабский, Devanagari, бенгальский, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, Malayalam, тайский, лаосский, грузинский, тибетский, японскую Кана, полный набор современного корейского Хангул, и унифицированный набор идеограмм китайского/японского/корейского (CJK). Подробная информация находится на домашней странице Unicode Unicode Home Page.

\ В конце файла нет новой строки +> diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/devices.html unix_and_internet_fundamentals_howto.kvas.050218/doc/devices.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/devices.html 2005-02-01 00:31:41 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/devices.html 2005-08-26 22:25:35 +0400 @@ -5,7 +5,9 @@ >Как работают устройства ввода и аппаратные прерывания? + +Сдед.След.6. Как работают устройства ввода и аппаратные прерывания? -

Ваша клавиатура очень простое устройство ввода; простое потому что генерирует малый объем данных и очень медленно (по компьютерным меркам). Когда вы нажимаете или отпускаете клавишу передается сигнал порождающий аппаратное прерывание (hardware interrupt).

-

ожидать такие прерывания это работа операционной системы. Для каждого возможного прерывания есть обработчик прерывания (interrupt handler), это часть операционной системы, которая скрывает любые данные ассоциированные с ним (например, значение нажатой/отпущенной клавиши), до тех пока оно не будет обработано.

-

Что делает обработчик прерываний от клавиатуры, так это помещает значение нажатой клавиши в системную область в нижней части памяти. Там, оно будет доступно для обзора, программе, которая в данный момент, с разрешения операционной системы, читает ввод с клавиатуры.

-

Более сложные устройства ввода, такие как жесткие диски и сетевые карты работают подобным образом. Ранее я ссылался на то, что дисковые контроллеры используют шину для передачи сигнала о выполнении запроса. Что происходит фактически, когда диск вызывает прерываение. Тогда обработчик прерываний диска копирует поступающие данные в память для дальнейшего их использования программой сделавшей запрос.

-

С каждым видом прерываний ассоциирован уровень приоритета (priority level). Прерывания имеющие более низкий приоритет (такие как события клавиатуры) не могут прервать обработку прерываний с более высоким уровнем приоритета (тики таймера, события диска) и ожидают их завершения. Unix спроектирован так, чтобы ускорить и сгладить ответную реакцию машины на запросы пользователя, для этого событиям требующим быстрой обработки дан высокий приоритет.

-

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

-

Вот ответ. IRQ это сокращение "Interrupt Request" (запрос прерывния). Операционная система во время загрузки должна узнать какие устройства будут использовать какие номера прерывний, чтобы ассоциировать соответствующие обработчики прерываний каждому из них. Если два разных устройства попытаются использовать одинаковое прерывание, то иногда оно будет обрабатываться не тем обработчиком. Обычно это, как минимум, сделает устройство недоступным, а иногда может ввести в замешательство ОС настолько что это приведет к сбоям или аварийному завершению.

+

Ваша клавиатура — очень простое устройство ввода; простое, потому что генерирует малый объем данных и очень медленно (по компьютерным меркам). Когда вы нажимаете или отпускаете клавишу, передаётся сигнал, порождающий аппаратное прерывание (hardware interrupt).

+

Ожидать таких прерываний — работа операционной системы. Для каждого возможного прерывания есть обработчик прерывания (interrupt handler), это часть операционной системы, которая скрывает любые данные, ассоциированные с ним (например, значение нажатой/отпущенной клавиши), до тех пор пока оно не будет обработано.

+

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

+

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

+

С каждым видом прерываний ассоциирован уровень приоритета (priority level). Прерывания, имеющие более низкий приоритет (такие как события клавиатуры), не могут прервать обработку прерываний с более высоким уровнем приоритета (тики таймера, события диска) и ожидают их завершения. Unix спроектирован так, чтобы ускорить и сгладить ответную реакцию машины на запросы пользователя, для этого событиям требующим быстрой обработки, дан высокий приоритет.

+

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

+

Вот ответ. IRQ — это сокращение «Interrupt Request» (запрос прерывания). Операционная система во время загрузки должна узнать, какие устройства будут использовать какие номера прерываний, чтобы ассоциировать соответствующие обработчики прерываний каждому из них. Если два разных устройства попытаются использовать одинаковое прерывание, то иногда оно будет обрабатываться не тем обработчиком. Обычно это, как минимум, сделает устройство недоступным, а иногда может ввести в замешательство операционную систему настолько, что это приведёт к сбоям или аварийному завершению.

\ В конце файла нет новой строки +> diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/disk-layout.html unix_and_internet_fundamentals_howto.kvas.050218/doc/disk-layout.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/disk-layout.html 2005-02-04 00:36:28 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/disk-layout.html 2005-08-26 22:25:34 +0400 @@ -5,7 +5,9 @@ >Как мой компьютер хранит информацию на диске? + + 10. Как мой компьютер хранит информацию на диске? -

Когда вы смотрите, работая под Unix, на жесткий диск, вы видите дерево именованных каталогов (директорий) и файлов. Обычно вам не приходится заглядывать глубже этого, однако будет полезным знать что происходит уровнем ниже, в случае если жесткий диск начнет барахлить и потребуется спасать файлы. К сожалению, способ объяснять организацию диска от файлов к нижним уровням плох, поэтому я буду объяснять поднимаясь вверх начав с уровня аппаратного обеспечения.

+

Когда, работая под Unix, вы смотрите на жёсткий диск, вы видите дерево именованных каталогов (директорий) и файлов. Обычно вам не приходится заглядывать глубже этого, однако будет полезным знать, что происходит уровнем ниже, в случае, если жёсткий диск начнёт барахлить и потребуется спасать файлы. К сожалению, способ объяснять организацию диска от файлов к нижним уровням плох, поэтому я буду объяснять поднимаясь вверх, начав с уровня аппаратного обеспечения.

10.1. Низкоуровневая структура диска и файловой системы

-

Поверхность вашего диска, на которой хранятся данные, разделена примерно как мишень для метания дротиков — круговые дорожки разрезанные секторами. Вследствие того что дорожки близкие к внешнему краю имеют бОльшую длину, чем те что ближе к шпинделю в центре диска, внешние дорожки имеют больше секторов, чем внутренние. Все сектора (или блоки диска (disk block)) имеют одинаковый размер, в современных Unix это обычно 1 двоичная тысяча (1024 8-битовых слов). Каждый блок диска имеет уникальный адресс или номер блока диска (disk block number).

-

Unix разбивает диск на разделы (disk partitions). Каждый раздел это непрерывный интервал блоков, используемый отдельно от любого другого раздела, например файловая система и область подкачки (swap space). Изначально причины, по которым возникла необходимость создавать на диске разделы это восстановление после сбоев медленных и склонных к возникновению ошибок дисков; границы между разделами уменьшают вероятность возникновения ситуации когда в результате возникновения произвольной ошибки на диске вы целиком теряете к нему доступ. В наши дни более важным является то, что раздел можно объявить доступными только для чтения (read-only) (воизбежание модификации злоумышленником критично важных системных файлов) или сделать доступным (с разными целями, которые мы здесь не обсуждаем) по сети. Раздел с наименьшим номером (загрузочный раздел (boot partition)) создается специально для размещения на нем загружаемого ядра.

-

Раздел мождет быть либо областью подкачки (swap space) (используемой для работы виртуальной памяти (virtual memory)) или файловой системой (file system), используемой для хранения файлов. Раздел области подкачки трактуется системой просто как линейная последовательность блоков. Файловые системы, напротив, нуждаются в схеме расположения последовательности блоков файлов. Потому что, файлы время от времени изменяются, растут и уменьшаются, поэтому блоки данных файла могут не располагаться последовательно, а разбросаны по всему разделу (куда бы ни положила их операционная система когда нуждалась в свободном блоке). Этот эффект разрозненности называется фрагментацией (fragmentation).

+

Поверхность вашего диска, на которой хранятся данные, разделена примерно как мишень для метания дротиков — круговые дорожки, разрезанные секторами. Вследствие того, что дорожки, близкие к внешнему краю, имеют бóльшую длину, чем те, что ближе к шпинделю в центре диска, внешние дорожки имеют больше секторов, чем внутренние. Все сектора (или блоки диска (disk block)) имеют одинаковый размер, в современных Unix это обычно 1 двоичная тысяча (1024 8-битовых слов). Каждый блок диска имеет уникальный адрес или номер блока диска (disk block number).

+

Unix разбивает диск на разделы (disk partitions). Каждый раздел — это непрерывный интервал блоков, используемый отдельно от любого другого раздела, например, файловая система и область подкачки (swap space). Изначально причины, по которым возникла необходимость создавать на диске разделы, это восстановление после сбоев медленных и склонных к возникновению ошибок дисков; границы между разделами уменьшают вероятность возникновения ситуации, когда в результате произвольной ошибки на диске вы целиком теряете к нему доступ. В наши дни более важным является то, что раздел можно объявить доступными только для чтения (read-only) (во избежание модификации злоумышленником критично важных системных файлов) или сделать доступным по сети (с разными целями, которые мы здесь не обсуждаем). Раздел с наименьшим номером (загрузочный раздел (boot partition)) создаётся специально для размещения на нем загружаемого ядра.

+

Раздел может быть либо областью подкачки (swap space) (используемой для работы виртуальной памяти (virtual memory)) или файловой системой (file system), используемой для хранения файлов. Раздел области подкачки трактуется системой просто как линейная последовательность блоков. Файловые системы, напротив, нуждаются в схеме расположения последовательности блоков файлов. Файлы время от времени изменяются, растут и уменьшаются, поэтому блоки данных файла могут располагаться не последовательно, а быть разбросаны по всему разделу (куда бы ни положила их операционная система, когда нуждалась в свободном блоке). Этот эффект разрозненности называется фрагментацией (fragmentation).

10.2. Имена файлов и каталогов

-

В каждой файловой есть структура которая адресует расположение файла по его имени, сопоставляя ему блоки диска и адреса их размещения, она называется i-node. Динамическая область в которой они содержаться, находится рядом с "дном" ("bottom") (младшими по номеру блоками) файловой системы (самые младшие блоки используются в служебных целях и создание метки, это мы не будем здесь обсуждать). Каждый i-node определяет один файл. Блоки данных файла (каталога) живут выше таблицы i-node (в старших по номеру блоках)

-

Каждый i-node содержит список номеров блоков диска файла, который он описывает. (В действительности это соответствует истине только на половину, это верно только для небольших файлов, но остальные подробности здесь не важны). Стоит отметить, что i-node не содержит имени файла.

-

Имена файлов живут в структурах называемых каталоги (directory structures). Каталог это структура, представляющая из себя простую таблицу имен файлов и соответствующие им номера i-node. Вот почему в Unix файл может иметь несколько настоящих имен (или жестких ссылок (hard links)); просто в католог вносятся записи указывающие на один и тот же i-node.

+

В каждой файловой системе есть структура, которая адресует расположение файла по его имени, сопоставляя ему блоки диска и адреса их размещения, она называется индексный дескриптор (i-node). Динамическая область, в которой они содержатся, находится рядом с «дном» («bottom») (младшими по номеру блоками) файловой системы (самые младшие блоки используются в служебных целях для создания метки, это мы не будем здесь обсуждать). Каждый индексный дескриптор определяет один файл. Блоки данных файла (каталога) живут выше таблицы индексных дескрипторов (в старших по номеру блоках)

+

Каждый индексный дескриптор содержит список номеров блоков диска того файла, который он описывает. (В действительности это соответствует истине только на половину, это верно только для небольших файлов, но остальные подробности здесь не важны). Стоит отметить, что индексный дескриптор не содержит имени файла.

+

Имена файлов живут в структурах, называемых каталоги (directory structures). Каталог — это структура, представляющая собой простую таблицу имён файлов и соответствующих им номеров индексных дескрипторов. Вот почему в Unix файл может иметь несколько настоящих имён (или жёстких ссылок (hard links)); просто в каталог (или в разные каталоги) вносятся записи, указывающие на один и тот же индексный дескриптор.

10.3. Точки монтирования

В простейшем случае, вся ваша файловая система Unix полностью живет на одном разделе. Вы могли видеть такое на небольших персональных системах, но это редкий случай. Более типично, когда она распределена на нескольких разделах диска, возможно и на разных физических дисках. Например, ваша система может иметь один небольшой раздел, где обитает ядро, немного больший раздел, где живут утилиты ОС, и большой раздел с каталогами пользователей.

+>В простейшем случае вся ваша файловая система Unix полностью живёт на одном разделе. Вы могли видеть такое на небольших персональных системах, но это редкий случай. Более типично, когда она распределена на нескольких разделах диска, возможно, и на разных физических дисках. Например, ваша система может иметь один небольшой раздел, где обитает ядро, немного больший раздел, где живут утилиты ОС, и большой раздел с каталогами пользователей.

Непосредственно в начале загрузки системы вы можете получить доступ только к вашему корневому разделу (root partition), который является (почти всегда) загрузочным. Он содержит корневой каталог файловой системы и является исходной точкой дерева каталогов.

Другие разделы системы подключаются к корневому таким образом, что к этой составленной из разделов файловой системе доступ осуществляется как к цельной. Где-то на полпути, во время процесса загрузки, ваша Unix делает эти некорневые разделы доступными. Она монтирует (mount) каждую из них к соответствующему каталогу в корневом разделе.

-

Например, если в вашей Unix есть каталог с именем /usr, то возможно это точка монтирования раздела, содержащего много программ установленных в системе, но не требуемых для начальной загрузки.

+

Например, если в вашей Unix есть каталог с именем /usr, то, возможно, это точка монтирования раздела, содержащего много программ, установленных в системе, но не требуемых для начальной загрузки.

10.4. Как система узнает где лежит файл

Теперь мы можем взглянуть на файловую систему сверху вниз. Когда вы открываете файл (скажем, такой как, +>Теперь мы можем взглянуть на файловую систему сверху вниз. Когда вы открываете файл (скажем, такой как /home/esr/WWW/ldp/fundamentals.xml) вот что происходит:

Ваша ядро начинает обзор с корневого каталога файловой системы вашей Unix (корневого раздела). Она ищет каталог с именем ‘home’. Обычно ‘home’ это точка монтирования большого пользовательского раздела, тогда оно идет туда. На верхнем уровне структуры каталога этого пользовательского раздела, оно ищет запись с именем ‘esr’ и извлекает номер i-node. Идет к этому i-node, отметим, что в блоках данных ассоциированных с этим файлом находится структура каталога, ищет ‘WWW’. Извлекает его i-node, и идет дальше к соответствующему подкаталогу и ищет в нем ‘ldp’. Это дает еще один i-node каталога. Открывая его, находит номер i-node для ‘fundamentals.xml’. Этот i-node не каталог, но содержит список блоков диска ассоциированных с этим файлом.

+>Ваше ядро начинает обзор с корневого каталога файловой системы (корневого раздела). Она ищет каталог с именем «home». Обычно «home» — это точка монтирования большого пользовательского раздела, тогда оно идёт на этот раздел. На верхнем уровне структуры каталога этого пользовательского раздела оно ищет запись с именем «esr» и извлекает номер индексного дескриптора и переходит к нему. Отметим, что в блоках данных, ассоциированных с этим индексным дескриптором, содержится структура каталога, в которой ядро ищет «WWW». Извлекает его индексный дескриптор, и идёт дальше к соответствующему подкаталогу и ищет в нем «ldp». Это даёт ещё один индексный дескриптор каталога. Открывая его, ядро находит номер индексного дескриптора для «fundamentals.xml». Это индексный дескриптор содержит уже не каталог, а список блоков диска, ассоциированных с нужным файлом.

10.5. Владелецы файлов, права доступа и безопасность

10.5. Владельцы файлов, права доступа и безопасность

Чтобы оградить программы от случайного или умышленного чтения или изменения данных их не касающихся, в Unix есть система прав доступа (permissions). Первоначально она была разработана для поддержки разделения времени, защищая многочисленных пользователей одной и тоже машины друг от друга, в те дни Unix работала в основном на дорогих разделяемых миникомпьютерах.

-

Для понимания системы прав доступа, вам надо вернуться к описанию понятий пользователей и групп в разделе Что происходит когда вы входите в систему (log in)?.Каждый файл имеет владеющего им пользователя и группу. Изначально владельцем является создатель файла; затем он может быть изменен с помощью программ -chown(1) и chgrp(1).

-

Основные права , которые могут быть ассоциированы с файлом это ‘чтение’ (‘read’) (право чтения данных из файла), ‘запись’ (‘write’) (право изменять его) и ‘выполнение’ (‘execute’) (право запускать его как программу). Каждый файл имеет три набора прав; один для его пользователя-владельца, другой для любого пользователя входящего в группу владельцев, и один для всех остальных пользователей. ‘Привилегии’, которые вы получаете когда входите в систему, это просто способность читать, изменять и выполнять файлы, имеющие установленные биты прав соответствующие вашему идентификатору пользователя (user ID) или одной из групп, в которую вы включены; а также файлы доступные в системе всем.

-

Чтобы увидеть как это работает, и как Unix отображает их, давайте посмотрим на списки файлов в гипотетической Unix системе. вот один из них:

+>Чтобы оградить программы от случайного или умышленного чтения или изменения данных, их не касающихся, в Unix есть система прав доступа (permissions). Первоначально она была разработана для поддержки разделения времени, защищая многочисленных пользователей одной и тоже машины друг от друга, в те дни Unix работала в основном на дорогих разделяемых миникомпьютерах.

+

Чтобы разобраться в системе прав доступа, вам надо вернуться к описанию понятий пользователей и групп в разделе Что происходит, когда вы входите в систему (log in)?. Каждым файлом владеет пользователь и группа. Изначально владельцем является создатель файла; затем он может быть изменён с помощью программ chown(1) и chgrp(1).

+

Основные права, которые могут быть ассоциированы с файлом: «чтение» («read») (право чтения данных из файла), «запись» («write») (право изменять его) и «выполнение» («execute») (право запускать его как программу). Каждый файл имеет три набора прав; один для его пользователя-владельца, другой для любого пользователя, входящего в группу владельцев, и один для всех остальных пользователей. «Привилегии», которые вы получаете когда входите в систему, это просто способность читать, изменять и выполнять файлы, имеющие установленные биты прав, соответствующие вашему идентификатору пользователя (user ID) или одной из групп, в которую вы включены; а также файлы, доступные в системе всем.

+

Чтобы увидеть, как это работает, и как Unix отображает права доступа, давайте посмотрим на списки файлов в гипотетической Unix-системе. вот один из них:

-

Это обычный файл данных. Вывод списка говорит нам, что файл принадлежит пользователю ‘esr’ и группе пользователей ‘users’. Возможно, машина на которой мы работаем, включает всех обычных пользователей в эту группу по умолчанию; другие группы, которые вы можете обычно встретить на машинах с разделением времени это ‘staff’, ‘admin’, или ‘wheel’ (по понятным причинам, группы не так важны на однопользовательских рабочих станциях и ПК). В вашей Unix по умолчанию может использоваться другая группа, возможно ее имя совпадает с именем вашего пользовательского идентификатора.

-

В строке ‘-rw-r--r--’ представлены биты прав для этого файла. Самая первая позиция предназначена для обозначения каталогов и символьных ссылок, сейчас там прочерк, если бы этот файл был каталогом, то там было бы указано ‘d’, и ‘l’ для символьной ссылки. Следующие три позиции отображают права доступа пользователя, затем три позиции это права доступа группы, и последние три показывают какие права доступа имеют все остальные пользователи (часто называемые ‘миром’ (‘world’). Владелец этого файла, пользователь ‘esr’ может и читать и изменять его, другие люди входящие в группу ‘users’ могут только читать, все другие также имеют право только читать файл. Это довольно типичный набор прав доступа для обыкновенного файла данных.

+

Это обычный файл c данными. Вывод списка говорит нам, что файл принадлежит пользователю «esr» и группе пользователей «users». Возможно, машина, на которой мы работаем, включает всех обычных пользователей в эту группу по умолчанию; другие группы, которые обычно можно встретить на машинах с разделением времени, это «staff», «admin», или «wheel» (по понятным причинам группы не так важны на однопользовательских рабочих станциях и ПК). В вашей Unix по умолчанию может использоваться другая группа, возможно её имя совпадает с именем вашего пользовательского идентификатора.

+

В строке «-rw-r--r--» представлены биты прав для этого файла. Самая первая позиция предназначена для обозначения каталогов и символьных ссылок, сейчас там прочерк, если бы этот файл был каталогом, то там было бы указано «d», и «l» для символьной ссылки. Следующие три позиции отображают права доступа пользователя, затем три позиции — права доступа группы, и последние три показывают, какие права доступа имеют все остальные пользователи (часто называемые «миром» («world»). Владелец этого файла, пользователь «esr» может и читать и изменять его, другие люди, входящие в группу «users», могут только читать, все остальные также имеют право только читать файл. Это довольно типичный набор прав доступа для обыкновенного файла данных.

Сейчас давайте посмотрим на файл с другими правами доступа. Этот файл GCC, компилятор GNU с языка C.

-

Этот файл принадлежит пользователю с именем ‘root’ и группе названной ‘bin’; он может быть перезаписан (изменен) только пользователем root, но прочитан и запущен на выполнение любым. Это обычные настройки владельцев файла и набор прав доступа для предустановленных системных программ. Группа ‘bin’ существует на некоторых Unix для того чтобы собрать вместе системные команды (ее имя это исторический пережиток, сокращение от ‘binary’). В вашей системе вместо нее может использоваться группа ‘root’ (совсем не тоже самое, что пользователь ‘root’!).

-

Имя пользователя ‘root’ это условное обозначение пользователя с номером идентификатора 0 (ID 0), это специальная привилигерованная учетная запись пользователя, который может делать в системе все не взирая ни на что. Доступ к системе под root значителен, но небезопасен; при работе в системе под root, даже опечатка в команде может полностью повредить или уничтожить критично важные системные файлы, в то время как эта же команда выполненная под учетной записью обычного пользователя не сможет этого сделать.

-

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

-

О паролях: не записывайте их и не используйте пароли, которые могут быть легко подобраны, такие как имя вашей девушки/парня/супруга. Эта удивительно, но именно подобная плохая практика, без конца помогает взломщикам. Подходя более универсально, не выбирайте вообще какое-либо слово из словаря; существуют программы называемые взломщик со справочником (dictionary crackers), подбирающие пароли из списка частоиспользуемых слов. Хороший прием выбора пароля, это взять комбинацию слова и цифры и другого слова, например, ‘shark6cider’ или ‘jump3joy’; это сделает пространство поиска слишком большим для взломщика со словарем. не используйте эти примеры — после прочтения этого документа взломщики могут добавить их в свои словари.

+

Этот файл принадлежит пользователю с именем «root» и группе названной «bin»; он может быть перезаписан (изменён) только пользователем root, но прочитан и запущен на выполнение кем угодно. Это обычные настройки владельцев файла и набор прав доступа для предустановленных системных программ. Группа «bin» существует на некоторых Unix для того, чтобы собрать вместе системные команды (её название — это исторический пережиток, сокращение от «binary»). В вашей системе вместо неё может использоваться группа «root» (совсем не тоже самое, что пользователь «root»!).

+

Имя пользователя «root» — это условное обозначение пользователя с номером идентификатора 0 (ID 0), специальная привилегированная учётная запись пользователя, который может делать в системе все, не взирая ни на что. Доступ к системе под root важен, но небезопасен; при работе в системе под root даже опечатка в команде может полностью повредить или уничтожить критично важные системные файлы, в то время как эта же команда, выполненная под учётной записью обычного пользователя, не сможет этого сделать.

+

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

+

О паролях: не записывайте их и не используйте пароли, которые могут быть легко подобраны, такие как имя вашей девушки/парня/супруга. Это удивительно, но именно подобная плохая практика без конца помогает взломщикам. Подходя более универсально, не выбирайте вообще какое-либо слово из словаря; существуют программы называемые взломщик со справочником (dictionary crackers), подбирающие пароли из списка часто используемых слов. Хороший приём выбора пароля, это взять комбинацию слова, цифры и другого слова, например, «shark6cider» или «jump3joy»; это сделает пространство поиска слишком большим для взломщика со словарём. Не используйте эти примеры — после прочтения этого документа взломщики могут добавить их в свои словари.

Теперь рассмотрим третий случай:

-

Этот файл является каталогом (на это указывает ‘d’ в первой позиции). Мы видим, что изменен он может быть только пользователем esr, но читать и выполнять могут все.

-

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

-

Право выполнять для каталога означает, что вы можете открывать файлы и подкаталоги находящиеся в нем. В результате вы получаете доступ к списку i-node каталога. Каталог с полностью запрещенным для всех правом выполнения будет бесполезным.

-

Время от времени вам бyдут встречаться каталоги у которых установлено право на выполнение для всех, а доступ на чтение запрещен; это значит любой пользователь может получать из него файлы и подкаталоги, только если точно знает их имена (т.к. список файлов не может быть ввыведен).

-

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

+

Этот файл является каталогом (на это указывает «d» в первой позиции). Мы видим, что изменён он может быть только пользователем esr, но читать и выполнять его могут все.

+

Право чтения даёт возможность просматривать каталог — видеть имена файлов и каталогов, которые он содержит. Право изменять каталог даёт возможность создавать и удалять в нем файлы. Если вы вспомните, что каталог — это файл со списком содержащихся в нем файлов и подкаталогов, то это правило станет понятным.

+

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

+

Время от времени вам бyдут встречаться каталоги, у которых установлено право на выполнение для всех, а доступ на чтение запрещён; это значит, что любой пользователь может получать из него файлы и подкаталоги, только если точно знает их имена (т.к. список файлов не может быть выведен).

+

Важно запомнить, что права на чтение, изменение или выполнение для файлов и подкаталогов не зависят от прав доступа к содержащему их каталогу. В частности, право записи в каталог означает, что вы можете создавать новые или удалять существующие в нем файлы, но не даёт автоматически права на изменение существующих файлов.

В заключение, давайте посмотрим на права доступа программы login.

-

Как мы и ожидали, наблюдаем набор прав доступа как у системной команды, за исключением ‘s’, где должен был находится бит права выполнения для владельца. Это видимое проявление специального права называемого установка прав пользователя ‘set-user-id’ или setuid it.

-

Бит setuid обычно добавляется к программам нуждающимся в том, чтобы дать права root обычному пользователю, но конроллируемым способом. Когда он устанавливается на выполняемую программу, вы получаете привилегии владельца этой программы на время ее выполнения от вашего имени, в любом случае, равносильны они вашим или нет.

-

Как и сама учетная запись root, программы с установленным битом setuid полезны, но опасны для применения. Любой кто способен ниспровергнуть или модифицировать setuid программу владелец которой root, может использовать ее для запуска командного интерпретатора shell с привилегиями пользователя root. По этой причине, при открытии файла для записи автоматически отключает setuid бит на большинстве Unix. Многие атаки на безопасность Unix пытаются использовать ошибки и уязвимости в setuid программах для их разрушения. Поэтому здравомыслящие системные администраторы особенно настороженно относятся к этим программам и неохотно их устанавливают.

-

Выше, во время обсуждения прав доступа, мы упустили пару важных деталей, а именно, какая группа владеет и какие права присваиваются файлу и каталогу когда он впервые создается. Вопрос группы спорный, пользователи могут быть членами нескольких групп, но одна из них (обусловленная в записи пользователя в /etc/passwd) является группой установленной по умолчанию (default group) для этого пользователя и обычно она и указывается в для вновь созданного файла.

-

История с начальными битами прав доступа немного более сложная. Программа создающая файл обычно устанавливает права доступа того кто ее запустил. Однако это можно изменить, поменяв значение переменной пользовательского окружения называемой umask. Umask определяет какие биты прав доступа при создании файла отключить; наиболее распространенное и устанавливаемое по умолчанию на большинстве систем значение это -------w- или 002, которое выключает бит права изменения миром. За дополнительными подробностями о переменной umask можно обратиться к страницам руководства man вашего shell.

-

Начальное занчение группы для каталога также немного сложнее. На некоторых Unix для нового каталога устанавливается группа создающего его пользователя (это соглашение в стиле System V); на других он наследует группу родительского каталога (соглашение в стиле BSD). В некоторых современных Unix, включая Linux, последнее поведение может быть выбрано установкой для каталога атрибута set-group-ID (chmod g+s).

+

Как мы и ожидали, наблюдаем набор прав доступа как у системной команды, за исключением «s», где должен был находиться бит права выполнения для владельца. Это видимое проявление специального права под названием установка прав пользователя «set-user-id» или setuid it.

+

Бит setuid обычно добавляется к программам, нуждающимся в том, чтобы дать права root обычному пользователю, но контролируемым способом. Когда он устанавливается на исполняемую программу, вы получаете привилегии владельца этой программы на время её выполнения от вашего имени, в любом случае, равносильны они вашим или нет.

+

Как и сама учётная запись root, программы с установленным битом setuid полезны, но опасны для применения. Любой, кто способен ниспровергнуть или модифицировать setuid-программу, владелец которой root, может использовать её для запуска командного интерпретатора shell с привилегиями пользователя root. По этой причине при открытии файла для записи на большинстве Unix-систем автоматически отключается setuid-бит. Многие атаки на безопасность Unix пытаются использовать ошибки и уязвимости в setuid-программах для их разрушения. Поэтому здравомыслящие системные администраторы особенно настороженно относятся к этим программам и неохотно их устанавливают.

+

Выше, во время обсуждения прав доступа, мы упустили пару важных деталей, а именно, какая группа владеет и какие права присваиваются файлу и каталогу, когда он создаётся. Вопрос группы спорный, пользователи могут быть членами нескольких групп, но одна из них (обусловленная в записи пользователя в /etc/passwd) является группой, установленной по умолчанию (default group) для этого пользователя и обычно она и указывается в для вновь созданного файла.

+

История с начальными битами прав доступа немного более сложная. Программа, создающая файл, обычно устанавливает права доступа того, кто её запустил. Однако это можно изменить, поменяв значение переменной пользовательского окружения umask. Umask определяет, какие биты прав доступа при создании файла отключить; наиболее распространённое и устанавливаемое по умолчанию на большинстве систем значение -------w- или 002, которое выключает бит права изменения миром. За дополнительными подробностями о переменной umask можно обратиться к руководству (man) по вашему shell.

+

Начальное значение группы для каталога также немного сложнее. На некоторых Unix для нового каталога устанавливается группа создающего его пользователя (это соглашение в стиле System V); на других он наследует группу родительского каталога (соглашение в стиле BSD). В некоторых современных Unix, включая Linux, последнее поведение может быть выбрано установкой для каталога атрибута set-group-ID (chmod g+s).

10.6. О неисправностях файловых систем

-

Ранее я упоминал что файловые системы могут быть хрупкими. Мы уже знаем что для того чтобы системе добраться до файла надо попрыгать в "классики" и цепочка из каталогов и ссылок i-node может быть произвольно длинной. Теперь допустим на вашем жестком диске образовался плохой участок.

-

Если вы удачливый человек, то утратите только кусочек каких-либо данных. Если вам не повезло, то повредится структура каталога или номер i-node и вы попрощаетесь с целой ветвью дерева файловой системы; или, что еще хуже, получить поврежденную структуру указывающую разными путями на одинаковые блоки диска или i-node. Такое повреждение может распространятся нормальными файловыми операциями, превращая в мусор данные не находящиеся на плохом участке.

-

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

-

Если все это звучит так как-будто Unix ужасно сложная и склонная к сбоям система, то могу успокоить вас тем, что эти проверки осуществляемые во время загрузки обычно выявляют и исправляют средние проблемы до того как они станут действительно бедственными. Другие опреационные системы не оснащены подобными средствам, что ускоряет загрузку, но оставляет вам большие сложности при попытках восстановления вручную (и если у вас есть Norton Utilities или подобные прграммы, это только добавит вам самонадеянности...).

+

Ранее я упоминал, что файловые системы могут быть хрупкими. Мы уже знаем, что для того, чтобы система могла добраться до файла, ей надо попрыгать в «классики» и цепочка из каталогов и ссылок на индексные дескрипторы может быть произвольно длинной. Теперь допустим, что на вашем жёстком диске образовался плохой участок.

+

Если вы удачливый человек, то утратите только кусочек каких-либо данных. Если вам не повезло, то повредится структура каталога или номер индексного дескриптора и вы попрощаетесь с целой ветвью дерева файловой системы; или, что ещё хуже, получите повреждённую структуру, указывающую разными путями на одинаковые блоки диска или индексные дескрипторы. Такое повреждение может распространяться нормальными файловыми операциями, превращая в мусор данные, даже не находящиеся на плохом участке.

+

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

+

Если все это звучит так, как-будто Unix ужасно сложная и склонная к сбоям система, то могу успокоить вас тем, что эти проверки, осуществляемые во время загрузки, обычно выявляют и исправляют средние проблемы до того как они станут действительно бедственными. Другие операционные системы не оснащены подобными средствам, что ускоряет загрузку, но оставляет вам большие сложности при попытках восстановления вручную (и если у вас есть Norton Utilities или подобные программы, это только добавит вам самонадеянности...).

Одно из направлений в текущих разработках Unix это журналируемые файловые системы (journalling -file systems). Они организуют движение информации таким образом, что гарантируется устойчивое и непротиворечивое состояние данных на диске и оно может быть восстановлено после сбоя. И прилично ускоряет скорость проверки целостности при загрузке.

+ file systems). Они организуют движение информации таким образом, что гарантируется устойчивое и непротиворечивое состояние данных на диске и оно может быть восстановлено после сбоя. Это значительно увеличивает скорость проверки целостности при загрузке.

\ В конце файла нет новой строки +> diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/editnotes unix_and_internet_fundamentals_howto.kvas.050218/doc/editnotes --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/editnotes 1970-01-01 03:00:00 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/editnotes 2005-08-26 22:25:35 +0400 @@ -0,0 +1,14 @@ +- Не нужно ли содержимое тегов тоже перевести? +- 8216 -> + 8217 -> + " " +bootup +- про шнурки -- посмотреть оригинал +- карты контроллеров +devices +- тики таймера +core-formats +- названия языков доперевести +internet +- урбанистическая легенда -- проверить по оригиналу (если там urban legend, + то переводится просто ``легенда'') diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/index.html unix_and_internet_fundamentals_howto.kvas.050218/doc/index.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/index.html 2005-02-17 14:53:15 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/index.html 2005-08-26 22:25:34 +0400 @@ -2,7 +2,7 @@ The Unix and Internet Fundamentals HOWTO - +
@@ -81,7 +81,7 @@ >

Этот документ описывает нетехническим языком принципы работы персональных компьютеров, Unix-подобных операционых систем и сети Интернет.

В этом документе нетехническим языком описаны принципы работы персональных компьютеров, Unix-подобных операционых систем и сети Интернет.

3. Что происходит когда вы включаете компьютер?Что происходит, когда вы включаете компьютер?
4. Что происходит когда вы входите в систему (log in)?Что происходит, когда вы входите в систему (log in)?
5. Что происходит когда вы запускаете на выполнение программы в командном интерпретаторе shell?Что происходит, когда вы запускаете на выполнение программы в командном интерпретаторе shell?
6.
10.4. Как система узнает где лежит файлКак система узнает, где лежит файл
10.5.
13. Научится большемуНаучиться большему
\ В конце файла нет новой строки +> diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/internet.html unix_and_internet_fundamentals_howto.kvas.050218/doc/internet.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/internet.html 2005-02-04 23:16:40 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/internet.html 2005-08-26 22:25:35 +0400 @@ -5,7 +5,9 @@ >Как работает Интернет? + +12. Как работает Интернет? -

Чтобы помочь вам понять как работает Internet, мы посмотрим на то что происходит, когда вы выполняете обычную Internet операцию — указываете браузеру открыть заглавную страницу этого документа, дом которго в Web на Linux Documentation Project. Этот документ:

+

Чтобы помочь вам понять, как работает Internet, мы посмотрим, что происходит, когда вы выполняете обычную Internet-операцию — указываете браузеру открыть заглавную страницу этого документа, дом которого в Web на Linux Documentation Project. Этот документ:

-

это значит что он живет в файле HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html в каталоге предназначенном для экспорта в World Wide Web на хосте www.tldp.org.

+

это значит, что он живёт в файле HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html в каталоге, предназначенном для экспорта в World Wide Web на хосте www.tldp.org.

12.1. Имена и местополжения

-

Первое что делает ваш браузер это устанавливет соединение по сети с машиной на которой живет документ. Чтобы сделать это, он во-первых, устанавливает местоположение хоста (host) www.tldp.org (‘хост’ это сокращеное именование ‘узел сети’ или ‘сетевой компьютер’; www.tldp.org это символьное имя хоста (hostname)). Соответсвующее ему местополежение в действительности имеет номер называемый IP адрес (IP address) (что такое ‘IP’ мы объясним чуть позже).

-

Чтобы сделать это ваш браузер задает вопрос программе называемой сервер имен (name server). Сервер имен может жить на вашей машине, но вероятнее всего он запущен на специальной машине предоставляющей подобный сервис, к которой и обращается браузер. Когда вы заключате договор с вашим Internet провайдером, то частью процедуры установки является настройка в программах работающих с Internet IP адреса сервера имен предоставляемого вашим провайдером.

-

Сервера имен на разных машинах общаются между собой, обмениваясь информацией и поддерживая ее в должном состоянии необходимом для разрешения имен хостов (перевода их в IP адреса). Ваш сервер имен может отправить запрос в три или четыре различных места в сети в процессе разрешения www.tldp.org, но обычно это происходит очень быстро (менее секунды). Мы рассмотрим работу серверов имен подробнее в следующем параграфе.

-

Сервер имен даст ответ вашему браузеру, что IP адрес www.tldp.org 152.19.254.81; зная это, ваша машина может обмениваться информацией с www.tldp.org напрямую.

+>12.1. Имена и местоположения +

Первое, что делает ваш браузер, — устанавливает соединение по сети с машиной, на которой живёт документ. Чтобы сделать это, он, во-первых, устанавливает местоположение хоста (host) www.tldp.org («хост» это сокращённое именование «узел сети» или «сетевой компьютер»; www.tldp.org — это символьное имя хоста (hostname)). Соответствующее ему местоположение в действительности имеет номер, называемый IP-адрес (IP address) (что такое «IP», мы объясним чуть позже).

+

Чтобы сделать это, ваш браузер задаёт вопрос программе, называемой сервер имён (name server). Сервер имён может жить на вашей машине, но вероятнее всего он запущен на специальной машине, предоставляющей подобный сервис, к которой и обращается браузер. Когда вы заключаете договор с вашим Internet-провайдером, то частью процедуры установки является настройка в программах, работающих с Internet, IP-адреса сервера имён, предоставляемого вашим провайдером.

+

Сервера имён на разных машинах общаются между собой, обмениваясь информацией и поддерживая её в должном состоянии, необходимом для разрешения имён хостов (перевода их в IP-адреса). Ваш сервер имён может отправить запрос в три или четыре различных места в сети в процессе разрешения www.tldp.org, но обычно это происходит очень быстро (менее секунды). Мы рассмотрим работу серверов имён подробнее в следующем параграфе.

+

Сервер имён даст ответ вашему браузеру, что IP-адрес www.tldp.org — 152.19.254.81; зная это, ваша машина может обмениваться информацией с www.tldp.org напрямую.

12.2. Система доменных имен

-

Вся сеть программ и баз данных осуществляющих сотрудничество для преобразования имен хостов в соответствующие им адреса называется ‘DNS’ (Domain -Name System) (Система доменных имен). Когда вы видите ссылки на ‘сервер DNS’, это означает то, что мы по простому называем сервером имен. Теперь я объясню целиком как эта система работает.

-

Имена хостов Internet состоят из частей разделенных точками. Домен (domain) это собрание машин имеющих общий суффикс в имени. Домены могут обитать внутри других доменов. Например, машина www.tldp.org живет на .tldp.org субдомене домена .org.

-

Каждый домен определен управляющим сервереом имен (authoritative name server), который знает IP адреса других машин в домене. Управляющий (или ‘основной’ (‘primary’)) сервер имен может резервный, на случай выхода из строя; если вы видите ссылки на вторичный сервер имен (secondary name server) или (‘вторичный DNS’) имеется ввиду именно это. Вторичные сервера обычно обновляют свою информацию используя основные каждые несколько часов, таким образом изменения в соответствии имен хостов и IP адресов на основном сервере автоматически распространяется на вторичный.

-

Сейчас важная часть. Сервера имен домена не знают местоположение всех машин в других доменах (включая их субдомены); им известно только местоположения имен серверов. В нашем примере, управляющий сервер имен для домена .org знает IP адрес сервера имен для .tldp.org но не адреса все других машин в .tldp.org.

-

Домены в системе DNS расположены как большое перевернутое дерево. На вершине находятся корневые сервера. IP aдреса корневых серверов известны всем, они прикручены к вашему программному обеспечению работающему с DNS. Корневые серверы знают IP адреса серверов имен для доменов верхнего уровня, таких как .com и .org, но не адреса машин внутри этих доменов. Каждому серверу имен доменов верхнего уровня известно где находятся сервера имен располагающихся непосредствено внизу него, и так далее.

-

DNS разработан заботливо, так каждая машина может хранить минимальный объем знаний, требуемый для формирования дерева, и локальные изменения в поддереве могут осуществляться простым изменением в базе данных имен и IP адресов одного управляющего сервера.

-

Когда вы запрашиваете IP адрес для www.tldp.org, фактически происходит следующее: во-первых, ваш сервер имен спрашивает у корневого сервера где он может найти сервер имен .org. Узнав это, он обращается к серверу .org за тем чтоб получить IP адрес сервера имен .tldp.org. Получив его, делает запрос к серверу имен .tldp.org и получает адрес хоста www.tldp.org.

-

На самом деле большую часть времени серверам имен не приходится выполнять столько работы. Серверы имен достаточно много кэшируют; когда вы разрешаете имя хоста, он сохраняет ассоцированный с ним IP адрес в памяти на некоторый промежуток времени. Вот почему, когда вы посещаете новый вебсайт, обычно можно увидеть сообщение вашего браузера "Ищу", он ищет хост с впервые запрошенной вами страницей. В конце концов время хранения связки имя-адрес в кэше сервера истекает и ваш DNS запрашивает ее снова — это важно, в сучае изменения имен и адресов, для того чтобы неверная информация не зависала навсегда. Информация в кэше также сбрасывается если хост оказывается недоступен.

+>12.2. Система доменных имён +

Вся сеть программ и баз данных, осуществляющих сотрудничество для преобразования имён хостов в соответствующие им адреса, называется «DNS» (Domain +Name System) (Система доменных имён). Когда вы видите ссылки на «сервер DNS», это означает то, что мы по-простому называем сервером имён. Теперь я объясню полностью, как эта система работает.

+

Имена хостов Internet состоят из частей, разделённых точками. Домен (domain) — это собрание машин, имеющих общий суффикс в имени. Домены могут обитать внутри других доменов. Например, машина www.tldp.org живёт на .tldp.org, субдомене домена .org.

+

Каждый домен определён управляющим сервером имён (authoritative name server), который знает IP-адреса других машин в домене. Управляющий (или «основной» («primary»)) сервер имён может сопровождаться резервным, на случай выхода из строя; если вы видите ссылки на вторичный сервер имён (secondary name server) или («вторичный DNS»), имеется в виду именно это. Вторичные сервера обычно обновляют свою информацию каждые несколько часов, используя основные сервера, таким образом, изменения в соответствии имён хостов и IP-адресов на основном сервере автоматически распространяются на вторичный.

+

Теперь важная часть. Сервера имён домена не знают местоположение всех машин в других доменах (включая их субдомены); им известно только местоположения имён серверов. В нашем примере управляющий сервер имён для домена .org знает IP-адрес сервера имён для .tldp.org, но не адреса все других машин в .tldp.org.

+

Домены в системе DNS расположены как большое перевёрнутое дерево. На вершине находятся корневые сервера. IP-aдреса корневых серверов известны всем, они прикручены к вашему программному обеспечению, работающему с DNS. Корневые серверы знают IP-адреса серверов имён для доменов верхнего уровня, таких как .com и .org, но не адреса машин внутри этих доменов. Каждому серверу имён доменов верхнего уровня известно, где находятся сервера имён, располагающиеся непосредственно внизу него и так далее.

+

DNS разработан заботливо, так что каждая машина может хранить минимальный объем знаний, требуемый для формирования дерева, и локальные изменения в поддереве могут осуществляться простым изменением в базе данных имён и IP-адресов одного управляющего сервера.

+

Когда вы запрашиваете IP-адрес для www.tldp.org, фактически происходит следующее: во-первых, ваш сервер имён спрашивает у корневого сервера, где он может найти сервер имён .org. Узнав это, он обращается к серверу .org за тем, чтоб получить IP-адрес сервера имён .tldp.org. Получив его, делает запрос к серверу имён .tldp.org и получает адрес хоста www.tldp.org.

+

На самом деле, большую часть времени серверам имён не приходится выполнять столько работы. Серверы имён достаточно много кэшируют; когда вы разрешаете имя хоста, он сохраняет ассоциированный с ним IP-адрес в памяти на некоторый промежуток времени. Вот почему, когда вы посещаете новый вебсайт, обычно можно увидеть сообщение вашего браузера "Ищу", он ищет хост с впервые запрошенной вами страницей. В конце концов время хранения связки имя—адрес в кэше сервера истекает и ваш DNS запрашивает её снова — это важно, в случае изменения имён и адресов, для того чтобы неверная информация не зависала навсегда. Информация в кэше также сбрасывается, если хост оказывается недоступен.

-

Теперь о том, как это происходит. Команда упаковывается в пакет (packet), блок битов типа телеграммы, который является оболочкой для трех важных вещей; адрес источника (source address) (IP адрес вашей машины), адрес места назначения (destination address) (152.19.254.81), и номер сервиса (service number) или номер порта (port number) (80, в этом случае) что указывает на запрос World Wide Web (Всемирной паутины).

-

Ваша машина отправляет этот пакет в путь по проводам (через вашего провайдера Internet или по локальной сети), и он перемещается к специализированной машине называемой маршрутизатор (router). В памяти маршрутизатора находится карта Internet — не всегда полная, но полностью описывающая ваших сетевых соседей и знающая где в Internet находятся соседние маршрутизаторы.

-

Ваш пакет может пройти через несколько маршрутизаторов на пути к месту назначения. Маршрутизаторы достаточно умны. Они следят сколько времени потребовалось пакету для достижения другого маршрутизатора и получения подтвержения о получении. Они также используют эту информацию для того чтобы управлять движением пакетов, направляя их быстрешим путем. Используется это и для предупреждения, когда другой маршрутизатор (или кабель) выходит из строя, и балансирования нагрузки, если возможно, через иной маршрутизатор.

-

Существует урбанистическая легенда, что Internet был спроектирован так, чтобы выжить и продолжать фунционировать в условиях ядерной войны. Это не правда, но именно то как Internet спроектирован дает чрезвычайно хорошую и надежную работу на всех слоях аппаратного обеспечения в этом изменчивом мире. Это прямая заслуга того, что его интеллект распределен в тысячах маршрутизаторов, а не сконцентрирован в нескольких массивных и уязвимых перееключателях (как телефонная сеть). Это позволяет локализовать сбои в работе сети и обойти их.

-

Когда ваш пакет достигает машины места назначения, она использует номер сервиса для передачи пакета web-серверу. Web-сервер посмотрев на исходный IP адрес пакета знает куда отвечать. Когда web-сервер возвращает этот документ, он разбивается на некоторое количество пакетов. Их размер может менятся в зависимости от вида передаваемой информации и типа сервиса.

+

Теперь о том, как это происходит. Команда упаковывается в пакет (packet), блок битов типа телеграммы, который является оболочкой для трёх важных вещей; адрес источника (source address) (IP-адрес вашей машины), адрес места назначения (destination address) (152.19.254.81), и номер сервиса (service number) или номер порта (port number) (в данном случае 80), что указывает на запрос к World Wide Web (Всемирной паутине).

+

Ваша машина отправляет этот пакет в путь по проводам (через вашего провайдера Internet или по локальной сети), и он перемещается к специализированной машине, называемой маршрутизатор (router). В памяти маршрутизатора находится карта Internet —, не всегда полная, но полностью описывающая ваших сетевых соседей и знающая, где в Internet находятся соседние маршрутизаторы.

+

Ваш пакет может пройти через несколько маршрутизаторов на пути к месту назначения. Маршрутизаторы достаточно умны. Они следят, сколько времени потребовалось пакету для достижения другого маршрутизатора и получения подтверждения о получении. Они также используют эту информацию для того, чтобы управлять движением пакетов, направляя их быстрейшим путём. Используется это и для предупреждения в тех случаях, когда другой маршрутизатор (или кабель) выходит из строя, и для балансирования нагрузки через другой маршрутизатор, если это возможно.

+

Существует легенда, что Internet был спроектирован так, чтобы выжить и продолжать функционировать в условиях ядерной войны. Это не правда, но именно то, как Internet спроектирован, даёт чрезвычайно хорошую и надёжную работу на всех слоях аппаратного обеспечения в этом изменчивом мире. Это прямая заслуга того, что его интеллект распределён в тысячах маршрутизаторов, а не сконцентрирован в нескольких массивных и уязвимых переключателях (как телефонная сеть). Это позволяет локализовать сбои в работе сети и обойти их.

+

Когда ваш пакет достигает машины места назначения, она использует номер сервиса для передачи пакета web-серверу. Web-сервер, посмотрев на исходный IP-адрес пакета, знает, куда отвечать. Когда web-сервер возвращает данный документ, он разбивается на некоторое количество пакетов. Их размер может меняться в зависимости от вида передаваемой информации и типа сервиса.

12.4. TCP и IP

-

Для понимания того как обрабатывается передача множественных пакетов, вам необходимо знать, что Internet, фактически использует два протокола, один из них лежит по верх другого.

-

Нижний уровень, IP (Internet Protocol) (протокол Internet), отвечает за маркировку индивидуальных пакетов при обмене информацией по сети между с исходным адресом и адресом места назначения. Например, когда вы взаимодействуете с http://www.tldp.org, пакеты посылаемые вами имеют IP адрес вашего компьютера, такой как 192.168.1.101, и IP адрес компьютера www.tldp.org, 152.2.210.81. Эти адреса работают вообщем-то также как почтовые адреса, когда кто-то посылает вам бумажное письмо. В почтовом отделении прочитают ваш адрес, определят где это и как наилучшим способом переслать вам письмо, схоже с маршрутизатором управляющим движением в Internet.

-

Верхний уровень, TCP (Transmission Control Protocol) (протокол управления передачей), дает вам надежность. Когда две машины создают соединение TCP (используя IP), получатель знает что надо отправить подтверждение о получении пакета отправителю. Если отправитель не увидит подтверждения о получении пакета, то через некоторое время он отправит пакет заново. Более того, отправитель назначает каждому пакету последовательный номер, который получатель использует того чтобы собрать пакеты в нужном порядке, в случае поступления их к нему не попорядку. (Это может легко произойти если во время соединения отдельные участки сети работают то быстрее, то медленнее).

-

Пакеты TCP/IP содержат также контрольную сумму, для определения повреждения данных из-за плохой связи. (Контрольная сумма вычисляется по всему пакету, таким образом можно вычислить контрольную сумму, сравнить с указанной и обнаружить ошибку, если не совпадают, то либо поврежден пакет либо запись контрольной суммы.) Итак, с любой точки зрения использование TCP/IP и серверов имен выглядит надежным путем передачи потоков байт между парой ‘имя хоста’/‘номер сервиса’. Люди создающие новые сетевые протоколы почти никогда не задумываются обо всем этом: пакетирование, упорядочивание пакетов, проверка ошибок, контрольные суммы и переотправка, все это остантся уровнем ниже.

+

Чтобы понять, как обрабатывается передача серии пакетов, вам необходимо знать, что Internet фактически использует два протокола, один из них лежит поверх другого.

+

Нижний уровень, IP (Internet Protocol) (протокол Internet), отвечает за маркировку индивидуальных пакетов при обмене информацией по сети между исходным адресом и адресом места назначения. Например, когда вы взаимодействуете с http://www.tldp.org, посылаемые вами пакеты имеют IP-адрес вашего компьютера, такой как 192.168.1.101, и IP-адрес компьютера www.tldp.org, 152.2.210.81. Эти адреса работают в общем-то так же, как почтовые адреса, когда кто-то посылает вам бумажное письмо. В почтовом отделении прочитают ваш адрес, определят, где это, и как наилучшим способом переслать вам письмо, это схоже с маршрутизатором, управляющим движением в Internet.

+

Верхний уровень, TCP (Transmission Control Protocol) (протокол управления передачей), даёт вам надёжность. Когда две машины создают соединение TCP (используя IP), получатель знает, что надо отправить подтверждение о получении пакета отправителю. Если отправитель не увидит подтверждения о получении пакета, то через некоторое время он отправит пакет заново. Более того, отправитель назначает каждому пакету последовательный номер, который получатель использует того, чтобы собрать пакеты в нужном порядке, в случае поступления их к нему не по порядку. (Это запросто может произойти, если во время соединения отдельные участки сети работают то быстрее, то медленнее).

+

Пакеты TCP/IP содержат также контрольную сумму для определения, не повреждены ли данные из-за плохой связи. (Контрольная сумма вычисляется по всему пакету, таким образом, можно вычислить контрольную сумму, сравнить с указанной и обнаружить ошибку: если они не совпадают, то это значит, что либо повреждён пакет, либо сама запись контрольной суммы.) Итак, с любой точки зрения использование TCP/IP и серверов имён выглядит надёжным путём передачи потоков байт между парой «имя хоста»/«номер сервиса». Люди, создающие новые сетевые протоколы, почти никогда не задумываются обо всем этом: пакетирование, упорядочивание пакетов, проверка ошибок, контрольные суммы и переотправка, все это останется уровнем ниже.

12.5. HTTP, протокол приложений

-

Теперь вернемся к нашему примеру. Web-бразеры и серверы общаются с помощью протокола приложений (application protocol), которые работает поверх TCP/IP, используя его просто для передачи строк байтов туда и обратно. Этот протокол называется HTTP (Hyper-Text Transfer Protocol) (протокол передачи гипертекста) и мы уже видели одну его команду, это показанный выше GET.

-

Когда команда GET достигает web-сервер www.tldp.org с номером сервиса 80, она посылается демону сервера прослушивающему 80-й порт. Большинство сервисов Internet осуществляемых демонами сервера, не делают ничего, кроме как ожидают, наблюдая за портами, и выполняют поступившие команды.

-

Если описать дизайн Internet одним всеобемлющим правилом, то оно будет звучать так: все части должны быть настолько просты и доступны человеку, насколько это возможно. HTTP, его родственники (как Simple Mail Transfer Protocol, SMTP (протокол простой передачи сообщений), используемый для движения электронной почты между хостами) склонны к использованию простых печатных текстовых команд оканчивающихся символом ‘возврат каретки/перевод строки’.

-

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

-

Теоретически, то что демон серевера отправляет вам в ответ посредством TCP/IP также текст. Начало ответа будет выглядеть примерно так (несколько заголовков опущено):

+

Теперь вернёмся к нашему примеру. Web-браузеры и серверы общаются с помощью протокола приложений (application protocol), который работает поверх TCP/IP, используя его просто для передачи строк байтов туда и обратно. Этот протокол называется HTTP (Hyper-Text Transfer Protocol) (протокол передачи гипертекста), и мы уже видели одну его команду, это показанный выше GET.

+

Когда команда GET достигает web-сервера www.tldp.org с номером сервиса 80, она посылается демону сервера, прослушивающему 80-й порт. Большинство сервисов Internet, осуществляемых демонами сервера, не делают ничего, кроме как ожидают, наблюдая за портами, и выполняют поступившие команды.

+

Если описать устройство Internet одним всеобъемлющим правилом, то оно будет звучать так: все части должны быть настолько просты и доступны человеку, насколько это возможно. HTTP, его родственники (как Simple Mail Transfer Protocol, SMTP (протокол простой передачи сообщений), используемый для передачи электронной почты между хостами) склонны к использованию простых текстовых команд, оканчивающихся символом «возврат каретки/перевод строки».

+

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

+

Теоретически, то, что демон сервера отправляет вам в ответ посредством TCP/IP, — также текст. Начало ответа будет выглядеть примерно так (несколько заголовков опущено):

За этими заголовками следует пустая строка и текст веб страницы (после чего соединение обрывается). Ваш браузер просто отобразит эту страницу. Заголовки скажут как это делать (в данном случае заголовок Content-Type говорит, что возвращаемые данные на самом деле HTML).

+>За этими заголовками следует пустая строка и текст веб-страницы (после чего соединение обрывается). Ваш браузер просто отобразит эту страницу. Заголовки скажут, как это делать (в данном случае заголовок Content-Type говорит, что возвращаемые данные на самом деле HTML).

\ В конце файла нет новой строки +> diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/intro.html unix_and_internet_fundamentals_howto.kvas.050218/doc/intro.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/intro.html 2005-02-11 15:12:10 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/intro.html 2005-08-26 22:25:35 +0400 @@ -2,7 +2,7 @@ Введение - + @@ -15,22 +15,22 @@

1. Введение

1.1. Цели документа

-

Этот документ предназначен в помощь тем пользователям Linux и Интернет, которые обучаются посредством практики. Хотя это и великолепный способ приобрести конкретные навыки, иногда он оставляет специфичные пробелы в знаниях основ — пробелы которые мешают мыслить творчески и решать проблемы эффективно, из-за отсутствия ясного понимая того, что же происходит в действительности.

-

Я попробую простым языком описать как это все работает. Представленная информация ориентирована на людей использующих Unix и Linux на PC-совместимых компьютерах. Несмотря на то, что я часто упоминаю просто ‘Unix’, большинство изложенного верно и для других платформ и вариаций Unix.

-

Я предполагаю, что вы используете Intel-совместимый компьютер. В деталях различия имеются если вы работаете на компьютере с процессором Alpha или PowerPC, или другим, однако они незначительны и основные понятия единообразны.

-

Я не хочу повторять однажды разъясненное, поэтому будьте внимательны, но это также означает, что каждое прочитанное вами слово учит чему-то новому. Хорошая идея перед первым прочтением сначало бегло пробежаться по тексту, а прочитав вернуться к нему несколько позже, обдумав то, чему вы научились.

+

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

+

Я попробую простым языком описать, как это все работает. Представленная информация ориентирована на людей, использующих Unix и Linux на PC-совместимых компьютерах. Несмотря на то, что я часто упоминаю просто «Unix», большая часть изложенного верна и для других платформ и вариаций Unix.

+

Я предполагаю, что вы используете Intel-совместимый компьютер. Есть различия в деталях, если вы работаете на компьютере с процессором Alpha или PowerPC, или другим, однако они незначительны и основные понятия единообразны.

+

Я не хочу повторять однажды разъясненное, поэтому будьте внимательны — каждое прочитанное вами слово учит чему-то новому. Хорошая идея перед первым прочтением сначало бегло пробежаться по тексту, а прочитав вернуться к нему несколько позже, обдумав то, чему вы научились.

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

1.2. Новые версии этого документа

Новые версии Unix and Internet Fundamentals HOWTO будут переодически выкладываться на comp.os.linux.help и comp.os.linux.announce и news.answers. Также они будут загружены на различные WWW и FTP сайты посвященные Linux, включая домашнюю страницу LDP.

+ TARGET="_top"> comp.os.linux.help и comp.os.linux.announce и news.answers. Также они будут загружены на различные WWW- и FTP-сайты, посвященные Linux, включая домашнюю страницу LDP.

Вы всегда можете найти последнюю версию в World Wide Web по URL http://www.tldp.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html.

-

Этот документа доступен на Этот документ доступен на польском языке.

1.3. Обратная связь и исправления

-

Если у вас есть вопросы и комментарии по этому документу, пожалуйста пишите Эрику Рэймонду (Eric S. Raymond) на esr@thyrsus.com. Я приветствую любые советы, предложения и критику. Особенно приветствуются гиперссылки на более подробные объяснения отдельных понятий. Если вы нашли ошибку в этом документе, пожалуйста дайте мне знать, чтобы я мог исправить ее в следующей версии. Спасибо.

-

Все замечания и предложения касающиеся этого перевода направляйте на адрес kvas@newmail.ru.

+

Если у вас есть вопросы и комментарии по этому документу, пожалуйста, пишите Эрику Рэймонду (Eric S. Raymond) на esr@thyrsus.com. Я приветствую любые советы, предложения и критику. Особенно приветствуются гиперссылки на более подробные объяснения отдельных понятий. Если вы нашли ошибку в этом документе, пожалуйста, дайте мне знать, чтобы я мог исправить ее в следующей версии. Спасибо.

+

Все замечания и предложения, касающиеся этого перевода, направляйте на адрес kvas@newmail.ru.

1.4. Другие источники

Если вы читаете это с целью научиться хакерским штучкам, то вам будет уместно прочитать также How To Become A Hacker FAQ. Там же есть ссылки на некоторые полезные ресурсы.

@@ -94,4 +94,4 @@ > \ В конце файла нет новой строки +> diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/languages.html unix_and_internet_fundamentals_howto.kvas.050218/doc/languages.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/languages.html 2005-02-04 15:26:27 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/languages.html 2005-08-26 22:25:35 +0400 @@ -5,7 +5,9 @@ >Как работают языки программирования? + +11. Как работают языки программирования? -

Мы уже обсудили как выполняются программы. Каджая программа в кончном счете выполняется как поток байтов несущих в себе инструкции на машинном языке (machine language) вашего компьютера. Но человеческие существа трудно с ними хорошо обращаться; необходимость в этом возникает все реже, это становиться черным искусством и среди хакеров.

-

Едва ли не весь код Unix, исключая небольшое его количество, поддерживающего прямую работу с аппаратными интерфейсами в самом ядре, в наши дни, написан на языке программирования высокого уровня (high-level language). (Термин ‘высокоуровневый’ здесь исторический реликт, предназначеный для отличия от ‘низкоуровневого’ языка ассемблера (assembler language), который по существу является оберткой для машинного кода.)

-

Есть несколько разных видов языков высокого уровня. Для того чтобы нам говорить об этом, вам необходимо уяснить следующее исходный код (source code) программы (созданной человеком, редактируемая версия) проходит через некоторый вид преобразований для перевода ее на машинный язык, который машина действительно может выполнять.

+

Мы уже обсудили как выполняются программы. Каждая программа в конечном счёте выполняется как поток байтов, несущих в себе инструкции на машинном языке (machine language) вашего компьютера. Но человеческим существам трудно с ними обращаться; необходимость в этом возникает все реже, это становится мерным искусством среди хакеров.

+

Едва ли не весь код Unix с небольшими исключениями, поддерживающими прямую работу с аппаратными интерфейсами в самом ядре, в наши дни написан на языке программирования высокого уровня (high-level language). (Термин «высокоуровневый» здесь исторический реликт, предназначенный для отличия от «низкоуровневого» языка ассемблера (assembler language), который по существу является обёрткой для машинного кода.)

+

Есть несколько разных видов языков высокого уровня. Для того, чтобы мы могли это обсуждать, вам необходимо уяснить следующее исходный код (source code) программы (созданной человеком, редактируемая версия) проходит через некоторый вид преобразований для перевода его на машинный язык, который машина действительно может выполнять.

11.1. Компилируемые языки

-

Наиболее традиционный вид языков это компилируемые языки (compiled language). Компилируемые языки исполюзуют (что логично) компилятор (compiler) для перевода исходного кода программы в запускаемые двоичные файлы содержащие машинный код. После того как двоичный фйал сгенерирован, вы можете запускать его непосредственно без оглядки на исходный код. (Большинство программного обеспечения поставляется ввиде скомпилированных двоичных файлов созданых из исходного кода, который вы не видите).

-

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

-

Язык C (Си), это язык на котором написана сама Unix, один из наиболее важных (и его вариация C++). FORTRAN еще один компилируемый язык, все еще используется инженерами и учеными, но более старый и примитивный. В мире Unix больше нет других компилируемых языков столь широко используемых. Вне его есть, COBOL очень широко используемый при создании финансовых и деловых программ.

-

Существовали и другие компилируемые языки, но они либо вышли из употребления либо используются в качестве иследовательского инструментария. Если новый разработчик создающий программы для Unix с помощью компилируемых языков, в подавляющем большинстве случаев вы будете использовать C или C++.

+

Наиболее традиционный вид языков — компилируемые языки (compiled language). Компилируемые языки используют (что логично) компилятор (compiler) для перевода исходного кода программы в запускаемые двоичные файлы, содержащие машинный код. После того как двоичный файл сгенерирован, вы можете запускать его непосредственно без оглядки на исходный код. (Большинство программного обеспечения поставляется в виде скомпилированных двоичных файлов, созданных из исходного кода, который вы не видите).

+

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

+

Язык C (Си), это язык, на котором написана сама Unix, один из наиболее важных (равно как и его вариация C++). FORTRAN — ещё один компилируемый язык, все ещё используется инженерами и учёными, но более старый и примитивный. В мире Unix нет других столь широко используемых компилируемых языков. Вне его есть COBOL, очень широко используемый при создании финансовых и деловых программ.

+

Существовали и другие компилируемые языки, но они либо вышли из употребления, либо используются в качестве исследовательского инструментария. Если вы — начинающий разработчик, создающий программы для Unix с помощью компилируемых языков, в подавляющем большинстве случаев вы будете использовать C или C++.

11.2. Интерпретируемые языки

Интерпретируемые языки (interpreted language) зависят от программы интерпретатора, которая читает исходный код и переводит его на лету в вычисления и системные вызовы. Исходный код вновь интерпретируется (и интерпретатор используется) каждый раз при выполнении программы.

-

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

-

Многие утилиты Unix, включая shell и bc(1) и sed(1) и awk(1), небольшие и эффективные интерпретируемые языки. BASIC, обычно, тоже интерпретируемый. Также и Tcl. Исторически сложилось, что важнейшим интерпретируемым языком был LISP (и его сильно улучшенные преемники). Сегодня, shell Unix и Lisp, который живет внутри редактора Emacs, вероятно самые важные чистые интерпретируемые языки.

+>Интерпретируемые языки (interpreted language) зависят от программы-интерпретатора, которая читает исходный код и на лету переводит его в вычисления и системные вызовы. Исходный код вновь интерпретируется (и интерпретатор используется) каждый раз при выполнении программы.

+

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

+

Многие утилиты Unix, включая shell, bc(1), sed(1) и awk(1), являются небольшими и эффективными интерпретируемыми языками. BASIC обычно тоже интерпретируемый, равно как и Tcl. Исторически сложилось, что важнейшим интерпретируемым языком был LISP (и его сильно улучшенные преемники). Сегодня Unix shell и Lisp, который живёт внутри редактора Emacs, вероятно, самые важные чистые интерпретируемые языки.

11.3. P-код языки

-

Начиная с 1990 все более и более важным становится гибридный вид языков, использующий и компиляцию и интрпретатор. P-код языки как и компилируемые переводят исходный код в компактный двоичный, который в последствии выполняется, но этот код не машинный. Это псевдокод (pseudocode или p-code), который обычно гораздо проще, но более мощный чем настоящий машинный код. Когда вы запускаете программу, то интерпретируется p-code.

-

P-код может выполняться со скоростью близкой к скомпилированному в машинный двоичному (интерпретаторы p-кода вполне могут быть простыми, маленькими и проворными). При этом p-код языки могут сохранять гибкость и мощь хороших интерпретаторов.

-

К важным языкам использующим p-код относятся Python, Perl, и Java.

+

Начиная с 1990 все более и более важным становится гибридный вид языков, использующий и компиляцию и интерпретатор. P-код языки, как и компилируемые, переводят исходный код в компактный двоичный, который в последствии выполняется, но этот код не машинный. Это псевдокод (pseudocode или p-code), который обычно гораздо проще, но мощнее, чем настоящий машинный код. Когда вы запускаете программу, то интерпретируется p-code.

+

P-код может выполняться со скоростью, близкой к скомпилированному в машинный двоичному (интерпретаторы p-кода вполне могут быть простыми, маленькими и проворными). При этом p-код-языки могут сохранять гибкость и мощь хороших интерпретаторов.

+

К важным языкам, использующим p-код, относятся Python, Perl, и Java.

\ В конце файла нет новой строки +> diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/login.html unix_and_internet_fundamentals_howto.kvas.050218/doc/login.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/login.html 2005-01-30 15:32:39 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/login.html 2005-08-26 22:25:35 +0400 @@ -5,7 +5,9 @@ >Что происходит когда вы входите в систему (log in)? + +4. Что происходит когда вы входите в систему (log in)? -

Когда вы входите в систему (log in) (вводите свое имя в ответ на приглашение getty) вы идентифицируете себя для компьютера. Тогда он запускает программу называемую (как и сдедовало ожидать) login, коорая запрашивает ваш пароль и проверяет уполномочены ли вы использовать машину. Если нет, то ваша попытка войти в систему будет отклонена. Если да, то login выполнит некоторые служебные опреации и запустит командный интерпретатор shell. (Да, getty и login должны бы быть одной программой. Но, по историческим причинам они разделены, ничего заслуживающего внимания в этом нет.)

-

Есть еще кое-что, что стоит знать о том что делает система прежде чем предоставить в ваше распоряжение командный интерпретатор shell (эти зания пригодятся позже когда мы будем говорить о правах доступа к файлам). Вы идентифицируете себя введя свое имя и пароль. Ваше имя (login name) ищется в файле /etc/passwd, котрый представляет из себя последовательность строк каждая из которых описывает учетную запись пользователя.

-

Одно из полей этой записи является зашифрованной версией пароля учетной записи (иногда эти зашифрованные поля хранятся, фактически, во втором файле /etc/shadow, который имеет более строгии права доступа; это делает взлом паролей более трудным). Пароль который вы вводите при входе в систему точно также шифруется и программа login проверяет их соответствие. Безопасность этого метода заключается в том, что легко получить из вашего пароля его зашифрованную версию, тогда как выполнить обратное действие очень сложно. Таким образом, если кто-нибудь мог видеть ваш пароль в зашифрованном виде, он не сможет воспользоваться вашей учетной записью для входа в систему. (Это также означает, что если вы забыли пароль, то нет способа его восстановить, только сменить его на другой.)

-

После того как вы успешно вошли вс систему, вы получааете все привилегии Once you have successfully logged in, you get all the privileges ассоциированные с учетной записью, которую вы использовали. Система может также распознать вас как часть группы (group). Группа это именованный коллектив пользователей определенный системным администратором. Группы могут иметь свой набор привилегий, независящий от привилегий. Пользователь может быть членом множества групп. (Для более подробного знакомства с тем как работают привилегии в Unix смотрите ниже в разделе 4. Что происходит, когда вы входите в систему (log in)? +

Когда вы входите в систему (log in) (вводите своё имя в ответ на приглашение getty), вы идентифицируете себя для компьютера. Тогда он запускает программу, называемую (как и следовало ожидать) login, которая запрашивает ваш пароль и проверяет, уполномочены ли вы использовать данную машину. Если нет, то ваша попытка войти в систему будет отклонена. Если да, то login выполнит некоторые служебные операции и запустит командный интерпретатор shell. (Да, getty и login должны бы быть одной программой. Но, по историческим причинам они разделены, ничего заслуживающего внимания в этом нет.)

+

Есть ещё кое-что, что стоит знать о том, что делает система, прежде чем предоставить в ваше распоряжение командный интерпретатор shell (эти знания пригодятся позже, когда мы будем говорить о правах доступа к файлам). Вы идентифицируете себя, введя своё имя и пароль. Ваше имя (login name) ищется в файле /etc/passwd, который представляет собой последовательность строк, каждая из которых описывает учётную запись пользователя.

+

Одно из полей этой записи является зашифрованной версией пароля учётной записи (иногда эти зашифрованные поля фактически хранятся в другом файле — /etc/shadow, который имеет более строгие права доступа; это делает взлом паролей более трудным). Пароль, который вы вводите при входе в систему, шифруется тем же способом и программа login проверяет, совпадают ли они. Безопасность этого метода заключается в том, что получить из вашего пароля его зашифрованную версию легко, тогда как выполнить обратное действие очень сложно. Таким образом, если кто-нибудь мог видеть ваш пароль в зашифрованном виде, он не сможет воспользоваться вашей учётной записью для входа в систему. (Это также означает, что если вы забыли пароль, то нет способа его восстановить, только сменить его на другой.)

+

После того, как вы успешно вошли в систему, вы получаете все права доступа ассоциированные с учётной записью, которую вы использовали. Система может также распознать вас как члена группы (group). Группа — это имеющий собственное название коллектив пользователей, определенный системным администратором. Группы могут иметь свой набор прав доступа, не зависящий от прав доступа входящих в неё пользователей. Пользователь может быть членом множества групп. (Более подробно познакомиться с тем, как работают привилегии в Unix, можно ниже в разделе Владелец файла, права доступа и безопасность.

-

(Стоит отметить, что несмотря на то что мы ссылаемся на имена пользователй и групп, в действительности внутри системы они храняться и представляются числовыми идентификаторами. Файл паролей содержит идентификаторы сопоставляемые именам учетных записей; файл /etc/group идентификаторы групп. Для команды которые обращаются к именам пользователей и групп преобразование делается автоматически.)

-

Ваша учетная запись содержит также имя вашего домашнего каталога (home directory), место в файловой системе Unix где живут ваши личные файлы. Ну и наконец, в вашей учетной записи указан используемый вами shell, командный интерпретатор который запустит login для ввода вами команд.

(Стоит отметить, что несмотря на то, что мы ссылаемся на имена пользователй и групп, в действительности внутри системы они хранятся и представляются числовыми идентификаторами. Файл паролей содержит идентификаторы, сопоставляемые именам учетных записей; файл /etc/group идентификаторы групп. Для программ, которые обращаются к именам пользователей и групп, преобразование в числовые идентификаторы выполняется автоматически.)

+

Ваша учётная запись содержит также имя вашего домашнего каталога (home directory), место в файловой системе Unix, где живут ваши личные файлы. Ну и наконец, в учётной записи указан используемый вами shell, командный интерпретатор, который запустит для вас программа login, чтобы вы могли вводить команды.

\ В конце файла нет новой строки +> diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/memory-management.html unix_and_internet_fundamentals_howto.kvas.050218/doc/memory-management.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/memory-management.html 2005-02-01 21:44:29 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/memory-management.html 2005-08-26 22:25:35 +0400 @@ -5,7 +5,9 @@ >Как мой компьютер управляет процессами, чтобы они не нарушали работу друг друга? + + 8. Как мой компьютер управляет процессами, чтобы они не нарушали работу друг друга? -

Планировщик задач в ядре заботиться о разделении времени между процессами. Ваша опрерационная система также разделяет их в пространстве рабочей памяти так, что один процесс не мешает другому. Раз вы используете программы совместно, вы бы не хотели, чтобы ошибка в одной из них могла нарушить работу остальных. Чтобы решить эту проблему операционная система осуществляет вещи, называемые управление памятью (memory management).

-

Каждый процесс в вашем зоопарке нуждается в своей собственной области памяти, в этом месте содержится выполняемый код этой программы, хранятся переменные и результаты вычислений. Вы можете думать о ней как о наборе состоящем из сегментов кода (code segment) (содержащих инструкции порцессору для выполнения программы), из них осуществляется только чтение; и сегментов данных (data segment) (хранилище переменных и данных процесса), в них можно осуществлять и запись и чтение. Сегменты данных действительно уникальны для каждого процесса, но если два процесса используют один и тот же программный код, Unix в качестве эффективной меры, автоматически организовывает их для использования единого сегмента кода.

+

Планировщик задач в ядре заботится о разделении времени между процессами. Ваша операционная система также разделяет их в пространстве рабочей памяти так, что один процесс не мешает другому. Раз вы используете программы совместно, вы бы не хотели, чтобы ошибка в одной из них могла нарушить работу остальных. Чтобы решить эту проблему, операционная система осуществляет управление памятью (memory management).

+

Каждый процесс в вашем зоопарке нуждается в своей собственной области памяти, где будет храниться выполняемый код этой программы, переменные и результаты вычислений. Её можно представить как набор сегментов кода (code segment) (содержащих инструкции процессору для выполнения программы), из которых можно только читать; и сегментов данных (data segment) (хранилище переменных и данных процесса), в них можно осуществлять и запись и чтение. Сегменты данных действительно уникальны для каждого процесса, но если два процесса используют один и тот же программный код, Unix для эффективности позволяет им использовать единый сегмент кода.

8.1. Виртуальная память: простое объяснение

Эффективность важна, потому что память дорогостоящий ресурс. Иногда вам может ее не хватать, чтобы полностью разместить все запущенные на машине программы, особенно если вы используете большие программы как X-сервер. Чтобы обойти это, Unix использует технику получившую название виртуальная память (virtual memory). Она не пытается держать весь код и данные процесса в памяти. Вместо этого она хранит только отоносительно небольшие рабочие наборы (working set); полностью код и даннные процессов находятся в специальной области подкачки (swap space) на вашем жестком диске.

-

Стоит отметить, что в прошлом, "Иногда" употребленное в предыдущем параграфе было "Почти всегда" — обычно размер памяти был меньше, чем размер выполняемых программ, так что своппинг был частым. В наши дни память гораздо менее дорогостоящая и даже машины нижней ценовой категории имеют ее в достаточном объеме. На современных однопользовательских машинах с объемом памяти 64 Мб и выше, можно запускать X-сервер и делать типичную работу без обращений к области подкачки после того как программы загружены в память.

+>

Эффективность важна, потому что память — дорогостоящий ресурс. Иногда вам может её не хватать, чтобы полностью разместить все запущенные на машине программы, особенно если вы используете большие программы, например, X-сервер. Чтобы обойти это, Unix использует технику, получившую название виртуальная память (virtual memory). Она не пытается держать весь код и данные процесса в памяти. Вместо этого она хранит только относительно небольшие рабочие наборы (working set); полностью код и данные процессов находятся в специальной области подкачки (swap space) на вашем жёстком диске.

+

Стоит отметить, что в прошлом, «Иногда», употреблённое в предыдущем абзаце, было «Почти всегда» — обычно размер памяти был меньше, чем размер выполняемых программ, так что подкачка с диска использовалась часто. В наши дни память гораздо менее дорогостоящая и даже машины нижней ценовой категории располагают ею в достаточном объёме. На современных однопользовательских машинах с объёмом памяти 64 Мб и выше, можно запускать X-сервер и делать типичную работу без обращений к области подкачки, после того как программы загружены в память.

8.2. Виртуальная память: разъяснение деталей

-

Предыдущий раздел описывает вещи несколько упрощенно. Да, программы видят большую часть памяти как плоский банк адресов, много больший чем физически доступная память, и подкачка с диска (disk swapping) используется для поддержания этой иллюзии. Однако, ваше аппаратное обеспечение имеет в себе не менее пяти разных типов памяти, и разница между ними может иметь большое значение при настройке программы для работы на максимальной скорости. Чтобы по-настоящему понять, что происхрдит в вашей машине, стоит изучить как все это работает вместе.

-

Существует пять типов памяти: регистры процессора, внутренний (on-chip) кэш процессора, внешний кэш (off-chip), основаная память и жесткий диск. И причина по которой они все существуют проста: скорость стоит денег. Я перечисл эти типы памяти в порядке возрастания времени доступа (скорости работы) и в порядке убывания стоимости. Регистровая память быстрейшая и наиболее дорогая, произвольный доступ к ней может выполняться миллиард раз в секунду, в то время как память на жестком диске самая медленная и дешевая, и при произвольном доступе достигается скорость около 100 обращений в секунду.

-

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

+

В предыдущем разделе всё описано несколько упрощённо. Да, программы видят большую часть памяти как плоский банк адресов, намного больший, чем физически доступная память, и подкачка с диска (disk swapping) используется для поддержания этой иллюзии. Однако ваше аппаратное обеспечение имеет в себе не менее пяти разных типов памяти, и разница между ними может иметь большое значение при настройке программы для работы на максимальной скорости. Чтобы по-настоящему понять, что происходит в вашей машине, стоит разобраться, как все это работает вместе.

+

Существует пять типов памяти: регистры процессора, внутренний (on-chip) кэш процессора, внешний кэш (off-chip), основная память и жёсткий диск. Причина, благодаря которой они все существуют, проста: скорость стоит денег. Я перечислил эти типы памяти в порядке возрастания времени доступа (скорости работы) и в порядке убывания стоимости. Регистровая память быстрейшая и наиболее дорогая, произвольный доступ к ней может выполняться миллиард раз в секунду, в то время как память на жёстком диске самая медленная и дешёвая, и при произвольном доступе достигается скорость около 100 обращений в секунду.

+

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

Жесткий диск
Жёсткий диск

Размер: 13000 Мб Скорость доступа: 100 Кб/сек

Мы не можем построить всю систему с использованием только самой быстрой памяти. Это будет очень дорого — даже если это не так, быстрая память непостоянна. Именно, она теряет весь свой блеск и приемущества когда мы выключаем компьютер. Поэтому компьютеры имеют жесткие диски или другие устройства постоянного хранения данных, на которых те и содержаться после выключения питания. И здесь имеем огромное несоответствие между скоростью процессоров и жестких дисков. Три средних уровня иерарахии памяти: внутренний кэш (internal cache), внешний кэш (external cache) и основная память существуют, чтобы заполнить эту брешь.

-

Linux и другие Unix имеют функциональное средство называемое виртуальной памятью (virtual memory). Что позволяет операционной системе работать с намного большим объемом основной памяти, чем имеется фактически. Ваша действительная физическая память работает как набор окон или кэшей ведущих к гораздо большему пространству "виртуальной" памяти, большая часть которой на самом деле расположена в специальной области подкачки (swap area) на диске. Скрывая механизм реализации этой иллюзии от взгляда программ пользователя, ОС перемещает блоки данных (называемых "страницами" ("pages")) между памятью и диском. Конечным результатом этих ухищрений являеится то, что ваша виртуальная память намного больше, но не намного медлеенее, чем реальная память.

-

Насколько виртуальная память медленей физической зависит от того, насколько хорошо алгоритмы своппинга операционной системы соответствуют способу ваших программ использовать виртуальнуюю память. Здесь есть благоприятный момент, в том что чтение и запись памяти близки по врмени, это ведь к созданию группы блоков (кластеров (cluster)) в пространстве памяти. Это тенденция называется локальность (locality), или более формально локальные ссылки (locality of reference) — и это хорошая штука. Если ссылки на адреса в памяти прыгают по виртуальному пространству беспорядочно, то будет осуществляться чтение и запись диска для каждой новой ссылки, и ваша виртуальная память будет такой же медленной как и диск. Но, из-за того что, программы преимущественно демонстрируют локальность ссылок, ваша операционная система может делать сравнительно малое количество подкачек относительно числа ссылок.

-

Опытным путем было установлено, что наиболее эффективный метод для широкого класса моделей использования памяти, очень прост; он называется LRU или "least recently used" (наименее востребованы) алгоритм. Система виртуальной памяти по мере надобности извлекает блоки данных с диска в свои рабочие наборы (working set). Когда физической памяти становится недостаточно для рабочих наборов, она сбрасывает те из них которые были наименее востребованы. Все Unix, и большинство других операционных систем использующих виртуальную память, используют незначительно измененный LRU.

-

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

-

Как физическая память в роли окон или кэшей для области подкачки на диске, так и внешний кэш выступает как окна в основную память. Внешний кэш быстрее (250 Мб/сек конечно быстрее 100 Мб/сек) и меньше. Аппаратный контроллер памяти использует алгоритм LRU во внешнем кэше приминительно к блокам данных расположенных в основной памяти. По историческим причинам, единицей своппинга в кэше называется строка (line), а не страницей.

-

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

-

Если вы хотите сделать ваши программы по-настоящему быстрыми, полезно будет знать следующие подробности. Ваши программы выполняются быстрее, когда они обладают сильной локальностью, потому что это улучшает кэширование. Теоретически, легчаший путь создавать быстрые программы, это делать их маленькими. Если программа не замедляется большим количеством обращений к диску или ожиданием событий из сети, она обычно работает на скорости наименьшего кэша в котором умещается.

-

Если вы не можете сделать всю вашу программу небольшой, попытайтесь в критичных по скорости выполнения ее частях использовать локальные ссылки. Рассмотрение деталей данной техники лежат за пределами рассмотрения этого руководства; к тому времени когда вам это понадобится вы уже будете хорошо знакомы с каким-нибудь компилятором и сможете сами найти необходимую информацию.

+>Мы не можем построить всю систему с использованием только самой быстрой памяти. Это будет очень дорого — даже если это не так, быстрая память непостоянна, а именно, она теряет весь свой блеск и преимущества, когда мы выключаем компьютер. Поэтому компьютеры имеют жёсткие диски или другие устройства постоянного хранения данных, на которых те и содержатся после выключения питания. И здесь мы имеем огромное несоответствие между скоростью процессоров и жёстких дисков. Три средних уровня иерархии памяти: внутренний кэш (internal cache), внешний кэш (external cache) и основная память существуют, чтобы заполнить эту брешь.

+

Linux и другие Unix имеют функциональное средство, называемое виртуальной памятью (virtual memory), которое позволяет операционной системе работать с намного большим объёмом основной памяти, чем фактически имеется в наличии. Ваша настоящая физическая память работает как набор окон или кэшей, ведущих к гораздо большему пространству «виртуальной» памяти, большая часть которой на самом деле расположена в специальной области подкачки (swap area) на диске. Скрывая механизм реализации этой иллюзии от взгляда программ пользователя, ОС перемещает блоки данных (называемых «страницами», «pages») между памятью и диском. Конечным результатом этих ухищрений является то, что ваша виртуальная память намного больше, но не намного медленнее, чем реальная память.

+

Насколько виртуальная память медленней физической, зависит от того, насколько хорошо алгоритмы своппинга операционной системы соответствуют способу использования памяти вашими программами. Здесь есть благоприятный момент в том что операции чтения и записи памяти близки по времени, это ведёт к созданию группы блоков (кластеров (cluster)) в пространстве памяти. Эта тенденция называется локальность (locality), или, более формально, локальные ссылки (locality of reference) — и это хорошая штука. Если ссылки на адреса в памяти прыгают по виртуальному пространству беспорядочно, то будет осуществляться чтение и запись диска для каждой новой ссылки, и ваша виртуальная память будет такой же медленной, как и диск. Но из-за того, что программы преимущественно демонстрируют локальность ссылок, ваша операционная система может делать сравнительно малое количество подкачек относительно числа ссылок.

+

Опытным путём было установлено, что наиболее эффективный метод для широкого класса моделей использования памяти очень прост; он называется LRU или «least recently used» (наименее востребованные) алгоритм. Система виртуальной памяти по мере надобности извлекает блоки данных с диска в свои рабочие наборы (working set). Когда физической памяти становится недостаточно для рабочих наборов, она сбрасывает те из них, которые были наименее востребованы. Все Unix и большинство других операционных систем, использующих виртуальную память, используют незначительно изменённый LRU.

+

Виртуальная память — это первая часть моста между скоростью диска и процессора. Она явно управляется ОС. Однако все ещё существует большая пропасть между скоростью физической памяти и скоростью, с которой процессор имеет доступ к памяти собственных регистров. Внешний и внутренний кэш направлены на решение этой задачи, используя технику, подобную виртуальной памяти, которую я уже описал.

+

Как физическая память выступает в роли окон или кэшей для области подкачки на диске, так и внешний кэш работает как окна в основную память. Внешний кэш быстрее (250 Мб/сек, конечно, быстрее 100 Мб/сек) и меньше. Аппаратный контроллер памяти использует алгоритм LRU во внешнем кэше применительно к блокам данных, расположенных в основной памяти. По историческим причинам единица своппинга в кэше называется строка (line), а не страница.

+

Но мы ещё не закончили. Внутренний кэш, кэшируя порции данных из внешнего, позволяет нам сделать последний шаг к действительно эффективной скорости. Он ещё быстрее и меньше, в действительности, он живёт прямо в процессоре.

+

Если вы хотите сделать ваши программы по-настоящему быстрыми, полезно будет знать следующие подробности. Ваши программы выполняются быстрее, когда они обладают сильной локальностью, потому что это улучшает кэширование. Теоретически, легчайший путь создавать быстрые программы — делать их маленькими. Если программа не замедляется большим количеством обращений к диску или ожиданием событий из сети, она обычно работает на скорости наименьшего кэша, в котором умещается.

+

Если вы не можете сделать вашу программу небольшой, попытайтесь в критичных по скорости выполнения её частях использовать локальные ссылки. Рассмотрение деталей данной техники лежит за пределами рассмотрения этого руководства; к тому времени, когда вам это понадобится, вы уже будете хорошо знакомы с каким-нибудь компилятором и сможете сами найти необходимую информацию.

8.3. Модуль управления памятью

-

Сейчас когда вы имеете достаточно физической памяти, чтобы практически не использовать своппинг, часть операционной системы называемой менеджер памяти (memory manager) продолжает выполнять важную работу. Он следит затем, чтобы программы могли изменять только свои собственные сегменты данных, это предотвращает выполнение неправильного или злонамеренного кода одной программы по копанию в данных другой программы. Для осуществления этой задачи он хранит таблицы сегментов кода и данных. Таблицы обновляются всякий раз когда процесс запрашивает выделение памяти или освобождает ее (в последнем случае, обычно когда завершает работу).

-

Эта таблица используется для передачи команд специализированной части аппаратного обеспечения называемой MMU или memory management unit (модуль управления памятью). Современные процессоры имеют встроенные в них MMU. MMU используют специальную способность включать ограждение вокруг областей памяти, так ссылка выходящая за допустимые пределы будет отклонена и вызовется специальное прерывание.

-

Если вы когда либо видели сообщение Unix, которое гласило "Segmentation fault", "core dumped" или что-то подобное, именно это и произошло; выполняемая программа попыталась обратиться к памяти вне своего сегмента, что вызвало неизбежное прерывание. Это указывает на ошибку в программном коде; core dump оставляет после себя информацию помогающую программисту диагностировать и найти ее.

-

Есть и другая причина для защиты процессов друг от друг, изоляцией памяти к которой они имеют доступ. Вы хотите иметь возможность контролироваь их доступ к файлам, таким образом чтобы глючная или злобная программа не могла повредить критично важные части системы. Вот почему в Unix есть права доступа к файлам (file permissions), которые мы обсудим ниже.

+

Сейчас, когда вы имеете достаточно физической памяти, чтобы практически не использовать своппинг, часть операционной системы, называемой менеджер памяти (memory manager) продолжает выполнять важную работу. Он следит затем, чтобы программы могли изменять только свои собственные сегменты данных, это предотвращает выполнение неправильного или злонамеренного кода одной программы от копания в данных другой программы. Для осуществления этой задачи он хранит таблицы сегментов кода и данных. Таблицы обновляются всякий раз, когда процесс запрашивает выделение памяти или освобождает её (в последнем случае, обычно когда завершает работу).

+

Эта таблица используется для передачи команд специализированной части аппаратного обеспечения, называемой MMU или memory management unit (модуль управления памятью). Современные процессоры имеют встроенные в них MMU. MMU используют специальную способность включать ограждение вокруг областей памяти, так что ссылка, выходящая за допустимые пределы, будет отклонена и вызовется специальное прерывание.

+

Если вы когда либо видели сообщение Unix, которое гласило «Segmentation fault», «core dumped» или что-то подобное, то именно это и произошло; выполняемая программа попыталась обратиться к памяти вне своего сегмента, что вызвало неизбежное прерывание. Это указывает на ошибку в программном коде; core dump оставляет после себя информацию, помогающую программисту диагностировать и найти её.

+

Есть и другая причина для защиты процессов друг от друга, изоляции памяти, к которой они имеют доступ. Вы хотите иметь возможность контролировать их доступ к файлам, таким образом чтобы глючная или злобная программа не могла повредить критично важные части системы. Вот почему в Unix есть права доступа к файлам (file permissions), которые мы обсудим ниже.

\ В конце файла нет новой строки +> diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/more.html unix_and_internet_fundamentals_howto.kvas.050218/doc/more.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/more.html 2005-02-04 23:24:25 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/more.html 2005-08-26 22:25:35 +0400 @@ -2,10 +2,12 @@ Научится большемуНаучиться большему + +13. Научится большему13. Научиться большему

Существует Reading List HOWTO, содержащий список книг, которые вы можете прочитать, чтобы глубже изучить затронутые нами темы. Может быть вам также захочется прочитать документ How To Become A Hacker.

\ В конце файла нет новой строки +> diff -urN tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/multitasking.html unix_and_internet_fundamentals_howto.kvas.050218/doc/multitasking.html --- tmp/unix_and_internet_fundamentals_howto.kvas.050218/doc/multitasking.html 2005-02-01 17:05:48 +0300 +++ unix_and_internet_fundamentals_howto.kvas.050218/doc/multitasking.html 2005-08-26 22:25:35 +0400 @@ -5,7 +5,9 @@ >Как мой компьютер делает несколько дел сразу? + +7. Как мой компьютер делает несколько дел сразу? -

На самом деле это не так. В каждый момент времени компьютеры могут выполнять только одну программу или процесс (process). Но компьютеры могут переключаться между программами очень быстро и обманутые медленные люди начинают думать, что они делают нескольок дел одновременно. Это называется разделение времени (timesharing).

-

Одна из забот ядра это управлять разделением времени. Оно имеет часть называемую планировщиком (scheduler), который хранит в себе информацию о всех других процессах (не ядра) в вашем зоопарке. Каждую 1/60 долю секунды таймер системных часов обращается к ядру генерируя прерывание. Планировщик остонавливает любой выполняющийся в данный момент процесс, оставляет его в подвешеннном состоянии, и передает управление другому процессу.

-

Может показаться, что 1/60 доля секнды это немного. Но для современных микропроцессоров этого достаточно, чтобы выполнить тысячи машинных инструкций, которые сделают большую часть работы. Таким образом, если у вас запущено много процессов, каждый из них может делать свою работу в отведенные для него отрезки времени.

-

На практике, программа может даже полностью не использовать целиком отведенный для нее отрезок времени. Если поступит запрос на прерывание от устройства ввода/вывода, ядро полность остановит текущую программу, выполнит обработчик прерывания, и вернется к выполнению прерванной задачи. Шквал прерываний с высоким приоритетом, называемый thrashing (биение, молотьба) может нарушить нормальное выполнение процессов, к счастью современные Unix привести к этому очень тяжело.

-

В действительности, скорость программ очень редко ограничена количеством отведенного ей машинного времени (исключениями из этого правила, могут быть задачи работающие с трехмерной графикой и звуком). Гораздо чаще, задержки порисходят когда программа ожидает поступления данных с диска или из сети.

-

Поэтому операционная система может запросто поддерживать большое количество одновременно выполняющихся процессов, это называется "многозадачностью" ("multitasking"). В основу создания семейства операционных систем семейства Unix изначально было положена многозадачность и они очень хороши в этом, и гораздо эффективнее чем Windows или старые Mac OS, в которых, мысль втиснуть, худо-бедно, многозадачность пришла уже после разработки. Эффективная, надежная многозадачность это большая часть того, что делает Linux превосходной для работы в сети, решения задач коммуникции и Web-сервисов.

+

На самом деле это не так. В каждый момент времени компьютеры могут выполнять только одну программу или процесс (process). Но компьютеры могут переключаться между программами очень быстро и обманутые медленные люди начинают думать, что они делают несколько дел одновременно. Это называется разделение времени (timesharing).

+

Одна из забот ядра — управлять разделением времени. В ядре есть часть, называемая планировщик (scheduler), который хранит в себе информацию обо всех других процессах (не ядра) в вашем зоопарке. Каждую 1/60 долю секунды таймер системных часов обращается к ядру, генерируя прерывание. Планировщик останавливает любой выполняющийся в данный момент процесс, оставляет его в подвешенном состоянии, и передаёт управление другому процессу.

+

Может показаться, что 1/60 доля секунды это немного. Но для современных микропроцессоров этого достаточно, чтобы выполнить тысячи машинных инструкций, которые сделают большую часть работы. Таким образом, если у вас запущено много процессов, каждый из них может делать свою работу в отведённые для него отрезки времени.

+

На практике, программа может даже полностью не использовать целиком отведённый для неё отрезок времени. Если поступит запрос на прерывание от устройства ввода/вывода, ядро полностью остановит текущую программу, выполнит обработчик прерывания, и вернётся к выполнению прерванной задачи. Шквал прерываний с высоким приоритетом, называемый thrashing (дребезг), может нарушить нормальное выполнение процессов, к счастью, современные Unix привести к этому очень тяжело.

+

В действительности, скорость программ очень редко ограничена количеством отведённого ей машинного времени (исключениями из этого правила могут быть задачи, работающие с трёхмерной графикой и звуком). Гораздо чаще задержки происходят, когда программа ожидает поступления данных с диска или из сети.

+

Поэтому операционная система может запросто поддерживать большое количество одновременно выполняющихся процессов, это называется «многозадачностью» («multitasking»). При создании операционных систем семейства Unix изначально в основу была положена многозадачность, и они очень хороши в этом, и гораздо эффективнее чем Windows или старые Mac OS, в которых идея худо-бедно втиснуть многозадачность пришла уже после разработки. Эффективная, надёжная многозадачность — это большая часть того, что делает Linux превосходной для работы в сети, решения задач коммуникации и Web-сервисов.