<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF107%3A%D0%9F%D0%BE%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D1%8F%D1%81%D1%8C_%D0%B2_%D1%8F%D0%B4%D1%80%D0%BE</id>
		<title>LXF107:Погружаясь в ядро - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF107%3A%D0%9F%D0%BE%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D1%8F%D1%81%D1%8C_%D0%B2_%D1%8F%D0%B4%D1%80%D0%BE"/>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF107:%D0%9F%D0%BE%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D1%8F%D1%81%D1%8C_%D0%B2_%D1%8F%D0%B4%D1%80%D0%BE&amp;action=history"/>
		<updated>2026-05-13T19:56:23Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.11.1</generator>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF107:%D0%9F%D0%BE%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D1%8F%D1%81%D1%8C_%D0%B2_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=12844&amp;oldid=prev</id>
		<title>Ewgen: добавлена категория</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF107:%D0%9F%D0%BE%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D1%8F%D1%81%D1%8C_%D0%B2_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=12844&amp;oldid=prev"/>
				<updated>2011-10-28T08:16:41Z</updated>
		
		<summary type="html">&lt;p&gt;добавлена категория&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 08:16, 28 октября 2011&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 355:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 355:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;именем, содержащим номер версии; обычно&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;именем, содержащим номер версии; обычно&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;что то вроде '''/usr/src/linux-source-2.6.25'''.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;что то вроде '''/usr/src/linux-source-2.6.25'''.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Категория:Hardcore Linux]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ewgen</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF107:%D0%9F%D0%BE%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D1%8F%D1%81%D1%8C_%D0%B2_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=8475&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF107:%D0%9F%D0%BE%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D1%8F%D1%81%D1%8C_%D0%B2_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=8475&amp;oldid=prev"/>
				<updated>2009-08-19T08:59:39Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''Hardcore Linux''' Проверь себя на крутом проекте для продвинутых пользователей&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
&lt;br /&gt;
==Ядро: о сущности модулей==&lt;br /&gt;
&lt;br /&gt;
: Ядро – незаменимая часть ПО в центре вашего компьютера, но что оно, собственно, делает? '''Д-р Крис Браун''' вскроет его и заглянет внутрь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF107_74_1.jpg|Рис. 1|300px]]Рис. 1. Ядро использует системные вызовы ‘'''read'''’ и ‘'''write'''’ для представления абстракции вашего оборудования.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Мой верный Оксфордский словарь определяет ядро как «мягкую, съедобную часть ореха», но есть и второе значение: «Центральная или очень важная часть чего-либо». (Кстати, первое определение породило термин ‘Оболочка’, что на языке&lt;br /&gt;
Linux означает командный интерпретатор.) Для тех, кто имеет смутное представление, что именно делает ядро, приведем немножко теории.&lt;br /&gt;
&lt;br /&gt;
Ядро (kernel) – это кусочек ПО, который, грубо говоря, представляет собой слой между оборудованием и приложениями, запущенными&lt;br /&gt;
на компьютере. Если придерживаться строгой терминологии, ‘Linux’ означает только ядро – программу, которую Линус Торвальдс написал&lt;br /&gt;
в начале 90-х годов. Все остальные части, которые вы можете найти в&lt;br /&gt;
составе дистрибутива Linux – оболочка ''Bash'', графическое окружение&lt;br /&gt;
KDE, web-браузеры, ''X''-сервер, ''Tux Racer'' и многое другое – это всего&lt;br /&gt;
лишь приложения, запускаемые поверх ядра Linux, и они, подчеркнем&lt;br /&gt;
это, не являются частью самой операционной системы. Чтобы оценить&lt;br /&gt;
долю ядра, скажем, что свежеустановленный RHEL5 занимает около&lt;br /&gt;
2,5 ГБ на жестком диске (понятно, что точное число зависит от вашего выбора пакетов). Из них само ядро со всеми модулями занимает&lt;br /&gt;
47 МБ, или около 2 %.&lt;br /&gt;
&lt;br /&gt;
===Внутри ядра===&lt;br /&gt;
&lt;br /&gt;
Но что все-таки делает ядро? Диаграмма на рис. 1 показывает это. Ядро предоставляет приложениям свои службы, которые можно запустить через множество специальных точек входа – системных вызовов. С точки зрения программиста, это выглядит как&lt;br /&gt;
простой вызов функции, хотя на самом деле системный вызов влечет за собой явное переключение режима процессора из пространства&lt;br /&gt;
пользователя ('''user space''') в пространство ядра ('''kernel space'''). Все вместе системные вызовы образуют «виртуальную машину Linux», которую можно представить как абстракцию нижележащего аппаратного&lt;br /&gt;
обеспечения.&lt;br /&gt;
&lt;br /&gt;
Одна из самых понятных абстракций, предоставляемых ядром,&lt;br /&gt;
это файловая система. Для примера приведем маленькую программу&lt;br /&gt;
(написанную на ''C''), которая открывает файл и копирует его содержимое в стандартный вывод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     int fd, count; char buf[1000];&lt;br /&gt;
     fd=open(“mydata”, O_RDONLY);&lt;br /&gt;
     count = read(fd, buf, 1000);&lt;br /&gt;
     write(1, buf, count);&lt;br /&gt;
     close(fd);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь вы видите пример четырех системных вызовов – '''open, read, write''' и '''close'''. Не вдавайтесь в детали синтаксиса: сейчас это не главное. Главное вот что: через эти (и некоторые другие) системные вызовы&lt;br /&gt;
ядро Linux предоставляет нам иллюзию «файла» – ряда байтов с данными, который имеет имя – и защищает вас от нижележащих деталей:&lt;br /&gt;
дорожек, секторов и головок со списком свободных блоков, которые&lt;br /&gt;
вам бы пришлось учитывать при непосредственном доступе к оборудованию. Вот что мы подразумеваем под абстракцией.&lt;br /&gt;
&lt;br /&gt;
Как видно из рис. 1, ядро выполняет сложную работу по созданию&lt;br /&gt;
такой абстракции, когда сама файловая система может быть сохранена во множестве различных форматов, на локальных устройствах&lt;br /&gt;
хранения, таких как жесткие диски, CD или USB-брелки – а то и на удаленной системе через сетевые протоколы вроде ''NFS'' или ''CIFS''. Может даже иметься еще и дополнительный слой отображения устройств для&lt;br /&gt;
поддержки логических томов или RAID. Слой виртуальной файловой&lt;br /&gt;
системы (''VFS'') внутри ядра представляет эти нижележащие формы&lt;br /&gt;
устройств хранения как коллекцию файлов внутри единой иерархической файловой системы.&lt;br /&gt;
&lt;br /&gt;
===За кулисами===&lt;br /&gt;
&lt;br /&gt;
Файловая система – одна из самых понятных абстракций, предоставляемых ядром. Но некоторые функции не видимы так явно. Например,&lt;br /&gt;
ядро отвечает за планирование процессов. В любой момент времени&lt;br /&gt;
существуют различные процессы, ожидающие запуска. Планировщик&lt;br /&gt;
ядра предоставляет каждому часть процессорного времени, и если&lt;br /&gt;
смотреть в течение нескольких секунд, у вас складывается иллюзия&lt;br /&gt;
работы нескольких программ одновременно. Вот небольшая программа на ''С'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 main()&lt;br /&gt;
 {&lt;br /&gt;
   if (fork()) {&lt;br /&gt;
     write(1, “Parent\n”, 7);&lt;br /&gt;
       wait(0);&lt;br /&gt;
       exit(0);&lt;br /&gt;
 }&lt;br /&gt;
     else {&lt;br /&gt;
        write(1, “Child\n”, 6);&lt;br /&gt;
        exit(0);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Она создает новый процесс; и исходный процесс (родительский),&lt;br /&gt;
и новые процессы (дочерние) пишут сообщение в стандартный вывод&lt;br /&gt;
и завершаются. Снова, забудьте про синтаксис. Просто отметьте, что&lt;br /&gt;
системные вызовы '''fork(), exit()''' и '''wait()''' отвечают за создание, завершение и синхронизацию процессов соответственно. Эти элегантно-простые вызовы скрывают стоящую за ними сложность управления и&lt;br /&gt;
планирования процессов.&lt;br /&gt;
&lt;br /&gt;
Еще более скрытые, даже от программистов, функции ядра – это управление памятью. Каждый запускаемый процесс уверен, что имеет доступное только ему одному адресное пространство (допустимый&lt;br /&gt;
набор адресов памяти). На самом деле он разделяет ОЗУ компьютера с&lt;br /&gt;
множеством других процессов, и если памяти в системе не хватает, то&lt;br /&gt;
часть его адресного пространства переедет на диск в область подкачки&lt;br /&gt;
[swap]. Другой аспект управления памятью – защита адресного пространства одного процесса от доступа других – необходимое условие&lt;br /&gt;
для сохранения целостности многозадачной операционной системы&lt;br /&gt;
['''оно реализуется аппаратно, – прим. ред.'''].&lt;br /&gt;
&lt;br /&gt;
Ядро также осуществляет работу с сетевыми протоколами, такими как '''IP, TCP''' и '''UDP''', предоставляющими соединение компьютер-компьютер и процесс-процесс через сеть. Снова вернемся к иллюзиям.&lt;br /&gt;
'''TCP''' создает иллюзию постоянного соединения между двумя процессами – как кусок кабеля, соединяющий два телефона – хотя на самом деле никакого постоянного соединения не существует. Заметим также, что&lt;br /&gt;
конкретные прикладные протоколы, такие как ''FTP, DNS'' или ''HTTP'', применяемые в пользовательских программах, не являются частью ядра.&lt;br /&gt;
&lt;br /&gt;
Linux (как и его «предок» Unix) имеет хорошую репутацию по части&lt;br /&gt;
безопасности. Она достигается тем, что ядро отслеживает '''ID''' пользователя и группы для каждого запущенного процесса и использует их для ответа «да/нет» при каждом обращении процесса к ресурсу (например, открытию файла для записи), проверяя права доступа. Именно эта модель контроля доступа обеспечивает основную безопасность Linux-систем.&lt;br /&gt;
&lt;br /&gt;
Наконец (сразу приношу извинения программистам, написавшим те части ядра, которые я не перечислил), ядро сопровождается большой&lt;br /&gt;
коллекцией модулей, способных общаться с аппаратными устройствами на языке низкого уровня: считать сектор с диска, получить пакет&lt;br /&gt;
с сетевой карты и так далее. Их также иногда называют драйверами устройств.&lt;br /&gt;
&lt;br /&gt;
===Модульное ядро===&lt;br /&gt;
&lt;br /&gt;
Теперь, получив представление о том, что делает ядро, давайте кратко рассмотрим его физическую организацию. Ранние версии ядра&lt;br /&gt;
Linux были монолитными – это когда все части и кусочки были статически собраны в один (довольно большой) исполняемый файл.&lt;br /&gt;
Современные ядра Linux, напротив, модульные: большая часть их функций содержится в модулях, динамически загружаемых в ядро.&lt;br /&gt;
Это позволяет сохранять размер основной части ядра небольшим и делает возможным подключение и замену модулей в запущенном ядре&lt;br /&gt;
без перезагрузки.&lt;br /&gt;
&lt;br /&gt;
Основная часть ядра помещается в память во время загрузки системы, из файла в директории '''/boot''' с именем вида '''vmlinuz-ВЕРСИЯ_ЯДРА''', где '''ВЕРСИЯ_ЯДРА''' – это, сами понимаете, номер версии текущего ядра. (Чтобы узнать, какая версия ядра используется у вас, выполните команду ''uname -r''.) Модули ядра находятся в директории '''/lib/modules/ВЕРСИЯ_ЯДРА'''. Все эти кусочки были скопированы на место при установке ядра.&lt;br /&gt;
&lt;br /&gt;
===Управляем модулями===&lt;br /&gt;
&lt;br /&gt;
Как правило, Linux разбирается со своими модулями без нашей помощи, но на случай необходимости есть команды для обследования и&lt;br /&gt;
управления модулями вручную. Например, чтобы найти, какие модули в настоящее время загружены в ядро, используйте ''lsmod''. Вот пример его вывода:&lt;br /&gt;
&lt;br /&gt;
 # lsmod&lt;br /&gt;
 pcspkr          4224 0&lt;br /&gt;
 hci_usb        18204 2&lt;br /&gt;
 psmouse           38920 0&lt;br /&gt;
 bluetooth       55908 7 rfcomm,l2cap,hci_usb&lt;br /&gt;
 yenta_socket       27532 5&lt;br /&gt;
 rsrc_nonstatic 14080 1 yenta_socket&lt;br /&gt;
 isofs       36284 0&lt;br /&gt;
&lt;br /&gt;
Поля этого вывода содержат имя модуля, его размер, счетчик его&lt;br /&gt;
использования и список зависимых от него модулей. Счетчик использования важен для защиты модуля от выгрузки при его активности.&lt;br /&gt;
Linux может удалить модуль, только когда его счетчик использования равен нулю.&lt;br /&gt;
&lt;br /&gt;
Модули можно загружать и выгружать вручную, используя ''modprobe''. (На самом деле, работа выполняется двумя низкоуровневыми командами, ''insmod'' и ''rmmod'', но ''modbrobe'' проще в использовании, потому что автоматически разрешает зависимости модулей.)&lt;br /&gt;
Например, вывод ''lsmod'' на нашей машине показал загруженный модуль с именем '''isofs''', счетчик использования которого равен нулю и от него не зависят другие модули. (''isofs'' – это модуль поддержки&lt;br /&gt;
файловой системы ISO, используемой на CD). Ядро с удовольствием&lt;br /&gt;
избавится от такого модуля при помощи команды:&lt;br /&gt;
&lt;br /&gt;
 # modprobe -r isofs&lt;br /&gt;
&lt;br /&gt;
'''Isofs'' больше не показывается в выводе ''lsmod'', и, что ценно, ядро&lt;br /&gt;
стало потреблять на 36284 байта меньше памяти. Если вы вставите&lt;br /&gt;
CD диск и он смонтируется автоматически, ядро также автоматически подгрузит модуль '''isofs''' и увеличит счетчик его использования до '''1'''. Попытка удалить модуль вам на сей раз не удастся, так как он&lt;br /&gt;
используется:&lt;br /&gt;
&lt;br /&gt;
 # modprobe -r isofs&lt;br /&gt;
 FATAL: Module isofs is in use.&lt;br /&gt;
&lt;br /&gt;
''lsmod'' просто показывает модули, загруженные в данный момент;&lt;br /&gt;
а вот ''modprobe -l'' выведет список всех доступных модулей, то есть все&lt;br /&gt;
модули, находящиеся в '''/lib/modules/ВЕРСИЯ_ЯДРА'''; будьте готовы к&lt;br /&gt;
длинному перечню.&lt;br /&gt;
&lt;br /&gt;
В реальности, вам обычно незачем загружать модули вручную с&lt;br /&gt;
помощью ''modprobe'', но если придется, можно заодно передавать в&lt;br /&gt;
модуль параметры, через командную строку ''modprobe''. Например, так:&lt;br /&gt;
&lt;br /&gt;
 # modprobe usbcore blinkenlights=1&lt;br /&gt;
&lt;br /&gt;
Термин '''blinkenlights''' («мигалка») отнюдь не выдуман – это реальный параметр модуля '''usbcore'''.&lt;br /&gt;
&lt;br /&gt;
Сложность здесь заключается в знании, какие параметры имеет модуль. Можете использовать звонок другу или помощь зала, но&lt;br /&gt;
лучше обратиться к команде ''modinfo'': она выводит список различной&lt;br /&gt;
информации о модуле.&lt;br /&gt;
&lt;br /&gt;
Вот пример информации, выводимой для модуля '''snd-hda-intel''' (в сокращении):&lt;br /&gt;
&lt;br /&gt;
 # modinfo snd-hda-intel&lt;br /&gt;
 filename:         /lib/modules/2.6.20-16-generic/kernel/sound/pci/&lt;br /&gt;
 hda/snd-hda-intel.ko&lt;br /&gt;
 description: Intel HDA driver&lt;br /&gt;
 license:       GPL&lt;br /&gt;
 srcversion: A3552B2DF3A932D88FFC00C&lt;br /&gt;
  alias:    pci:v000010DEd0000055Dsv*sd*bc*sc*i*&lt;br /&gt;
  alias:    pci:v000010DEd0000055Csv*sd*bc*sc*i*&lt;br /&gt;
  depends:        snd-pcm,snd-page-alloc,snd-hda-codec,snd&lt;br /&gt;
  vermagic:       2.6.20-16-generic SMP mod_unload 586&lt;br /&gt;
  parm:        index:Index value for Intel HD audio interface. (int)&lt;br /&gt;
  parm:       id:ID string for Intel HD audio interface. (charp)&lt;br /&gt;
  parm:       model:Use the given board model. (charp)&lt;br /&gt;
  parm:       position_fix:Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF 3 = FIFO size). (int)&lt;br /&gt;
  parm:       probe_mask:Bitmask to probe codecs (default = -1). (int)&lt;br /&gt;
  parm:       single_cmd:Use single command to communicate with codecs (for debugging only). (bool)&lt;br /&gt;
  parm:       enable_msi:Enable Message Signaled Interrupt (MSI) (int)&lt;br /&gt;
  parm:       enable:bool&lt;br /&gt;
&lt;br /&gt;
Интересующие нас строки начинаются с '''parm''': – они показывают&lt;br /&gt;
параметры, принимаемые модулем. Их описание, мягко выражаясь,&lt;br /&gt;
сжатое. Для охоты за дальнейшей информацией установите исходные&lt;br /&gt;
коды ядра, затем найдите директорию, имеющую имя вроде '''/usr/src/ВЕРСИЯ_ЯДРА/Documentation'''. В ней содержится множество интересных вещей: например, файл '''/usr/src/ВЕРСИЯ_ЯДРА/Documentation/sound/alsa/ALSA-Configuration.txt''' описывает параметры, распознаваемые многими звуковыми модулями ''ALSA''. Файл '''/usr/src/ВЕРСИЯ_ЯДРА/Documentation/kernel-parameters.txt''' тоже полезен.&lt;br /&gt;
&lt;br /&gt;
Пример необходимости передачи параметров в модуль недавно обсуждался на одном из форумов Ubuntu (см. https://help.ubuntu.com/community/HdaIntelSoundHowto): говорилось, что модуль '''snd-hda-intel'''&lt;br /&gt;
нуждается в небольшой помощи для правильного управления звуковым оборудованием и иногда «зависает» во время загрузки при старте системы. Часть исправления заключалась в применении к модулю опции '''probe_mask=1'''. Итак, если вы загружаете модуль вручную,&lt;br /&gt;
напечатайте:&lt;br /&gt;
&lt;br /&gt;
  # modprobe snd-hda-intel probe_mask=1&lt;br /&gt;
&lt;br /&gt;
А лучше поместить эту строку в файл '''/etc/modprobe.conf''', следующим образом:&lt;br /&gt;
&lt;br /&gt;
  options snd-hda-intel probe_mask=1&lt;br /&gt;
&lt;br /&gt;
Она велит ''modprobe'' включать опцию '''probe_mask=1''' при каждой&lt;br /&gt;
загрузке модуля '''snd-hda-intel'''. Некоторые существующие дистрибутивы Linux разбивают эту информацию по множеству файлов директории '''/etc/modprobe.d''', а не сосредоточивают ее всю в '''modprobe.conf'''.&lt;br /&gt;
&lt;br /&gt;
===Файловая система /proc===&lt;br /&gt;
&lt;br /&gt;
Ядро Linux также экспонирует множество информации через файловую систему '''/proc'''. Чтобы получить понятие о '''/proc''', мы должны расширить наше представление о файлах и рассматривать их не как&lt;br /&gt;
хранилище информации на жестком диске, CD или карте памяти, а как&lt;br /&gt;
любую информацию, к которой можно получить доступ через стандартные системные вызовы, типа открыть/читать/записать/закрыть, рассмотренные нами ранее, или через обычные программы вроде ''cat'' или&lt;br /&gt;
''less''. «Файл» в '''/proc''' полностью является плодом воображения ядра и&lt;br /&gt;
предоставляет возможность просмотра данных множества внутренних&lt;br /&gt;
структур последнего.&lt;br /&gt;
&lt;br /&gt;
Фактически, многие справочные утилиты Linux представляют в человеко-читаемой форме информацию, найденную в файлах '''/proc'''.&lt;br /&gt;
Например, в '''/proc/modules''' содержится список текущих загруженных&lt;br /&gt;
модулей, странным образом напоминающий вывод ''lsmod''. Аналогично,&lt;br /&gt;
'''/proc/meminfo''' содержит прорву деталей о текущем состояии виртуальной памяти системы, а утилиты типа ''vmstat'' и ''top'' предоставят часть этой информации в (чуть) более внятном формате. Другой пример – содержимое '''/proc/net/arp''', которое показывает текущее состояние кэша '''ARP'''; в командной строке ''arp -a'' покажет похожую информацию.&lt;br /&gt;
&lt;br /&gt;
Особо интересны «файлы» в '''/proc/sys'''. Например установки в&lt;br /&gt;
'''/proc/sys/net/ipv4/ip_forward''' говорят ядру, должен ли компьютер&lt;br /&gt;
пересылать адресованные не ему IP-датаграммы – т.е. выполнять&lt;br /&gt;
функцию шлюза. В данном случае, ядро сообщает, что эта возможность выключена:&lt;br /&gt;
&lt;br /&gt;
  # cat /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
  0&lt;br /&gt;
&lt;br /&gt;
А еще интереснее будет новость, что можно также и писать в эти&lt;br /&gt;
файлы. Продолжая наш пример:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
включит IP-переадресацию в запущенном ядре.&lt;br /&gt;
&lt;br /&gt;
Вместо использования ''cat'' или ''echo'' для исследования и модификации настроек в ''/proc/sys'' можете использовать команду ''sysctl''.&lt;br /&gt;
&lt;br /&gt;
 # sysctl net.ipv4.ip_forward&lt;br /&gt;
 net.ipv4.ip_forward = 0&lt;br /&gt;
&lt;br /&gt;
эквивалентно&lt;br /&gt;
&lt;br /&gt;
 # cat /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
 0&lt;br /&gt;
тогда как&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
&lt;br /&gt;
аналогично&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
Заметим, что пути, применяемые вами в ''sysctl'', используют для разделения компонентов точку ('''.''') вместо привычного правого слэша ('''/'''), и что этот путь вычисляется относительно '''/proc/sys'''.&lt;br /&gt;
&lt;br /&gt;
Помните, что настройки, изменяемые таким образом, будут в силе&lt;br /&gt;
только на текущий запуск ядра – они не сохранятся при перезагрузке.&lt;br /&gt;
Чтобы сделать их постоянными, поместите их в файл '''/etc/sysctl.conf'''.&lt;br /&gt;
При загрузке системы ''sysctl'' должна будет автоматически применить&lt;br /&gt;
любые настройки, найденные ею в этом файле.&lt;br /&gt;
&lt;br /&gt;
Строка в '''/etc/sysctl.conf''' будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
===Тюнинг производительности===&lt;br /&gt;
&lt;br /&gt;
Записываемые параметры в '''/proc/sys''' породили целую субкультуру&lt;br /&gt;
тюнинга производительности Linux. Лично я считаю это излишним, но&lt;br /&gt;
вот вам несколько примеров на пробу.&lt;br /&gt;
&lt;br /&gt;
Инструкция по установке ''Oracle 10g'' (http://www.oracle.com/technology/obe/obe10gdb/install/linuxpreinst/linuxpreinst.htm) просит вас указать несколько параметров, включая&lt;br /&gt;
&lt;br /&gt;
 kernel.shmmax=2147483648&lt;br /&gt;
&lt;br /&gt;
устанавливающий максимально возможный разделяемый сегмент памяти в 2 ГБ. (Разделяемая память представляет собой механизм&lt;br /&gt;
межпроцессной коммуникации, когда сегмент памяти является видимым в адресных пространствах множества процессов.)&lt;br /&gt;
&lt;br /&gt;
Руководство IBM ‘Redpaper’ по настройке производительности и&lt;br /&gt;
тюнингу Linux (http://www.redbooks.ibm.com/abstracts/redp4285.html) всячески советует применять параметры в '''/proc/sys''', например:&lt;br /&gt;
&lt;br /&gt;
 vm.swappiness=100&lt;br /&gt;
&lt;br /&gt;
Этот параметр, очевидно, управляет интенсивностью сброса страниц памяти на диск.&lt;br /&gt;
&lt;br /&gt;
Некоторые параметры можно подправить для усиления безопасности. Cайт Боба Кромвеля (http://cromwell-intl.com/security/security-&lt;br /&gt;
stack-hardening.html) содержит несколько хороших примеров, включая&lt;br /&gt;
такой:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.icmp_echo_ignore_broadcasts=1&lt;br /&gt;
&lt;br /&gt;
Он предписывает ядру не отвечать на широковещательные ICMP-запросы (ping’и), делая вашу сеть менее чувствительной к одной из&lt;br /&gt;
DoS-атак (отказ в обслуживани), известной также как Smurf-атака.&lt;br /&gt;
&lt;br /&gt;
В другом примере,&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.conf.all.rp_filter=1&lt;br /&gt;
&lt;br /&gt;
ядру велено усилить уровень проверки, также называемый входной&lt;br /&gt;
или выходной фильтрацией. Суть этого заключается в отбраковке&lt;br /&gt;
пакетов, если IP-адрес отправителя или получателя в заголовке пакета не имеют смысла при его рассмотрении в свете использованного&lt;br /&gt;
физического интерфейса.&lt;br /&gt;
&lt;br /&gt;
А есть ли документация по всем этим параметрам ? Да – команда&lt;br /&gt;
&lt;br /&gt;
 # sysctl -a&lt;br /&gt;
&lt;br /&gt;
покажет вам их имена и текущие значения. Это длинный список, но по&lt;br /&gt;
нему не догадаешься, что параметры делают. Есть ли другие источники? Оказывается, издательство O’Reilly издало книгу, написанную&lt;br /&gt;
Оливье Доделем [Olivier Daudel], под названием «/proc et /sys». Oui, mes amis, она на французском, и русского перевода нет. Другая полезная ссылка – Red Hat Enterprise Linux Reference Guide, руководство,&lt;br /&gt;
содержащее главы о рассматриваемом объекте. Вы можете скачать&lt;br /&gt;
его с http://www.redhat.com/docs/manuals/enterprise. Полезной книгой о ядре&lt;br /&gt;
Linux является Ядро Linux. 3-е издание Бовета и Чезати (O’Reilly/BHV),&lt;br /&gt;
но сразу предупредим, что она о внутренностях ядра, и будет полезна&lt;br /&gt;
скорее будущим разработчикам и студентам компьютерных специальностей, чем системным администраторам.&lt;br /&gt;
&lt;br /&gt;
Также возможно сконфигурировать и собрать собственное ядро. Для этого прочтите великолепный учебник Нейла Ботвика в [[LXF89:Hardcore Linux|LXF89]] или Linux Kernel in a Nutshell Грега Кроа-Хартмана [Greg Kroah-Hartman]&lt;br /&gt;
издательства O’Reilly, заголовок которой содержит очаровательную, но, по-видимому, непредумышленную игру слов ['''по-англ. in a nutshell буквально значит «в скорлупе ореха», а в переносном смысле – «вкратце», – прим. ред.''']. Но, конечно, чтобы собирать ядро, надо быть крепким орешком. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
===Стоит ли трудов тюнинг производительности?===&lt;br /&gt;
&lt;br /&gt;
Первым автомобилем моего отца был Wolseley 1500 с номером 49 RNU – уж и не знаю, как я&lt;br /&gt;
упомнил эти подробности. Так или иначе, отец любил эксперименты и тратил часы на мелкие&lt;br /&gt;
доводки вроде угла зажигания или качества смешения топлива. Время от времени он откручивал свечи и корректировал зазоры.&lt;br /&gt;
Выкрутив свечи, он подавал топливо в цилиндры, как часть некого таинственного процесса внутреннего орошения. После этого выхлоп превращался в убедительные густые облака черного дыма.&lt;br /&gt;
&lt;br /&gt;
Но вот беда: у него не было никаких объективных способов измерить, к чему привели его улучшения. Он скрупулезно вел записи&lt;br /&gt;
о купленном бензине и километраже, рассчитывая расход топлива до нескольких десятичных знаков, и у него был специальный холм, куда он поднимался на третьей передаче, чтобы «посмотреть, как пошло», но все это нельзя было назвать научной методикой.&lt;br /&gt;
&lt;br /&gt;
Многие системные администраторы Linux находятся в аналогичном положении. Они знают, что есть множество параметров, которые&lt;br /&gt;
можно изменить и повысить производительность, но слабо представляют, что делает большинство из них, и не имеют хорошего способа&lt;br /&gt;
для измерения производительности. Итак, мой вам совет: если вы не знаете, что вы делаете, и/или нет способа измерить результат, оставьте эти параметры в покое!&lt;br /&gt;
&lt;br /&gt;
===Достаем исходники ядра===&lt;br /&gt;
&lt;br /&gt;
Чтобы добыть исходные коды ядра, не надо&lt;br /&gt;
быть суперхакером. Вы можете просто установить пакет с ними, предоставляемый вашим&lt;br /&gt;
дистрибутивом, так же, как устанавливаете&lt;br /&gt;
другие пакеты.&lt;br /&gt;
&lt;br /&gt;
Например, в моем Ubuntu я запускал команду:&lt;br /&gt;
&lt;br /&gt;
 # apt-get install linux-source&lt;br /&gt;
&lt;br /&gt;
Альтернатива – попытаться зайти на http://www.kernel.org и загрузить архив с исходными текстами (он может называться как-то вроде&lt;br /&gt;
'''linux-2.6.25.6.tar.bz2''') в '''/tmp'''. Распакуйте его в '''/usr/src''':&lt;br /&gt;
&lt;br /&gt;
  # cd /usr/src&lt;br /&gt;
  # tar xjf /tmp/linux-2.6.24.2.tar.bz2&lt;br /&gt;
&lt;br /&gt;
В обоих случаях вы в итоге получите исходные коды ядра в поддиректории '''/usr/src''' с&lt;br /&gt;
именем, содержащим номер версии; обычно&lt;br /&gt;
что то вроде '''/usr/src/linux-source-2.6.25'''.&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>