Ядро ОС Linux

Тема в разделе "WASM.HEAP", создана пользователем Nafanya, 3 дек 2011.

  1. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Nafanya
    Смотрите структуру описывающие процесс, поток и там подобное .. И конечно функты сваминга контекстов. Аттачей модулей ядра к процессом(Адрессное пространство).
     
  2. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    shchetinin
    Еще стек ядра забыли.
    Про LDT не сказали явно, но я полагаю, что Вы это к управляющим регистрам отнесли.

    Можно сказать короче:
    switch_mm() - переключает виртуальную память
    switch_to() - восстанавливает стек ядра и регистры процессора.
    Хорошо, что вы не стали все регистры перечислять, а только категории назвали:)
     
  3. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Ребята, а кто-нибудь из WASM'овцев принимал участие в Open Source разработке Linux Kernel?
    Я мельком глянул сейчас в LKML - там очень известные разрабы, некоторым по 40 лет, но есть и начинающие, вся переписка на Инглише.
    Хочу ещё на их комиты посмотреть - есть чему поучиться от людей с таким высоким уровнем.
    Кто-нибудь клонировал себе на тачку репозиторий ядра?
     
  4. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    До утра ядерный репозиторий клонировал - он оказался очень мощным. Теперь можно практически в реальном времени (например раз в 3 часа) пулить коммиты и по ним отслеживать в какой участок кода ядра разработчики внесли изменения за это время и с чем эти изменения связаны. Я восхищен - каждый коммит сопровождается очень подробным комментарием. Всё на высоте.

    Взгляните какая красота:
    [​IMG]
     
  5. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.173
    Адрес:
    подполье
    Колхозы стоят млять, одни погромисты в стране!
     
  6. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Я тоже подсел на линух... Сейчас накопилось наработок по линух, что действительно очень удобно и гибко. Суперовская штука линух, хотя от винды пока полностью не отвязаться.
    Что только стоит одна эта срока:
    sudo apt-get install <любое нужное приложение>
    и через пару минут у вас есть все, что вы просили.
     
  7. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    neutronion
    А Вы свои наработки на Review в сообщество отправьте. Отсылается по мылу diff - файл, отражающий изменения которые вы предлагаете внести в код ядра, также в письме должно присутствовать техническое обоснование необходимости этих изменений. Если код ревизию пройдёт (пусть даже не с первого раза - это нормально) и Ваши изменения включат в репозиторий, то Ваше имя начнёт фигурировать в системе контроля версий и все об Вас узнают. По-моему здорово систему придумали.
     
  8. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    до ядра линуха я еще не дорос. Пока только сетевыми проблемами занимаюсь.
     
  9. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Наработки не мои :dntknw:
     
  10. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    Я работаю с ядром, иногда коммичу но пока всё по-мелочи :)
     
  11. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    7mm
    Если хотя бы один Ваш коммит в репозиторий ядра включили, то это говорит о том, что у Вас очень высокий технический уровень.
    Позвольте узнать на какой подсистеме ядра Вы специализируетесь? Думаю, что в мире нет человека, знающего код всех подсистем ядра.

    Какую систему навигации по коду гигабайтного репозитория Вы используете? Студия умирает сразу от такого объёма(если только по частям код ядра разбивать(метров по 20) - то навигация работает за разумное время).
    Я пока не работал с репозиториями большими, чем 2 MB.

    Главная проблема, которую я пока не могу решить: навигация по репозиториям большого объёма.
    Конкретный пример.
    Представьте, что мы с Вами внутри планировщика и изучаем его код:
    A difinition for the symbol 'per_cpu' could not be located.
    ЧЁРТ, эта засада происходит всегда при навигации по ядру - как так можно изучать код! Видимо разрабы ядра применяют какие-то особые мне неведомые методики навигации по коду больших проектов.
     
  12. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    В разное время приходилось работать с разными подсистемами - arch (x86, powerpc, arm), vfs, mm, net, security. Не могу сказать, что специализируюсь на чём-то одном. Обычно, задача определяет средства. При работе с кодом я в основном использую mc + grep + git log/show/blame и пр., мне этого хватает т.к. я достаточно хорошо уже знаю что где смотреть. Из индексаторов не могу посоветовать что-то конкретное, потому что как обычно в мире линукса есть варианты. Я для работы использую Emacs, поэтому если что, мой выбор - это ETAGS. Можете посмотреть на cscope или ctags. Но ещё раз повторюсь, я не использую локальные индексаторы для изучения кода - кстати, для этого есть хороший ресурс: http://lxr.linux.no/+trees
     
  13. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Это просто отлично. Не могли бы подсказать по планировщику:
    в sched.c лежит макрос:
    метод планировщика из sched.c:
    Чудес не бывает и макрос должен подставиться на стадии препроцессирования. Вопрос - откуда в данной единице трансляции возьмётся runqueues? Где объявление/определение этой переменной?
     
  14. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Нашёл, я в шоке. Вот так ядерщики объявляют экземпляр структуры rq:
    Код (Text):
    1. #define DEFINE_PER_CPU_SECTION(type, name, sec)             \
    2.     __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES            \
    3.     __typeof__(type) name
    4.  
    5. #define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)           \
    6.     DEFINE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \
    7.     ____cacheline_aligned_in_smp
    8.  
    9. static DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);
    И как система навигации должна догадаться, что static DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues) - это на самом деле объявление переменной runqueues типа struct rq - у неё ведь нет искусственного интеллекта и она не знает, что обозначает __typeof__(type)? Ох уж эти extension'ы, как же этот код читать...
     
  15. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    Ну привыкайте, чё :)