1. 운영체제란 무엇인가?

 운영체제 공부를 시작하며 우선 운영체제가 무엇인지에 대한 글을 정리해보려 합니다.

 

 운영체제는 윈도우, 맥, 안드로이드, IOS 등과 같이 실생활에서도 자주 들어볼 수 있는 단어와 밀접한 관계가 있습니다. 운영체제는 컴퓨터를 동작시키는 데 도움을 주는 소프트웨어인데 사실 운영체제가 없어도 컴퓨터를 동작시킬 수 있습니다. 하지만 컴퓨터 사용자가 하드웨어 자체를 다룬다는 것은 쉽지 않은 일이기 때문에 기본적으로 컴퓨터에 운영체제를 탑재하는 것입니다.

 

 운영체제는 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어로 하드웨어 + 운영체제를 컴퓨터 시스템이라고도 부릅니다. 우리가 사용하는 각종 소프트웨어들은 바로 이 컴퓨터 시스템 위에서 작동하게 됩니다.


 

2. 운영체제의 역할은 무엇인가?

 운영체제가 하는 역할이 무엇인지에 대해 간략하게 알아보겠습니다. 각 사항에 대한 자세한 내용은 추후 공부를 진행하면서 자세하게 정리해볼 계획입니다.

 

 운영체제의 역할은 크게 두 가지로 나눌 수 있습니다. 사용자를 위한 역할, 하드웨어를 위한 역할입니다.

1) 사용자를 위한 역할

 운영체제는 사용자에게 컴퓨터 시스템을 편리하게 사용할 수 있는 인터페이스를 제공합니다. GUI와 CLI가 대표적인 예시입니다.

GUI와 CLI

2) 하드웨어를 위한 역할

 운영체제의 가장 핵심적인 기능은 각종 하드웨어를 관리하는 일입니다. 이에 운영체제를 resource manager라고 부르기도 합니다. 즉, 운영체제는 컴퓨터 시스템 내의 자원을 효율적으로 관리하는 역할을 합니다.

 

 운영체제가 하는 일은 많지만 본 글에서는 대표적인 기능 몇 가지만 짤막하게 소개하고 추후 각 기능이나 개념에 대해 자세히 다뤄보겠습니다. 

(1) 프로세스 관리

 컴퓨터를 사용할 때 브라우저를 쓰면서 노래를 듣고 게임까지 하는 경우를 생각해봅시다. 브라우저, 음악, 게임은 모두 프로세스에 해당합니다. 컴퓨터의 CPU가 하나인 경우 CPU는 한 번에 한 프로세스만을 처리할 수 있는데도 불구하고 이를 동시에 하고 있다고 느낄 수 있는 이유는 운영체제에서 적절한 방식으로 프로세스들을 관리해주기 때문입니다. 이와 관련된 내용으로는 시분할 방식, CPU 스케쥴링과 같은 개념들이 있습니다.

(2) 메모리 관리

 메모리는 CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억 장치입니다. 모든 프로그램은 메모리에 올라와서 실행됩니다. 오늘날에는 여러 프로그램을 동시에 실행시키기 때문에 메모리 관리를 하지 않으면 프로그램끼리 메모리 침범 이슈와 같은 문제들이 생기게 됩니다. 따라서 이러한 문제 해결을 위해 운영체제에서 메모리를 관리해줍니다. 또한 한정된 메모리 공간을 가지고 어떤 프로그램에 얼마만큼 메모리를 할당해줄 것인지 역시 관리합니다. 물리적 메모리 관리 방식으로는 고정 분할 방식, 가변 분할 방식, 가상 메모리 방식 등이 있습니다.

(3) 하드웨어 관리

 운영체제는 사용자의 하드웨어에 대한 직접 접근을 막습니다. 예를 들어 사용자가 하드디스크의 특정 영역에 데이터를 직접 저장하려는 경우 중요한 데이터를 덮어써 버릴 위험이 있습니다. 또한 누군가의 악의적인 공격으로 컴퓨터 시스템에 문제를 일으킬 수 있습니다. 따라서 운영체제는 하드웨어 관리를 직접 하여 사용자의 실수를 방지하고 고의적인 공격에 대한 방어를 합니다. 또한 하드 디스크의 많은 파일들을 효율적으로 저장하고 관리해주는 역할도 수행합니다.


 

3. 운영체제의 구조

 위에서 살펴본 것처럼 다양한 기능을 수행하는 운영체제의 구조를 간략히 살펴보겠습니다.

 

 운영체제처럼 큰 규모의 프로그램이 메모리에 모두 올라간다면 한정된 메모리 공간의 낭비가 심하게 됩니다. 따라서 항상 필요한 부분만을 컴퓨터 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때만 메모리에 올리게 됩니다. 이때 메모리에 항상 상주하는 운영체제의 부분을 커널이라고 합니다. 커널은 운영체제 코드 중에서도 가장 핵심적인 부분이고 커널 자체를 좁은 의미에서의 운영체제라고 부르기도 합니다. 반면 커널 뿐 아니라 각종 주변 시스템 유틸리티(파일 복사 기능 등)를 포함한 개념이 커다른 의미에서의 운영체제입니다.

 

운영체제의 구조

 운영체제의 구조는 대략적으로 위 그림과 같고 크게는 인터페이스와 커널로 나눌 수 있습니다.

 

1) 인터페이스

 사용자는 커널에 직접 접근할 수 없기 때문에 운영체제가 제공하는 인터페이스를 사용해 커널에 명령을 내려야 합니다. 사용자와 애플리케이션은 인터페이스를 통해 커널에 명령을 전달하고, 인터페이스를 통해 실행결과를 전달받습니다.  운영체제가 제공하는 대표적인 인터페이스가 GUI, CLI가 있습니다.

2) 커널

 커널의 경우 프로세스, 메모리, 저장장치를 관리하는 핵심적인 기능을 합니다. 또한 커널에는 시스템 호출(System Call)과 드라이버라는 것이 있습니다.

(1) 시스템 호출(System Call)

 시스템 호출은 커널이 자신을 보호하기 위해 만든 인터페이스입니다. 애플리케이션이 직접 하드웨어 자원에 접근하거나 수정하려 할 때 실수(중요 데이터를 덮어쓴다던지,, 등등)를 할 수 있습니다. 이러한 사태를 막기 위해 커널은 시스템 콜이라는 시스템 자원 사용과 관련된 함수를 제공합니다. write(), read(), printf() 같은 것들이 그 예입니다. 즉 애플리케이션이 하드웨어에 접근해야하거나 운영체제가 제공하는 서비스를 이용하기 위해서는 커널 함수를 호출하는 시스템 콜을 사용해야 합니다. 또한 시스템 콜을 제공함으로써 운영체제는 컴퓨터 자원을 보호하게 됩니다.

 

 시스템 호출은 후에 알아볼 인터럽트 중 하나인 소프트웨어 인터럽트(Trap)의 한 종류입니다.

# 인터럽트(Interrupt)?
 보통 프로세스가 작업 중 운영체제에게 CPU 제어권을 넘기기 위해 Interrupt를 사용합니다. 인터럽트 당한 시점에 레지스터와 program counter를 save한 후 CPU의 제어를 운영체제에 넘기고 운영체제는 해당 인터럽트에 맞는 인터럽트 처리 루틴을 실행한다.

# Interrupt
1. Interrupt (하드웨어 인터럽트)
    ➡ 하드웨어가 발생시킨 인터럽트
2. Trap (소프트웨어 인터럽트, 넓은 의미에서의 인터럽트 중 하나입니다.)
    ➡ 프로그램이 스스로 자신의 CPU 자원을 운영체제에게 넘기는 것이라 엄밀히는 인터럽트가 아니다.
    ➡ Exception(프로그램이 오류를 범한 경우)과 System call(프로그램이 커널 함수를 호출한 경우)이 있다.

(2) 드라이버

 커널과 하드웨어의 인터페이스를 드라이버라고 합니다. 보통 커널은 입출력의 기본적인 부분만 제작하여 마우스, 키보드 같은 하드웨어는 꽂기만 해도 보통 작동하게 됩니다. 하지만 복잡한 하드웨어의 경우 하드웨어 제작사가 만든 소프트웨어를 따로 설치하여 사용해야합니다. 이때 이 소프트웨어를 디바이스 드라이버라고 합니다. 프린터나 스캐너 같은 장비를 구매하면 설치해야하는 디바이스 드라이버라는 프로그램을 본 적이 있으실 것 같습니다.


4. 마치며

 자바의 JVM과 쓰레드에 대해 알아보다 운영체제 지식의 필요성을 느끼고 본격적인 운영체제 공부 시작 전에 운영체제란 무엇인지, 운영체제가 하는 일은 무엇인지 등에 대해 알아보았습니다.  

 

 운영체제는 사용자가 컴퓨터를 쉽게 사용할 수 있도록 도와주며 컴퓨터 자원들을 효율적으로 관리해줍니다. 이를 위한 다양한 방법론을 정리해놓은 운영체제는 컴퓨터 동작에 대한 깊이 있는 이해를 위해 꼭 필요한 지식인 것 같습니다. 앞으로 공부를 진행하면서 운영체제에 대한 정리를 해보려 하는데 잘못된 내용 지적해주시면 감사하겠습니다! 

 

반응형
복사했습니다!