티스토리 뷰

시스템 콜 (System calls)

시스템콜은 운영체제가 커널에게 특정 서비스를 요청하는 것이다.

 

간단하게 설명하자면, 응용 프로그램운영체제와 상호작용하여 하드웨어 및 시스템 리소스에 접근하고 작업을 수행하는 역할을 한다. 이는 프로그램이 직접 하드웨어에 접근할 수 없도록 하여 하드웨어 보안을 보장하는 것이다.

 

시스템콜의 가장 대표적인 예시로는 파일 입출력이나 시스템 관리, 프로세스 관리, 메모리 관리, 네트워크 관리 등이 있다.

 

 

파일 관리 시스템콜
함수 설명
open() 파일을 열고 파일 디스크립터 호출
read() 파일 데이터 읽기
write() 파일 데이터 쓰기
close() 파일 데이터 닫기
파일 시스템 관리 시스템콜
함수 설명
mkdir() 신규 디렉토리 생성
rmdir() 디렉토리 제거
chdir() 현재 작업 디렉토리 변경
rename() 파일 이름 변경
unlink() 파일 삭
프로세스 관리 시스템콜
함수 설명
fork() 현재 프로세스를 복제하여 새로운 프로세스로 생성
exec(), execve(), execl(), excev() 새로운 프로그램 실행
wait() 자식 프로세스가 종료될 때까지 부모 프로세스 대기
네트워크 관리 시스템콜
함수 설명
socket() 소켓 생성
bind() 소켓에 주소할당
connect() 소켓 연결 설정
send(), recv() 데이터를 소켓으로 보내거나 받기
메모리 관리 시스템콜
함수 설명
brk(), sbrk() 프로세스의 힙 크기 변경
mmap(), munmap() 파일이나 기타 리소스를 메모리에 매핑하거나 매핑 해제

 

 


시스템 콜 인터페이스 (System call interface)

시스템 콜 인터페이스란, 운영체제와 응용 프로그램 간의 상호작용을 위해 존재하는 인터페이스이다.

 

이 인터페이스는 응용 프로그램이 운영체제에 직접 접속하는 것을 방지하며 운영체제의 기능을 활용할 수 있도록 하는 메커니즘을 가진다.

 

시스템 콜 인터페이스는 크게 3가지 역할을 한다.

 

시스템 콜 인터페이스 역할
역할 설명
시스템 호출 요청 전달 응용 프로그램에서 시스템 콜을 수행하기 위한 필수 정보운영체제에 전달
시스템 호출 실행 전달된 시스템 콜을 운영체제가 실행, 요청된 작업 수행
결과 반환 시스템 콜 완료 후, 실행 결과 반환

 

 


표준 API

대부분 응용 계층 개발자들은 응용 프로그밍 인터페이스(Application Programming Interface, API)에 따라 프로그램을 설계한다. API는 간단하게 다른 프로그래머가 사용 가능한 함수들을 제공하는 함수 집합이다.

 

API 중 가장 흔한 3가지는 Win32 API, POSIX API(UNIX, Linux, Mac OS X 등), Java API가 있다. 물론 각 운영체제마다 고유의 시스템 콜명칭이 다를 수 있기에 메뉴얼을 확인해야한다. (Linux 및 Windows 운영체제가 제공하는 고유 시스템 콜 함수는 유사하긴하다.)

 

이러한 API 사용프로그램의 호환성에 큰 이점을 준다.

API를 따라 프로그램을 설계하면 같은 API를 지원하는 어느 시스템에서도 컴파일이 되고 실행이 가능하다고 기대할 수 있다. 

 

 

API 함수와 시스템콜 함수

API 함수 호출커널 관련 시스템 콜은 강한 상관관계가 존재한다.

 

각 프로그램에 내장된 시스템 콜 인터페이스는 API 함수의 호출을 가로채어 필요한 시스템 콜을 부른다. 통상적으로 각 시스템 콜은 고유 번호가 할당되고 시스템 콜 인터페이스는 이 번호에 따라 인덱스되는 테이블을 유지한다. 시스템 호출 인터페이스는 의도하는 시스템 콜을 부르고 시스템 콜의 상태와 반환 값을 돌려준다.

 

쉽게 말하자면 "API 함수를 통해 시스템 콜 인터페이스에 요청이 전달되고, 시스템 콜 함수가 수행하여 결과 값을 반환한다." 예제는 다음과 같다.

 

API 함수 & 시스템 콜 함수
  1. 프로그램API 함수'open()'함수호출하여 파일을 열람 시도
  2. API 함수 호출이 운영체제의 시스템 콜 인터페이스를 통해 전달
    • 인터페이스는 운영체제 내부로 직접 호출
  3. 인터페이스는 요청된 시스템 콜에 고유 번호(인덱스)를 부여하여 식별
    • 식별된 콜은 시스템 콜 테이블에 인덱싱
  4. 실행을 위해 식별된 콜에 대한 작업이 수행
  5. 인터페이스가 실행된 시스템 콜의 상태 확인
  6. 시스템 콜 함수가 완료되면, 상태 값을 확인하여 필요시 반환 값 반환

 

 

이 과정에서 시스템 콜을 요청한 응용 프로그램실제 어떤 작업이 전개되는지 전혀 알 필요도 알 수 도 없다. 단지 API를 준수하고 운영체제가 시스템 콜 결과를 무엇을 반환할 것인지 알고 있으면 된다. 하여 운영체제 인터페이스의 상세 내용은 API를 통해 숨겨지고 실행시간 지원 라이브러리에 의해 관리된다.

 

※ 시스템 콜 사용 방법은 컴퓨터마다 다르기도 하여 위 과정이 완벽한 정답은 아니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함