본문 바로가기
개발/기타

[CS Study] 3. 운영체제 (1)

by 카펀 2022. 8. 30.

# 본 글은 인하대학교 단풍나무숲 CS 스터디에 작성한 내용을 그대로 가져온 글입니다.

3. 운영체제

목차

  1. 운영체제와 컴퓨터
  2. 메모리

1. 운영체제와 컴퓨터

1. 운영체제의 역할과 구조

운영체제는 크게 아래와 같은 역할을 합니다.

  • CPU 스케쥴링과 프로세스 관리
    • CPU를 할당 받을 프로세스를 관리하고, 각 프로세스에게 주어지는 자원을 할당 및 관리합니다.
  • 메모리 관리
    • 각 프로세스가 할당 받는 메모리를 관리하고, 메모리가 부족한 경우 어떤 프로세스로부터 우선하여 메모리를 가져올지 관리합니다.
  • 디스크 파일 관리
    • 파일을 저장하고 관리합니다.
  • I/O 디바이스 관리
    • 입력 장치 (키보드, 마우스, 스캐너 등)와 신호를 주고 받으며, 받은 입력을 적당한 프로세스에게 전달합니다.

실제 컴퓨터 하드웨어와 사용자 사이에는 다음 그림과 같은 계층이 존재합니다.

  • 시스템 콜
    • OS가 커널에 접근하기 위한 인터페이스. 응용 프로그램이 OS로부터 서비스를 받기 위해 커널 함수를 호출할 때 사용한다. 응용 프로그램은 커널에 절대 직접 접근할 수 없고, 시스템 콜을 통해야 한다.
  • modebit
    • 유저 모드와 커널 모드
    • modebit는 유저 모드와 커널 모드를 구분합니다. 유저 모드일 때 실행되면 안 되는 동작과 커널 모드일 때 실행되면 안 되는 동작을 구분하여 실행하도록 해 줍니다.

2. 컴퓨터의 요소

컴퓨터구조 내용 - 컴퓨터는 CPU, DMA 컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 구성되어 있습니다.

  • CPU
    • Central Processing Unit
    • ALU (Arithmetic-Logic Unit), 제어 장치, 레지스터로 구성되어 있습니다.
    • ALU: 덧셈, 뺄셈, 논리합, 논리곱 등 연산을 수행하는 장치입니다.
    • 제어 장치 (Control Unit): 프로세스 조작을 지시하는 부품으로, 입출력장치 간 통신을 제어하고, 명령어들을 읽고 해석하며, 데이터 처리의 순서를 정하는 역할을 합니다.
    • 레지스터: CPU 내에 존재하는 매우 빠른 기억장치입니다. CPU와 직접 연결되어 있어 RAM에 비해 접근 속도가 매우 빠릅니다. CPU는 직접 데이터를 전달할 수 없으므로, 레지스터를 통해 전달합니다.
  • DMA 컨트롤러
    • I/O 장치가 메모리에 접근할 수 있도록 합니다.
    • CPU에 몰리는 인터럽트 요청을 분산시켜 받아내는 역할
  • 메모리
    • 상태, 명령어, 데이터 등을 기록하는 장치
    • CPU로부터 연산된 결과를 담는 역할을 합니다.
  • 타이머
    • 특정 프로세스에 시간 제한을 거는 역할을 합니다.
  • 디바이스 컨트롤러
    • 컴퓨터에 연결된 I/O 기기들의 작은 CPU를 가리킵니다.

2. 메모리

CPU로부터 연산되거나, 연산될 데이터, 명령어 등을 담아 두는 역할을 합니다.

1. 메모리 계층

메모리는 다음과 같은 계층을 가집니다.
메모리 계층

  • 레지스터: CPU 안에 있는 작은 메모리, 휘발성, 가장 빠름, 가장 용량이 작습니다.
  • 캐시 (L1, L2 캐시): 휘발성, 레지스터 다음으로 빠름, 용량이 작습니다. L3 캐시도 존재합니다.
  • 메모리 (RAM): 휘발성, 속도 보통, 용량 보통
  • 스토리지 (보조기억장치): 비휘발성, 속도 느림, 용량 큼

코드와 명령어는 스토리지로부터 RAM에 불려와 집니다. RAM에 올라온 데이터 중 일부는 빠른 연산을 위해 캐시에 할당되고, CPU가 당장 손대는 데이터는 레지스터에 존재합니다.

2. 캐시 - 히트와 미스

캐시는, 데이터를 미리 복사해 두는 임시 저장소 역할을 합니다. 메모리의 속도가 느리고, 레지스터의 용량이 작아서 생기는 문제를 중간에서 줄여 주는 역할을 합니다.
캐시 역시 메모리에 비하면 크기가 작으므로, 어떤 값을 캐시에 보관하고 어떤 값을 캐시에서 비울지 전략적으로 접근해야 합니다.
캐시를 직접 설정할 때는, 자주 사용하는 데이터를 기반으로 설정해야 합니다. 이의 근거가 되는 개념을 지역성 (locality)라고 합니다. 지역성에는 시간 지역성 (temporal locality)과 공간 지역성 (spatial locality)로 나뉩니다.

  • 시간 지역성
    • 가장 최근 사용한 데이터에 다시 접근하려는 특성
    • 예: for문을 사용하는 경우 변수 i에 반복적으로 접근하게 된다.
  • 공간 지역성
    • 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하려는 특성
    • 예: for문을 통해 배열 ard의 원소에 접근하는 경우

캐시에 원하는 내용이 들어 있는 경우를 캐시 힛 (cache hit)이라고 하며, 내용이 없는 경우를 캐시 미스 (cache miss)라고 합니다. 당연히 cache hit이 자주 일어날수록 좋은 설계입니다.

3. 메모리 - 가상 메모리

운영체제의 역할 중 하나인 메모리 관리 방법의 하나로, 컴퓨터에게 주어진 한정된 메모리를 효율적으로 사용하는 방법입니다.

  • 가상 메모리
    • 실제 메모리보다 사용 가능한 메모리 크기가 훨씬 크게 느껴지도록 하는 기법
    • 사용자는 가상 메모리 주소를 통해 메모리에 접근하면, 해당 주소는 실제 메모리 주소로 변환되어 사용됩니다.
    • 가상 메모리 주소 - 실제 메모리 주소 변환은 '페이지 테이블'을 통해 이루어집니다.
  • 스와핑
    • 가상 메모리에는 존재하지만 실제 메모리 (RAM)에는 현재 데이터나 명령어 코드가 없는 경우, 페이지 폴트가 발생합니다.
    • 이를 방지하기 위해 가장 덜 사용할 것 같은 영역을 스토리지에 옮겨 놓고, 만약 해당 내용을 필요로 하면 다시 RAM으로 올리는 작업을 스와핑이라고 부릅니다.

4. 페이지 폴트

  • 페이지 폴트
    • 가상 메모리에는 존재하지만 실제 메모리 (RAM)에는 없는 데이터에 접근하는 경우 페이지 폴트가 발생한다 (캐시 미스와 비슷).
  • 스레싱
    • 페이지 폴트율이 높은 현상을 뜻합니다.
    • 일반적으로 발생하면 안 되는 상황입니다. CPU는 놀고 있게 되고, 메모리와 스토리지는 계속 데이터가 올라갔다 내려갔다 하며, 불필요한 리소스 (시간)가 소모됩니다.
  • 메모리 단편화
    • 내부 단편화: 메모리를 나눈 크기보다 프로그램이 크기가 작을 때, 해당 프로그램이 들어가고 나면 생기는 남는 공간
    • 외부 단편화: 메모리를 나눈 크기보다 프로그램이 크기가 클 때, 해당 메모리 공간이 남게 되는 현상
  • 메모리 할당 방법
    • 연속 할당 - 고정 분할 방식: 안 좋은 방법. 메모리를 미리 나누어 관리하며, 내부 단편화가 발생
    • 연속 할당 - 가변 분할 방식: 프로그램 크기에 따라 가변적으로 메모리를 나누어 사용하는 전략. 내부 단편화는 발생하지 않으나, 외부 단편화가 발생할 수 있다.
    • 불연속 할당 - 페이징: 동일한 크기의 메모리 단위 (페이지)로 나누어 관리하는 방법. 내부 단편화가 생기게 되며, 주소 변환이 복잡해집니다.
    • 불연속 할당 - 세그멘테이션: 프로세스를 의미 단위인 세그먼트로 나누어 관리하는 방법. 외부 파편화가 생기게 됩니다.
    • 일반적으로 페이징이 세그멘테이션보다 유리합니다. 내부 파편화가 발생하는 양과 외부 파편화가 발생하는 양을 각각 비교해 보았을 때, 세그멘테이션 쪽이 메모리 낭비가 더 심합니다.
    • 불연속 할당 - 페이지드 세그멘테이션: 공유나 보안을 의미 단위인 세그먼트로 나누고, 물리적 메모리는 페이지 단위로 관리하는 방법

5. 페이지 교체 알고리즘

메모리 스와핑을 가장 덜 일어나도록 하는 다양한 알고리즘이 존재합니다.

  • 오프라인 알고리즘: 먼 미래에 사용되는 페이지와 현재 할당하는 페이지를 바꾸는 방법. 미래에 사용할 프로세스를 모르므로, 현실성이 떨어진다.
    • 사용할 수 없는 알고리즘이지만, 주로 다른 알고리즘과의 성능 비교의 기준점이 된다.
  • FIFO (First-In First-Out)
    • 먼저 들어온 페이지를 먼저 내보내는 것
    • 똑똑한 알고리즘은 아닙니다.
  • LRU (Least Recently Used)
    • 가장 덜 최근에 사용한 페이지를 우선하여 내보내는 것
    • 비교적 효율적인 페이징 방법이지만, 오래된 정도를 파악히기 위하여 각 페이지마다 계수기, 스택을 두어야 합니다.

댓글