운영체제(OS)의 자원 관리 기능
1. 운영체제의 자원 관리 기능
- 운영체제의 가장 핵심적인 기능은 자원을 효율적으로 관리하는 것으로, 자원은 하드웨어 자원과 소프트웨어 자원으로 나뉜다.
- 하드웨어 자원은 CPU와 메모리를 비롯해 주변장치 또는 입출력 장치라 불리는 장치들로 구성된다.
- CPU는 CPU 스케줄링을 통해 여러 프로세스들이 CPU를 효율적으로 나누어 사용할 수 있도록 관리된다.
- 메모리는 메모리 관리를 통해 한정된 메모리를 어떻게 나누어 사용할 것인가를 관리한다.
- 입출력장치는 입출력 관리를 통해 각기 다른 입출력 장치와 컴퓨터 간에 어떻게 정보를 주고받을 것인가를 관리된다.
- 디스크는 파일 관리를 통해 디스크에 파일을 저장되는 방식 및 접근 권한에 대해서 관리한다.
- 운영체제는 프로세스의 생성과 삭제, 자원 할당 및 반환, 프로세스 간 협력 등의 프로세스 관리를 한다.
- 그 외 보호 시스템, 네트워킹, 명령어 해석기 등을 관리한다.
2. CPU 관리 방법
- CPU는 하나밖에 없는 가장 기본적인 컴퓨터 구조로 프로세스는 여러 개가 동시에 수행될 수 있기 때문에 CPU 스케줄링을 통해 매시점 어떠한 프로세스에 CPU를 할당해 작업을 처리할 것인지 결정하는 일이 필요하다.
- CPU 스케줄링의 목표는 CPU를 가장 효율적으로 사용하면서도 특정 프로세스가 불이익을 당하지 않도록 하는 것이다.
- 대표적인 CPU 선입선출(FCFS), 라운드 로빈(Round Robin), 우선순위(Priority) 기법들이 있다.
1) 선입선출 기법 (FCFS;First Come First Served)
- CPU를 사용하기 위해 도착한 프로세스들 중 먼저 온것을 먼저 처리하는 방식이다.
- 이 방식은 CPU를 먼저 얻은 프로세스가 원하는 작업을 완료할 때까지 다른 프로세스들이 CPU를 사용하지 못한다. 따라서 CPU 자체의 효율적인 사용 측면에서는 문제가 없지만 전체 시스템 입장에서는 비효율적인 결과를 초래할 가능성이 있다.
- 예를 들어, 장시간 CPU를 사용하면 되는 프로세스들이 나중에 도착한 경우, 짧은 수행시간을 가진 프로세스들은 선행 프로세스가 작업을 마칠 때까지 장시간 기다려야 한다.
- 이러한 선입선출 기법의 단점을 보완하고자 고안된 기법이 라운드 로빈 기법이다.
2) 라운드 로빈 기법(Round Robin)
- CPU를 한 번 할당받아 사용할 수 있는 시간을 일정하게 고정된 시간으로 제한하는 기법이다. 따라서 긴 작업을 요하는 프로세스가 CPU를 할당 받더라도 정해진 시간이 지나면 CPU를 내어놓고 CPU 대기열의 제일 뒤에 가서 줄을 서야 한다.
- 적어도 긴 작업을 수행하는 프로세스 때문에 짧은 작업을 가진 프로세스들이 무작정 오래 기다려야 하는 상황을 막을 수 있다.
- 일반적으로 1회 할당시간은 밀리초 단위를 사용하며, 다수의 사용자가 동시에 접속할 때에도 각자 1초 이하의 응답시간을 보장받을 수 있게 된다.
3) 우선순위 스케줄링(Priority)
- CPU 사용을 위해 대기 중인 프로세스들에 우선순위를 부여하고 우선순위가 높은 프로세스에 CPU를 먼저 할당하는 기법이다.
- 시스템 내의 프로세스 중에는 상대적으로 더 중요한 프로세스가 있을 수 있으므로 그런 프로세스 중에 우선순위를 높게 하여 CPU를 먼저 획득할 수 있도록 한다는 점이 우선순위 스케줄링의 핵심이다.
- 지나치게 오래 기다리는 프로세스가 발생하지 않도록, 기다린 시간이 늘어날수록 우선순위를 점차 높여주는 방안도 우선순위 스케줄링에 활용될 수 있다.
3. 메모리 관리 방법
- 메모리는 CPU가 직접 접근할 수 있는 컴퓨터의 내부 기억장치로 프로그램이 CPU에서 실행되려면 해당 부분이 메모리에 올라가 있어야 한다.
- 한정된 메모리 공간에 여러 프로그램을 수용하려면 메모리에 대해 효율적인 관리 매커니즘이 필요하며 메모리 관리를 위해 운영체제는 메모리의 어떤 프로그램에 의해 사용되고 있는지를 파악하여 이를 유지하게 되는데 이러한 정보는 주소(address)를 통해 관리된다.
- 운영체제는 프로그램에 메모리가 조금만 더 할당하면 굉장히 빨리 수행될 수 있고, 때로는 불필요하게 메모리를 요청해 자원을 낭비하는 경우가 발생하기도 하기 때문에 운영체제는 이를 잘 판단해 전체 메모리 공간이 효율적으로 사용될 수 있도록 해야한다.
- 즉, 운영체제는 각 프로세스가 자신의 메모리 영역에만 접근할 수 있도록 관리해야한다.
- 물리적 메모리를 관리하는 방식에는 고정분할(fixed partition)방식, 가변 분할(variable partition)방식, 가상 메모리(virtual memory) 방식등이 있다.
1) 고정 분할 방식 (fixed partition)
- 물리적 메모리를 몇 개의 분할로 미리 나누어 관리하는 방식이다. 나뉜 각각의 분할에는 하나의 프로그램이 적재될 수 있으며 이 방식은 융통성이 없다는 단점이 있다.
- 이는 메모리에 동시 적재되는 최대 프로그램의 수가 분할 개수로 한정되기 때문이며, 또한 분할의 크기보다 큰 프로그램은 적재가 불가능하게 된다. 따라서 메모리의 효율적인 사용측면에서도 바람직하지 않다.
- 분할이 고정적이기 때문에 분할의 크기보다 작은 프로그램이 적재되는 경우 해당 분할 내에 남는 영역이 발생하게 되며 이는 내부조각이라 한다. 내부조각(internal fragmentation)은 해당 분할에 올라오 프로그램에 의해서도 사용되지 않고, 다른 프로그램에도 할당될 수 없으므로 비효율적인 낭비되는 공간이라 할 수 있다.
2) 가변 분할 방식 (variable partition)
- 매 시점 프로그램의 크기에 맞게 메모리를 분할해서 사용하는 방식을 말하며, 분할의 크기 때문에 큰 프로그램의 실행이 제한되는 문제는 발생하지 않는다.
- 그러나 물리적 메모리의 크기보다 더 큰 프로그램의 실행은 여전히 불가능하다.
- 가변분할 방식에서는 분할의 크기와 개수가 동적으로 변하므로 기술적 관리 기법이 필요하다.
- 가변분할 방식을 사용하게 되면 내부조각은 발생하지 않지만, 외부조각이 발생할 수 있다. 외부조각은 프로그램에 할당되지는 않았지만 그 크기가 작아 프로그램을 올리지 못하는 메모리 영역을 말한다. 이런 외부조각은 현재 비어 있는 공간이지만 그 크기가 작아 아직까지 프로그램에 할당되지 못한 공간을 의미하며 이는 낭비된 메모리 자원이라고 할 수 있다.
3) 가상 메모리 방식 (virtual memory)
- 현대의 범용 컴퓨터 환경에서 가장 널리 사용되는 메모리 관리 기법이며, 물리적 메모리보다 더 큰 프로그램이 실행되는 것을 지원한다.
- 모든 프로그램은 물리적 메모리와는 독립적으로 0번지부터 시작하는 자신만의 가상 메모리 주소를 갖으며, 운영체제는 이 가상 메모리의 주소를 물리적 메모리 주소로 매핑(mapping)하는 기술을 이용해 주소를 변환시킨 후 프로그램을 물리적 메모리에 올리게된다.
- 가상 메모리 기법에서는 물리적 메모리의 크기와 상관 없이, 사용할 수 있는 메모리의 크기가 충분히 크다고 가정하고 프로그램을 개발할 수 있다. 이는 프로그램의 전체크기가 물리적 메모리의 크기보다 클지라도, 전체 프로그램이 항상 동시에 사용되는 것은 아니다. 그러므로 현재 사용되고 있는 부분만 메모리에 올리고, 나머지는 하드디스크와 같이 보조기억장치에 저장해두었다가 필요할 댸 적재하는 방식을 취한다.
- 이때 사용되는 보조기억장치영역을 스왑영역(swap area)라고 하며, 동일한 단위로 메모리를 나누는 페이징(paging) 기법으로 프로그램을 구성하는 가상메모리 주소 공간은 페이지라는 동일한 크기의 작은 단위로 나뉘어 물리적 메모리와 스왑 영역에 일부분씩 저장된다.
4. 주변장치 및 입출력 장치의 관리
- 주변 장치 및 입출력 장치는 CPU나 메모리와 달리 인터럽트(interrupt)라는 매커니즘을 통해 관리가 이루어진다. 주변장치들은 CPU의 서비스가 필요한 경우에 인터럽트를 발생시켜 서비스를 요청한다. CPU는 평소에 CPU 스케줄링에 따라 자기에게 주어진 작업을 수행하다가 인터럽트가 발생하면 하던 일을 잠시 멈추고 인터럽트에 의한 요청 서비스를 수행한다.
- 인터럽트를 요청하는 장치와 발생 상황에 따라 다양한 종류가 있기 때문에 운영체제는 인터럽트의 종류마다 서로 다른 인터럽트 처리루틴을 가지고 있다. 인터럽트 처리루틴이란 인터럽트가 발생했을 때 해주어야 할 작업을 정의한 프로그램 코드를 말하며, 이것은 운영체제 커널 내에 존재하는 코드로 CPU 스케줄링, 메모리 관리 루틴 등 다양한 기능을 위한 커널 코드의 일부분이다.
- 이러한 인터럽트가 발생하면 운영체제는 해당하는 인터럽트 처리루틴을 찾아서 정의된 코드에 따라 일을 수행하게 된다.
- 주변장치들은 각 장치마다 그 장치에서 일어나는 업무를 관리하기 위한 일종의 작은 CPU를 가지고 있으며, 이것은 컨트롤러(Controller;제어기)라고 한다. 컨트롤러는 해당 장치에 대한 업무를 처리하고 이를 메인 CPU에 인터럽트를 발생시켜 보고하는 역할을 한다.
- 예를 들어, 키보드 입력이 들어오면 키보드 컨트롤러가 인터럽트를 발생시켜, CPU에 그 사실을 알려주고 CPU는 현재 수행 중이던 작업의 상태를 저장하고 인터럽트 요청을 처리하기 위해 운영체제 내에 정의된 키보드 인터럽트 처리루틴을 찾아간다. 그 후 키보드로부터 입력받은 내용을 메모리의 특정 부분에 저장해 해당 프로그램에 키보드 입력이 들어왔음을 알리면서 인터럽트 처리를 완료한다. 이후 인터럽트 처리가 끝나면 인터럽트가 발생하기 직전의 상태를 복구해 중단된 작업을 재개한다.
출처 : (http://www.kocw.net/home/m/search/kemView.do?kemId=1046323)
- 강의 : 이화여자대학교, 반효경 (운영체제)
- 책 : 운영체제와 정보기술의 원리 [반효경]
위 강의와 책을 보며 공부한 내용을 기록하였습니다.
'CS > 운영체제' 카테고리의 다른 글
프로세스와 스레드의 차이 (1) | 2022.09.11 |
---|---|
컴퓨터 시스템의 동작 원리-3 (0) | 2021.10.28 |
컴퓨터 시스템의 동작 원리-2 (0) | 2021.10.28 |
컴퓨터 시스템의 동작 원리-1 (0) | 2021.10.28 |
운영체제(OS)에 대하여 (0) | 2021.09.27 |