관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

운영체제 시작하기 3 - 운영체제의 큰 그림 2 : 운영체제의 핵심 서비스 본문

알고리즘 및 자료 관리/컴퓨터 구조 & 운영체제

운영체제 시작하기 3 - 운영체제의 큰 그림 2 : 운영체제의 핵심 서비스

huenuri 2024. 10. 17. 11:08

이이서 운영체제의 큰 그림에 대해서 학습해본다. 요즘 인간에 대한 회의와 염증을 느끼며 마음이 많이 무겁도 힘들다. 전에는 나의 마음을 솔직하게 표현하는 사람이었다. 하지만 개발 세계에 들어와 너무나도 사무적이고 무관심한 사람들로 가득한 사회를 만났다. 그럴 때마다 나를 잃지 않고 다시 일어났지만 요즘은 나도 그들처럼 무심하고 내 감정도 최대한 이야기하지 않기로 다짐해본다.

 

컴퓨터와 친숙한 사람들이라서 그런지 사고도 정말 컴퓨터적이고 자신에게 이익이 되지 않으면 결코 움직이지 않는다. 그들과의 세대 차이를 많이 느낀다. 이 세대 차이는 단순한 나이가 아닌 난 그들과 다른 세계에 살고 있고 절대로 가까워질 수 없는 벽 같은 것이다.

난 가끔 이러한 세상이 무서워진다. 앞으로 10년 후에는 어떤 사고를 하는 사람들이 많아질지 심히 걱정스럽다. 사람은 자신도 모르는 사이에 변한다. 나도 이 세계에 있으면서 스스로를 잃지 않고 맑은 영혼으로 살아가고 있는지 늘 점검하면서 타산지석으로 삼아야겠다고 오늘 느끼는 마음을 글로 남겨본다.


 

 

 

운영체제의 핵심 서비스

 

 

프로세스 관리

 

 

작업 관리자에 보면 수많은 프로세스들이 동시에 실행되고 있다. 이처럼 컴퓨터를 사용하는 동안 메모리 안에서는 새로운 프로세스들이 마구 생성되고, 사용하지 않는 프로세스는 메모리에서 삭제된다. 하지만 여기에 모든 프로세스들이 올라와있지 않을 수도 있다. 이것을 페이징, 스와핑이라고 한다.

 

일반적으로 하나의 CPU는 한번에 하나의 프로세스만 실행할 수 있기에 CPU는 이 프로세스들을 조금씩 번갈아가며 실행한다. 다시 말해 CPU는 한 프로세스를 실행하다가 다른 프로세스로 실행을 전환하고, 그 프로세스를 실행하다가 또 다른 프로세스로 실행을 전환하는 것을 반복한다.

이때 각 프로세스는 상태도, 사용하고자 하는 자원도 다양하다. 

 

 

 

 

 

 

여러 프로세스가 동시에 실행되는 환경에서는 '프로세스 동기화'가 필수적이고, 프로세스가 꼼짝도 못하고 더 이상 실행되지 못하는 상황인 '교착 상태'를 해결해야 한다.


 

 

 

자원 접근 및 할당

모든 프로세스는 실행을 위해 자원을 필요로 한다. 그리고 운영체제는 프로세스들이 사용할 자원에 접근하고 조작함으로써 프로세스에 필요한 자원을 할당해준다. 이제 운영체제가 CPU, 메모리, 보조기억장치와 입출력장치를 어떻게 관리하고, 결과적으로 어떤 기능을 제공하는지 알아볼 것이다.

 

 

CPU

일반적으로 메모리에는 여러 프로세스가 적재되고, 하나의 CPU는 한번에 하나의 프로세스만 실행할 수 있다. 그래서 하나의 프로세스가 CPU를 사용하고 있다면 다른 프로세스는 기다려야 한다. 이에 운영체제는 프로세스들에게 공정하게 CPU를 할당하기 위해 어떤 프로세스로부터 CPU를 이용하게 할 것인지, 얼마나 오래 CPU를 이용하게 할지를 결정할 수 있어야 한다. 이를 CPU 스케줄링이라고 한다.

 

 

 

메모리

 

메모리에 적재된 프로세스들은 크기도, 적재되는 주소도 가지각색이다. 같은 프로세스라 할지라도 실행할 때마다 적재되는 주소가 달라질 수 있다. 그래서 운영체제는 새로운 프로세스가 적재될 때마다 어느 주소에 적재해야 할지를 결정해야 한다.

때로는 메모리가 이미 꽉 차 있어 꼭 실행해야 할 프로세스를 적재할 공간이 없는 경우도 있고, 메모리에 공간이 남았는데도 불구하고 프로세스를 적재하지 못하는 상황도 발생한다.

 

 

 

입출력장치

 

인터럽트 서비스 루틴은 운영체제가 제공하는 기능으로 커널 영역에 있다. 입출력장치가 발생시키는 하드웨어 인터럽트도 마찬가지다. 입출력장치가 CPU에 하드웨어 인터럽트 요청 신호를 보내면 CPU는 하던 일을 잠시 백업한 뒤 커널 영역에 있는 인터럽트 서비스 루틴을 실행한다. 운영체제는 인터럽트를 처리하는 프로그램, 즉 인터럽트 서비스 루틴을 제공함으로써 입출력 작업을 수행한다.


 

 

 

파일 시스템

 

정리해보면 다음과 같다. 운영체제의 핵심 서비스를 제공하는 부분은 커널이다. 사용자 프로세스가 커널의 서비스를 제공받기 위해서는 사용자 모드에서 커널모드로 전환해야 하고, 이는 시스템 호출을 통해 이루어진다.

즉, 시스템 호출은 커널 모드로써 운영체제의 서비스를 제공받을 수 있는 방법이다. 대표적인 커널의 서비스로는 프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리가 있다.


 

 

 

가상 머신과 이중 모드의 발전

이중 모드는 커널 모드와 사용자 모드, 두 가지 모드를 지원하는 실행 모드이지만, 가상 머신을 통한 가상화를 지원하는 현대 CPU는 두 가지 모드 이상을 지원한다.

가상 머신(virtual machine)이란 이름 그대로 소프트웨어적으로 만들어낸 가상 컴퓨터이다. 가상 머신을 설치하면 새로운 운영체제와 응용 프로그램을 설치하고 실행할 수 있다. 아래와 같이 윈도우 운영체제에 가상 머신을 설치하면 가상 머신상에 리눅스 운영체제와 그를 기반으로 여러 응용 프로그램들을 설치하고 실행할 수 있다.

 

 

이때 우리의 컴퓨터에 설치된 운영체제에서 가상 머신을 설치 및 실행한다면, 그 가상 머신 또한 응용 프로그램이다. 그래서 사용자 모드로 작동한다. 마찬가지로 가상 머신상에 설치된 운영체제(여기서는 리눅스 운영체제) 또한 사용자 모드로 작동한다. 가상 머신에 설치된 응용 프로그램(여기서는 웹 브라우저)이 운영체제 서비스를 제공 받기 위해서는 커널 모드로 전환되어야 한다. 그러면 가상 머신에 설치된 운영체제도 사용자 모드로 작동하기에 운영체제 서비스를 제공받기 어렵게 된다.

 

그래서 가상화를 지원하는 CPU는 커널 모드와 사용자 모드 이외에 가상 머신을 위한 모드인 하이퍼바이저 모드를 따로 둔다. 이로써 가상 머신 상에서 작동하는 응용 프로그램들은 하이퍼바이저 모드로써 가상 머신에 설치된 운영체제 서비스를 받을 수 있다.


 

 

 

 

단원 마무리하기

 

 

운영체제의 핵심 서비스는 프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리이다.


 

 

 

학습을 마치고

이렇게 운영체제가 무엇인지 조금은 이해해볼 수 있는 시간이었다. 오늘은 천천히 내가 하고 싶은 걸 하면서 자유롭게 공부하다보니 평소보다 시간이 훨씬 많이 걸린다. 그래도 안 하는 것보다는 나은 것 같다.

다음에는 추가 학습으로 시스템 호출에 대해 공부해볼 것이다.