새소식

Computer science - 2023.04.08

[OS] 운영체제의 자원 관리 기능 알아보기

  • -

운영체제의 자원 관리


운영체제의 주요 기능은 컴퓨터 자원을 효과적으로 관리하는 것이다. 컴퓨터의 핵심 하드웨어 자원인 CPU메모리는 CPU Scheduling(스케줄링)과 Memory Management(메모리 관리)을 통해 관리된다. 또한 주변 및 입출력 장치의 요청을 CPU가 효과적으로 처리하기 위해 Interrupt(인터럽트)를 도입했다.

 

1. CPU Scheduling(스케줄링)


  • 1개의 CPU에서 다양한 프로세스를 수행하기 위해, 자원을 관리하는 방법
  • 가장 효율적이면서, 특정 프로세스가 불이익을 받지 않도록 설정하는 것이 핵심
  • 현재 CPU 자원을 뺏을 수 있는 스케줄링이면 Preemptive(선점형), 없으면 Non-preemptive(비선점형)이라고 함
  • FCFS(First Come First Serviced), Round Robin, Priority 등이 있음

 

Non-preemptive(비선점형)

FCFS(선입선출)

FCFS의 문제점

  • 입력된 프로세스를 순차적으로 수행
  • CPU 연산 자체는 효율적이지만, 시스템 입장에선 비효율적
  • 장시간 실행되는 프로세스 때문에, 전체 프로세스 실행이 느려지는 Convoy Effect 발생 문제
    • 소수의 CPU Bound와 다수의 I/O Bound 프로세스 처리 시 문제될 수 있음

 

Priority(우선순위)

Priority 스케줄링의 Starving 문제

  • 우선 순위가 높은 프로세스에 CPU를 먼저 할당한다.
  • 이 경우 우선 순위가 낮은 프로세스는 계속 대기해야 하는 Starving 발생
  • Starving은 기다린 시간에 비례해, 우선 순위를 점차 높여주는 Aging을 사용해 해결 가능

 

Preemptive(선점형)

Round Robin

4주차-프로세스 스케줄링-라운드로빈 - YouTube

  • 한 프로세스에 CPU가 할당 되는 시간을 고정 → 실행 시간이 짧은 프로세스도 실행될 수 있게 됨
  • 프로세스 실행이 완료되지 않았다면, 그 프로세스는 Queue 맨 뒤로 보냄
  • 프로세스의 할당 시간을 얼마로 설정할 지가 중요하다.
    • 너무 길게 설정할 경우 선입선출과 다를게 없다.
    • 너무 짧게 설정할 경우 Context Switching이 잦아져 오히려 성능이 하락할 수 있다.

 

2. Memory Management(메모리 관리)


  • 메모리 : CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억 장치
  • 프로그램이 CPU에서 실행되려면 해당 부분이 메모리에 올라가 있어야 함
  • 한정된 메모리로 다양한 프로그램을 사용하려면 메모리 자원 관리가 중요함

 

메모리 관리 개괄
  • 메모리의 어느 부분이, 어떤 프로그램에 의해 사용되고 있는 지를 파악
    • 프로그램의 주소(Address)를 통해 관리 됨
  • 프로그램에 메모리가 필요할 때 할당하고, 더 이상 필요하지 않을 때 회수함
    • 메모리 추가로 실행이 빨라지거나, 자원이 낭비될 수도 있기 때문에 효율적으로 잘 관리하는 것이 중요
  • 다수의 프로그램이 동시에 메모리가 올라간 경우, 서로 다른 프로세스의 영역을 침범하지 않도록 보안을 유지하는 것도 중요
    • 각 프로세스가 자신의 메모리 영역에만 접근할 수 있도록 관리해야 함

 

물리적 메모리 관리 방법

고정 분할과 가변 분할 방식

  • Fixed-partition(고정 분할), Variable-partition(가변 분할) 등의 방식이 있음

 

고정 분할

고정 분할 방식과 그로 인한 내부 조각

  • 물리적 메모리를 몇 개의 분할로 미리 나누어 관리
  • 각 분할에 하나의 프로그램이 적재되는 형태
  • 변화에 대처하기 어려움
    • 메모리에 동시 적재되는 최대 프로그램 수 = 분할 개수
    • 분할 크기보다 큰 프로그램은 적재가 안됨
  • 분할 크기보다 작은 프로그램을 적재할 경우, 분할 내 남는 영역이 발생
    • 남는 영역 : Internal Fragmentation(내부 조각)

 

가변 분할

가변 분할 : 내부 조각은 남지 않지만, 크기가 작아 프로그램을 적재하지 못하는 외부 조각(Empty space가 너무 작은 경우!)이 발생

  • 매 시점 프로그램크기에 맞게, 메모리를 분할해서 사용하는 방식
    • 분할의 크기 때문에 프로그램 실행이 제한되지는 않음
    • 물리적 메모리 크기를 초과하는 프로그램의 실행은 여전히 불가능함
  • 분할의 크기와 개수가 동적으로 변하게 되기 때문에 관리 방식중요
  • 프로그램에 할당되지는 않았지만, 크기가 작아 프로그램에 올리지 못하는 External Fragmentation(외부 조각)이 발생할 수 있음

 

가상 메모리

가상 메모리 - 물리 메모리 사이 mapping

  • 물리적 메모리보다 더 큰 프로그램이 실행되도록 지원
  • 실행되는 프로그램의 크기는 가상 메모리의 크기에 의해서 결정
  • 모든 프로그램은 물리적 메모리와는 독립적으로, 자신만의 가상 메모리 주소를 가짐
  • 운영체제는 가상 메모리의 주소를 물리적 메모리 주소로 매핑(mapping)하여 물리적 메모리에 적재

 

가상 메모리가 물리적 메모리보다 더 큰 프로그램을 실행하는 방법?

  • 프로그램이 실행 시, 모든 부분이 항상 사용되고 있는 것은 아님
  • 현재 사용되고 있는 부분만 메모리에 올리고, 나머지는 보조 기억 장치에 저장하고, 필요할 때 적재하는 방식을 활용함
  • 이때 사용되는 보조 기억 장치의 영역을 Swap area(스왑 영역)이라고 함

 

가상 메모리의 주소 공간

  • Page(페이지)라는 동일한 크기의 작은 단위로 나뉘어, 물리적 메모리와 스왑 영역에 저장 됨
  • 동일한 단위로 메모리를 나누는 기법을 Paging(페이징) 기법이라고 함

 

3. 주변 장치 및 입출력 장치 자원 관리


  • Interrupt(인터럽트)를 활용해서 관리함
  • 주변 장치들은 CPU의 서비스가 필요한 경우에 신호를 발생 시켜 서비스를 요청한다.
    • 활용되는 신호를 인터럽트라고 부른다.
  • CPU는 평소에 CPU 스케줄링에 따라 작업을 수행하다가, 인터럽트가 발생하면 하던 일을 멈추고 인터럽트에 의한 요청 서비스를 수행한다.
    • 인터럽트 발생 예시 : 사용자가 키보드에 글자를 입력한 경우

 

인터럽트의 활용

Device와 CPU 사이 인터럽트 요청

  • CPU가 인터럽트 전에 하던 작업을, 다시 재개할 수 있도록 기존에 수행하던 작업의 상태를 저장해둔다.
  • 인터럽트의 종류는 요청하는 장치, 발생 상황에 따라 다양하다.
  • 따라서 운영체제도 인터럽트의 종류마다 서로 다른 인터럽트 처리루틴을 가지고 있다.

 

주변 장치의 CPU : Controller(컨트롤러)
  • 컨트롤러는 해당 장치에 대한 업무를 처리하고, 메인 CPU에 인터럽트를 발생 시켜 보고하는 역할

참고

운영체제와 정보기술의 원리

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.