Ядро Linux в комментариях



Lcall7


    В нескольких первых строках выполняется настройка стека ЦП, чтобы он выглядел так, как того ожидает system_call.

    Опять-таки подобно system_call, lcall7 получает указатель на текущую задачу в регистре ЕВХ. Что несколько удивляет, так это то, что способ реализации не такой, как в system_call. Три строки кода, начиная с , эквивалентны следующим двум строкам:

    pushl %esp GET_CURRENT(%ebx)

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

    Получение указателя на поле exec_domain текущей задачи, использование этого поля для поиска указателя на соответствующий обработчик lcall7 и вызов найденного обработчика.

    Области выполнения детально в книге не рассматриваются, однако следует знать что они используются ядром для реализации части стандарта iBCS2. В строке находится определение struct exec_domain. Область выполнения по умолчанию default_exec_domam (строка ) содержит стандартный обработчик lcall7 — no_lcall7 (см. строку ), который ведет себя подобно разновидности Unix под названием SVR4, отправляя вызываемому процессу сигнал нарушения сегментации.

    Переход на метку ret_from_sys_call (строка , принадлежащая функции system_call) для завершения обработки и возврата так, как будто это представляет собой обычный системный вызов.





Содержание  Назад  Вперед