운영체제란 무엇이고, 어떤 역할을 수행할까?
1. 운영체제 (Operating System)
운영체제란?
- 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어이다.
- 각종 하드웨어를 관리하고, 사용자에게는 편리한 인터페이스를 제공한다.
- 운영체제 중 항상 필요한 부분은 메모리에 상주하며, 이를 커널(kernel)이라고 한다.
주요 기능
컴퓨터 시스템 내의 자원(resource)을 효율적으로 관리한다.
자원 관리자(resource manager)
하드웨어 뿐만 아니라 소프트웨어 자원까지!
- 컴퓨터 시스템을 편리하게 사용할 수 있는 환경(인터페이스)을 제공한다.
- 자원이 형평성 있게 분배되도록 관리한다.
- 사용자와 운영체제 자신을 보호한다.
2. 운영체제의 자원 관리 기능
CPU를 관리하는 방법
매 시점 어떠한 프로세스에 CPU를 할당해 작업을 처리할 것인지 결정하는 것을 CPU 스케줄링이라고 한다.
- CPU를 가장 효율적으로 사용하도록 한다.
- 특정 프로세스가 불이익을 당하지 않도록 한다.
선입선출 기법: 가장 먼저 온 것부터 처리하는 방식
하나의 프로세스가 원하는 작업을 완료할 때까지 다른 프로세스는 CPU를 사용하지 못한다.
라운드 로빈 기법: CPU를 한 번 할당받아 사용할 수 있는 시간을 일정하게 고정된 시간으로 제한하는 방식
프로세스는 정해진 시간이 지나면 CPU를 내어놓고 CPU 대기열의 제일 뒤에서 대기해야 한다.
우선순위 스케줄링: 대기 중인 프로세스들에 우선순위를 부여하고 그에 따라 CPU를 먼저 할당하는 방식
기다린 시간이 늘어날수록 우선순위를 점차 높여줄 수도 있다.
메모리를 관리하는 방법
운영체제가 메모리에 대해 해야하는 것
- 프로그램이 실행되려면 해당 부분이 메모리에 올라가 있어야 한다.
- 운영체제는 주소(address)를 통해 메모리의 어느 부분이 어떤 프로그램에 의해 사용되고 있는지를 파악하며, 필요할 때 메모리를 할당하고 필요하지 않을 때 회수한다.
- 전체 메모리 공간이 효율적으로 사용될 수 있도록 해야 한다.
- 메모리에 올라간 경우, 운영체제는 각 프로세스가 자신의 메모리 영역에만 접근할 수 있도록 해야 한다.
물리적 메모리를 관리하는 방식
- 고정분할 방식(fixed partition): 물리적 메모리를 몇 개의 분할로 미리 나누어 관리하는 방식
- 융통성이 없으며, 분할의 크기보다 큰 프로그램은 적재가 불가능하다.
- 내부 단편화(internal fragmentation), 외부 단편화(external fragmentation)가 발생할 수 있다.
- 가변분할 방식(variable partition): 매 시점 프로그램의 크기에 맞게 메모리를 분할해서 사용하는 방식
- 분할의 크기 때문에 큰 프로그램의 실행이 제한되는 문제는 발생하지 않으나, 물리적 메모리의 크기보다 큰 프로그램은 여전히 실행 불가능하다.
- 내부 단편화는 발생하지 않지만, 외부 단편화는 발생할 수 있다.
- 가상메모리 방식(virtual memory): 물리적 메모리보다 더 큰 프로그램이 실행되는 것을 지원하는 방식
- 모든 프로그램은 물리적 메모리와는 독립적으로 0번지부터 시작하는 자신만의 가상메모리 주소를 갖는다.
- 운영체제는 이 가상메모리의 주소를 물리적 메모리 주소로 매핑(mapping)하여 주소를 변환한 후, 프로그램을 물리적 메모리에 올린다.
현재 사용되고 있는 부분만 메모리에 올리고, 나머지는 보조기억장치(ex. HDD)에 저장해두었다가 필요할 때 적재한다.
이때 사용되는 보조기억장치의 영역을 스왑 영역(swap area)이라 한다.
저장 위치 설명 (물리적) 메모리 현재 사용되고 있는 부분 스왑 영역 현재 사용되고 있지 않은 부분 (보조기억장치) - 페이징(paging) 기법: 프로그램을 구성하는 가상 메모리 주소 공간을 페이지(page)라는 동일한 크기의 작은 단위로 나누어 물리적 메모리와 스왑 영역에 일부분씩 저장하는 기법
주변 장치 및 입출력 장치를 관리하는 방법 (인터럽트)
- 인터럽트(interrupt): 주변 장치들이 CPU의 서비스가 필요할 때, 서비스를 요청하기 위해 발생시키는 신호
- CPU는 CPU 스케줄링에 따라 작업을 수행하다가 인터럽트가 발생하면 하던 일을 잠시 멈추고 인터럽트에 의한 요청 서비스를 수행한다.
- 운영체제는 인터럽트를 처리한 후 원래 수행하던 작업으로 돌아오기 위해 인터럽트 처리 직전에 수행 중이던 작업의 상태를 저장해둔다.
- 인터럽트 처리루틴(interrupt service routine): 인터럽트가 발생했을 때 해주어야 할 작업을 정의한 프로그램 코드
- 운영체제는 커널 내부에 인터럽트의 종류마다 다른 인터럽트 처리루틴을 가지고 있다.
- 인터럽트가 발생하면 운영체제는 해당하는 인터럽트 처리루틴을 찾아 정의된 코드에 따라 작업을 수행한다.
컨트롤러(controller): 주변장치마다 그 장치에서 일어나는 업무를 관리하기 위해 가지고 있는 일종의 작은 CPU
해당 장치에 대한 업무를 처리하고, 이를 메인 CPU에 인터럽트를 통해 보고하는 역할을 한다.
References
- “운영체제와 정보기술의 원리(반효경 저)”, 2장 운영체제 개요