코학다식
[OS] System Call 본문
Operating System
chapter 1-2 (3)
System Calls
- 시스템 콜(System Call)이란 운영체제에 의해 제공되는 서비스의 프로그래밍 인터페이스(Programming Interface)이다.
- 주로 함수의 모임인 라이브러리 형태로 제공되어 사용자가 호출해서 사용하도록 되어 있다.
- 일반적으로 high-level 언어로 작성된다. (C or C++)
- 대부분 직접적인 시스템 콜 사용보다는 high-level의 Application Program Interface(API)을 통한 프로그램에 의해서 접근된다.
- 가장 자주 쓰이는 API에는 윈도우의 Win32(64) API, 리눅스 계열의 POSIX, Java Virtual Machine의 Java API가 있다.
System Call Implementation
- 일반적으로 각 시스템 콜마다 번호가 주어진다.
- 시스템 콜 인터페이스는 이 번호에 따라 인덱싱된 테이블을 가지고 있다.
- 시스템 콜 인터페이스는 운영체제 커널에서 계획된 시스템 콜을 일으키고 시스템 콜의 상태와 반환값을 돌려준다.
- 시스템 콜을 호출하는 사람은 어떻게 시스템 콜이 시행되는지 알 필요 없다.
- API를 따르고 운영체제가 호출의 결과로 무엇을 할지만 이해하면 된다.
- API에 의해 운영체제 인터페이스의 대부분의 디테일은 숨겨진다.
- API - 시스템 콜 - 운영체제 관계도
System Call Parameter Passing
- 사용하려는 시스템 콜이 무엇인지 말고도 더 많은 정보가 필요한 경우가 많다.
- 운영체제와 어떤 콜인지에 따라 정보의 타입과 양(개수)은 달라진다.
- 운영체제에 매개변수를 넘기는 방법에는 크게 세 가지가 있다.
- 가장 간단한 방법, 레지스터(register)에 매개변수 넘기기
- 하지만 레지스터는 크기와 개수가 정해져 있다는 한계가 있다.
- 속도는 가장 빠르다.
- 메모리의 블록(block), 또는 테이블에 매개변수가 저장되고 블록의 주소가 레지스터에 매개변수로 전달된다.
- 마치 C언어에서 포인터를 매개변수로 전달하는 것과 같다.
- 이 방법은 리눅스와 솔라리스에서 사용된다.
- 프로그램에 의해 스택(Stack)에 위치되거나 push된 매개변수가 운영체제에 의해 스택에서 pop된다.
- 가장 간단한 방법, 레지스터(register)에 매개변수 넘기기
- 시스템 콜의 번호와 반환값은 레지스터를 사용하는 경우가 많다.
Types of System Calls
-
프로세스 제어 (e.g. end/abort, load/execute, create/terminate process, get/set process attributes...)
-
파일 관리 (e.g. create/delete file, open/close, read/write/reposition...)
-
디바이스 관리 (e.g. request/release device, read/write/reposition...)
-
정보 유지 (e.g. get/set time/date/process/file/device/atrributes)
-
커뮤니케이션 (e.g. create/delete communication connection, send/receive messages...)
Widely-used Kernel Data Structures
- 리스트 (singly, doubly, circularly), 스택, 큐
- 트리
- 해시 함수
- 비트맵
'Fundamentals > OS' 카테고리의 다른 글
[OS] 프로세스 생성과 종료 (0) | 2019.09.26 |
---|---|
[OS] 프로세스와 프로세스 스케줄링 (0) | 2019.09.24 |
[OS] Boot, 운영체제의 구조, VM (0) | 2019.09.19 |
[OS] 운영체제의 구조와 운영체제 보호를 위한 작업들 (0) | 2019.09.10 |
[OS] 운영체제의 정의와 Interrupt (0) | 2019.09.08 |
Comments