시스템 호출(system call)
- 운영체제가 제공하는 서비스에 대한 프로그래밍 인터페이스 제공
- 운영체제 프로그래밍 인터페이스
> 대개 C/C++와 같은 고급 언어 루틴 형태로 제공 (프로그래머가 시스템 호출에 대한 C/C++ 함수를 호출하여 사용
> 저수준의 작업은 시스템 호출 명령어를 포함하는 어셈블리 프로그램으로 작성
> MS-DOS는 직접 시스템 호출 명령어를 사용하여 운영체제 서비스를 요청하도록 되어 잇음 -> 어셈블리 프로그램
시스템 호출 명령어 = 소프트웨어 인터럽트 명령어
- 오퍼랜드 숫자는 소프트웨어 인터럽트의 종류를 구분하는 데 사용
API (Application Programming Interface)
- 응용 프로그래머에서 사용 가능한 함수의 집합을 지정
- API 함수에서는 응용 프로그래머를 대신하여 필요한 실제 시스템 호출들을 호출함
시스템 호출보다 API를 더 많이 사용하는 이유
- 프로그램 이식성 (portability)
- 사용하기 쉬움
대표적인 API
- Windows API
- POSIX API - Unix, Linux Mac OS X
- Java API - Java Virtual Machine (JVM)
[ EXAMPLE SYSTEM CALL ] copy()
[EXAMPLE API]
시스템 호출의 구현
각 시스템 호출에 번호가 부여됨
- OS 커널에서 시스템 호출 처리 루틴의 주소 테이블의 인덱스로 이 번호를 사용함
EX) mov ah, 5
int 80
시스템 호출 인터페이스
- 매개 변수 전달 받음
- 관련된 시스템 호출을 호출
- status와 반환 값 반환
운영체제 인터페이스의 상세 내용은 API에 의해서 숨겨짐
- 대개 run-time support library에 의해서 관리됨
- 사용자는 API매개변수 규칙을 준수하고, 시스템 호출의 결과로 OS가 수행하는 작업에 대해서 이해하면 됨
시스템 호출의 OS 내에서의 처리
표준 C라이브러리 함수 동작 예
C프로그램이 printf() 함수를 호출하려면, printf() 함수에서 write()시스템 호출을 호출함
시스템 호출 매개변수 전달 방법
- 레지스터 : 레지스터에 매개변수 저장, 개수 제한
> 매개변수가 많으면 블록을 사용하여 추가 전달
- 블록 : 메모리 블록에 매개변수를 저장하고, 블록의 주소를 레지스터를 통해 전달
- 스택 : 응용 프로그램이 시스템 스택에 push, 운영체제에서 pop
> 실제로는 pop없이 스택을 접근하여 매개변수를 참조함
2.5 시스템 프로그램 (0) | 2020.04.04 |
---|---|
2.4 시스템 호출의 유형 (0) | 2020.04.04 |
2.2 사용자 운영체제 인터페이스 (0) | 2020.04.04 |
2.1 운영체제 서비스 (0) | 2020.04.04 |
1.11 컴퓨팅 환경 (0) | 2020.04.04 |
댓글 영역