반응형

02_운영체제 구조_시스템 호출 (System Call)

 

시스템 호출은 운영체제에 의해 사용 가능하게 된 서비스에 대한 인터페이스를 제공한다. 예를 들어 하드웨어를 접근해야 하는 작업 등의 특정 ROW LEVEL 작업은 어셈블리 명령을 사용하여 작성되어야 하지만 시스템 호출은 일반적으로 C, C++ 등과 같은 언어로 작성된 루틴 형태로 제공 된다.

 

한 파일로부터 자료를 읽어서 다른 파일로 복사하는 간단한 프로그램을 작성하는 예를 들어 보자.파일의 이름을 읽고 파일에 대한 접근 권한을 확인하고 파일을 열고 하는 등의 일련의 과정이 있을 것이다. 이를 도식화 하면 다음과 같다.

 

 

대부분의 사용자들은 이러한 정도의 상세를 결코 알지 못한다. 대부분의 응용 개발자들은 응용 프로그래밍 인터페이스(Application Programming Interface, API)에 따라 프로그램을 설계한다. API는 각 함수에 전달되어야 할 매개변수들과 프로그래머가 기대할 수 있는 반환 값을 포함하여 응용 프로그래머가 사용 가능한 함수의 집합을 명시 한다.

 

 

왜 응용 프로그래머는 실제 시스템을 호출하는 것보다 API에 따라 프로그래밍 하는 것을 선호 할까? 여러 가지 이유가 있지만 가장 큰 이유는 프로그램의 호환성 이다. API에 따라 프로그램을 설계하는 응용 프로그래머는 자신의 프로그램이 같은 API를 지원하는 어느 시스템이든 컴파일 되고 실행 되기 때문이다. 실제 API를 호출 하는 것과 커널을 호출하는 것은 강한 상관관계가 존재 한다.

 

프로그래밍 언어들을 위해 컴파일러에 포함된 라이브러리에 내장된 함수의 집합은 운영체제가 제공하는 시스템 호출에 대한 연결로서 동작하는 시스템 호출 인터페이스를 제공 한다. 각 시스템 호출에는 번호가 할당되고 시스템 호출 인터페이스는 이 번호에 따라 색인되는 테이블을 유지 한다. 시스템 호출 인터페이스는 의도하는 시스템 호출의 상태와 반환 값을 돌려 준다.

 

호출자는 시스템 호출이 어떻게 구현되고 실행 중 무슨 작업을 하는지 알 필요가 없으며 단지 API를 준수하고 호출의 결과로 운영체제가 무엇을 해 줄 것 인지만 이해하면 된다.

 

 

Ex) 파일 IO 호출 인터페이스

 

운영체제에 매개변수를 전달하기 위해서 일반적으로 3가지 방법을 사용 한다.

  • 매개변수를 레지스터 내에 전달
  • 매개변수는 메모리 내의 블록이나 테이블에 저장
  • 블록의 주소가 레지스터 내에 매개변수로 전달

 

[테이블로 매개변수 전달]

 

매개변수는 프로그램의 의해 스택(stack)에 push 또는 pop off 한다. 운영체제는 블록이나 스택 방법을 선호하는데 이는 전달되는 매개변수들의 개수나 길이를 제한하지 않기 때문이다.

 

[참고 자료]

Operating System Concept (홍릉과학출판사)

 

 

반응형

+ Recent posts