운영체제 시스템 구조

카테고리 없음

2019. 4. 15. 00:41

운영체제가 제공하는 서비스

 

- 첫번째로 운영체제는 시스템 수준에서의 서비스를 제공한다.

시스템 수준에서의 서비스는 Program Execution, I/O Operation, File System, Communication, Resource Allocation, Account, Error Detection 등의 기능을 포함하며 프로그래머는 응용 프로그램을 만들어 낼 때 이러한 기능들을 사용할 수 있게끔 해주는 System Call을 이용하여 원하는 프로그램을 구현해 낼수 있다.

 

- 두번째로 운영체제는 사용자 수준에서의 서비스를 제공한다.

컴퓨터 프로그램을 두 종류로 나누자면 프로그래머가 System Call을 활용하여 제작된 프로그램 또는 시스템에 기본적으로 탑재된 시스템 프로그램이 있다. 사용자가 이러한 프로그램들을 실행시킬 수 있도록 인터페이스를 제공하는 것이 사용자 수준에서의 서비스이다. 이 인터페이스에는 세 가지가 있다. 그것들은 Command Line Interface, Graphical User Interface, Batch Interface이다.

 

운영체제가 제공하는 두가지 수준의 서비스

 

시스템 호출 (System Call)

 

시스템 콜은 운영체제가 시스템 수준에서 제공하는 서비스에 대한 인터페이스를 제공한다. 시스템 콜은 일반적으로 C나 C++로 작성된 API함수의 호출로 이루어진다. 예를 들어 POSIX 시스템 기반 API 중 하나인 read()함수를 보자.

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count)

이 API가 제공하는 정보는 다음과 같다.

 

1. 반환값을 통해 함수의 성공여부를 알 수 있다.

2. 파일 디스크립터, 데이터를 읽어들일 버퍼, 최대 버퍼의 크기와 같은 매개변수가 필요하다.

 

이러한 read함수는 실제로 POSIX 시스템에 정의된 시스템 함수를 호출한다. 프로그래머는 실제 시스템 콜을 호출하는것보다 시스템 콜을 호출하는 API를 사용하여 프로그래밍 하는게 좋으며, 그 이유는 같은 시스템 상에서 동일한 API를 이용하여 같은 기능을 수행하는 프로그램을 쉽게 작성할 수 있고, 시스템 콜을 호출하기 위한 여러가지 제약사항이나 명세들을 일일히 알 필요 없기 때문이다.

따라서 프로그래머는 단지 API를 준수하고 이 API를 통한 시스템 호출의 결과로서 운영체제가 어떠한 일을 하는지만 이해하고 있으면 된다. (물론 시스템 콜 자체의 세부사항에 대해서도 알고있으면 좋겠지만)

 

그렇다면 시스템 호출 인터페이스에 필요한 매개변수는 운영체제에게 어떠한 방식으로 전달될까 ?

1. 레지스터를 통한 전달

2. 매개변수의 개수가 많은 경우 메모리에 존재하는 블럭이나 테이블에 저장되고, 이 주소를 레지스터를 통하여 전달

3. 메모리 스택을 통한 전달

 

시스템 콜의 범주에는 프로세스 제어, 파일 관리, 장치 관리, 정보 유지, 통신, 보호의 6가지로 나뉠 수 있다. 이는 각 파트에서 차차 알아보도록 한다.

 

참조

ABRAHAM SILBERSCHATZ, PETER BAER GALVIN, GREG GAGNE / 운영체제 / (주)교보문고 / 2018년