본문 바로가기
학교 공부/내장형 시스템

[내장형 시스템] 시스템 콜이란?

by 그적 2020. 12. 2.

시스템 콜이란?

: 사용자 프로세스가 운영체제에게 특정한 프로세스를 요청(화면 디스플레이 혹은 자원 요청)할 때, 시스템 콜을 통해 프로세스를 수행한다.

 

Q. 표준 라이브러리 소스가 어떠한 과정으로 시스템 콜이 이뤄지는가?

: fork() 라는 시스템 콜 호출 -> fork() 함수는 소프트웨어 인터럽트가 발생되는 코드를 지님 -> 사용자 프로세스에서 커널 프로세스로 전환 -> 시스템을 호출하여 커널 함수 실행 -> 시스템 콜을 한 명령 실행 -> 이전에 제쳐둔 프로세스 나머지 마저 수행

 

Q. 소프트웨어 인터럽트가 발생되는 코드 구현은 어떻게 되어있을까?

  (old version linux의 경우)

: 라이브러리 함수 호출 -> 시스템 콜 번호 등록 -> 소프트웨어 인터럽트 발생(x86 CPU 상에서) -> eax 레지스터에 시스템 콜 번호를 넣고 인터럽트 발생 -> Interrupt Vector Table을 뒤짐 -> 0x80에 해당하는 인터럽트가 발생했을 때, 호출하는 Iterrupt Service Routine 주소가 포함되어 있음 -> 해당 ISR로 이동 -> 사용자 프로세스가 수행 중이던 모든 상태를 저장 -> 시스템 콜 번호에 해당하는 커널 함수 찾아냄 -> 시스템 콜 테이블을 뒤짐 -> 호출되어야 하는 운영체제 함수가 어딨는지 알 수 있음 -> 함수 수행 -> 끝난 후 기존 프로세스 복원

 

 

시스템 콜 구현

1) 시스템 콜 명칭 정의 및 번호 할당 (ex. 시스템콜 이름 : addcall / 시스템 콜 번호 : 335)

2) 시스템콜 테이블에 등록 (ex. "base_dir" /arch/x86/entry/syscalls/syscall_call_64.tbl 수정)

3) 시스템 콜 처리 함수 구현

4) 커널 컴파일과 부팅

5) application을 이용한 결과 확인 

댓글