|
Интервью с Джонатаном Корбетом TanaT Xakep, номер #054, стр. 054-080-3 a = a + 1; Компьютер же воспримет его в следующем виде: - считать значение переменной «а»; - прибавить к нему 1; - сохранить результат обратно в «а». Но на практике возможно, что какой-то другой поток ядра изменит значение «а» между первым и третьим шагами. Избежать этой «гонки» (такое название потому, что результат зависит от того, кто первый сохранит свое значение в «а») и есть главная задача программиста ядра. Х: Какие виды исключительных ситуаций могут возникнуть при работе ядра? JC: Ядро Linux имеет два вида исключений, называемых обычно «oops» и «panic». Как и с каждой системой, паника происходит тогда, когда ядро обнаруживает серьезную неисправность. Если система каким-либо образом повредила сама себя, ей требуется немедленно остановиться, пока она не сделает что-нибудь типа уничтожения файловой системы. Везде, где только возможно, Linux пытается детектировать проблему и справиться с ней без остановки всей системы. Например, многие ситуации типа «oops» приводят к завершению процесса, который нормально запустился, но потом зациклил систему. Но бывают ситуации, когда все настолько плохо, что полная паника является наилучшим выходом. Пользователи стабильных версий ядра, конечно же, никогда не видели ни паник, ни «oops». Но в реальном мире они иногда происходят. Х: Можете привести больше примеров ситуаций, когда возникают паника или «oops»? JC: Недавно найденный TF баг (смотрите http://lwn.net/Articles/15903/) служит хорошим примером паники. Процессор пытается передать управление процессу, которого не существует. Это приводит к краху всей системы. В данном случае у системы нет другой альтернативы, кроме как паниковать. Ядро, поставляемое с Red Hat Linux 7.3 (и некоторыми другими дистрибутивами) содержит баг в файловой системе ext3. Эта ошибка приводит к «oops», завершая время от времени некоторые процессы. К тому же этот баг приводит к замедлению всей системы. Хотя данная ошибка уже исправлена (патч есть и в обновлении от Red Hat), этот случай познакомил многих пользователей с ошибками типа «oops». Х: Какие функции выполняет ядро Linux? |