the system-call interface and syscall number
Think of an old-fashioned restaurant where the menu items are numbered. You do not describe your dish to the kitchen in a paragraph; you say 'number 27,' and the kitchen has a list that maps 27 to a specific recipe. The kernel works the same way: it does not understand the name 'read,' it understands a number, and it keeps a table that maps each number to the routine that handles it.
The system-call interface is the agreed-upon contract for how a program and the kernel exchange these requests: which register holds the system-call number, which registers hold the arguments, where the return value comes back, and how errors are reported. Each service the kernel offers gets a fixed system-call number - on Linux x86-64, read is number 0, write is 1, open is 2, and so on. The kernel stores a system-call table: essentially an array indexed by that number, where each slot is the address of the function that implements that call. When a program traps in with a number in the right register, the kernel uses it as an index into the table and jumps to the matching handler. The numbers are part of the platform's binary contract (its ABI), so once assigned they are kept stable, which is why a program compiled years ago still works.
Why it matters: this is why the same C source can run on different machines while a compiled binary often cannot move between operating systems - the numbers and the calling rules differ. It is also why tools like strace can show you, by name and arguments, every system call a program makes: they decode the numbers using a known table. As a beginner you rarely write the numbers by hand (the C library does it for you), but knowing they exist demystifies what 'the system-call interface' actually is.
On Linux x86-64 the read system call is number 0. A program that puts 0 in rax, a valid file descriptor in rdi, a buffer in rsi, and a length in rdx, then runs syscall, is asking the kernel to read - it never spelled out the word 'read' anywhere.
The kernel dispatches on a number, not a name; the number indexes the syscall table.
System-call numbers are per-OS and even per-architecture: read is 0 on Linux x86-64 but a different number on 32-bit x86 or on a different OS. Do not hard-code them; use the library wrappers, which know the right number for the platform.