운영체제란?
- 운영체제는 사용자에게 편리한 인터페이스 환경을 제공하고, 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어를 말한다.
- 즉, 운영체제는 각각의 응용 프로그램이 활동할 수 있는 환경을 제공하고, 응용 프로그램이 필요로 하는 컴퓨터 자원을 나누어주며, 응용 프로그램으로부터 컴퓨터 자원을 보호하는 역할을 한다.
- 운영체제는 응용 프로그램이나 사용자에게 컴퓨터 자원을 사용할 수 있는 인터페이스를 제공하는데, 이를 통해 응용 프로그램이나 사용자에게 모든 컴퓨터 자원을 숨기고 정해진 방법으로만 컴퓨터 자원을 사용하도록 제한한다.
인터페이스
하드웨어 인터페이스
- 운영체제는 CPU, 메모리, 키보드, 마우스와 같은 다양한 하드웨어를 일관된 방법으로 사용할 수 있도록 해주는 하드웨어 인터페이스를 제공한다.
- 하드웨어 인터페이스는 하드웨어 장치와 상호작용하기 위해 만들어진 컴퓨터 프로그램으로, 운영체제는 하드웨어 인터페이스가 자동으로 설치되게 함으로써 하드웨어의 종류와 상관없이 사용할 수 있게 해준다.
사용자 인터페이스
- 하드웨어 인터페이스가 다양한 부품을 편리하게 사용하기 위한 것이라면, 사용자 인터페이스는 사용자가 운영체제를 편리하게 사용하도록 지원하기 위한 것이다.
- 운영체제는 그래픽 사용자 인터페이스(GUI), 터치스크린 등을 제공함으로써 사용자가 운영체제를 편리하게 사용할 수 있도록 한다.
운영체제의 구조
커널과 인터페이스
- 운영체제는 크게 사용자와 응용 프로그램에 인접한 인터페이스와, 운영체제의 핵심 기능을 모아놓은 커널로 나뉜다.
- 커널은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것으로, 운영체제의 성능을 좌우한다.
- 인터페이스는 커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할을 한다.
- 운영체제는 커널과 인터페이스를 분리하여, 같은 커널을 사용하더라도 다른 인터페이스를 가진 형태로 제작할 수 있으며, 만약 같은 커널이라도 다른 인터페이스가 장착되면 사용자에게는 다른 운영체제처럼 보인다.
시스템 호출과 드라이버
- 시스템 호출은 응용 프로그램으로부터 시스템 자원을 보호하기 위해 제공하는 인터페이스로, 시스템 자원에 접근하거나 운영체제가 제공하는 서비스를 이용하려면 시스템 호출을 이용해야 한다.
- 운영체제는 커널이 제공하는 서비스를 시스템 호출로 제한하고 다른 방법으로 커널에 들어오지 못하게 막음으로써 컴퓨터 자원을 보호한다.
- 즉, 시스템 호출은 커널이 제공하는 서비스를 이용하기 위한 인터페이스로 함수 형태로 제공된다.
- 응용 프로그램과 커널의 인터페이스가 시스템 호출이라면, 커널과 하드웨어의 인터페이스는 드라이버가 담당한다.
- 커널은 입출력의 기본적인 부분만 제작하고, 하드웨어의 특성을 반영한 소프트웨어인 드라이버를 커널이 실행될 때 함께 실행되도록 한다.
리눅스 커널의 장치 드라이버와 시스템 호출
- 리눅스 커널의 장치 드라이버
static struct file_operations hw_mydrv_fops = {
.owner = THIS_MODULE,
.open = mydrv_open,
.release = mydrv_release,
.read = mydrv_read,
.write = mydrv_write,
.unlocked_ioctl = mydrv_ioctl,
};
static struct miscdevice hw_mydrv_driver = {
.minor = MISC_DYNAMIC_MINOR,
.name = "mydrv",
.fops = &hw_mydrv_fops,
};
- 응용 프로그램에서의 시스템 호출
char gbuff[100];
int main(int argc, char*argv[])
{
int leng;
int fp;
fp = open("/dev/mydrv", ....); // mydrv_open 호출
gbuff[0] = 10;
gbuff[1] = 20;
leng = 2;
write(fp, (void*) gbuff, leng); // mydrv_write호출
close(fp); // mydrv_release호출
return 0;
}
- 응용 프로그램에서 open() 함수를 실행하면 libc에서 제공한 open 함수 속에서 인수 데이터를 레지스터에 넣고 소프트웨어 인터럽트를 실행한다.
- 소프트웨어 인터럽트에 의해 인터럽트 서비스 루틴이 있는 커널의 인터럽트 처리 위치를 찾아 해당 주소로 실행을 옮긴다.
- 시스템 호출 함수 중 해당 이넡럽트 벡터 숫자를 이용해 함수의 위치를 탐색하고 해당 주소로 이동한다. 또한 커널 속의 장치 목록에서 해당 장치를 찾고 드라이버 함수 .open에서 정의된 mydrv_open()이 호출된다.
- mydrv_open() 함수의 return에 따라 커널의 함수 호출이 완료되고, 커널은 다시 해당 응용 프로그램을 스케줄링에 의해 활성화하고 해당 프로세서로 전환한다.
커널의 구성
- 운영체제의 핵심 기능을 모아놓은 커널이 주로 하는 일은 프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력 관리, 프로세스 간 통신 관리 등이다.
프로세스 관리 | 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공한다. |
메모리 관리 | 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공한다. |
파일 시스템 관리 | 데이터를 저장하고 접근할 수 있는 인터페이스를 제공한다. |
입출력 관리 | 필요한 입력과 출력 서비스를 제공한다. |
프로세스 간 통신 관리 | 공동 작업을 위한 각 프로세스 간 통신 환경을 지원한다. |
- 커널의 핵심 기능은 유기적으로 복잡하게 얽혀 있으며, 커널은 이러한 기능을 어떻게 구현하는가에 따라 단일형 구조 커널, 계층형 구조 커널, 마이크로 구조 커널로 구분된다.
단일형 구조 커널
- 단일형 구조 커널은 초창기의 운영체제 구조로, 커널의 핵심 기능을 구현하는 모듈들이 구분없이 하나로 구성되어 있다.
- 단일형 구조 커널에 속하는 대표적인 운영체제는 MS-DOS, VMS, 초기의 유닉스 운영체제로, 단일형 구조를 프로그램에 비유하면 함수를 거의 사용하지 않고 main()에 모든 기능을 구현한 형태와 같다.
장점 | 모듈이 거의 분리되지 않았기 때문에 모듈 간의 통신 비용이 줄어들어 효율적인 운영이 가능하다. |
단점 | - 모든 모듈이 하나로 묶여 있기 때문에 버그나 오류를 처리하기 어렵다. - 운영체제의 여러 기능이 서로 연결되어 있어 상호 의존성이 높기 때문에, 기능상 작은 결함이 시스템 전체로 확산될 수 있다. - 여러 종류의 컴퓨터에 이식하려면 수정이 필요한데 단일형 구조에서는 수정이 어렵게 때문에 이식성이 낮다. |
계층형 구조 커널
- 계층형 구조 커널은 단일형 구조 커널이 발전된 형태로, 비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고 계층 간의 통신을 통해 운영체제를 구현하는 방식이다.
- 오류가 발생했을 때 전체 커널을 고치는 것이 아니라 해당 계층만 따로 수정하면 되기 때문에 버그나 오류를 쉽게 처리할 수 있다.
- 마이크로소프트의 윈도우를 비롯해 오늘날의 운영체제는 대부분 계층형 구조로 이루어져 있다.
마이크로 구조 커널
- 계층형 구조 커널의 운영체제는 다양한 하드웨어와 사용자의 요구를 수용하기 위해 계속 계층과 기능을 추가했는데, 그로 인해 커널의 크기가 계속 커지고 필요한 하드웨어의 용량이 늘어났다.
- 이러한 계층형 구조의 접근 방식과 반대로 개발된 커널이 마이크로 구조 커널이다.
- 마이크로 구조 커널의 운영체제는 프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공하고, 다른 기능은 사용자 영역에서 제공하도록 구현되었다.
- 각 모듈은 세분화되어 존재하고 모듈 간의 정보 교환은 프로세스 간 통신을 이용하여 이루어진다.
- 마이크로 구조에서 각 모듈은 독립적으로 동작하기 때문에 하나의 모듈이 실패하더라도 전체 운영체제가 멈추지 않는다.
- 또한 많은 컴퓨터에 이식하기 쉽고 커널이 가벼워 CPU 용량이 작은 시스템에도 적용이 가능하다.
- 마이크로 구조를 사용하는 대표적인 운영체제인 마하는 애플의 PC 운영체제인 OS X와 모바일 운영체제인 iOS의 커널로 사용되고 있다.
'Computer Science > Operating System' 카테고리의 다른 글
프로세스 제어 블록과 문맥교환 (0) | 2022.03.15 |
---|---|
프로세스와 스레드 (0) | 2022.03.15 |
병렬 처리 (0) | 2022.03.15 |
컴퓨터 성능 향상 기술 (0) | 2022.03.14 |
컴퓨터 구조 (0) | 2022.03.14 |