Простым языком, git pull
делает git fetch
сопровождаемый git merge
.
можно сделать git fetch
в любое время для обновления удаленно отслеживающих ответвлений под refs/remotes/
.
Эта операция никогда не изменяет ни одного из Ваших собственных локальных ответвлений под refs/heads
и безопасна обойтись без изменения Вашей рабочей копии. Я даже услышал о людях, работающих git fetch
периодически в задании крона в фоновом режиме (хотя я не рекомендовал бы делать это).
А git pull
- то, что Вы сделали бы для обеспечения локального ответвления, актуального с его удаленной версией, также обновление другого удаленного отслеживания переходит.
документация Мерзавца †“ получение по запросу мерзавца :
В ее режиме по умолчанию,
git pull
стенография дляgit fetch
сопровождаемый [1 110].
Предполагая, что мы говорим о x86:
INT 0x80
. Возможно, я немного устарел, прошло несколько лет ...
Приведенные ответы верны, но я хотел бы добавить, что существует больше механизмов для входа в режим ядра. Каждое последнее ядро отображает страницу «vsyscall» в адресное пространство каждого процесса. Он содержит немного больше, чем самый эффективный метод перехвата системных вызовов.
Например, в обычной 32-битной системе он может содержать:
0xffffe000: int $0x80
0xffffe002: ret
Но в моей 64-битной системе у меня есть доступ к более эффективному методу с использованием syscall / sysenter Инструкции
0xffffe000: push %ecx
0xffffe001: push %edx
0xffffe002: push %ebp
0xffffe003: mov %esp,%ebp
0xffffe005: sysenter
0xffffe007: nop
0xffffe008: nop
0xffffe009: nop
0xffffe00a: nop
0xffffe00b: nop
0xffffe00c: nop
0xffffe00d: nop
0xffffe00e: jmp 0xffffe003
0xffffe010: pop %ebp
0xffffe011: pop %edx
0xffffe012: pop %ecx
0xffffe013: ret
Эта страница vsyscall также отображает некоторые системные вызовы, которые могут выполняться без переключения контекста. Я знаю, что здесь отображаются определенные gettimeofday , time и getcpu , но я полагаю, что getpid также может там поместиться.
] Ответ на этот вопрос уже есть на
Как реализован системный вызов в Linux?
Вероятно, не соответствовал этому вопросу из-за разного использования термина «syscall».
По сути, это очень просто: где-то в памяти лежит таблица, в которой хранится каждый номер системного вызова и адрес соответствующего обработчика ( см. http: //lxr.linux.no / linux + v2.6.30 / arch / x86 / kernel / syscall_table_32.S для версии x86)
Обработчик прерывания INT 0x80 затем просто берет аргументы из регистров, помещает их в (ядро) стек и вызывает соответствующий обработчик системных вызовов.