StudyDocs.ru Logo

report.docx


Санкт-Петербургский политехнический университет Петра Великого Институт Информационных Технологий и УправленияКафедра компьютерных систем и программных технологий
















Рефератпо предмету «Проектирование ОС и компонентов»

















Работу выполнил студент гр. 63501/3 Мартынов С. А. Работу принял преподаватель Душутина Е. В.Санкт-Петербург 2016

Содержание


Реверс-инжиниринг ПО (обратный инжиниринг, обратная разработка) это процесс восста- новления структуры, внутреннего устройства программы с целью понимания его принципа её работы.Мотивацией проведения реверс-инжиниринга может являться извлечение спецификации, моделей (выявление архитектуры программы, получение алгоритмов работы, извлечение поведенческих моделей), понимание работы программы, деобфускация или даже восста- новление исходного кода. Необходимость в реверс-инжиниринг может возникнуть когда возникают задачи поддержки legacy кода, при подготовке к реинжинирингу либо когда нужно скопировать какую-то функциональность ПО без нарушения авторских прав. По- следний пункт требует отдельного изучения, т.к. иногда производитель ПО сопровождает свой продукт лицензией не допускающей его реверс-инжиниринга (к примеру Skype).Предметом анализа реверс-инжиниринга обычно является:
Исходный код ПОБинарный код ПОБайт-кодПрограммная документацияРезультатом проведения реверс-инжиниринга может быть:
Диаграммы классовДиаграммы компонентовДиаграммы модулейДиаграммы состоянийДиаграммы последовательностейСхемы алгоритмовМодели данныхПротокол исследованияЛюбые другие текстовые и графические данные, соответствующие поставленной задачеВ зависимости от цели и от того, что есть в наличии у исследователя можно выбрать соответствующий инструмент. К примеру, если есть исходный код какого-то протокола

обмена, то средствами статического анализа (метод обратной трассировки) можно полу- чить диаграмму состояний. Если есть бинарный (исполняемый) код, то можно провести динамический анализ запротоколировать и визуализировать трассы исполнения.В данной работе мы проведём реверс-инжиниринг свободной (лицензия BSD) Unix-подобной микроядерной операционной системы Minix. Изначально (1987 год) ядро Minix состояло из 1 600 строк на С и 800 ассемблерных строк. Ко второй версии (1997 год) ее размер вырос до 62 200 строк. На данный момент последней стабильной версией является 3.3.0 (16 сентября 2014) и её объём составляет 1 415 811 строк в .c и .h файлах.Нашей целью является реверс-инжиниринг текущей версии Minix для быстрой ориентации по исходному коду. Нами будет рассмотрено микроядро (директория /kernel), серверы (директория /servers), некоторые включаемые файлы (директория /include/), системный загрузчик (директория /boot). Из рассмотрения были исключены системные и пользова- тельские библиотеки (директория /lib), тесты (директория /test) и системные утилиты (директория /commands) т.к. они не являются частями собственно операционной системы. Драйверы содержат много специфичной информации, а вспомогательные файлы (дирек- тории /etc/ и /tools/) не требуют особых пояснений. Так же была исключён раздел с документацией (директории /man/ и /docs/) т.к. они не содержат файлов с исходным кодом.В своей работе мы будем использовать стандартные инструменты разработчика утилиты grep, find, cat и редактор vim с набором плагинов для подсветки кода.

Микроядро
Директория /kernel
Директория /kernel содержит следующие файлы:
clock.c (12K) Содержит функции для инициализации таймера и обработчиков таймера. Содержит как обработчик аппаратного прерывания, так и бесконечный цикл для обработ- ки событий. Важные события, обрабатываемые посредством CLOCK, включают также решения по планированию и перепланированию процессов. CLOCK предлагает непосред- ственный интерфейс с процессами микроядра. Системные службы могут обращаться данному файлу) посредством системных вызовов, таких как sys_setalarm().При видоизменении данного файла нельзя использовать send() если получатель не готов принять сообщение. Вместо этого желательно использовать notify().CLOCK – это один из процессов микроядра, не вынесенный в отдельный сервер по сообра- жениям производительности.clock.h (4,0K) – Определяет функции для инициализации таймера и обработчиков тайме- ра.config.h (4,0K) Определяет конфигурацию микроядра. Позволяет установить размеры буферов ядра, включить или исключить отладочный код, функции контроля времени и отдельные вызовы микроядра. (поэтому здесь содержаться краткие их описания, тем не менее настоятельно рекомендуется сохранять все вызовы микроядра включёнными).Этот файл по логике должен быть одним из основных координирующих файлов, однако похоже, что эта функция уже давно стала атавизмом...const.h (4,0K) – Содержит макросы и константы, используемые в коде микроядра. В частности, содержит макросы для запрещения и разрешения аппаратных прерываний.Общие определения и макросы помещаются в этом файле.
debug.c (12K) Этот файл содержит отладочные функции, не включённые в стандартное микроядро. Доступные функции включают отсчёт времени для блокировок и проверочные функции для очередей управления.debug.h (4,0K) – Определяет все отладочные константы и макросы,а также некоторые (глобальные) переменные. Некоторые отладочные функции требуют переопределения стандартных констант и макросов, поэтому данный заголовочный файл должен находится ПОСЛЕ остальных заголовочных файлов микроядра.

glo.h (4,0K) – Определяет используемые в микроядре глобальные переменные (сами переменные размещаются в table.o). На данный момент определяет:переменные режима ядра (исключение, выход из системы);переменные-структуры информации о ядре;диагностические сообщения;генератора случайных чисел, средней загрузке;указатель на текущий выполняющийся процесс;указатель на следующий процесс, после restart();указатель на процесс для подсчёта тиков;указатель на первые процессы в очередях restart, request, pagefault;переменную учёта тиков, не учтённых в задании CLOCK.interrupt.c (8,0K) – Система аппаратных прерываний Minix3. Содержит процедуры для управления контроллером прерываний:регистрации/удаления обработчика прерываний (PUBLIC void irq_handle(int irq) вызывается системно зависимой частью при возникновении внешнего прерывания);разрешения/запрещения линии прерываний.Определяет переменную:
interrupt.h (4,0K) – Прототипы для системы аппаратных прерываний.
ipc.h (4,0K) – Этот файл определяет константы для межпроцессного взаимодействия. Определения используются в /kernel/proc.c. Пока это константы NON_BLOCKING, SEND, RECEIVE, SENDREC, NOTIFY, SENDNB, SENDA а также макрос WILLRECEIVE(target,source_ep).
kernel.h (4,0K) – Основной заголовочный файл микроядра Minix3. Однако сам по себе он состоит только из заголовков. В частности, он включает почти все заголовочные файлы из /kernel/ .main.c (16K) Описывает начальный старт микроядра (оно находится ещё в загрузочном образе и уже имеет набор готовых к исполнению системных процессов – серверов).priv.h (4,0K) – Определяет структуру системы привилегий struct priv. Каждый системный

процесс имеет собственную структуру привилегий, для всех пользовательских процессов используется одна структура привилегий:
proc.c (60K) – Вместе с mpx.s этот файл содержит наиболее низкоуровневую часть микроядра.Содержит точку входа для внешних вызовов: sys_call системный вызов, когда мы попада- ем в микроядро посредством INT. Имеется также несколько точек входа для прерываний и уровня заданий: lock_send – послать сообщение процессу.Этот файл очень большой и требует дополнительного рассмотрения низкоуровневых функций.Следует только заметить, что PROC является одним из процессов микроядра не вынесен- ным в отдельный сервер по соображениям производительности.proc.h (12K) – Определяет таблицу процессов. Таблица процессов включает
состояние регистров и флагов,приоритет планировщика,таблица памяти,различные учётные данные,информацию, используемую для передачи сообщений (IPC).Многие ассемблерные процедуры обращаются к полям этой структуры. Смещения опреде- лены в ассемблерном включаемом файле kernel/arch/i386/sconst.h. Эти два файла должны соответствовать друг другу!Кроме того определены флаги исполнения (runtime) и макросы, для их проверки, установки, очистки.
profile.c (8,0K) Этот файл содержит несколько функций и переменных, используемых для системного профилирования: статистическое профилирование (обработчик преры- ваний для часов профилирования) и профилирование вызовов (таблица, используемая для данных профилирования, а также функция для определения её размеров; функция

используется процессами микроядра для регистрации их управляющих структур и таблицы профилирования).profile.h (4,0K) Определяет переменные для профилирования. Зависит от /include/minix/profile.h Содержит общую опцию
proto.h (8,0K) Файл содержит все прототипы функций (публичного интерфейса), опре- делённых в файлах clock.c, main.c, utility.c, proc.c, start.c, system.c, system/do_newmap.c, system/do_vtimer.c, interrupt.c, debug.c, system/do_safecopy.c, system/do_sysctl.c, profile.c директории /kernel, включая части, зависящие от конкретной платформы.smp.c (8,0K) – архитектурно-зависимая реализация режима мультипроцессорности.
smp.h (4,0K) – заголовок для симметричной мультипроцессорности.

system.c (24,0K) Обеспечивает интерфейс между микроядром и серверами системных вызовов. Для отображения системных вызовов на функции, их обеспечивающие приме- няется внутренний вектор вызовов. Сами эти функции находятся в отдельных файлах (/kernel/system/). Вектор вызовов используется в основном цикле системного задания для обработки входящих запросов.Кроме основной точки входа (sys_task()), в котором и запускается основной цикл, имеется ещё несколько точек входа:get_priv – заполняет структуру привилегий для пользовательского или системного процесса,set_sendto_bit – позволяет процессу послать сообщение в новом направлении (рас- ширяет привилегии),unset_sendto_bit запрещает процессу послать сообщение в новом направлении (сужает привилегии),send_sig – посылает сигнал прямо системному процессу,cause_sig – выполняет действие вызванное сигналом вызывая событие через сервер управления процессами,sig_delay_done – сообщает серверу управления процессами что процесс не посылает,umap_bios отображает виртуальный адрес в BIOS_SEG на физический,get_randomness – накапливает случайности в буфер,

clear_endpoint – лишает процесс возможности посылать и принимать сообщения.SYS является одним из заданий микроядра.
system.h (8,0K) – Прототипы функций системной библиотеки. Сами функции нахо- дятся в /kernel/system/. Если вызов микроядра не включён посредством конфигурации/kernel/config.h, то функция становится синонимом do_unused().
Системная библиотека делает доступным системный сервис посредством вызовов микрояд- ра. Системные вызовы трансформируются в сообщения-запросы к заданию SYS, способному выполнить соответствующий вызов.По соглашению sys_call() преобразуется в сообщение с типом SYS_CALL, которое обраба- тывается функцией do_call().table.c (4,0K) Содержит большинство данных микроядра. Непосредственно в данном файле определеныконстанты препроцессора:для размеров стеков заданий микроядра,
флаги для различных типов процессов (микроядра),
списки FS_C и DRV_C (разрешённых высовов микроядра),
макросы препроцессора:для определения масок системных вызовов для различных типов процессов,
глобальные переменные:fs_c[], pm_c[], rs_c[], ds_c[], vm_c[], drv_c[], usr_c[], tty_c[], mem_c[],
PUBLIC struct boot_image image[]
EXTERN внутри данного файла принимает значение пустой строки, поэтому глобальные переменные определённые в заголовочных файлах реально привязываются к данному файлу (место им выделяется в table.o).type.h (4,0K) Определяет типы, связанные с таблицей процессов и другими свойствами (переменными) системы (микроядра): task_t, proc_nr_t, sys_id_t, sys_map_t, struct boot_image, irq_policy_t, irq_id_t, struct irq_hook, irq_hook_t, irq_handler_t.
utility.c (4,0K) – Этот файл содержит коллекцию различных процедур:
minix_panic – прерывает MINIX в связи с фатальной ошибкой,

kputc – буферизированный putc, используемый функцией kprintf,kprintf посредством включения файла lib/sysutil/kprintf.c и замены printf на kprintf посредством препроцессора.vm.h (4,0K) Содержит константы препроцессора: VMSUSPEND, EFAULT_SRC, EFAULT_DST и макросы: FIXLINMSG(prp), PHYS_COPY_CATCH(src, dst, size, a).Файл связан с механизмами виртуальной памяти.
watchdog.c (4,0K) – реализация архитектурно-зависимого механизма watchdog, исполь- зуемого для выявления ошибок в ядреwatchdog.h (4,0K) – прототип механизма watchdog

Директория /kernel/system
do_abort.c (4,0K) – Реализуется вызов микроядра SYS_ABORT (прерывание работы OS Minix3)Параметры:
ABRT_HOW как выполнить прерывание работы OS Minix3)ABRT_MON_ENDPT – номер процесса параметры монитора которого берутсяABRT_MON_LEN длина параметров монитораABRT_MON_ADDR виртуальный адрес параметровdo_copy.c (4,0K) – Реализуется вызовы микроядра SYS_VIRCOPY (копирование обла- стей виртуальной памяти), SYS_PHYSCOPY (копирование областей физической памяти).Параметры:
CP_SRC_SPACE виртуальный сегмент копируемых данныхCP_SRC_ADDR – смещение копируемых данных относительно сегментаCP_SRC_PROC_NR – номер процесса из виртуальной памяти которого происходит копированиеCP_DST_SPACE виртуальный сегмент, куда копируются данныеCP_DST_ADDR – смещение относительно виртуального сегмента, куда копируются данные

CP_DST_PROC_NR номер процесса, в виртуальное адресное пространство кото- рого копируются данныеCP_NR_BYTES размер копируемых данных в байтахdo_cprofile.c (8,0K) – Реализуется вызов микроядра SYS_CPROFILE (профилирование вызовов).Параметры:
PROF_ACTION – получить/сбросить данные профилированияPROF_MEM_SIZE доступная память для данныхPROF_ENDPT узловая точка вызывающегоPROF_CTL_PTR – расположение информационной структурыPROF_MEM_PTR местоположение памяти для данныхdo_devio.c (4,0K) – Реализуется вызов микроядра SYS_DEVIO (Осуществляет низко- уровневый ввод/вывод в порты ввода/вывода)Параметры:
DIO_REQUEST запрос на ввод или выводDIO_PORT – порт для ввода/выводаDIO_VALUE – возвращает прочтённое значениеdo_mapdma.c (4,0K) – Реализуется вызов микроядра SYS_MAPDMA (Выделяет об- ласть для выполнения операции устройства с непосредственным доступом к памяти.)Параметры:
CP_SRC_ADDR – Виртуальный адрес.CP_NR_BYTES – Размер структуры данных.do_endksig.c (4,0K) – Реализуется вызов микроядра SYS_ENDKSIG (Вызывается сер- вером управления процессами (PM) после обработки сигнала процессу SYS_GETKSIG. Обычно это сигнал прерывания процесса.)Параметры:
SIG_ENDPT Процесс, для которого выполнено задание сервера управления про- цессами (PM)

do_exec.c (4,0K) – Реализуется вызов микроядра SYS_EXEC (Замена контекста процес- са.)Параметры:
PR_ENDPT Процесс, вызвавший execPR_STACK_PTR – Новый указатель на стекPR_NAME_PTR – Указатель на имя программыPR_IP_PTR Новый указатель инструкцийdo_exit.c (4,0K) Реализуется вызов микроядра SYS_EXIT (Завершает процесс.) Параметры:PR_ENDPT – Номер слота завершающегося процесса.do_fork.c (8,0K) – Реализуется вызов микроядра SYS_FORK (Создание нового процессакопии родительского.) Параметры:PR_ENDPT Родитель, процесс, который разветвляетсяPR_SLOT – Слот порождаемого процесса-ребёнка в таблице процессов.PR_MEM_PTR Новая карта памяти для процесса-ребёнка.PR_FORK_FLAGS – Флаги-параметры вызова fork.do_getinfo.c (8,0K) Реализуется вызов микроядра SYS_GETINFO (Запрос на систем- ную информацию, которая копируется в адресное пространство запрашивающего процесса. Этот вызов просто копирует соответствующие структуры данных запрашивающему про- цессу.)Параметры:
I_REQUEST Какую информацию?I_VAL_PTR Куда её поместить?I_VAL_LEN Максимальная возможная длинаI_VAL_PTR2 – Второй параметр (может не быть)I_VAL_LEN2_E Вторая длина или номер процесса.

do_getksig.c (4,0K) Реализуется вызов микроядра: SYS_GETKSIG (Сервер управления процессами (PM) готов обрабатывать сигналы и периодически делает вызов микроядра для получения очередного сигнала.)Параметры:
SIG_ENDPT – Процесс, посылающий сигналSIG_MAP Набор битов сигналаdo_irqctl.c (8,0K) – Реализуется вызов микроядра SYS_IRQCTL (Позволяет , в частно- сти, вставить новый обработчик прерываний. Возвращает индекс ловушки прерывания, назначенный в микроядре.)Параметры:
IRQ_REQUEST – Контрольная операция, которую надо выполнить.IRQ_VECTOR Линия прерываний, которая должна быть проверена.IRQ_POLICY – Позволяет вновь разрешить прерывания.IRQ_HOOK_ID – Предоставляет индекс, который будет возвращён при прерывании.do_kill.c (4,0K) – Реализуется вызов микроядра SYS_KILL (Обеспечивает sys_kill(). Вызывает посылку сигнала процессу. Сервер управления процессами (PM) централь- ный сервер, где обрабатываются все сигналы и обеспечиваются регистрация порядка их обработки. Любой запрос, за исключением запросов сервера управления процессами (PM), добавляется в "карту"необработанных сигналов, а сервер управления процессами (PM) информируется о поступлении нового сигнала. Так как системные серверы не могут ис- пользовать нормальные POSIX сигналы (ввиду того, что они обычно блокируют процесс на их получении), они могут запросить сервер управления процессами (PM) преобразовать сигналы в сообщения. Это выполняется сервером управления процессами (PM) посредством вызова sys_kill().)Параметры:
SIG_ENDPT – процесс, которому посылается сигнал/ необработанныйSIG_NUMBER – Номер сигнала, который посылается процессу.
do_memset.c (4,0K) – Реализуется вызов микроядра SYS_MEMSET (Записывает обра- зец в определённый участок памяти.)Параметры:

MEM_PTR виртуальный адресMEM_COUNT – возвращает физический адресMEM_PATTERN – байт-образец, которым заполняется областьdo_privctl.c (12K) – Реализуется вызов микроядра SYS_PRIVCTL (Обновляет приви- легии процесса. Если процесс пока не является системным процессом, выделяет ему его собственную структуру привилегий.)Параметры:
CTL_ENDPT Точка окончания целевого процесса.CTL_REQUEST Запрос контроля привилегий.CTL_ARG_PTR Указатель на запрашиваемые данные.do_profbuf.c (4,0K) – Реализуется вызов микроядра SYS_PROFBUF (При помощи данного вызова микроядра профилируемые процессы и информируют микроядро о ме- стоположении их таблицы профилирования и контрольной структуры. Вызов микроядра используется системой профилирования когда установлена опция профилирования вызо- вов.)Параметры:
PROF_CTL_PTR Местоположение контрольной структуры.PROF_MEM_PTR – Местоположение таблицы профилирования.do_runctl.c (4,0K) Реализуется вызов микроядра SYS_RUNCTL Контролирует флаги PROC_STOP процесса. Используется для управления процессами. В некоторых случаях устанавливает MF_SIG_DELAY вместо PROC_STOP. Используется сервером управления процессами (PM) для надёжности управления сигналами.)Параметры
RC_ENDPT – Номер контролируемого процесса.RC_ACTION – Останавливает или восстанавливает исполнение процесса.RC_FLAGS – Флаги запроса.do_safecopy.c (12K) – Реализуется вызовы микроядра SYS_SAFECOPYFROM, SYS_SAFECOPY SYS_VSAFECOPY (Безопасное копирование. Копирование областей памяти с контролем разрешений.)Параметры:

SCP_FROM_TO – другая точка окончанияSCP_INFO – находящийся в собственности вызывающего процесса сегмент из/в который происходит копирование.SCP_GID – Идентификатор разрешенияSCP_OFFSET – Смещение внутри разрешённой области.SCP_ADDRESS Адрес в собственном адресном пространстве.SCP_BYTES Размер копируемой области в байтах.do_nice.c (4,0K) – Реализуется вызов микроядра SYS_NICE (Изменяет приоритет про- цесса или прекращает выполнение процесса.)Параметры:
PR_ENDPT – Номер процесса, приоритет которого изменяется.PR_PRIORITY – Новый приоритет.do_segctl.c (4,0K) – Реализуется вызов микроядра SYS_SEGCTL (Возвращает пере- ключатель сегмента и смещение, которые могут быть использованы для достижения физических адресов, для использования в драйверах выполняющих отображённый на память ввод/вывод в области A0000 – DFFFF.)Параметры:
SEG_PHYS Базовый физический адрес.SEG_SIZE Размер сегмента.SEG_SELECT – Возвращает переключатель сегмента.SEG_OFFSET Возвращает смещение внутри сегмента.SEG_INDEX – Возвращает индекс опосредованной памяти. do_sysctl.c (4,0K) – Реализуется вызов микроядра SYS_SYSCTL. Параметры:SYSCTL_CODE – Запрос.SYSCTL_ARG1 Специфические для запроса аргументы.SYSCTL_ARG2 Специфические для запроса аргументы.do_setalarm.c (4,0K) – Реализуется вызов микроядра SYS_SETALARM (Выполняет запрос на синхронный сигнал, или на отмену синхронного сигнала.)

Параметры:
ALRM_EXP_TIME – Время до подачи сигнала.ALRM_ABS_TIME Абсолютное время до подачи сигнала.ALRM_TIME_LEFT Возвращает секунды, прошедшие от предыдущего сигнала.do_setgrant.c (4,0K) – Реализуется вызов микроядра SYS_SETGRANT (Устанавливает разрешения.)Параметры:
SG_ADDR – Адрес таблицы разрешений в собственном адресном пространстве.SG_SIZE – Число записей таблицыdo_sigreturn.c (4,0K) – Реализуется вызов микроядра SYS_SIGRETURN (Запрос в стиле сигналов POSIX. Требует, чтобы sys_sigreturn упорядочил всё прежде, чем сигнали- зирующий процесс мог снова выполняться.)Параметры:
SIG_ENDPT – Процесс, возвращающийся из обработкиSIG_CTXT_PTR – Указатель на структуру контекстов сигналовdo_sigsend.c (8,0K) – Реализуется вызов микроядра SYS_SIGSEND (Обеспечение сиг- налов в стиле POSIX.)Параметры:
SIG_ENDPT – Процесс для вызова обеспечения сигналаSIG_CTXT_PTR – Указатель на структуру контекста сигналовSIG_FLAGS – Флаги для вызова S_SIGRETURN.do_sprofile.c (4,0K) – Реализуется вызов микроядра SYS_SPROFILE (Обеспечивает статистическое профилирование.)Параметры:
PROF_ACTION – Начинает/прекращает профилирование.PROF_MEM_SIZE Доступная память для данных.PROF_FREQ Частота запрашиваемого образца.PROF_ENDPT Конечная точка запрашивающего.

PROF_CTL_PTR – Местоположение информационной структуры.PROF_MEM_PTR Местоположение памяти для данных.do_stime.c (4,0K) Реализуется вызов микроядра SYS_STIME (Системное время) Параметры:T_BOOTITME Время с момента загрузки системыdo_times.c (4,0K) – Реализуется вызов микроядра SYS_TIMES (Устанавливает инфор- мацию о времени в сообщение. Прерывание часов (таймера) может обновить системное время, что не мешает данному коду.)Параметры:
T_ENDPT Получает информацию для данного процесса.do_trace.c (8,0K) – Реализуется вызов микроядра SYS_TRACE (Обеспечивает отладоч- ную трассировку.)Параметры:
CTL_ENDPT Трассируемый процесс.CTL_REQUEST – Запрос трассирования.CTL_ADDRESS Адрес в пространстве трассируемого процесса.CTL_DATA Данные, которые должны быть записаны, или место для возвращаемых данных.do_umap.c (4,0K) – Реализуется вызов микроядра SYS_UMAP (Создаёт карту отобра- жения виртуальных адресов на физические)Параметры:
CP_SRC_PROC_NR – Номер процесса.CP_SRC_SPACE Сегмент, где находится адрес: T (код), D (данные), или S (стек).CP_SRC_ADDR – Виртуальный адрес.CP_DST_ADDR – Возвращает физический адрес.CP_NR_BYTES – Размер структуры данных.do_newmap.c (8,0K) – Реализуется вызов микроядра SYS_NEWMAP (Создаёт новую карту памяти)Параметры:

PR_ENDPT устанавливает новую карту памяти для этого процессаPR_MEM_PTR – указатель на новую карту памятиdo_vcopy.c (8,0K) – Реализуется вызовы микроядра SYS_VIRVCOPY, SYS_PHYSVCOPY (Копирования физической/виртуальной памяти.)Параметры:
VCP_VEC_SIZE Размер вектора, запрашиваемого на копирование.VCP_VEC_ADDR – Адрес вектора (в адресном пространстве запрашивающего процесса.VCP_NR_OK Число успешно скопированных байт, или элементов вектора.do_vdevio.c (8,0K) – Реализуется вызов микроядра SYS_VDEVIO (Выполняет серию операций с устройствами ввода/вывода от имени процесса (а не задания микроядра). Адреса ввода/вывода и значения ввода/вывода получаются или возвращаются в некоторый буфер в адресном пространстве процесса. Реальный ввод/вывод обрамлен lock() и unlock(), во избежание прерываний. Является вызовом, родственным do_devio, выполняющим одиночную операцию с устройством ввода/вывода.)Параметры:
DIO_REQUEST Запрос на ввод или вывод.DIO_VEC_ADDR Указатель на пару порт/значение.DIO_VEC_SIZE Число портов для ввода/вывода.do_vmctl.c (8,0K) – Реализуется вызов микроядра SYS_VMCTL (Обеспечивает нужды виртуальной памяти)Параметры:
SVMCTL_WHO – Какой процесс?SVMCTL_PARAM Устанавливает имя параметраSVMCTL_VALUE Устанавливает значение параметра do_vtimer.c (4,0K) – Реализуется вызов микроядра SYS_VTIMER Параметры:VT_WHICH – Таймер: VT_VIRTUAL или VT_PROFVT_SET Установить или просто получить?

VT_VALUE Новое/старое время достижения в тиках.VT_ENDPT Процесс, которому принадлежит таймер.

Директория /kernel/arch/i386/include
archconst.h (8,0K) – Содержит константы для защищённого режима процессора i386.
archtypes.h (4,0K) – Определяет типы и структуры для регистров процессора, сегмент- ного дескриптора защищённого режима процессора, страничных исключений

Директория /kernel/arch/i386
arch_do_vmctl.c (4,0K) Реализуется вызов микроядра SYS_VMCTL (Обеспечивает нужды виртуальной памяти. Архитектурно зависимая часть.)Параметры:
SVMCTL_WHO – Какой процесс?SVMCTL_PARAM Устанавливает имя параметраSVMCTL_VALUE Устанавливает значение параметраclock.h (4.0K) – Прототипы функций инициализации, сброса и чтения значения счётчика системного таймера 8253A. Архитектурно зависимая часть.clock.c (4.0K) – Реализует функции:
Инициализирует канал 0 таймера 8253A устанавливая частоту 60 гц, регистрирует обра- ботчик прерываний задания CLOCK для выполнения каждый тик.
Сбрасывает частоту таймера на значение BIOS (Для перезагрузки.)
Считывает счётчик по каналу 0 таймера 8253A. Счётчик отсчитывает в обратном порядке с частотой TIMER_FREQ и возвращается в значение TIMER_COUNT-1 , когда достигает нулевого значения. Аппаратное прерывание (тик) возникает в момент, когда счётчик достигает нулевого значения и возобновляет свой цикл.

do_int86.c (4.0K) – Реализуется вызов микроядра SYS_INT86. Параметры:INT86_REG86do_iopenable.c (4.0K) – Реализуется вызов микроядра SYS_IOPENABLE. Параметры:IO_ENDPT Процесс, которому устанавливаются биты уровня защиты ввода/вывода.do_readbios.c (4.0K) – Реализуется вызов микроядра SYS_READBIOS (Получает дан- ные BIOS.)Параметры:
RDB_SIZE Число байт, которые надо скопироватьRDB_ADDR Абсолютный адрес в зоне BIOS.RDB_BUF Адрес буфера в запрашивающем процессе.do_sdevio.c (4.0K) – Реализуется вызов микроядра SYS_SDEVIO (Доступ к портам ввода/вывода.)