본문 바로가기

Basic/운영체제

운영체제의 구조

반응형

1. 커널과 인터페이스

 

운영체제는 크게 커널과, 인터페이스 두 부분으로 나뉜다.

 

 

 

- 커널(kernel)

 

커널은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을

 

모아놓은 것으로, 자동차에 비유하자면 엔진에 해당한다. 

 

이와 마찬가지로 운영체제의 성능은 커널이 좌우한다.

 

 

- 인터페이스

 

운영체제에도 인터페이스가 있는데, 

 

이는 커널에 사용자와 응용 프로그램의 명령을 전달하고 실행 결과를 돌려주는 역할을 한다.

 

2.  시스템 호출(운영체제의 API)

 

커널 내부에 있는 시스템 호출에 대해 알아보자

 

시스템 호출(system call)은 커널이 자신을 보호하기 위해 만든 인터페이스이다.

 

커널은 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원(하드웨어에)에 직접 

 

접근하는 것을 차단한다. 따라서 자원을 이용하려면 시스템 호출이라는 인터페이스를 이용하여 접

 

근해야 한다. 시스템 호출을 통한 접근은, 요청하여 작업의 결과만 받는 방식이다.

 

정리하자면 운영체제는 커널이 제공하는 서비스를 시스템 호출로 제한하고 다른 방법으로 커널에 

 

들어오지 못하게 막음으로써 컴퓨터 자원을 보호한다.

 

시스템 호출은 커널이 제공하는 서비스를 이용하기 위한 인터페이스이며, 사용자가 자발적으로

 

 

커널 영역에 진입할 수 있는 유일한 수단이다.

 

예를들어 응용 프로그램의 입장에서 시스템 호출을 봐보자

 

어떤 응용 프로그램은 숫자 14와 21을 하드디스크에 저장하려 한다고 가정하자.

 

직접 접근

 

응용 프로그램은 자기 마음에 드는 위치에 데이터를 저장하려 할 것이다. 이 경우

 

다른 사람의 데이터를 지울 수도 있고 내 데이터가 다른 사람에 의해 지워질 수도 있다.

 

 

 

시스템 호출을 통한 접근

 

응용 프로그램이 직접 하드디스크에 데이터를 저장하지 않고 커널이

 

제공하는 write() 함수를 사용하여 데이터를 저장해달라고 요청한다. 

 

응용 프로그램은 데이터가 하드디스크의 어느 위치에 어떤 방식으로 저장되는지 알 수 없다.

 

만약 자신이 저장한 데이터를 읽고 싶다면 read() 함수로 시스템 호출을 이용하여 가져오면 된

 

다. 시스템 호출을 이용하면 커널이 데이터를 가져오거나 저장하는 것을 전적으로 책임지기 

 

때문에 컴퓨터 자원을 관리하기가 수월하다.

 

 

시스템 호출은 커널이 제공하는 시스템 관련 서비스를 모아놓은 것이며 함수 형태로 제공된

 

다. C 언어에서의 printf() 함수도 시스템 호출중 하나이다. 예를 들어

 

사용자가 시스템의 특정 위치에 문자를 출력할 수 있게 되면 문자가 겹치거나

 

남의 문자를 지울 수도 있다. 그러나 printf() 함수를 사용하면 화면의 문자와 겹치는 부분 없

 

이 문자를 쉽게 화면에 출력할 수 있다. 정리하자면 응용 프로그램이 하드웨어 자원에 접근하

 

거나 운영체제가 제공하는 서비스를 이용하려 할 때는 시스템 호출을 사용해야 한다.

 

그래서 시스템호출을 운영체제의 API라고도 할 수 있다.

 

3. 드라이버

 

커널과 하드웨어의 인터페이스는 드라이버(driver)가 담당한다.

 

컴퓨터 하드웨어는 종류가 아주 많은데, 운영체제가 많은 하드웨어를 다 사용할 수 있는 환경을 제

 

공하려면 각 하드웨어에 맞는 프로그램을 직접 개발해야한다. 그러나 커널이 모든 하드웨어에 맞

 

는 인터페이스를 다 개발하기는 어렵다. 또한 각 하드웨어의 특성은 하드웨어 제작자가 가장 잘 알

 

고 있기 때문에 하드웨어 제작자가 관련 소프트웨어를 만드는 것이 더 유리하다.

 

커널은 입출력의 기본적인 부분만 제작하고, 하드웨어의 특성을 반영한 소프트웨어를 하드웨어

 

제작자에게 받아 커널이 실행될 때 함께 실행되도록 한다. 이때 하드웨어 제작자가 만든

 

소프트웨어를 디바이스 드라이버라고 부른다. 마우스, 키보드와 같이 복잡하지 않은 디바이

 

스 드라이버는 커널에 포함되어 있어 컴퓨터에 꽂기만 하면 작동되지만 그래픽카드, 프린터

 

와 같이 크기가 크고 복잡한 디바이스 드라이버는 사용자가 직접 설치해야 한다. 그래서

 

하드웨어는 커널과 직접 연결되기도 하고 하드웨어 제작자가 제공하는 드라이버를 통해 연결되기

 

도 한다.

 

 

4. 커널의 구성

 

운영체제의 핵심 기능을 모아놓은 커널이 주로 하는 일은 프로세스 관리, 메모리 관리, 파일

 

 

시스템 관리, 입출력 관리, 프로세스 간 통신 관리 등이다.

 

- 프로세스 관리 : 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공한다.

 

- 메모리 관리 : 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공한다.

 

- 파일 시스템 관리 : 데이터를 저장하고 접근할 수 있는 인터페이스를 제공한다.

 

- 입출력 관리 : 필요한 입력과 출력 서비스를 제공한다.

 

 

- 프로세스 간 통신 관리 : 공동 작업을 위한 각 프로세스 간 통신 환경을 지원한다.

 

커널의 핵심 기능은 유기적으로 복잡하게 얽혀 있다. 커널은 이러한 기능을 어떻게 구현하는

 

 

가에 따라 단일형 구조 커널, 계층형 구조 커널, 마이크로 구조 커널로 구분된다.

 

5. 커널의 종류

 

5-1) 단일형 구조 커널

 

단일형 구조커널은 초창기의 운영체제 구조로, 커널의 핵심 기능을 구현하는 모듈들이 구분 

 

없이 하나로 구성되어 있다. 단일형 구조에 속하는 대표적인 운영체제는 MS-DOS, VMS, 초기

 

의 유닉스 운영체제이다. 초기에 운영체제를 만들 때는 기능을 구현하기에 바빴기 때문에 모

 

듈을 분리하여 구현할 만한 여력이 없었다. 단일형 구조를 프로그램에 비유하면 함수를 거의 

 

사용하지 않고 main()에 모든 기능을 구현한 형태와 같다.

 

 

 

- 단일형 구조 커널의 장점

 

 

모듈이 거의 분리되지 않았기 때문에 모듈 간의 통신 비용이 줄어들어 효율적인 운영이 가능

 

다. 프로그램에서 main()에 모든 기능을 넣으면 함수를 호출하는 오버헤드가 없어서 프로그

 

이 빨라지는 것과 같은 이치이다.

 

 

- 단일형 구조 커널의 단점

 

- 모든 모듈이 하나로 묶여 있기 때문에 버그나 오류를 처리하기가 어렵다.

 

- 운영체제의 여러 기능이 서로 연결되어 있어 상호 의존성이 높기 때문에 기능상의 작은 결함

 

이 시스템 전체로 확산될 수 있다.

 

- 다양한 환경의 시스템에 적용하기 어렵다. 여러 종류의 컴퓨터에 이식하려면 수정이 필요한

 

데 단일형 구조에서는수정이 어렵기 때문에 이식성이 낮다.

 

- 현대의 운영체제는 매우 크고 복잡하기 때문에 완전 단일형 구조의 운영체제를 구현하기가 

 

렵다.

 

 

 

5-2) 계층형 구조 커널

 

계층형 구조 커널은 단일형 구조 커널이 발전된 형태로, 비슷한 기능을 가진 모듈을 묶어서 하

 

나의 계층으로 만들고 계층 간의 통신을 통해 운영체제를 구현하는 방식이다. 비슷한 기능을 

 

모아 모듈화했기 때문에 단일형 구조보다 버그나 오류를 쉽게 처리 할 수 있다. 오류가 발생했

 

을 때 전체 커널을 고치는 것이 아니라 해당 계층만 따로 수정하면 되기 때문에 디버깅 하기

 

도 쉽다. 마이크로소프트의 윈도우를 비롯해 오늘날의 운영체제는 대부분 이 구조로 이루어

 

져 있다.

 

 

 

5-3) 마이크로 구조 커널

 

마이크로 구조 커널의 운영체제는 프로세스 관리,메모리 관리,프로세스 간 통신 관리 등 가

 

장 기본적인 기능만 제공한다. 

 

계층형 구조 커널의 운영체제는 다양한 하드웨어와 사용자의 요구를 수용하기 위해 계속 계

 

층과 기능을 추가했다. 그래서 커널의 크기가 계속 커지고 필요한 하드웨어의 용량이 늘어났

 

으며, 커널 소스가 방대해짐에 따라 오류를 잡기도 어려워졌다. 이러한 계층형 구조의 접근 방

 

식과 반대로 개발된 커널이 마이크로 구조 커널이다. 커널의 구조를 살펴보면 다른 커널에 비

 

해 운영체제의 많은 부이 사용자 영역에 구현되어 있다. 커널은 메모리 관리와 프로세스 간

 

의 동기화 서비스를 제하며, 메모리 관리자와 동기화 모듈은 프로세스 간 통신 모듈로 연결

 

되어 있다. 그러므로 각 듈은 세분화되어 존재하고 모듈 간의 정보 교환은 프로세스 간 통신

 

을 이용하여 이루어진다. 마이크로 구조에서 각 모듈은 독립적으로 작동하기 때문에 하나의 

 

모듈이 실패하더라도 전체 운영체제가 멈추지 않는다. 또한 많은 컴퓨터에 이식하기 쉽고 커

 

널이 가벼워 CPU 용량이 작은 시스템에도 적용이 가능하다. 이 구조를 사용하는 대표적인 운

 

영체제인 마하는 애플의 PC 운영체제인 OS X과 모바일 운영체제인 IOS의 커널로 사용되어 유

 

명해졌다.

 

 

 

 

4. 가상머신

 

가상머신은 운영체제와 응용 프로그램 사이에서 작동하는 프로그램으로, 가상머신을 설치하면 응

 

용 프로그램이 모두 동일한 환경에서 작동하는 것처럼 보인다. 따라서 개발자가 하나의 코드만 만

 

들면 여러 운영체제에서 똑같이 실행할 수 있다. 자바는 유닉스와 윈도우에서 작동하는 다양한 가

 

상머신을 만들어 배포하는데 이를 자바 가상머신Java Virtual Machine, JVM이라고 한다.

 

 

가상머신의 개념은 다양한 곳에서 사용된다. 예를 들어 윈도우 운영체제 환경에서 유닉스를

 

사용하고 싶다고 가정해보자. 이럴때 윈도우 운영체제에 유닉스 가상머신을 설치하여 사용하면 

 

된다. 가상머신을 사용하면 호환성이 높아지지만 응용 프로그램이 가상머신을 통해서만 작동하

 

기 때문에 느려진다는 단점도 있다.

 

 

 

 

 

 

반응형

'Basic > 운영체제' 카테고리의 다른 글

ssl 인증서 재발급 과정  (0) 2020.11.11
버퍼의 개념  (0) 2020.08.11
운영체제의 정의와 역할, 필요성, 목표  (0) 2020.01.30
Context Switching  (0) 2020.01.28
Linux - Permission  (0) 2019.11.07