|
Интервью с Джонатаном Корбетом TanaT Xakep, номер #054, стр. 054-080-1 (TanaT@hotmail.ru) Джонатан Корбет (Jonathan Corbet) написал книгу по ядру Linux (сейчас работает над ее третьим изданием) и создал Linux Weekly News, исполнительным редактором которого он сейчас и является. В этом интервью Джонатан раскрывает основные концепции ядра UNIX и объясняет свой интерес к этой теме. Х: Джонатан, можете объяснить, почему вас привлекает именно ядро операционной системы? JC: Хороший вопрос. Впервые я серьезно заинтересовался операционными системами в 1980 году (ну, примерно), когда Эва Немес (Evi Nemeth) разрешила мне повозиться с VM-алгоритмом в ранних версиях BSD для VAX 11/780 (Virtual Address eXtension – популярное семейство 32-разрядных миникомпьютеров, выпускавшихся с 1978 по 1990 г. бывшей корпорацией Digital Equipment Corp. - прим. автора). Программирование на уровне ядра – это своего рода соревнование: вам всегда приходится думать о том, что может произойти в другом месте системы, там, где вы этого не ожидаете. Если программист ядра все сделал правильно, система правильно работает во всех ситуациях. Правда нужно заметить, что низкоуровневый программист не может отвечать за более высокие системные слои. Я всегда интересуюсь тем, что происходит за сценой. К примеру, если я веду своих детей в цирк, то обращаю больше внимания не на представление, а на людей «в черном», которые помогают актерам исполнять свои номера. Та часть жизни, которая скрыта от глаз, наиболее интересна. Х: А кто такая Эва Немес? JC: О, Эва – это человек, хорошо известный в кругу BSD и USENIX сообществ. Она является профессором (в отставке) Колорадского Университета (University of Colorado). Она также соавтор книги «Unix System Administration Handbook» (позднее она была переработана в Linux System Administration Handbook). Х: Что такое VM-алгоритм? Очень похоже на виртуальную память. JC: Да, так и есть. Давным-давно, в 1981 году, 4BSD, использующая виртуальную память, была еще очень молодой системой. Эва испытывала затруднения с большими приложениями. Когда те загружались в память, все остальное приходилось принудительно сбрасывать в swap. Естественно, при этом страдала производительность – система реагировала на события слишком медленно. Не забывайте, что в те времена использовались VAX 11/780. Когда к ним подключалось большое число пользователей, медленная реакция доводила людей до истерики. Я усовершенствовал алгоритм сканирования страниц памяти таким образом, чтобы записывать в swap лишь информацию, принадлежащую ресурсоемким процессам, а все остальное оставлять в памяти. Это было мальчишеским баловством, и, конечно же, ни у кого не возникло желания послать мой код в Беркли для рассмотрения его экспертами. Однако именно этот опыт положил начало моим исследованиям ядра. Х: Опишите, пожалуйста, структуру ядра Linux. JC: Это довольно сложный вопрос, но я все-таки попытаюсь ответить. Ядро Linux является монолитным, то есть отдельным, большим образом, который содержит в себе все основные системные функции. В этом смысле такое ядро отличается от ядер таких систем, как Mach (которые основаны на небольших ядрах с прохождением сообщений). Ядро можно разделить на подсистемы: виртуальную память, файловую систему, сетевую поддержку и т.д. Как и большинство ядер, ядро Linux - большая программа, реагирующая на события. Большую часть времени (в идеале) ядро ничего не делает. Оно спокойно посапывает и не мешает пользователю работать со своими приложениями. Как только что-то требует внимания ядра (например, аппаратное прерывание, системный вызов, создающий процесс), ядро реагирует на событие и выполняет требуемые действия. Затем оно снова возвращает контроль приложениям пользователя. |