AI & CS 지식/운영체제

[혼공컴운] 9. 운영체제 시작하기

rahites 2024. 9. 7. 09:41

운영체제 시작하기

1. 운영체제를 알아야 하는 이유

지금까지는 컴퓨터 하드웨어가 어떻게 구성되어 있고, 어떤 방식으로 소통하는지에 대해 알아 보았다. 이제는 이러한 하드웨어 부품들을 관리하는 운영체제에 대해 공부해보자.

 

운영체제란?

모든 프로그램은 하드웨어를 필요로 한다. 어떤 연산을 하기 위해서는 CPU가 필요하고, 저장을 하기 위해서는 하드 디스크가 필요하다. 이때 프로그램 실행에 마땅히 필요한 요소들을 가리켜 시스템 자원(자원)이라고 한다. 지금까지 공부한 CPU, 메모리, 입출력장치 등의 컴퓨터 부품들은 모두 자원이라고 볼 수 있다.

 

운영체제(Operating System)는 이러한 자원들을 실행할 프로그램에 필요한만큼 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이다.

 

운영체제도 다른 프로그램들과 마찬가지로 실행되기 위해 메모리에 적재되어야 한다. 하지만, 운영체제는 특별하기 때문에 항상 컴퓨터가 부팅될 때 메모리 내에 있는 커널 영역(Kernel Space)이라는 공간에 별도로 적재되어 실행된다. 이 때 커널 영역을 제외한 나머지 영역은 사용자 영역(User Space)이라고 한다.

👉 운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 응용 프로그램들에 자원을 할당하고, 올바르게 실행되도록 돕는구나!

 

운영체제는 사용자가 실행한 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에서 삭제한다. 그리고 메모리에 존재하는 프로그램이 올바르게 실행될 수 있도록 CPU 자원을 할당하며 관리하는 역할을 담당한다. 운영체제는 또한 한 부분에서는 CPU, 다른 한 부분에서는 메모리와 같이 관리할 자원별로 기능이 나누어져 작동한다.

 

운영체제가 없다면 프로그램을 메모리에 적재하고, CPU에 연산을 명령하고, 모니터에 계산 결과를 출력하는 등의 역할을 모두 개발자가 코드로써 작성해야만 한다. 그렇기에 우리는 운영체제가 필요하고, 운영체제를 알아야지만 컴퓨터를 사용하면서 운영체제가 우리에게 건네는 말을 제대로 이해할 수 있다.

 

운영체제를 알아야지만 하드웨어와 프로그램을 더 잘 이해할 수 있기에 앞으로 운영체제를 한 번 이해해보는 시간을 가지려 한다.

 

2. 운영체제의 큰 그림

오케이! 그럼 운영체제의 중요성은 알았겠다. 운영체제가 어떤식으로 작동하는지 큰 그림으로 먼저 알아보자. 

 

커널(Kernel)

커널이란 운영체제의 핵심 서비스를 담당하는 부분을 의미한다. 그렇다면 여기서 핵심 서비스란 무엇일까? 일반적으로는 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능을 의미한다. 어떤 커널을 사용하는지에 따라 프로그램이 하드웨어를 이용하는 양상이 달라지고, 컴퓨터 전체의 성능이 달라지기도 한다.

 

다만 운영체제가 제공하는 서비스 중 커널에 포함되지 않는 경우가 조금 있는데 대표적인 경우는 사용자 인터페이스(UI; User Interface)이다. 사용자 인터페이스에는 그래픽 유저 인터페이스(GUI)커맨드 라인 인터페이스(CLI)가 존재하며 GUI는 윈도우에서 볼 수 있는 아이콘, CLI는 우분투 등에서 볼 수 있는 터미널 형태이다.

 

이러한 UI들은 컴퓨터와 사용자가 상호작용하기 위한 통로일 뿐 커널에 속한 기능은 아니다. 그렇다면 이제 운영체제가 커널을 통해 수행하는 기능에 대해 알아보자.

 

이중 모드와 시스템 호출

운영체제는 응용 프로그램이 제멋대로 하드웨어에 접근하고 조작할 수 있다면 자원 관리가 어렵고 컴퓨터에 문제를 일으킬 수 있기 때문에 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다. 따라서 운영체제를 거쳐야지만 응용 프로그램은 자원에 접근할 수가 있는데 이렇듯 운영체제가 수행하는 문지기 역할은 이중 모드(Dual Mode)로써 구현된다.

 

이중 모드란 CPU가 명령어를 실행하는 모드를 사용자 모드커널 모드로 구분하는 방식이다. 이 때 사용자 모드와 커널 모드에 대한 설명은 아래와 같다.

  • 사용자 모드(User Mode) : 운영체제 서비스를 제공받을 수 없는 실행 모드. 일반적인 응용 프로그램들은 사용자 모드로 실행된다. 이 때 사용자 모드로 실행중인 CPU는 하드웨어 자원에 접근하는 명령어를 실행할 수 없다.
  • 커널 모드(Kernel Mode) : 운영체제 서비스를 제공받을 수 있는 실행 모드. 커널 영역의 코드를 실행할 수 있는 모드이며 커널 모드로 명령어를 실행하면 모든 명령어를 실행할 수가 있다.

위의 설명대로 사용자 모드로 실행되고 있는 프로그램이 자원에 접근하기 위해서는 커널 모드로 전환되어야 한다. 이 때 운영체제에 요청을 보내는데 이러한 요청을 시스템 호출(System Call)이라고 부른다. 시스템 호출은 인터럽트를 발생시키는 특정 명령어에 의해 발생하는 소프트웨어 인터럽트의 한 종류이다. 

 

따라서 시스템 호출을 처리하는 순서는 인터럽트의 처리 순서와 비슷하다. 예시로는 프로그램이 하드 디스크에 데이터를 저장하는 예시를 들었다.

  1. 시스템 호출을 발생시키는 명령어 실행 (ex. 하드 디스크에 데이터를 저장하는 시스템 호출(커널 모드 전환 요구))
  2. CPU가 지금까지의 작업을 백업
  3. 커널 영역 내에 시스템 호출을 수행 (ex. 커널 모드 전환 후 데이터를 저장하는 코드 실행 )
  4. 시스템 호출을 마친 후 기존에 실행하던 프로그램으로 복귀하여 하던 작업을 계속 (ex. 사용자 모드 복귀)

 

운영체제의 핵심 서비스

1. 프로세스 관리

실행 중인 프로그램을 프로세스라고 한다. 일반적으로 1개의 CPU는 한 번에 하나의 프로세스만 실행할 수 있기 때문에 일반적으로 프로세스들을 번갈아 가며 실행한다. 이 때 각 프로세스마다 필요로 하는 자원이나 상태가 다르기 때문에 이를 잘 관리해주는 것이 중요하다(ex. 프로세스 동기화, 교착 상태).

 

2. 자원 접근 및 할당

위에서 설명한 것 처럼 프로세스에 적절한 자원을 배분해주는 것이 중요하다. 특히 CPU, 메모리, 입출력장치 관리법이 중요한데 CPU에서는 CPU가 프로세스를 잘 배분하여 사용할 수 있도록 스케줄링 하는 것이 중요하고, 메모리에서는 프로세스를 어떻게 잘 나누어 적재할지를, 입출력장치에서는 인터럽트를 어떻게 잘 처리할지 등의 역할을 수행한다.

 

3. 파일 시스템 관리

폴더를 생성하고, 파일을 삭제하는 등 컴퓨터를 사용할 때 주로 사용하는 파일 시스템 또한 운영체제의 핵심 서비스이다.

 

가상 머신

최근 등장한 CPU 들은 가상 머신(Virtual Machine)을 통한 가상화 기능을 지원하여 이중 모드 이상의 모드를 지원한다. 이를 통해 새로운 OS를 설치할 수 있고 이 때 설치한 가상 머신은 응용 프로그램으로써 동작한다(사용자 모드 작동). 따라서 가상화를 지원하는 CPU는 커널 모드와 사용자 모드 이외에 가상 머신을 위한 하이퍼바이저 모드를 따로 두어 가상 머신에서 작동하는 프로그램이 하이퍼바이저 모드에서 운영체제 서비스를 받도록 한다.