Developer.

1.5 Resource Management

운영체제는 자원관리가 철저히 되어야 한다. 시스템의 CPU, 메모리 공간, 파일 저장 공간, 입출력 장치 등 다양한 자원들을 어떻게 관리하는지 대략적으로 본다.

📂 목차


📚 본문

1.5.1 Process Management

  • 프로세스는 작업 수행을 위해 CPU 시간, 메모리, 파일, I/O 장치 등의 자원을 필요
  • 자원은 프로세스 실행 중 운영체제가 할당 및 회수

여기서 프로그램과 프로세스는 서로 다른 개념이다.

  • 프로그램: 정적인 코드(파일)
  • 프로세스: 동적인 실행중인 단위

프로세스 = 프로그램의 인스턴스

이 부단원에서 집중적으로 보는 것은 Process 이다.

단일 스레드 프로세스와 멀티 스레드 프로세스

프로세스는 시스템 내에서의 작업 단위이고 하나의 시스템은 다수의 프로세스들로 구성되게 된다. 컴퓨터에 실행되는 모든 프로세스들 중 일부는 운영체제 프로세스이고 나머지는 사용자 프로세스이다.

또 위와 같이 안나누고, 다음과 같이 두 가지 부류로 나눌 수도 있다.

  • 단일 스레드 프로세스, 시분할 방식: 하나의 프로그램 카운터를 가지고 순차적으로 명령어를 실행
  • 멀티 스레드 프로세스, 병렬 프로그래밍 방식: 스레드 마다 프로그램 카운터를 따로 보유해서 병렬적으로 실행

운영체제의 프로세스 관리 기능

  • 프로세스 생명주기 관리(생성/삭제 운영체제는 재사용 가능한 자원을 회수해야 함)
  • 프로세스 및 스레드의 CPU 스케줄링
  • 프로세스 Suspend(중단)Resume(재게) 지원
  • 프로세스 Synchronization 메커니즘 제공
  • 프로세스 간 통신 IPC 메커니즘 제공

메모리 관리를 보자.

1.5.2 Memory Management

기본적으로 다음 상식이 필요하다.

Main Memory는 CPU와 I/O 장치가 공유하는 빠르게 접근 가능한 저장 공간이며, 이중 CPU 가 주로 Main Memory에 접근을 하여 직접 주소를 지정하고 계산을 위한 데이터를 읽거나 쓰게 된다.

  • CPU는 Instruction-fetch Cycle 중에 명령어를 Main Memory에서 읽어옴
  • CPU는 Data-fetch Cycle 중에는 Main Memory로부터 데이터를 읽거나 씀

프로그램 실행을 위한 메모리 역할

프로그램을 실행하기 위해서 CPU는

  1. Absolute Address 로 매핑을 시키고
  2. Main Memory 에 적재하고
  3. 실행 중인 명령어/데이터를 메모리에서 접근
  4. 실행이 끝난 후에는 메모리 공간을 해제시킨다.

여러 프로그램 동시 실행을 위한 메모리 관리

CPU 사용률 향상과 사용자 응답 속도 개선을 위해서 이전에 CPU를 여러 개 쓰는 것을 보았고, 여러 개의 코어를 쓰도록 하기 위해 여러 프로그램을 동시에 메모리에 유지해야 함을 알 수 있었다.

여러 개의 프로그램을 동시에 메모리에 유지시키기 위해서 다양한 알고리즘, 하드웨어가 존재하기 때문에 운영체제는 때에 맞는 관리법을 사용해야 한다.

운영체제의 메모리 관리 역할

따라서 운영체제는 다음 책임이 따른다.

  • 어떤 메모리 영역이 사용 중인지
  • 어떤 프로세스가 사용 중인지
  • 실행해야 할 프로세스 메모리 공간 할당
  • 실행이 끝난 프로세스 메모리 공간 해제
  • 어떤 프로세스와 데이터를 메모리로 가져오거나 내보낼지 결정

1.5.3 File-System Management

운영체제는 저장장치의 물리적 특성을 추상화하여 사용자에게 논리적이고 일관된 저장 단위인 File 개념을 제공한다. 이들은 전부 2차, 3차 저장장치에 저장되어 있다.

  • File: 관련된 정보를 담은 추상적 단위
    • 자유 형식 또는 고정 형식 등 가능하다.
  • 파일은 Directory 구조(트리 형태)로 구성되어 관리됨
    • 접근 권한 제어 필요

운영체제 파일 관리 역할

  • 파일 생성 및 삭제
  • 디렉터리 생성 및 삭제
  • 파일/디렉터리 조작 기능 제공
  • 파일을 물리 저장 장치에 매핑
  • 파일을 비휘발성 저장매체에 백업

1.5.4 Mass-Storage Management

위는 저장장치와 운영체제 간의 의사소통 단위로써의 파일과 디렉토리를 통해 사용자에게 편의성을 제공하는 기능을 보았다면, 지금은 대용량 저장장치 자체의 관리를 본다.

Secondary Storage

흔히 우리가 사는 HDD, SSD(NVM) 등은 프로그램과 데이터의 주 저장 매체가 여기서 다루어지며, 대부분의 프로그램은 메모리에 올라가기 전 여기에 저장된다. 실행 중에도 저장장치를 통해 입출력 수행하고, 용도로는 자주 쓰이는 어플리케이션이나 파일 등을 저장하게 된다.

운영체제 보조기억장치 관리 역할
  • 장치 마운트/언마운트
  • 빈 공간 관리
  • 저장공간 할당
  • 디스크 스케줄링
  • 디스크 파티션 관리
  • 자원 보호(접근 제한)

Tertiary Storage

속도는 느리지만 비용이 저렴하고 용량이 큰 저장장치이다. 가장 적합한 용도는 백업, 아카이브, 잘 안쓰는 데이터를 저장할 때 쓰인다.

운영체제 3차 저장장치 관리 역할
  • 장치 마운트/언마운트
  • 장치 독점 사용 권한 관리
  • 2차 -> 3차 저장소로 데이터 마이그레이션

저장장치 계층별 특징

characteristics-of-various-types-of-storage

1.5.5 Cache Management

자주 쓰이는 정보를 느린 저장소에서 빠른 저장소로 복사해두고 사용하는 기술을 Caching 이라고 한다.

  • 정보가 필요하면 일단 그 정보를 먼저 캐시에서 찾고
  • 없으면 원래 저장소에서 읽고 캐시에 복사

레지스터와 캐시의 차이

CPU 내부에는 명령어 처리를 위한 레지스터(Register Set) 와, 메모리 접근 속도를 높이기 위한 캐시(Cache) 가 함께 존재한다.

  • 레지스터(Register): CPU 연산에 직접 사용되는 가장 빠르고 가장 작은 저장소이며, 명령어 실행 시 즉각 참조된다.
    컴파일러는 어떤 데이터를 레지스터에 보관할지 결정하기 위해 레지스터 할당 알고리즘을 사용한다.

  • 캐시(Cache): 메인 메모리보다 빠른 저장소로, 자주 사용하는 데이터를 하드웨어가 자동으로 복사/관리한다.
    L1, L2, L3 등의 계층 구조를 가지며, CPU와 메인 메모리 간 병목을 줄이기 위해 존재한다.

두 장치는 모두 속도를 위한 고속 저장장치이지만,
레지스터는 명령어 실행 단위의 직접 연산용,
캐시는 메모리 접근 지연 최소화를 위한 자동 관리 구조라는 점에서 차이가 있다.

하드웨어 수준 캐시

일부 캐시는 완전히 하드웨어에 의해 구현된다. 위에서 캐시 설명에 포함되는 개념이다.

L1 Cache 예시:
Instruction Cache(L1I): 다음에 실행될 명령어를 저장
Data Cache(L1D): 자주 접근하는 데이터를 저장

이런 캐시가 없으면 CPU는 메인 메모리에서 명령어/데이터를 가져오느라 여러 클럭 사이클 동안 대기해야 한다.

캐시 크기와 교체 정책

캐시는 용량이 제한적이기 때문에

  • 크기 결정
  • 교체 알고리즘 이 두 가지로 성능이 크게 좌우된다. 이를 운영체제가 하게 된다.

계층적 저장 구조와 데이터 동기화

보통 저장장치는 계층적으로 구성됨을 보았다.

여기서 동일한 데이터가 여러 계층에 동시에 존재함을 알 수 있는데, 이에 대한 동기화를 어떻게 하는지 간단히 보자.

migration-of-integer-a-from-disk-to-register.png

예: 정수 A가 파일 B에 있고, B는 2차 저장장치에 있음

  1. 2차 저장장치에서 메인 메모리로 블록 복사
  2. 메모리 -> 캐시 -> 레지스터 순으로 A를 이동
  3. 레지스터에서 A를 증가시키고
  4. 수정된 값을 모든 계층에 동기화
    여기서 캐시 계층에 값을 최신화 시키는 것을 캐시 일관성이라고 함

환경별 고려 사항

멀티태스킹 환경에서는 여러 프로세스가 동일 데이터 A에 접근할 경우에 가장 최신의 값을 보장해야 한다. 여기서 발생하는 문제를 캐시 일관성(Cache Coherency)이라하고 보통 하드웨어에서 처리하게 된다.

멀티태스킹 뿐만 아니라 분산 시스템도 여러 컴퓨터에 파일 복사본(replica)이 존재 가능해서 수정 시 다른 복사본에도 동기화가 필요하게 된다.

1.5.6 I/O System Management

운영체제는 특정 하드웨어 장치의 복잡한 특성을 사용자로부터 숨겨서 사용자가 사용하기 편리하게 한다.

대부분의 구성요소는 I/O 장치의 특성을 몰라도 되도록 I/O 하위 시스템이 이를 감추어주는데,

  • 메모리 관리 구성요소
    • 버퍼링: I/O 속도 차이를 완화하기 위한 임시 메모리
    • 캐싱
    • 스풀링: 출력 장치처럼 순차적 처리 필요한 경우 데이터를 큐에 저장
  • 일반적인 장치 드라이버 인터페이스
  • 특정 하드웨어 장치에 대한 드라이버
  • … 이러한 계층화된 구성 덕분에 운영체제는 새로운 장치에 대한 특수한 세부사항을 알지 않아도 통일된 방식으로 I/O를 처리할 수 있다.

효율적인 I/O 하위 시스템을 구성하기 위해 인터럽트 핸들러와 장치 드라이버가 사용된다.

운영체제 I/O 시스템 관리 역할

  • I/O 하위 시스템이 다른 시스템 구성요소와 어떻게 인터페이스하는지
  • 장치를 어떻게 관리하는지
  • 데이터를 어떻게 전송하는지
  • I/O 완료를 어떻게 감지하는지

🔗 출처