2장 - 운영체제 개요 : 운영체제 자원 관리 기능

2023. 11. 17. 16:272023/운영체제와 정보기술의 원리

운영체제의 자원 관리 기능

HW 자원 : CPU, 메모리, 주변장치 또는 입출력 장치(보조기억장치 - CPU, 메모리는 전원이 꺼지면 처리중이던 정보가 모두 꺼지기 때문에 전원이 나가도 기억해야하는 부분은 입출력 장치 중 하나인 해당 장치에 파일형태로 저장)

 

  • CPU
CPU 스케쥴링
매 시점 어떤 프로세스에 CPU를 할당해 작업을 처리할 것 인지 결정하는 일이 필요

- CPU를 가장 효율적이면서도 특정 프로세스가 불이익 당하지 않도록 하는 것 -

 

1. 선입선출(FCFS)

CPU를 사용하기 위해 도착한 프로세스들 중 먼저 온 것을 먼저 처리해주는 방식 - CPU 자체의 효율적인 사용 측면에서 문제가 없지만 전체 시스템 입장에서는 비효율적인 결과를 초래

 

2. 라운드 로빈(RR)

CPU를 한번 할당받아 사용할 수 있는 시간을 일정하게 고정된 시간으로 제한하여 긴 작업을 요하는 프로세스가 CPU를 할당받더라도 정해진 시간이 지나면  CPU를 내어놓고 CPU 대기열의 제일 뒤에 줄을 서야함 - 보통 1회 할당시간은 밀리초 단위

 

3. 우선순위

- CPU 사용을 위해 대기 중인 프로세스들에 우선순위를 부여하고 우선순위가 높은 프로세스에  CPU를 할당한다. 

- 지나치게 오래 기다리는 프로세스가 발생하지 않도록 기다린 시간이 늘어날수록 우선순위를 점차 높여준다.

 

  • 메모리

메모리는 CPU가 직접 접근할 수있는 컴퓨터 내부의 기억장치

 

- 프로그램이 CPU에서 실행되기 위해서는 해당 부분이 메모리에 올라가야만 하는데, 한정된 메모리 공간에 여러 프로그램을 수용하기 위해서는 메모리에 대한 효율적인 관리 메커니즘이 필요

- 메모리 관리를 위해 주소(Address)를 통해 메모리의 어느 부분이 어떤 프로그램에 의해 사용되는지 파악

- 다수의 사용자 프로그램이 동시에 메모리로 올라가는 경우 서로 다른 프로세스의 영역을 침범하지 않도록 보안 유지하는 역할

 

<<물리적 메모리를 관리하는 방식>>

- 고정분할(fixed partition)

물리적 메모리를 몇 개의 분할로 미리 나누어 관리하여 각 분할에는 하나의 프로그램만 적재 가능

 

단점 ) 

 1. 메모리에 동시 적재되는 최대 프로그램의 수가 분할 개수로 한정되어있음

 2. 분할의 크기보다 큰 프로그램은 적재 불가능

 3. 분할의 크기보다 작은 프로그램이 적재되는 경우 해당 분할 내에 남는 영역이 발생 ( = 내부조각)

 

* 내부조각 *

해당 분할에 올라온 프로그램에 의해서도 사용되지 않고, 다른 프로그램에도 할당될수 없기 때문에 비효율적으로 낭비되는 공간

 

- 가변분할(variable partition)

매 시점 프로그램의 크기에 맞게 메모리를 분할해서 사용하는 방식

 

- 물리적 메모리의 크기보다 더 큰 프로그램의 실행은 여전히 불가능

- 분할의 크기와 개수가 동적으로 변하므로 기술적 관리 기법이 필요

- 외부조각 발생 가능성이 있음

 

* 외부조각 *

  1. 크기가 100인 프로그램 A가 실행되어 메모리에 100만큼의 영역 할당
  2. 프로그램 A가 실행되는 도중에 크기가 50인 프로그램 B가 실행되어 A영역 바로 다음부터 메모리 공간 50을 할당받아 실행
  3. A작업이 완료된 후에는 A영역에 크기가 80인 프로그램 C가 적재
  4. 20만큼의 빈 공간에 생기는데 크기가 40인 프로그램D가 실행되기에는 부족한 공간

이때 생기는 20만큼의 공간을 외부조각이라 한다.

 

- 가상메모리(virtual memory)

현대의 범용 컴퓨터 환경에서 가장 널리 사용되는 메모리 관리 기법으로 물리적 메모리보다 더 큰 프로그램이 실행되는 것을 지원 (물리적 메모리의 크기와 관계 없이 사용할 수 있는 메모리의 크기가 충분히 크다고 가정하고 프로그램 개발)

 

*원리*

모든 프로그램은 물리적 메모리와 독립적으로 0번지 부터 시작하는 자신만의 가상메모리 주소를 갖는다. OS는 이 가상메모리의 주소를 물리적 메모리 주소로 mapping하는 기술을 이용해 주소를 변환시킨 후 프로그램을 물리적 메모리로 올림

프로그램의 전체 크기가 2Gbyte일지라도 전체가 항상 동시에 사용되는 것은 아니므로 현재 사용되고 있는 부분만 메모리에 올리고, 나머지는 하드디스크와 같은 보조기억장치에 저장해두었다가 필요할 때 적재하는 방식 사용

프로그램을 구성하는 가상 메모리 주소공간은 페이지(Page)라는 동일한 크기의 작은 단위로 나뉘어 물리적 메모리와 스왑 영역 일부분씩 저장

스왑(Swap Area) : 보조기억장치의 영역
페이징 기법(Paging) : 동일한 단위로 메모리를 나누는 기법

 

  • 주변장치 및 입출력 장치

- 인터럽트(Interrupt)라는 매커니즘을 통해 관리가 이루어짐

 

주변장치는 CPU의 서비스가 필요한 경우에 신호를 발생시켜 서비스를 요청하는데, 이때 발생하는 신호를 '인터럽트'라고 한다. 

 

인터럽트는 평소 CPU 스케쥴링에 따라 자기에게 주어진 작업을 수행하다가 인터럽트가 발생하면 하던 일을 잠시 멈추고, 인터럽트에 의한 요청 서비스를 수행

 

인터럽트는 요청하는 장치와 발생하는 상황에 따라 다른 처리루틴을 가지고 있다. 

 

* 인터럽트 처리 루틴 : 인터럽트가 발생했을때 해주어야 할 작업을 정의한 프로그램 코드 -> OS 커널에 존재하는 코드로 CPU 스케쥴링, 메모리 관리 루틴 등 다양한 기능을 위한 커널 코드의 일부

 

- 컨트롤러(Controller)라는 각 장치마다 그 장치에서 일어나는 업무를 관리하기 위한 일종의 작은 CPU를 가지고 있음 

 

컨트롤러는 해당 장치에 대한 업무를 처리하고, 이를 메인 CPU에 보고하는 역할

 

EX ) 키보드 입력

  1. 사용자로부터 키보드에 입력이 들어옴
  2. 키보드 컨트롤러가 인터럽트 발생시켜 CPU에 알림
  3. CPU는 현재 작업중인 작업의 상태를 저장
  4. 인터럽트 요청을 처리하기 위해 운영체제 내에 정의된 키보드 인터럽트 처리루틴을 찾음
  5. 인터럽트 처리 
  6. 인터럽트 발생 직전의 상태로 복구해 중단된 작업을 재개