Я объясню простой пример добавления системного вызова в xv6.
Предположим, вам нужно добавить системный вызов, чтобы получить размер адресного пространства текущей выполняемой пользовательской программы.Вы можете назвать свой системный вызов как getmysize () и вызвать этот системный вызов из пользовательской программы.
Вы можете написать свою пользовательскую программу следующим образом.Пусть имя программы будет myprog.c Я предполагаю, что вы знаете, как добавить программу пользователя в xv6.Поэтому я пропущу упоминание этих шагов здесь, потому что это будет не по теме.
#include "types.h"
#include "stat.h"
#include "user.h"
int main(void){
printf(1,"The size of my address space is %d bytes\n", getmysize());
exit();
}
Эта программа написана с целью демонстрации работы только системного вызова.
Теперь мыдобавим наш системный вызов к xv6.
Сначала добавьте следующую строку в конец файла syscall.h .
#define SYS_getmysize 23
Обратите внимание, что 23 здесь можетизменить в зависимости от номера, указанного перед строкой, которую вы собираетесь добавить в файл.То есть, если номер системного вызова находится в строке 22 перед строкой, которую вы собираетесь добавить, ваша строка должна иметь номер 23. Просто так.
Теперь добавьте следующие строки в syscall.c file.
extern int sys_getmysize(void);
и в массив syscalls, добавьте следующую строку в.
[SYS_getmysize] sys_getmysize,
В файле sysproc.c , вот где идет реализация вашего системного вызова, если это системный вызов, связанный с обработкой процессов или управлением памятью, поместите реализацию нашего системного вызова следующим образом.
int
sys_getmysize(void)
{
return proc->sz;
}
Теперь в usys.S файл, добавьте строку,
SYSCALL(getmysize)
Затем в файл user.h добавьте следующее.Вот как ваша пользовательская программа видит ваш системный вызов.
int getmysize(void);
Хорошо.Теперь вы готовы запустить вашу пользовательскую программу и посмотреть, как выполняется ваш системный вызов.
Когда вы запустите myprog.c, который вызывает ваш системный вызов, размер адресного пространства этой же программы будет возвращен в соответствии счто мы реализовали здесь.