Post

OS 기초

OS

운영체제(Operating System)는 컴퓨팅 하드웨어와 소프트웨어의 중개자 역할을 하는 시스템 소프트웨어이다.

커널(kernel)이란 운영체제의 핵심 기능 집합을 말한다. linux가 대표적인 커널이며 이를 활용한 다양한 운영체제가 존재한다.


프로세스 관리

프로세스(쓰레드) 관리는 운영체제의 핵심 기능이다.


프로세스

메인 메모리에서 실행되고 있는 프로그램을 말한다.

  • 프로세스마다 고유한 메모리 영역을 할당받는다.
    • 메모리 영역
      • code: 소스 코드 영역
      • data: 초기화된 정적, 전역 데이터 영역
      • BSS(Block Started by Symbol): 초기화 되지 않은 정적, 전역 데이터 영역
      • stack: 정적으로 사용되는 지역 데이터 영역
      • heap: 동적으로 사용되는 지역 데이터 영역

멀티 프로세싱과 멀티태스킹: 멀티 프로세싱은 여러개의 코어에서 여러개의 프로세스가 동시에 실행될 수 있는 것을 말하고, 멀티태스킹은 하나의 코어에서 여러 개의 프로세스 또는 쓰레드가 문맥교환을 통해 실행될 수 있다.


쓰레드

프로세스 내의 실행단위를 말하며 공유하는 데이터 영역이 있기 때문에 문맥교환의 비용이 적다.

  • 고유한 stack 메모리 영역을 할당받고 나머지 영역은 프로세스 내에서 공유한다.
  • 공유 영역이 있으므로 동기화 작업이 요구된다.
  • 종류
    • 커널 수준 쓰레드: 커널에서 직접 생명주기를 관리하는 쓰레드로 쓰레드간 문맥교환이 가능하다.
    • 유저 수준 쓰레드: 유저 레벨에서 커널 수준 쓰레드를 모방하여 만든 쓰레드이며 커널이 관리하고 있지 않기 때문에 코어에서의 문맥교환이 불가능하다.

Spring 기반 비동기 프로그래밍 방식에서 사용되는 이벤트 루프 모델은 일반적으로 코어 개수만큼 커널 쓰레드를 생성하고 유저 레벨 쓰레드를 통해 실제 로직을 비동기 넌블러킹 방식으로 실행한다.


CPU 스케줄링

프로세스가 CPU에 할당되어 처리되는 순서를 결정하는 작업을 말한다.

  • 종류
    • 선점형(Preemption): 코어에서 실행되고 있는 프로세스를 할당 해제할 수 있다.
    • 비선점형(No Preemption): 코어에서 실행되고 있는 프로세스를 할당 해제할 수 없다.

스케쥴링 알고리즘에 따라 장기간 코어에서 실행되지 못하는 starvation이 발생할 수 있다.


인터럽트(Interrupt)

CPU가 프로그램을 실행하는 도중에 예외 상황이 발생했을 때 또는 특정 작업이 완료되었을 때 처리를 중단하고 해당 상황을 먼저 처리하도록 하는 신호

  • 종류
    • 하드웨어 인터럽트: 외부 장치의 이벤트 처리를 위한 인터럽트
    • 소프트웨어 인터럽트: 시스템 콜 또는 예외 처리를 위한 인터럽트
    • 타이머 인터럽트: 일정 시간이 경과하여 발생하는 인터럽트
    • IO 인터럽트: 입출력 장치 작업의 완료를 알리는 인터럽트


동기화

공유 데이터에 대한 무분별한 접근은 데이터의 일관성을 저해하기 때문에 동기화가 필요하다.

  • 동기와 비동기
    • 동기: 작업 요청 후 작업 완료를 대기
    • 비동기: 작업 요청 후 작업 완료를 대기하지 않음
  • 블로킹 IO와 넌블로킹 IO
    • 블로킹 IO: IO 작업 중에 다른 작업 불가
    • 넌블로킹 IO: IO 작업 중에 다른 작업 가능


교착상태(Deadlock)

여러 프로세스나 스레드가 서로가 가지고 있는 자원을 기다리며 무한히 대기하는 상황을 말한다.

  • 교착상태의 4가지 조건
    • 상호 배제(Mutual Exclusion): 자원의 점유는 하나의 주체에게만 가능
    • 점유와 대기(Hold and Wait): 자원을 점유한 상태로 다른 자원의 할당을 기다리는 상태
    • 비선점(No Preemption): 할당된 자원을 임의로 해제할 수 없는 상태
    • 순환 대기(Circular Wait): 사이클을 형성하며 자원을 점유하고 자원의 할당 해제를 기다리는 상태
  • 교착상태 해결방법
    • 예방(Prevention): 4가지 조건중 하나를 해소하는 방법
    • 회피(Avoidance): 은행원 알고리즘을 통해 안전한 상태를 점검하며 자원 할당/해제
    • 탐지(Detection): 주기적으로 교착상태를 탐지하고 교착상태를 유발한 프로세스 종료 또는 자원 해제
    • 무시(Ignorance): 교착상태 발생을 방치


임계 구역(Critical Section)

여러 쓰레드나 프로세스가 동시에 접근해서는 안 되는 공유 자원을 접근하는 코드 영역을 말한다.

  • 임계 구역의 3가지 조건
    • 상호 배제(Mutual Exclusion)
    • 진행(Progress): 임계 구역에 진입한 쓰레드 또는 프로세스가 없는 경우, 임계 구역에 진입할 수 있어야 한다.
    • 한정 대기(Bounded Waiting): 임계구역에 접근을 시도한 프로세스는 유한한 시간 내에 접근해야 한다.


메모리 관리

응용 프로그램의 크기에 비해 주기억장치의 크기가 작은 경우가 대부분이고 이러한 경우 프로그램을 메모리에 모두 적재할 수 없다. 때문에 적절한 메모리 관리 전략이 필요하며 운영체제가 이를 수행한다.

  • 기억장치 종류: 아래에 기술된 메모리일수록 더 저렴하고 느리다.
    • 레지스터: CPU 내부에 존재
    • 캐시: CPU와 메모리 사이에 존재
    • 메모리: 주기억장치
    • 보조기억장치: 하드디스크, SSD등의 비휘발성 저장장치
    • 외부기억장치: USB, 외장 하드디스크와 같이 외부 연결 저장 매체

캐시 메모리는 지역성의 개념을 띈다.

  • 시간적 지역성(Temporal Locality): 한 번 접근한 데이터나 명령어가 다시 접근될 가능성이 높다는 원칙
  • 공간적 지역성(Spatial Locality): 한 번 접근한 데이터나 명령어 근처의 데이터나 명령어에 접근할 가능성이 높다는 원칙


페이징(Paging)과 가상 메모리

물리적 메모리를 일정한 크기의 블록으로 나누고 가상 메모리의 페이지와 매핑하는 메모리 관리 방식

  • MMU(Memory Management Unit): 논리 메모리 주소와 물리 메모리 주소간의 매핑을 하는 운영체제 내부 요소
  • 내부 단편화: 메모리에서 활용할 수 없는 공간의 발생을 말하며 블록 페이징의 경우, 블록 내부에 발생한다.
  • Demand Paging: 필요한 페이지만 메모리에 할당한다.
  • Swap Space: 보조기억장치에 존재하는 공간으로 메모리에 할당하여 사용하지 않는 페이지를 저장한다.

세그멘테이션은 동적인 길이로 메모리를 분할하며 이로 인해 세그멘테이션 외부에 단편화가 발생한다.


입출력 장치 관리

운영체제는 입출력 장치를 포함한 하드웨어와 응용 프로그램과 같은 소프트웨어의 중개자 역할을 한다.

  • 장치 드라이버: 운영체제가 입출력 장치를 이해하기 위한 소프트웨어
  • 장치 컨트롤러: 입출력장치가 명령을 저장하고 수행하기 위한 하드웨어
  • 입출력 수행 방식
    • Pollong: 운영체제가 IO작업이 완료되었는지 지속적으로 확인하는 방식
    • Interrupt: 입출력장치가 IO작업이 완료되면 운영체제에게 Interrupt하는 방식
This post is licensed under CC BY 4.0 by the author.