① 사용자 응용프로그램에서 open( ) 함수를 통해 시스템 콜 API 호출
② 시스템 콜 인터페이스를 통해 커널모드로 전환
③ 시스템 콜 테이블을 통해 open( )과 매핑되는 인덱스 i 찾기 (각 시스템 콜에 대하여 index(숫자)가 부여)
④ 찾은 인덱스 i 에 해당하는 실제 시스템 콜 위치정보 찾기
⑤ 해당 위치 정보가 가르키는 시스템 콜 수행 후 ( 해당 파일 열기 ), 다시 유저모드로 전환
블록 or 테이블을 통한 전송, 스택을 통한 전송 => 매개변수들의 개수나 길이 제한하지 않아 많이 사용한다.
프로세스 제어, 파일 관리, 장치 관리, 정보 관리, 통신, 보호
파일 읽기: 표준 C 라이브러리
① printf() 함수는 유저 모드에서 수행되어 stdio 라이브러리를 호출한다.
#include <stdio.h>
int main(void){
printf("Greetings");
}
② stdio 라이브러리는 시스템 콜인 write()를 호출하고, 유저 모드에서 커널 모드로 전환한다.
즉, 아래 코드와 같이 printf 함수 내부에 시스템 콜 함수인 write가 있는 것을 확인할 수 있다.
③ write 함수 부분이 컴파일 되고 나면 아래와 같은 명령어들로 이루어져 있을 것이다.
...
movl 5, %eax
int $0x80
④ 즉, C 프로그램이 printf() 호출 → 표준 “C 라이브러리”가 write() 시스템 콜 수행한다.
#include <stdio.h>
int main(void){
...
printf(){
...
write(...)
}
...
}
파일 복사
시스템 콜을 직접 확인해보자!
개발자는 시스템 콜이 어떻게 구현되는지 알 필요가 없다