Menu
Coddy logo textTech

시스템 콜이란?

Coddy Assembly 여정의 기초 섹션에 포함된 레슨. 45개 중 31번째.

movlea와 같은 어셈블리 명령어를 작성했습니다. 이러한 명령어는 CPU에서 직접 실행됩니다. 하지만 화면에 출력하거나, 키보드에서 읽거나, 프로그램을 종료하는 것처럼 CPU가 스스로 할 수 없는 작업을 해야 한다면 어떻게 해야 할까요?

이러한 작업을 수행하려면 운영 체제(이 과정에서는 Linux)가 필요합니다.

syscall이란 무엇인가요?

syscall(시스템 호출)은 프로그램이 운영 체제에 보내는 요청입니다. 이는 OS에 무언가를 대신 해 달라고 요청하는 방법입니다.

syscall이 필요한 이유:

작업CPU만으로 수행할 수 있나요?syscall이 필요한가요?
두 number 더하기아니요
레지스터 간에 데이터 이동아니요
화면에 텍스트 출력아니요
키보드 입력 읽기아니요
프로그램 종료아니요
파일 열기아니요

syscall 작동 방식:

  1. syscall 번호rax에 넣습니다 (운영 체제에 원하는 작업을 알려 줍니다)
  2. 인수를 다른 레지스터(rdi, rsi, rdx 등)에 넣습니다
  3. syscall 명령어를 실행합니다
  1. CPU가 OS 커널로 이동합니다
  2. OS가 요청을 수행합니다
  3. OS가 프로그램으로 제어권을 반환합니다

비유:

syscall을 관공서에 전화하는 것처럼 생각해 보세요:

단계비유어셈블리에서
1필요한 서비스를 결정합니다syscall 번호를 선택합니다 (rax에 넣기)
2서류를 작성합니다레지스터에 인수를 넣습니다
3요청을 제출합니다syscall을 실행합니다
4관공서에서 처리합니다OS 커널이 작업을 수행합니다
5결과를 돌려받습니다프로그램이 계속 실행됩니다

이 과정에서 배우게 될 시스템 호출:

시스템 호출번호기능챕터
exit60프로그램을 종료합니다챕터 4
write1화면에 텍스트를 출력합니다챕터 5

지금 가장 중요한 syscall: <strong>exit</strong>

exit가 없으면 프로그램은 영원히 계속 실행되거나 충돌합니다. 작성하는 모든 프로그램은 exit syscall로 끝나야 합니다.

mov rax, 60    ; syscall number for exit
mov rdi, 0     ; exit code (0 = success)
syscall        ; ask the OS to exit

직접 해보기

이 레슨에는 코드 챌린지가 없습니다.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨

직접 연습해 보세요: Assembly 플레이그라운드