본문 바로가기

OS/OS

운영체제의 자원 관리 기능을 간단히 알아보자.

반응형
SMALL

운영체제는 하드웨어 자체를 관리하는 일과 실제 수행시킬 프로그램을 관리시켜주는 친구로서 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어입니다.

 

그렇다면 운영체제의 자원 관리 기능을 살펴보도록 합시다.


운영체제의 가장 핵심적인 기능은 자원을 효율적으로 관리하는 것입니다. HW / SW 자원으로 나뉩니다.

 

그 중 HW 자원은 CPU / 메모리 / 주변장치 또는 입출력 장치로 구성됩니다.

 

하나씩 살펴볼까요?

 

CPU

CPU의 경우 통상적으로 컴퓨터 한 대에 하나가 장착되기 때문에 여러 프로세스가 CPU를 효율적으로 나누어 사용해야합니다.

 

그러니 매 시점 어떠한 프로세스에 CPU를 할당해 작업을 처리할 것인지 결정하는 일이 필요합니다. 이러한 일을 CPU 스케줄링이라 합니다.

 

대표적으로 선입선출, 라운드 로빈, 우선순위 기법이 있습니다.

 

  • 선입선출을 먼저 온 프로세스를 먼저 처리해주는 방식입니다. 그렇기 때문에 처음에 작업 시간이 긴 프로세스가 오면 나머지는 비효율을 감안한 채 그 프로세스가 끝날 때까지 기다려야합니다.
  • 라운드 로빈은 선입선출의 문제를 해결하기 위해 고안된 기법입니다. CPU를 한 번 할당받아 사용할 수 있는 시간을 고정을 한 다음, 공평하게 CPU를 할당하는 거죠. 한 번 CPU를 맛 본 친구는 대기열의 제일 뒤에 가서 다시 대기해야합니다. 라운드 로빈에서 제일 고려해야하는 점은 한 번에 사용할 수 있는 할당시간을 얼마로 할 것인가 입니다.
  • 우선순위 스케줄링의 경우 대기 중인 프로세스들에게 우선순위를 부여하고, 우선순위가 높은 프로세스에 CPU를 먼저 할당하는 기법입니다. 이런 경우엔 상대적으로 우선순위가 낮은 친구들은 CPU를 할당받을 수 없으니, 기다린 시간이 늘어날 수록 우선순위를 높이는 방안도 생각해야합니다.

메모리

메모리 역시 시스템 내에 한정된 용량만 존재하기 때문에 서로 다른 다수의 프로세스들이 나누어 쓸 수 있도록 해야합니다.

 

메모리는 CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억장치 입니다. 그렇기 때문에 프로그램이 CPU에서 실행되려면 해당 부분이 메모리에 올라가 있어야겠죠.

 

이 때 한정된 메모리 공간에 여러 프로그램을 수용하려면 메모리에 대한 효율적인 관리 메커니즘이 필요합니다.

 

운영체제는 메모리의 어느 부분이 어떤 프로그램에 의해 사용되고 있는지를 파악하여 이를 유지하는데, 이러한 정보는 주소(address)를 통해 관리됩니다.

 

불필요한 메모리 요청을 막고, 효율적으로 전체 메모리 관리를 하는 것이 운영체제의 역할이며, 다른 프로세스 영역을 침범하지 않도록 보안을 유지하는 역할도 운영체제의 몫입니다.

 

물리적 메모리를 관리하는 방식에는 아래와 같은 방식이 있습니다.

 

  • 고정분할 방식의 경우 물리적 메모리를 몇 개의 분할로 미리 나누어 관리합니다. 이 방식은 동시 적재되는 최대 프로그램의 수가 분할 개수로 한정되기 때문에 융통성이 없습니다. 또한, 분할 크기보다 큰 프로그램은 적재가 불가능하기 때문에 효율적인 사용 측면에서도 바람직하지 않은데, 분할 크기보다 작은 프로그램이 적재되면, 남는 영역인 내부 조각이 발생합니다.
  • 가변분할 방식 매 시점 프로그램의 크기에 맞게 메모리를 반할해서 사용하는 방식을 말합니다. 분할의 크기 때문에 큰 프로그램의 실행이 제한되는 문제는 발생하지 않지만, 물리적 메모리보다 큰 프로그램의 실행은 여전히 불가능합니다. 또한, 분할의 크기와 개수가 동적으로 변하므로 기술적 관리 기법이 필요합니다. 고정분할에서의 내부 조각은 발생하지 않지만, 프로그램에 할당되지는 않았지만 그 크기가 작아 프로그램을 올리지 못하는 메모리 영역인 외부 조각이 발생합니다.
  • 가상 메모리 방식의 경우엔 물리적 메모리보다 더 큰 프로그램이 실행되는 것을 지원합니다. 모든 프로그램은 물리적 메모리와는 독립적으로 자신만의 가상메모리 주소를 갖게되고, 운영체제는 이 가상메모리의 주소를 물리적 메모리 주소로 매핑하는 기술을 이용해 주소로 변환시킨 후 프로그램을 물리적 메모리에 올리게 됩니다. 프로그램의 전체 크기가 물리적 메모리보다 크더라도 현재 사용되고 있는 부분만 메모리에 올리고, 나머지는 하드디스크와 같은 보조기억장치에 저장해두었다가 필요할 때 적재하는 방식을 취합니다. 보조기억 장치의 영역을 스왑 영역이라고 부르며, 가상메모리 주소 공간의 페이지라는 동일한 크기의 작은 단위로 나뉘어 스왑 영역에 저장됩니다. 이렇게 동일한 단위로 메모리를 나누는 기법을 페이징 기법이라고 합니다.

주변장치 및 입출력 장치

CPU나 메모리와 달리 인터럽트(interrupt)라는 메커니즘을 통해 관리가 이루어집니다. 주변장치들은 CPU의 서비스가 필요한 경우 신호를 발생시켜 요청하는데, 이런 신호를 인터럽트라고 합니다.

 

CPU는 평소 자기 할 일하다가 인터럽트가 발생하면, 잠시 하던 일을 끝내고 인터럽트에 의한 요청 서비스를 수행합니다.

 

운영체제는 인터럽트를 처리한 후 원래 수행하던 작업으로 돌아오기 위해 인터럽트 처리 직전에 수행 중이던 작업의 상태를 저장해둡니다.

 

인터럽트는 요청하는 장치와 발생 상황에 따라 다양한 종류가 있기 때문에 운영체제는 인터럽트의 종류마다 서로 다른 인터럽트 처리루틴을 가지고 있습니다. 인터럽트 처리루틴은 인터럽트 발생시 해야하는 작업 코드인데, 이는 커널 내에 존재하는 코드로 CPU 스케줄링, 메모리 관리 등 다양한 기능을 위한 커널 코드의 일부분입니다.

 

또한, 컨트롤러라고도 있는데, 컨트롤러는 해당 장치에 대한 업무를 처리하고, 이를 메인 CPU에 인터럽트를 발생시켜 보고하는 역할을 합니다.

 

키보드에 입력을 하면, 키보드 컨트롤러가 인터럽트를 발생시켜 일을 하던 CPU에게 고자질을 합니다. CPU는 하던 작업 상태를 저장하고, 인터럽트 요청을 처리하기 위해서 커널의 인터럽트 처리루틴 코드를 찾아서 인터럽트 처리를 완료합니다. 그 후 인터럽트 발생하기 전 작업 상태를 복구하여 작업을 재개합니다.

 

*커널 : 메모리에 상주하는 운영체제의 부분


한 번 운영체제를 훑을 수 있는 글을 써야함을 느꼈는데, 위의 정리 글로 해결된거 같습니다.

 

이상 운영체제의 자원 관리 기능을 간단히 알아보자. 였습니다. ^_^

반응형
LIST

'OS > OS' 카테고리의 다른 글

인터럽트  (0) 2021.03.14
데드락 (Deadlock)  (0) 2019.11.07
프로세스 동기화 (Process Synchronization and Mutual Exclusive)  (0) 2019.11.07
공룡책 6장 프로세스 동기화  (0) 2019.11.07
공룡책 5장 CPU 스케줄링  (2) 2019.11.06