본문 바로가기
CS 기초/Operating System

[OS] 운영체제의 구조와 역할을 간단하게 알아보자

by woohyeon 2019. 11. 27.
반응형

개인적으로 학습하는 내용이라 틀린 내용이 있을 수 있습니다. 참고 도서 [개념 이해를 위한 운영체제]

[운영체제란?]

운영체제(Operating System, OS)를 딱 한 문장으로 표현하긴 어렵다. 관점에 따라 다를 수 있으며 기능도 여러 가지이기 때문이다. 일단 운영체제는 일종의 시스템이다. 시스템은 "어떤 주어진 목적을 달성하기 위해 여러 개의 구성 요소들이 유기적으로 결합된 집합체" 를 의미한다. 운영체제의 목적은 두 가지 관점에서 설명할 수 있다. 하나는 사용자의 입장, 하나는 시스템(컴퓨터)의 입장.

사실 우리가 평소에 컴퓨터를 사용하면서 컴퓨터의 입장에서 운영체제를 생각해본 적은 대부분 없을 것이다. 하지만 컴퓨터를 배우기 위해선 컴퓨터의 입장에서 생각해야 한다. 예를 들어 키보드 또는 마우스와 같은 하드웨어 또는 하드 디스크의 파일 등은 컴퓨터 시스템에선 모두 File로서 취급이 된다. 그리고 프로그램이 이것들과 상호작용을 하기 위해선 초기화가 필요한데, 파일 입출력 프로그래밍을 해봤다면 알겠지만 open 함수를 사용하여 파일 포인터를 초기화한다. 즉 사용할 수 있도록 연결해주는 작업이다. 만약 운영체제가 없었다면 이런 과정들은 우리의 몫이란 이야기다.

또한 컴퓨터 구조를 배웠다면 알겠지만 cpu가 프로그램을 실행하는 과정이 그리 간단하지 않다. 하드 디스크와 같은 보조기억장치에 저장된 프로그램의 주소를 메모리에 load시키고 cpu는 프로그램 카운터(PC)를 이용하여 메모리에 로드된 주소를 실행한다. 우리가 볼 땐 이러한 몇몇 행위들이 간단해 보이지만, 실제론 꽤 복잡한 과정을 거친다. 즉 사용자의 입장에서 운영체제는 유저에게 시스템 사용에 있어서 편의성을 제공해주는 것이 제일 큰 목적이자 존재 이유이다.

컴퓨터의 입장에서 운영체제의 목적은 CPU관리, 프로세스 및 파일 관리, 시스템 자원(메모리)들을 적절하고 효율적으로 할당, 관리 및 보호함으로써 오류나 잘못된 자원 사용 방지를 막아주기 위함이다.

다음은 사용자가 응용 프로그램을 실행시키기 위해 마우스로 아이콘을 더블 클릭했을 때 운영체제에 의해 일어나는 과정들이다.

1. 마우스의 더블 클릭을 처리한다. (인터럽트)
2. 더블 클릭한 좌표를 통해 보조 기억장치에서 해당 응용 프로그램의 실행 파일(exe)을 찾는다. (파일 시스템)
3. 실행 파일을 메모리로 load 시키기 위해 메모리의 빈 공간을 찾는다. (메모리 관리)
4. 메모리 공간의 text 영역에 실행 파일의 코드를 load 시킨다. (입출력 장치관리)
5. cpu의 프로그램 카운터(PC) 값을 조정하여 프로그램의 entry point(main 함수)의 주소를 실행시키도록 한다. (CPU 관리)

위 처리들이 모두 운영체제가 해주는 작업이며, 실제론 더 많고 세세한 사항들이 존재한다.

 

[운영체제의 3가지 요소]
운영체제의 3가지 요소를 말한다면 보통 다음과 같이 3가지로 말할 수 있다. 여기선 간단하게 살펴보고, 앞으로 차차 포스팅에서 다룰 내용들이다. 

  • 가상화 (Virtualization)
  • 병행성 (Concurrency)
  • 영속성 (Persistence)

가상화는 말 그대로 실제론 존재하지 않는 것을 가상으로 만들어 실질적인 효과를 내는 것을 말한다. 완전한 정의를 내리기 애매하며 상황마다 다르게 적용되기 때문에 일단은 대략적인 뜻만 알아두면 된다. 가상화는 크게 CPU의 가상화와 메모리의 가상화로 구분된다.

병행성은 어떤 처리를 동시에 하는 것을 말한다. 그러나 실제로(물리적으로) 동시에 처리하는 것이 아니라 그렇게 보이도록 하는 것이다. 예를 들어 cpu는 속도가 매우 빠르기 때문에 실제론 특정한 명령을 순서대로 처리하지만 우리가 보기엔 한 번에 되는 것처럼 보인다. 반대로 정말 물리적으로 동시에 진행 가능한 구조를 병렬성(Parallelism)을 가진다고 한다.

영속성 또는 지속성은 휘발성을 가진 메인 메모리(RAM)가 아닌 하드 디스크와 같은 곳에 데이터를 영구적으로 저장하는 것을 말한다. 지속성이 없다면 컴퓨터의 전원을 끌 경우 데이터가 모두 사라진다.  

[운영체제와의 상호작용]
아래는 하드웨어와 운영체제 그리고 사용자와의 관계를 나타낸 구조이다. 사실 운영체제와 하드웨어 사이에는 우리에게 익숙한 이름인 장치 드라이버 라는 것도 존재한다. 

Wikipedia

 

[운영체제의 구조]

이해하기 쉽게 운영체제의 구조를 간단하게만 한 번 살펴보자. 아래 사진은 유닉스 구조를 간략화한 그림이다.


자세하게 살펴볼 필요는 없으며 대략적인 구조만 이해하자. 우선 커널(Kernel)이라고 하는 부분이 운영체제의 심장과 같은 핵심적인 부분이다. 커널은 운영체제의 대부분의 기능을 수행한다. 커널은 저수준에서 여러 API를 통해 하드웨어와 밀접하게 상호 작용을 한다. 

커널 위에 셸(shell)이라는 것이 있다. 셸은 껍데기라는 뜻으로 운영체제의 제일 바깥쪽에 위치하여 사용자와의 인터페이스를 담당한다. 즉 우리가 운영체제를 쉽게 사용할 수 있도록 제공해주는 인터페이스가 셸이며, 셸은 유저와 소통하여 커널에 명령을 내린다. 커널과 셸 사이의 경계를 기준으로 외부는 사용자 영역이라 하며 내부를 커널 영역이라 한다. 

셸은 CLI(Command Line Interface)GUI(Graphical User Interface)로 나뉘며 Windows의 명령 프롬프트(cmd, 도스창), 유닉스의 bash(흔히 터미널이라고 부르는)가 CLI 타입의 셸이다. GUI는 우리가 Windows 운영체제에서 사용하는 인터페이스라고 생각하면 된다. 즉 마우스를 통해 아이콘으로 프로그램을 실행하거나 여러 작업을 하는 등 커맨드로 작업을 처리하는 것이 아닌 그래픽적 요소로 컨트롤하는 환경을 말함.  참고로 셸은 엄밀히 따지면 운영체제에 속하지 않는다고 한다. 단지 유저의 입장에서 운영체제를 사용하기 위한 필수적인 응용 프로그램일 뿐이고, Windows를 제외한 OS에서는 셸을 운영체제의 일부로 보지 않는다고 한다.  

우리는 보통 사용자 영역에서 프로그램을 작성하기 위해 C, C++, C#, Java 등과 같은 고급 언어를 사용하여 작성한다. 이러한 프로그램은 보통 사용자 모드에서 동작한다. 하지만 프로그램이 하는 작업들 중엔 메모리 관련 혹은 입출력과 같이 운영체제만이 수행할 수 있는 작업들이 존재한다. 이러한 서브 루틴들은 사용자 모드의 프로그램에서 직접 호출 및 사용할 수 없다. 이를 위해 운영체제는 시스템 호출(system call)이라는 일종의 API와 같은 인터페이스를 제공해준다. 사용자 모드의 프로그램은 시스템 호출을 통하여 운영체제 내부의 적절한 서비스 루틴을 간접적으로 호출하게 된다. 예를 들어 특정 장치(모니터)에 데이터 출력하기 위해 printf() 함수를 사용했다면, 실제론 다음과 같이 내부적으로 유닉스의 write()라는 시스템 호출 함수를 이용하여 그 결과를 프로그램에 전달하는 것을 알 수 있다. 이외에도 시스템 호출과 관련된 부분으로 메모리, 네트워크 통신, 디바이스 제어, 프로세스 제어 등이 있다. 즉 시스템 콜은 응용 프로그램이 커널과 분리된 상태에서 안전하게 커널에 접근하여 커널의 기능을 이용할 수 있는 행위라 할 수 있다. 

 




댓글