четверг, 30 июля 2015 г.

Наши вопросы по сетям

Так как до публикации ответов руки почти не доходят, я решил опубликовать все наши вопросы в надежде, что их сможет найти кто-то из наших кандидатов и подготовиться =)

Вопросы по сетям

  1. Модель OSI с примерами протоколов, устройств и программ, работающих на каждом уровне (если есть)?
  2. Маршрутизация внутри сети. Как работает ARP? Зачем нужен MAC и IP?
  3. Маршрутизация между сетями. Автономные системы, OSPF и RIP, BGP?
  4. Разница между TCP и UDP? Что такое соединение и как оно создается?
  5. Как работает DHCP? Зачем он нужен?
  6. Как работает DNS? Зачем он нужен?
  7. Что такое NAT? Как он работает? NAT traversal?
  8. Зачем придумали IPv6? Какие проблемы и как именно он решает?
  9. Что такое VPN и как он работает? IPSec, PPTP, PPPoE и L2TP?
  10. Что такое SSL(TLS)?

среда, 29 июля 2015 г.

Дэвид Сирлин "Играй на победу"

О чём

Эта книга о том, как научиться играть в игры профессионально. Автор известен как киберспортсмен: несколько раз он становился чемпионом в разных дисциплинах, например, в Street Fighter. Книга «Играй на победу» — это книга о том, как эффективно тренироваться, чтобы выигрывать. Она может быть интересна не только игрокам, но и просто тем, кто любит побеждать по жизни.
Переводчики на Мосигре, предлагают в качестве девиза книги выбрать - «Бить лежачее тело нечестно, зато ЭФФЕКТИВНО и БЕЗОПАСНО».

Что интересного

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

Где почитать

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

Нейл Фьоре "Легкий способ перестать откладывать дела на потом". Продолжение.


Это продолжение предыдущего поста.

Продолжаем тезисы.

Глава 5

  1. Представьте себе несколько мелких дедлайнов, находящихся под вашим контролем, – паралич, вызванный попытками выполнить большой проект (с печальными последствиями в случае провала) как рукой снимет. Имея собственные дедлайны, расписанные далеко вперед, вы начинаете контролировать работу и создаете себе возможность для передышки после каждого этапа. Общий взгляд на проект позволяет вам увидеть другие методы и инструменты и сфокусироваться на том, с чего лучшее всего начать.
  2. Вам нужно делать так, чтобы волнение начало работать на вас и преобразовалось в план, который уничтожит угрозу. Это поможет вам продуктивно использовать стресс, вашу здоровую реакцию человека, борющегося за выживание, таким образом, как вы и собирались, – для самозащиты и подготовки к позитивным действиям. Как только вы используете эту энергию как следует, ваш мозг, уверенный в вашем хорошем физическом и психологическом состоянии, вернется на нормальный энергетический уровень для продуктивной работы.
  3. Вам будет сложно принять тот факт, что другие люди не придерживаются таких же высоких стандартов качества, как вы. На самом деле вы можете даже почувствовать некоторое превосходство в данном вопросе. В конце концов, наступит день, когда от вас потребуют завершенный проект и будут ждать вашего ответственного отношения к установленному дедлайну. В вы в это время будете больше заботиться о качестве, а не о том, чтобы просто завершить работу вовремя. Это абсолютно нормалько, когда вам не хватает хотя бы еще одного часа, чтобы сделать свою работу по-настоящему хорошо, а от вас требуют готовый проект уже сейчас.

Глава 6

  1. Разбейте все свои задачи на небольшие - по тридцать минут. Вы получите маленькие, осуществимые задач, за которыми следует вознаграждение. И вы не будете чувствовать себя заваленным, столкнувшись с большими, сложными и страшными проектами. Антирасписание укрепляет вашу уверенность двумя способами. Во-первых, оно подразумевает незамедлительные и частые вознаграждения, которые следуют за короткими периодами работы; вы чувствуете завершенность, даже если проект пока на самом деле не доведен до конца. Во-вторых, привычка фиксировать каждый период работы приносит визуальное вознаграждение – вы видите, как собранно и непрерывно поработали за день и за неделю. Фокус на тридцатиминутных отрезках работы ставит цель, не вызывающую страха, и даже самый робкий прокрастинатор сможет безбоязненно с ней справиться.
  2. Отслеживайте количество часов качественной работы в день и в неделю. Суммируйте показатели. Фокусируйтесь на том, чего вы добились. Это полезно само по себе, а кроме того, вырабатывает позитивную модель поведения: вы работаете, а потом получаете одобрительное похлопывание по спине. К тому же благодаря такой модели поведения вы обращаете внимание на те дни, когда вам захочется приступить пораньше к своим высокоприоритетным проектам, чтобы увеличить число часов, посвященных работе, в каждый конкретный день.
  3. Основной посыл Антирасписания:
  • не работайте над проектом больше двадцати часов в неделю;
  • не работайте над проектом больше пяти часов в день;
  • вы должны заниматься спортом, играть или хотя бы танцевать один час в день;
  • вы должны выделить хотя бы один день в неделю, когда не будете заниматься вообще никакой работой;
  • поставьте себе целью поработать качественно в течение тридцати минут;
  • работайте ради несовершенного, но при этом совершенно человеческого усилия;
  • начинайте с малого.

Глава 7

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

Глава 8

  1. Вместо того чтобы чувствовать себя отвергнутыми, неспособными повлиять на происходящее вокруг или испытывать страх перемен, выносливые сотрудники обычно «отдаются полностью тому, чем занимаются», «верят, что хотя бы частично могут контролировать происходящее», и «рассматривают изменения как нормальный рабочий момент, ведущий к развитию». У выносливых руководителей есть план на все случаи жизни, они гибки и обладают способностью превращать события, вызывающие стресс, в возможности, смягчающие последствия проблем.
  2. Определяя источник мыслей, которые вас отвлекают, и записывая их, вы будете гораздо меньше отвлекаться. А зная, что в скором времени вы сможете разобраться с ними, почувствуете себя достаточно расслабленными, чтобы сконцентрироваться на выполнении текущей работы.
  3. Чтобы удостовериться в том, что ваш способ целеполагания помогает вам преодолеть прокрастинацию, старайтесь ориентироваться на те цели, которые вы можете охватить, и при этом отказаться от недостижимых целей и нечетко сформулированных желаний.

Глава 9

  1. Чтобы эффективно работать с прокрастинаторами (а таких людей большинство), менеджеры должны помнить о трех главных вещах: о представлении себя жертвой, об ощущении непомерности задания и боязни совершить ошибку. Успешные менеджеры стараются вызывать у подчиненных заинтересованность, а не тупую покорность; они фокусируются на достижимых целях, а не на трудновыполнимых задачах, за которые страшно взяться; и обязательно хвалят за каждый шаг, сделанный в нужном направлении, вместо того чтобы критиковать за ошибки. Сам стиль их управления направляет сотрудников к цели, заставляет сфокусироваться на каждом шаге и предполагает достаточную безопасность и соответствующие вознаграждения.
  2. Люди быстрее учатся в обстановке, где щедро хвалят за шаги, сделанные в нужном направлении, а замечания остаются в рамках конструктивной критики и направлены на ту область, которую можно улучшить. Если это возможно, похвала должна быть зафиксирована письменно, чтобы получатель чувствовал собственную значимость, а его коллеги – мотивацию. Как в нижеследующих примерах, похвала должна предварять даже самую мягкую рекомендацию по улучшению.

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

Нейл Фьоре "Легкий способ перестать откладывать дела на потом".

Новая книга по GTD

Ещё одна книга по GTD, с которой мне удалось недавно познакомиться это книга Нейла Фьоре “Легкий способ перестать откладывать дела на потом”. Что не перестает меня удивлять, так это то, что книга была написана в 1989 году, когда ритм жизни был ниже, чем сейчас. Однако, многие не читают подобной литературы даже сейчас. На мой взгляд одна из причин состоит в том, что люди просто не знают о существовании подобных книга.



Кстати, эта книга была так же мною куплена по рекомендации с Хабра. Где-то в начале этого года, я просмотрел все посты с рекомендациями книг на Хабре и составил для себя некоторый единый список книг из 3-х частей: художественные книги, книги по программированию и книги по саморазвитию. Надо будет на досуге причесать этот список и опубликовать – может кому-то будет полезно. У меня пока только положительные эмоции от тех книг, которые мне удалось прочесть.

Итак, пара слов о книге Нейла Фьоре в вкратце. Хотя эта книга по той же тематике, что и “18 минут”, написана она несколько в другом стиле. Более формально, с меньшим количеством примеров. Такой стиль изложения подталкивает вас читать не спеша и лучше продумывать смысл каждой главы. На мой взгляд она содержит чуть больше анализа причин прокрастинации. Сама книга небольшая и не займет у вас много времени.

Глава 1

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

Глава 2

  1. Всем нам время от времени нужен удар по башке, который бы встряхнул нас, вырвав из привычного течения жизни, вынудил бы изменить наше отношение к проблемам и заставил задавать новые вопросы, которые могли бы привести к другим правильным ответам.
  2. Наблюдение за собой в течение нескольких дней позволит оценить то, как вы проводите свое время. Устроив ревизию всех своих обычных занятий в течение недели, вы получите общее количество часов, потраченных на телефон, чтение писем, еду, общение, работу и т. д. Это, обнажит модель поведения, которую вы, возможно, захотите поменять, а также выявит те занятия, которые вы будете поощрять или, может, захотите перенести на более раннее время в своем расписании.
  3. Очень интересно наблюдать, как часто успешные люди страдают от провалов и банкротства. Успешный человек много раз терпит неудачу, но поднимается снова; неудачник терпит крах единожды, после чего позволяет тому стать мерилом его достоинства и критерием оценки его личности. Вам нужно учиться терпеть неудачу за неудачей, снова и снова «спружинивая» от предохранительной сетки и начиная сначала, подобно наиболее успешным людям. Так вы никогда не позволите ошибкам и неудачам остановить вас, потому что не дадите им лишить вас врожденного достоинства и желания действовать.

Глава 3

  1. Не дисциплина, не сила воли или давление со стороны других людей облегчают выполнение череды сложных действий. Это скорее свобода выбора при наличии альтернативы, персональная преданность делу и готовность взять на себя ответственность за последствия своих решений, укрепляющая волю и поднимающая дух.
  2. Такие формулировки, как «Я выбираю…», «Я решаю…» или «Я хочу…», направляют энергию на единственную цель личности, заведомо берущей на себя ответственность за результат. Как только вы начнете разговаривать с собой, используя язык, фокусирующийся на результатах, а не на обвинениях, на выборе, а не на вынужденности делать что-то, на том, что есть, а не на том, как, по вашему мнению, должно быть, вы увидите, что ваш разум и тело сотрудничают, вырабатывая позитивную энергию, не отягощенную ненужной борьбой негативных сравнений прошлого и настоящего с будущим.
  3. Приняв зрелое решение относительно предстоящей задачи, вместо того чтобы сердиться из-за нее, вы, возможно, окажетесь достаточно самовнушаемы, чтобы даже сделать ее выполнение приятным для себя. И даже если шансы нулевые, вы можете применять свою силу выбора и научиться выбирать тот путь, который вам кажется лучшим. И именно потому, что вы сами приняли это решение, задание станет менее сложным, болезненным и будет выполнено быстрее. Как только вы поймете, что теряете мотивацию, вспомните безоговорочное «Ты должен…» и в тот же момент примите решение пойти своим путем – таким, каков он есть, а не таким, каким ему следовало бы быть, – или же просто отпустите ситуацию. Это ваш выбор.
  4. Сделайте намеренно первую часть своего проекта небрежно (но не показывайте своему начальству); выполните ее быстро и как бог на душу положит. Если вы работаете за компьютером, попробуйте блокнот; если вы пишете чернилами, возьмите карандаш, но постарайтесь выполнить задание с присущим человеку несовершенством. А затем посмотрите, как на сцену выходит ваша потребность в превосходном исполнении, как вы начинаете ценить талант на ранних стадиях и увлекаетесь работой, приступая к стадии полировки проекта.

Глава 4

  1. Отдых и развлечения без чувства вины – залог продуктивности.
  2. Одним из самых разрушительных последствий прокрастинации является то, что она ведет к откладыванию на потом самой жизни. Мы позволяем порочному кругу прокрастинации мешать нам получать вознаграждение за проделанную работу и наслаждаться отдыхом.
  3. Далекие и неопределенные награды, как, например, возможная работа через четыре года обучения, едва ли способны достаточно мотивировать человека на длительное выполнение сложных задач. Обещание будущих вознаграждений за тяжелую работу мало влияет на то, что мы должны делать сейчас. А вот незамедлительное и вполне определенное вознаграждение, например свободное время, встреча с друзьями, способно стать стимулом.

Я решил разбить тезисы по книге Нейла Фьоре на две части. По себе знаю, что читать длинные посты не всегда хватает терпения, они откладываются в избранный список на прочтение и так и висят там месяцами (каюсь, у самого есть такой список из более чем 300 постов). На мой взгляд лучше 2 части, каждая из которых позволяет получить полезную информацию.

Продолжение тут.

Книгу можно купить тут.

Питер Брегман "18 минут..."

О чём?

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

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

Я решил выделить для себя главное из каждой части и записать сюда. Помогает быстро восстановить в голове прочитанное. Глядишь кому-то тоже пригодится.

Тезисы

Часть I

  1. Порой вы видите свою ошибку, но продолжаете двигаться в этом направлении по инерции. В таком случае полезно сделать небольшую паузу и задать себе вопрос - Стал бы я поступать точно так же, если бы имел возможность начать все с начала?
  2. Регулярные остановки на отдых полезны. Вы сможете восстановить тело и дух, сосредоточиться на приоритетах и точнее двигаться к цели.
  3. Полезно ставить под вопрос ваши базовые представления о себе. Даже такие прочные, как «кто я?» или «кто мы?». Вероятнее всего, вы обнаружите, что внутри вас живут самые разные люди, которых вы никогда толком не знали. И эти не вполне осознанные аспекты вашей личности помогут сосредоточиться на главном. Необходимо  осознавать все свои характеристики.
  4. Когда некое событие лишает вас самообладания, сделайте паузу, прежде чем реагировать. И задайте себе единственный вопрос: «Что я хочу получить?» А потом не реагируйте на событие, но думайте о результате. Иными словами, реагируйте не на прошлое, а на будущее.

Часть II

  1. Признайте ваши слабости, вместо того чтобы избегать. И в этом году организуйте работу так, чтобы они стали активом, а не препятствием.
  2. Заявите о ваших индивидуальных особенностях. Не тратьте попусту год и ваше конкурентное преимущество, пытаясь подстроиться под других.
  3. Порой ваши пристрастия трудно определить. Один из способов – заниматься тем, чем действительно хочется. Выбирая главное в этом году, обращайте меньше внимания на «надо» и больше – на «хочу».
  4. Чтобы определить любимое дело, подумайте, чему вы готовы посвятить год и не бросать, даже если покажется, что у вас не получается. 
  5. Хотите повысить собственную продуктивность? Ставьте высокие цели, чтобы шанс их добиться был равен 50–70%. Это лучший диапазон для тех, кто метит высоко. Потом, потерпев неудачу в половине случаев, проанализируйте ошибки и попытайтесь снова. Это и есть практика. Десять тысяч часов практики сделают вас экспертом в любом деле. Неважно, с чего вы начинаете.
  6. Даже если через полгода наступит конец света, по крайней мере эти месяцы можно заполнить увлекательной и осмысленной работой в дружном коллективе. Не позволяйте неопределенности вас остановить. Продолжайте движение.
  7. Время оценивать ваши успехи и провалы не приходит никогда.
  8. Вот четыре действия, которые могут стать для вас основными в следующем году:
    • По максимуму используйте ваши сильные стороны.
    • Примите ваши слабые стороны.
    • Заявите о ваших индивидуальных особенностях.
    • Займитесь тем, что вы любите.

Часть III

  1. Планируйте день заранее, чтобы промчаться весь путь, успешно
    маневрируя и приближаясь к желаемой цели.
  2. Разберите завал, распределив задачи в структурированном списке,
    который организован на основе ваших годовых приоритетов.
  3. Чтобы сделать все необходимое, надо не только составить план дел,
    но и определить, от чего придется отказаться.
  4. Если вы правда хотите что-то сделать, решите, где и когда вы этим
    займетесь.
  5. Никогда не оставляйте пункты в списке дел больше чем на три дня.
    Иначе они помешают заниматься главным. Запланируйте их на конкретный день или перенесите в список "Когда-нибудь".
  6. Найдите несколько минут вечером, чтобы подумать, чему вы научились за день и с кем надо будет связаться. Эти минуты – ключевой фактор, благодаря которому завтра может стать лучше, чем сегодня.

Часть IV

  1. Запланируйте периоды сомнения. Выделите время, чтобы поставить под вопрос свои действия. Это должен быть момент, когда минутные соблазны точно не повлияют на ваше решение. Если вы хотите нарушить диету, делайте это, когда потребность в силе воли минимальна. Перенесите решение на следующий день – когда, после здорового завтрака или упражнений, вы будете готовы придерживаться своего решения.
  2. Страх может быть полезен в качестве катализатора изменений – а удовольствие закрепляет их. Если вам нужен толчок, не выбирайте одно – или страх, или удовольствие. Сначала первое, потом второе.
  3. Всегда говорите «нет» со всей серьезностью, и вам не придется тратить время без нужды.
  4. Мы никогда не делаем несколько дел одновременно. Вместо этого мы постоянно переключаемся. Это неэффективно, а иногда даже опасно. Сопротивляйтесь такому соблазну.
  5. Представьте, что к вам обращаются с просьбой. Задайте
    себе три вопроса:
    • Подхожу ли я для этого дела?
    • Подходящее ли сейчас время, чтобы его выполнить?
    • Достаточно ли у меня информации?

Мини-отзыв

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

Для тех, кому лень искать - купить книгу можно тут.

четверг, 2 июля 2015 г.

Системные вещи. Ответы Часть 3.

Что такое виртуальная память?

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

Применение механизма виртуальной памяти позволяет:
  • упростить адресацию памяти клиентским программным обеспечением;
  • рационально управлять оперативной памятью компьютера (хранить в ней только активно используемые области памяти);
  • изолировать процессы друг от друга (процесс полагает, что монопольно владеет всей памятью).

Как работает paging?

Страничная память (paging) — способ организации виртуальной памяти, при котором единицей отображения виртуальных адресов на физические является страница. Типичный размер 4096 байт, для некоторых архитектур до 128 КБ.
Поддержка такого режима присутствует в большинстве 32битных и 64битных процессоров.

Решаемые задачи
  • поддержка изоляции процессов и защиты памяти путём создания своего собственного виртуального адресного пространства для каждого процесса
  • поддержка изоляции области ядра от кода пользовательского режима
  • поддержка памяти «только для чтения» и неисполняемой памяти
  • поддержка отгрузки давно не используемых страниц в область подкачки на диске
  • поддержка отображённых в память файлов, в том числе загрузочных модулей
  • поддержка разделяемой между процессами памяти, в том числе с копированием-по-записи для экономии физических страниц
  • поддержка системного вызова fork() в ОС семейства UNIX

Запись таблицы страниц обычно содержит в себе следующую информацию:
  • флаг «страница отображена»
  • физический адрес
  • флаг «страница доступна из режима пользователя». При неустановке данного флага страница доступна только из режима ядра.
  • флаг «страница доступна только на чтение».
  • флаг «страница недоступна на исполнение».
  • режим использования кэша для страницы. Особенно часто используется для видеопамяти и для отображенных в память регистров устройств (полное отсутствие кэширования).
Так как число записей в одной таблице ограничено и зависит от размера записи и размера страницы, используется многоуровневая организация таблиц, часто 2 или 3 уровня, иногда 4 уровня (для 64-х разрядных архитектур). В случае 2 уровней используется «директория» страниц, имеющая в себе записи, указывающие на физические адреса таблиц страниц. Таблицы содержат в себе записи, указывающие уже на страницы данных. В случае 3 уровней возникает ещё и супер-директория, содержащая в себе записи, указывающие на несколько директорий.
Старшие биты виртуального адреса указывают на номер записи в директории, средние — номер записи в таблице, младшие (адрес внутри страницы) попадают в физический адрес без трансляции.
Формат записей таблиц, их размер, размер страницы и организация таблиц зависит от типа процессора, а иногда и от режима его работы.
Исторически, x86 использует 32битные PTE, 32битные виртуальные адреса, 4KB страницы, 1024 записи в таблице, двухуровневые таблицы, старшие 10 бит виртуального адреса — номер записи в директории, следующие 10 — номер записи в таблице, младшие 12 — адрес внутри страницы.
Физический адрес директории или же супер-директории загружен в один из управляющих регистров процессора.

Если обращение к памяти не может быть оттранслировано через TLB, то микрокод процессора обращается к таблицам страниц и пытается загрузить PTE оттуда в TLB. Если и после такой попытки сохранились проблемы, то процессор исполняет специальное прерывание, называемое «отказ страницы» (page fault). Обработчик этого прерывания находится в подсистеме виртуальной памяти ядра ОС.

Причины отказа страницы (page fault):
  • не существует таблицы, отображающей данный регион
  • PTE не имеет взведённого флага «страница отображена».
  • попытка обратиться из пользовательского режима к странице «только для ядра».
  • попытка записи в страницу «только для чтения».
  • попытка исполнения кода из страницы «исполнение запрещено».
Обработчик отказов в ядре может загрузить нужную страницу из файла или же из области подкачки, может создать доступную на запись копию страницы «только для чтения», а может и возбудить исключительную ситуацию в данном процессе.
Каждый процесс имеет свой собственный набор таблиц страниц. Регистр «директория страниц» перегружается при каждом переключении контекста процесса. Также необходимо сбросить ту часть TLB, которая относится к данному процессу.
В большинстве случаев ядро ОС помещается в то же адресное пространство, что и процессы, для него резервируются верхние 1-2 гигабайта 32битного адресного пространства каждого процесса. Это делается с целью избежать переключения таблиц страниц при входе в ядро и выходе из него. Страницы ядра помечаются как недоступные для кода режима пользователя.

Так как память ядра одинакова у всех процессов, соответствующие ей TLB не нужно перегружать после переключения процесса. Для этой оптимизации x86 поддерживает флаг «глобальный» у PTE.

PAE, x64, IOMMU?

В архитектуре x86_64 возможно использовать страницы размером 4 килобайта (4096 байт), 2 мегабайта, и (в некоторых AMD64) 1 гигабайт. Организация страниц для этой архитектуры имеет 4 уровня.

Physical Address Extension (PAE) — режим работы встроенного блока управления памятью x86-совместимых процессоров, в котором используются 64-битные элементы таблиц страниц (из которых для адресации используются только 36 бит), c помощью которых процессор может адресовать 64 ГБ физической памяти (вместо 4 ГБ, адресуемых при использовании 32-разрядных таблиц), хотя каждая задача (программа) всё равно может адресовать максимум до 4 ГБ виртуальной памяти. Также, в новых моделях процессоров в PAE-режиме старший бит элемента таблицы страниц отвечает за запрет исполнения кода в странице, что затрудняет атаку по методу переполнения буфера.

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

При наличии IOMMU у аппаратуры имеется возможность проводить DMA-операции не только по физическим адресам, но и по логическим (виртуальным). Такая возможность упрощает устройства, которым больше не нужно заботиться о поддержке DMA по разрывному (с точки зрения физических адресов) региону памяти.
Недостатками использования IOMMU по сравнению с прямой физической адресацией памяти в DMA запросах являются:
  • Некоторое ухудшение производительности из-за необходимости транслирования адресов и расходов на управление, например, проход по иерархии таблицы страниц.
  • Дополнительное потребление памяти для хранения таблиц отображения. Может быть уменьшен при использовании основных таблиц трансляции адресов процессора.
IOMMU используется для прямой работы виртуализованных операционных систем с оборудованием основной системы. Наличие IOMMU для таких комбинаций позволяет повысить безопасность, производительность и упростить реализацию виртуальной машины.

Что такое прерывание? Какие они бывают?

Прерывание — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается, и управление передаётся обработчику прерывания.
В зависимости от источника возникновения сигнала, прерывания делятся на:
  • аппаратные — события, которые исходят от внешних источников  и могут произойти в любой произвольный момент. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание (IRQ);
  • внутренние — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение стека, обращение к недопустимым адресам памяти или недопустимый код операции;
  • программные (частный случай внутреннего прерывания) — инициируются исполнением специальной инструкции в коде программы. Программные прерывания, как правило, используются для обращения к функциям встроенного программного обеспечения (firmware), драйверов и операционной системы.

Аппаратные прерывания в зависимости от возможности запрета делятся на:
  • маскируемые — прерывания, которые можно запрещать установкой соответствующих битов в регистре маскирования прерываний;
  • немаскируемые (Non-maskable interrupt, NMI) — обрабатываются всегда, независимо от запретов на другие прерывания. К примеру, такое прерывание может быть вызвано сбоем в микросхеме памяти.

Как происходит их обработка? Что со стеками?

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

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


На этом на сегодня всё, читайте продолжение в следующем посте.

среда, 1 июля 2015 г.

Системные вещи. Ответы Часть 2.

Введение

Продолжаю публиковать ответы на вопросы на наших собеседованиях. Вопрос про режимы ядра и многие последующие вопросы привязаны к той ОС, в которой вы работаете. В нашей компании активно разрабатываются проекты в Windows и Linux. Однако, так как большинство кандидатов лучше знают Windows, то и ответы будут публиковаться для Windows, если это не оговорено дополнительно. Кстати, по всем системным вещам Windows стоит обращаться к замечательной книге М. Руссинович, Д. Соломон - Внутреннее устройство Microsoft Windows. В ней даны подробные ответы на все системные вопросы нашего собеседования. Если же вам больше интересно как все работает внутри Linux, то я рекомендую обратиться к книге Таненбаум Э. - Современные операционные системы.

Что такое режим ядра и режим пользователя?

Для предотвращения доступа приложений к критически важным данным операционной системы и устранения риска их модификации Windows использует два режима доступа к процессору: пользовательский (user mode) и ядра (kernel mode). Код приложений работает в пользовательском режиме, тогда как код операционной системы (например, системные сервисы и драйверы устройств) — в режиме ядра. B режиме ядра предоставляется доступ ко всей системной памяти и разрешается выполнять любые машинные команды процессора. Предоставляя операционной системе более высокий уровень привилегий, чем прикладным программам, процессор позволяет разработчикам операционных систем реализовать такие архитектуры, которые не дают возможности сбойным приложениям нарушать стабильность работы всей системы.

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

CPL, RPL, DPL?

Существует четыре уровня привилегий (PL) сегментов (0-3). Привилегированность увеличивается с уменьшением номера. На нулевом уровне позволяется использование привилегированных инструкций.
Уровень привилегий сегмента (Descriptor Privilege Level) соответствует значению поля DPL в дескрипторе сегмента.
Текущий уровень привилегий (Current Privilege Level) соответствует уровню привилегий сегмента кода, селектор которого загружен в регистр CS (то есть уровню привилегий выполняющегося сегмента кода).
Запрашиваемый уровень привилегий (Requested Privilege Level) находится в двух младших битах селектора (задаётся программой).

Как происходит взаимодействие между режимом пользователя и ядра? SYSENTER, int2e?

  1. Вызов функции, например, CreateFile разворачивается в вызов функции из  NtDll.dll — «прослойке» между режимом пользователя и режимом ядра. В ней находится нужная нам функция ядра. Эта функция помещает в регистр EAX свой уникальный номер. Этот номер специфичен для каждой версии ОС и может измениться при установке Service Pack или другого обновления системы, которое затрагивает ядро.
  2. Далее, в EDX помещается адрес вершины стека параметров, в большинстве случаев это значение регистра ESP. Дело в том, что в режиме ядра и режиме пользователя используется разный стек, и при переходе в ядро стек будет переключен.
  3. На старых процессорах и ОС переключение выполняется с помощью прерывания 0x2e, на современных же для этого существует специальная инструкция процессора: SysEnter для Intel, SysCall для AMD. Int2e поддерживается в режиме совместимости современными процессорами.
  4. Процессор переключает EIP(RIP), на специальное значение, которое хранится в регистре MSR_SYSENTER_EIP. Этот регистр заполняется системой при загрузке.
  5. В результате происходит переход в специальную функцию - KiFastCallEntry().
  6. После завершения выполнении функции, происходит возврат из режима ядра с помощью iret или Sy
  7. Ядро, используя значение в регистре EAX, находит запись в таблице  KiServiceDescriptorTable и осуществляет вызов нужной функции ядра.
  8. sysExit/SysRet

На этом на сегодня всё, продолжение читайте в следующем посте.