Menu
CoddyTech

시스템 콜이란?

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

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

이 작업에는 (이 과정에서는 Linux인) 운영 체제가 필요합니다.

시스템 호출이란 무엇인가요?

시스템 호출(system call)은 프로그램이 운영체제에 요청하는 것입니다. 시스템 호출을 통해 운영체제에 어떤 작업을 대신 해 달라고 요청할 수 있습니다.

시스템 호출이 필요한 이유:

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

시스템 호출이 작동하는 방식:

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

비유:

시스템 호출을 관공서에 민원을 신청하는 것처럼 생각해 보세요:

단계비유어셈블리에서
1필요한 서비스 결정하기시스템 호출 번호 선택하기 (rax에 넣기)
2양식 작성하기레지스터에 인수 넣기
3요청 제출하기syscall 실행하기
4관공서에서 처리하기OS 커널이 작업 수행하기
5결과 받기프로그램 계속 실행하기

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

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

지금 가장 중요한 시스템 호출: exit

exit가 없으면 프로그램은 영원히 실행되거나 충돌할 수 있습니다. 작성하는 모든 프로그램은 exit 시스템 호출로 끝나야 합니다.

mov rax, 60    ; exit용 syscall 번호
mov rdi, 0     ; 종료 코드 (0 = 성공)
syscall        ; OS에 종료 요청

직접 해보기

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

quiz icon실력 점검

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

기초의 모든 레슨

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