티스토리 뷰
시스템 콜 (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 함수 & 시스템 콜 함수
- 프로그램이 API 함수인 'open()'함수를 호출하여 파일을 열람 시도
- API 함수 호출이 운영체제의 시스템 콜 인터페이스를 통해 전달
- 인터페이스는 운영체제 내부로 직접 호출
- 인터페이스는 요청된 시스템 콜에 고유 번호(인덱스)를 부여하여 식별
- 식별된 콜은 시스템 콜 테이블에 인덱싱
- 실행을 위해 식별된 콜에 대한 작업이 수행
- 인터페이스가 실행된 시스템 콜의 상태 확인
- 시스템 콜 함수가 완료되면, 상태 값을 확인하여 필요시 반환 값 반환
이 과정에서 시스템 콜을 요청한 응용 프로그램은 실제 어떤 작업이 전개되는지 전혀 알 필요도 알 수 도 없다. 단지 API를 준수하고 운영체제가 시스템 콜 결과를 무엇을 반환할 것인지 알고 있으면 된다. 하여 운영체제 인터페이스의 상세 내용은 API를 통해 숨겨지고 실행시간 지원 라이브러리에 의해 관리된다.
※ 시스템 콜 사용 방법은 컴퓨터마다 다르기도 하여 위 과정이 완벽한 정답은 아니다.
'Computer > Operation System' 카테고리의 다른 글
[OS] 컴퓨터 시스템 구조 (Computer-System Architecture) (0) | 2024.03.27 |
---|---|
[OS] 입출력 구조 (I/O Structure) (0) | 2024.03.23 |
[OS] 컴퓨터 시스템의 구성 (1) | 2024.03.15 |
[OS] 운영체제 서론 (0) | 2024.03.15 |
- Total
- Today
- Yesterday
- New
- 백준
- malloc
- 게임수학
- 포인터
- static_cast
- thread
- 프로세스
- 레지스터
- 클래스
- 인터럽트
- 수학
- 스레드
- const
- 할당
- 함수
- 컴파일
- 멀티스레드
- 명령어
- 크기
- 구조
- CPU
- 운영체제
- 알고리즘
- 입출력
- c++
- 초기화
- 메모리
- 상속
- dynamic_cast
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |