반응형

03_운영체제 구조_시스템 호출의 유형

 

시스템 호출은 다섯 가지의 주요 범주로 묶을 수 있다.

 

[프로세스 제어]

  • 끝내기(End), 중기(Abort)
  • 적재(Load), 실행(Execute)
  • 프로세스 생성, 프로세스 종료
  • 프로세스 속성(Attribute) 획득, 프로세스 속성 설정
  • 시간을 기다림
  • 사건을 기다림(Wait Event), 사건을 알림(Signal Event)
  • 메모리 할당 및 자유화

 

[파일 조작(File Manipulation)]

  • 파일 생성(Create file), 파일 삭제(Delete File)
  • 열기(Open), 닫기(Close)
  • 읽기, 쓰기 위치변경(Reposition)
  • 파일 속성 획득 및 설정

 

[장치 관리(Device Management)]

  • 장치를 요청(Request Device), 장치를 방출(Release Device)
  • 읽기, 쓰기, 위치 변경(Reposition)
  • 장치 속성 획득, 장치 속성 설정
  • 장치의 논리적 부착(Attach) 또는 분리(Detach)

 

[정보 유지(Information Maintenance)]

  • 시간과 날짜의 설정과 획득
  • 시스템 자료의 설정과 획득
  • 프로세스, 파일, 장치 속성의 획득
  • 프로세스, 파일, 장치 속성의 설정

 

[통신(Communication)]

  • 통신 연결의 생성, 제거
  • 메시지의 송신, 수신
  • 상태 정보 전달
  • 원격 장치의 부착 및 분리

 

 

[프로세스 제어(Process Control)]

실행 중인 프로그램은 수행을 정상(끝내기) 또는 비정상(중지)으로 끝낼 수 있어야 한다. 프로그램에 문제가 발생해 오류 트랩(trap)을 유발할 경우 때때로 메모리 덤프가 행해지고 오류 메시지가 생성된다. 이 덤프는 디스크에 기록되고 디버거(Bebugger)에 의해 검사될 수 있다. 운영체제는 명령어 해석기로 제어를 전달해야 한다. 명령어 해석기는 이어 다음 명령을 읽는다.

 

몇몇 시스템 에서는 오류가 발생할 경우 특별한 복구 행위를 지시하는 제어카드를 허용한다. 제어카드는 일괄처리의 개념이다. 만약 프로그램이 입력에서 오류를 발견하고 비정상으로 종료하기를 원한다면 프로그램은 오류 수준을 정의하기를 원할 수도 있다. 보다 높은 수준의 오류 매개변수가 보다 심각한 오류를 표시할 수 있다. 이렇게 함으로써 정상 종료를 수준 0의 오류로 정의하여 정상 종료와 비정상 종료를 결합시킬 수도 있다.

 

한 프로그램을 실행하고 있는 프로세스나 작업이 다른 프로그램을 적재(Load)하고 실행(Execute) 하기를 원할 수 있다. 이 기능은 명령어 해석기가 사용자 명령, 마우스의 클릭 혹은 일괄 처리 명령 등을 통하여 지시된 프로그램을 실행하는 것을 허용 한다. 이때 적재된 프로그램이 종료 될 때 어디로 제어를 되돌려 주느냐 하는 문제가 발생 한다.

만약 새로운 프로그램이 종료 되었을 때 제어가 기존 프로그램으로 되돌아 간다면 우리는 반드시 기존 프로그램의 메모리 이미지를 보관해야 한다. 따라서 우리는 실질적으로 한 프로그램이 다른 프로그램을 호출하는 기법을 만든 셈이 된다.

 

Ex) printf() 문을 호출 하는 C 프로그램에서 C 라이브러리는 이 함수 호출을 가로채고 운영체제의 필요한 시스템을 호출 한다. 예제에서는 write() 시스템 함수를 호출 하고 있다.

 

 

시스템 호출의 또 다른 집합은 프로그램을 디버깅하는데 유용하다. 많은 시스템들은 메모리를 덤프(Dump)하기 위한 시스템 호출을 제공하며 프로그램 추적(Trace)은 각 명령어가 실행될 때 이들을 하나씩 나열하며 이러한 시스템 호출은 보다 소수의 시스템에서만 제공 된다.

 

많은 운영체제는 프로그램의 시간 프로파일(Time Profile)을 제공한다. 시간 프로파일은 그 프로그램이 특정 위치 혹은 위치의 집합에서 수행한 시간의 양을 나타낸다. 시간 프로파일은 추적 설비(Tracing Facility)나 정규 타이머 인터럽트를 필요로 한다.

 

프로세스가 끝나면 종료하기 위해 exit() 시스템 호출을 수행하며 호출한 프로세스에게 상태 코드 0을 돌려주거나 0이 아닌 오류 코드를 돌려 준다. 이러한 상태 또는 오류코드는 쉘 또는 다른 프로그램들이 이용할 수 있게 된다.

 

[파일 관리(File Management)]

파일을 생성 삭제 할 수 있어야 한다. 이 시스템 호출은 파일 이름이나 파일 속성의 일부를 요구한다. 파일이 생성되면 그것을 열고, 읽고, 쓰고, 위치 변경을 할 수 있다. 파일을 더 이상 사용하지 않음을 나타내는 파일 닫기가 필요하다.

 

파일 시스템이 파일을 조직하기 위해 디렉토리 구조를 가진다면 우리는 디렉토리에 대해서도 파일과 같은 연산 집합이 필요 하다. 추가로 파일이나 디렉토리에 대해 여러 속성의 값을 결정할 수 있어야 하고 필요에 따라 재설정 할 수 있어야 한다. 파일 속성은 파일 이름, 파일 유형, 보호코드 등 정보를 포함한다. 이러한 기능을 위해서는 최소한 파일의 속성 획득과 파일 속성 설정의 두 시스템 호출이 필요하다. 일부 시스템들은 코드와 다른 시스템 호출을 이용하여 동일한 작업을 수행하는 API를 제공할 수도 있고 또 다른 시스템은 단순히 동일한 작업을 수행하는 시스템 프로그램을 제공하기도 한다. 이 시스템 프로그램이 다른 시스템 프로그램에 의해 호출 가능하다면 다른 프로그램의 입장에서는 이 시스템의 API가 된다.

 

 

[장치 관리(Device Management)]

프로세스는 작업을 계속 수행하기 위해서 CPU, 디스크, 파일의 접근 등에 대한 추가 자원이 필요 할 수 있다. 자원들이 사용할 수 있다면 이들 자원이 할당되고 제어가 사용자 프로그램으로 복귀 될 수 있다. 그렇지 않으면 프로그램은 충분한 자원을 할당 받을 때까지 기다려야 한다.

 

운영체제에 의해 제어되는 다양한 자원들은 장치로 간주 될 수 있다. 이 장치들은 물리장치 또는 추장적 혹은 가상적 장치로 생각할 수 있다. 다수의 사용자가 있다면 독점적인 장치 사용을 보장받기 위해 우선 그 장치를 요청(Request) 해야 한다. 그 장치의 사용이 끝나면 그것을 방출(release)해야 한다.

 

[정보의 유지(Information Maintenance)]

많은 시스템 호출은 단순히 사용자와 프로그램과 운영체제간의 정보 전달을 위해 존재 한다. 운영체제는 현재 운영되고 있는 프로세스들에 관한 정보를 가지고 있으며 이러한 정보에 접근하기 위한 시스템 호출들이 있다. 일반적으로 그 프로세스 정보를 재설정하기 위한 시스템 호출도 있다.(get process attributes, set process attributes)

 

[통신(Communication)]

통신 모델에서는 메시지 전달 방식과 공유 메모리의 두 가지 일반적인 모델이 있다.

메지시 전달 : 통신하는 두 프로세스가 정보를 교환하기 위하여 서로 메시지를 주고 받는다. 통신은 동일 CPU에 있는 프로세스이든지 또는 통신 네트워크에 의해 연결된 다른 컴퓨터에 있는 프로세스이든지 간에 그 이름을 반드시 알고 있어야 한다.

공유 메모리 모델 : 다른 프로세스가 소유한 메모리 영역에 대한 접근을 위해 shard memory create와 shared memory attach 시스템 호출을 사용한다. 정상적으로 운영체제는 한 프로세스가 다른 프로세스의 메모리 접근하는 것을 막으려고 한다. 공유 메모리는 두 개 이상의 프로세스가 이러한 제한을 제거하는 데 동의할 것을 필요로 한다. 그런 후 이들 프로세스들은 이러한 공유 영역에서 자료를 읽고 씀으로써 정보를 교환 할 수 있다. 소량의 자료를 교환할 때 유용하다.

 

자료의 형태와 위치는 운영체제의 제어가 아니라 프로세스들에 의해 결정 된다. 프로세스들은 동일한 위치에 동시에 쓰지 않도록 보장해야 한다. 한 컴퓨터 안에서 수행되기 때문에 최대 속도와 편리한 통신이 장점이지만 보호 영역 및 동기화 프로세스 등의 문제점을 가지고 있다.

 

 

[참고자료]

Operating System Concept

 

 

 

반응형

+ Recent posts