OS는 직접적으로 하드웨어를 조작할수 있지만 응용프로그램은 OS가 제공하는 인터페이스를 통해  간접적으로 관리가 가능하다.

그렇다면 응용프로그램이 직접 하드웨어를 조작할 필요가 있을땐 어떤방식을 사용해야 할까?

이것을 도와주는게 시스템콜이다.

시스템콜

OS는 커널모드와 사용자모드로 나뉘어 구동되고 파일작성, 파일수정, 메세지 출력등은 커널모드를 사용하는데 이것을 사용자 모드에서 사용가능하도록 하는것 즉, 여러 커널영역의 기능을 프로세스가 하드웨어에 직접적으로 접근해 필요한 기능을 하도록 하는것으로 SW 인터럽트(Trap)로 취급된다.

 

커널모드에서만 파일수정 등의 작업이 가능한건 권한수준이 다르게 설정되었기 때문이며 만일 사용자모드에서 접근을 허용할경우 기존의 정상적인 코드가 변경될 우려가 있기 때문이다.

 

시스템콜 진행 방식

1. 응용 프로그램에서 Trap을 발생시킨다.

2. 라이브러리에서 기능에 따른 시스템콜 고유번호가 레지스터에 저장, 해당 주소에 인터럽트를 건다.

3. 커널은 IDT엔트리를 참조해 알맞는 서비스 루틴을 수행한다.

 

인터럽트 서술자 테이블(Interrupt Descriptor Table,IDT) - 인터럽트 처리를 위해 서비스 루틴을 함수로 구현해놓고 각 함수의 시작점 주소를 등록해놓은 테이블로 IDT 위치를 가리키는 레지스터를 IDTR이라 칭한다.

(Trap 발생 -> IDTR에서 IDT를 확인 -> 해당 주소에 있는 함수(서비스 루틴)를 실행)

IDT

사용자모드의 프로세스가 SW인터럽트(Trap이라 표현한다)를 통하여 커널의 기능을 이용하기 위하여 프로세스 제어, 파일 조작, 자원관리 등의 작업을 지원한다

 

 

API는 응용프로그램에게 HW의 사용법을, 시스템콜은 HW를 직접 호출해 사용하는데 일반적으로 API를 더욱 자주 사용한다고 한다.

시스템콜이 아닌 API를 우선 사용하는 이유

1. 프로그램 호환성 -> 동일한 API를 사용하는경우 어떤 시스템(리눅스,윈도우)에서도 실행이 가능하다.

2. 사용이 편리해서 -> 시스템콜을 사용할경우 자세한 명세(cp in.txt out.txt..)가 필요한데 API가 이것을 대신해준다.

3. RTE

 

실행 환경 (RTE, Real time Enterprise)

이것은 OS에게 자신과 시스템콜 사이의 인터페이스를 제공하며 이를 활용해 호출자(사용자)는 시스템콜의 코드를 입력할 필요없이 API가 어떤방식으로  돌아가는지만 알고 있으면 된다. 

 

 

시스템콜 종류

1. 프로세스 제어 - 프로세스 생성 및 종료, 메모리 적재 및 실행

2. 파일 조작 - 파일 생성 및 수정

3. 장치 관리 - 디바이스, I/O, 

4. 정보 관리 - 데이터의 속성 설정 및 저장

5. 통신 - 메세지 송수신, 리모트 디바이스 탈부착

6. 보호 - Permission(권한) 획득 및 설정

 

정리

시스템콜 - 커널영역의 기능을 프로세스가 하드웨어에 직접적으로 접근해 필요한 기능을 하도록 하는것

처리 순서

1. 시스템콜 발생(요청)

2. 사용자모드 -> 커널모드로 변경

3. IDTR에 있는 IDT의 시작주소를 참고해 이에 해당하는 서비스 루틴을 진행 (기 진행 데이터는 레지스터에 보관)

4. 작업종료 (커널모드 -> 사용자모드 변경)

'CS' 카테고리의 다른 글

캐시에 대하여  (0) 2023.04.07
교착상태(Dead Lock)  (0) 2023.04.02
링킹과 오브젝트파일  (0) 2023.03.30
운영체제란  (0) 2023.03.30
프로세서, 프로세스  (0) 2023.03.21

+ Recent posts