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 (홍릉과학출판사)

 

 

01_운영체제 구조 _사용자인터페이스

 

운영체제는 프로그램 실행 환경을 제공 한다. 운영체제는 프로그램과 프로그램의 사용자에게 어떤 서비스를 제공한다. 물론 제공되는 서비스는 운영체제에 따라 다르지만 공통적인 속성은 다음과 같다.

 

  • 사용자 인터페이스(User Interface) : 거의 모든 운영체제는 사용자 인터페이스(UI)를 갖고 있다. 이 인터페이스는 여러 형태를 가지고 있을 수 있으며 명령어 라인 인터페이스(Command Line Interface: CLI)로 문자 명령을 사용 한다. 다른 방법은 일괄 처리 인터페이스(Batch Interface)로 명령과 이들 명령을 제어하는 지시들이 파일로 입력되며 이들 파일이 수행한다. 가장 일반적으로 그래픽 사용자 인터페이스(GUI)가 사용된다. 이것은 입/출력을 가리키고 메뉴에서 고르거나 선택을 행하는 지시 장치를 가진 윈도우 시스템과 텍스트를 입력하는 키보드로 구성 된다.

 

  • 프로그램 수행(Program Execution) : 시스템은 프로그램을 메모리에 적재해 실행 할 수 있어야 한다. 프로그램은 정상이든 비정상이든 실행을 끝낼 수 있어야 한다.

 

  • 입/출력 연산(I/O Operation) : 수행중인 프로그램은 입/출력을 요구 할 수 있다. 효율과 보호를 위해 사용자들은 통상 입/출력 장치를 직접 제어할 수 없다. 따라서 운영체제가 입/출력 수행의 수단을 제공해야 한다.

 

  • 파일 시스템 조작(File System Manipulation) : 프로그램은 파일을 읽고 쓸 필요가 있다. 프로그램은 또한 이름에 의해 파일을 생성하고 삭제할 수 있고 지정된 파일을 찾을 수 있어야 하고 파일의 정보를 열거할 수 있어야 한다.

 

  • 통신(Communication) : 한 프로세스가 다른 프로세스와 정보를 교환해야 할 필요가 있는 여러 상황이 있다. 동일한 컴퓨터에서 수행되고 있는 프로세스들 사이에는 공유 메모리 또는 메시지 전달을 통해서 구현 할 수 있으며 다른 컴퓨터에서 수행되는 프로세스의 경우 패킷들이 운영체제에 의해 이동 한다.

 

  • 오류 탐지(Error Detection) : 운영체제는 항상 모든 가능한 오류를 상항 의식하고 있어야 한다. 오류는 시스템 내부(CPU, 메모리, 네트워크 등) 뿐만 아니라 사용자 프로그램에 의해서도 일어 난다.

 

  • 자원 할당(Resource Allocation) : 다수의 사용자나 다수의 작업이 동시에 실행 될 때 각각에 자원을 할당 해야 한다. CPU 사이클, 주 메모리 파일 저장 장치 등의 특수한 할당 코드를 가질 수 있으며, 프린터, USB 저장 장치 및 기타 주변장치를 할당하는 루틴이 있을 수 있다.

 

  • 회계(Accounting) : 우리는 사용자가 얼마나 많은 자원을 사용하는지 관리하고자 한다. 이는 사용기록에 대한 통계를 내기 위해 사용된다. 컴퓨팅 서비스를 개선하기 위한 자료가 된다.

 

  • 보호(Protection)와 보안(Security) : 다중 사용자 시스템 또는 네트워크로 연결된 컴퓨터 시스템에 저장된 정보의 소유자는 통제하기를 원할 수 있다. 한 프로세스가 다른 프로세스를 방해해서는 안 된다. 보호는 시스템 자원에 대한 모든 접근이 통제되도록 보장하는 것을 포함한다. 외부로부터의 시스템 보안 또한 중요하다. 보안은 각 사용자가 자원에 대한 접근을 허용 받기 위해 자기 자신을 인증하는 것부터 시작한다. 시스템이 보호되고 보안이 유지 되려면 시스템 전체에 걸쳐 예방책이 제정되어야 한다. 하나의 사슬은 가장 약한 연결 고리만큼만 강한 법이다.

 

 

 

+ Recent posts