Operating System

mangez_js·2024년 12월 16일

Study

목록 보기
30/47

프로세스 VS 스레드

  1. 프로세스
  • 독립된 메모리 공간과 자원을 가진 프로그램의 실행 단위
  • 각 프로세스는 별도의 주소 공간을 사용
  • 프로세스 간 통신은 IPC(Inter-Process Communication)을 사용해야 함
  1. 스레드
  • 프로세스 내에서 실행되는 작은 실행 단위
  • 같은 프로세스 내의 스레드들은 자원을 공유(메모리, 파일 등)
  • 스레드 간 통신이 간단하고 비용이 적음

멀티스레드

  1. 장점
  • 메모리와 자원의 공유로 효율적인 실행 가능
  • 병렬 처리를 통해 응답성과 성능 향상
  • 문맥 전환 비용이 적음
  1. 단점
  • 동기화 문제로 인해 Deadlock, Race Condition 발생 가능
  • 디버깅이 어렵고, 설계 복잡성이 증가
  • 하나의 스레드 오류가 전체 프로세스에 영향을 줄 수 있음
  1. 멀티스레드 VS 멀티프로세스
    3-1. 멀티스레드
  • 프로세스 내의 스레드들이 자원을 공유하므로 문맥 전환 비용이 적음
  • 동기화와 충동 문제가 발생할 가능성이 높음
    3-2. 멀티프로세스
  • 독립된 메모리 공간 사용으로 안전성이 높음
  • 문맥 전환 비용이 크고, IPC가 필요하며 속도가 느릴 수 있음

DeadLock(교착 상태)

두 개 이상의 프로세스가 서로 자원을 기다리며 무한 대기 상태에 빠지는 상황, 시스템이 멈추며 더 이상 진행할 수 없는 상태가 됨.

Race Condition(경쟁 상태)

두 개 이상이 프로세스/스레드가 공유 자원에 접근하며 실행 결과가 실행 순서에 따라 달라지는 상태

스케줄러

  1. 장기 스케줄러(Long-term Scheduler or Job Scheduler)
    : 디스크에 있는 작업 중 어떤 작업을 메모리에 올려 실행 가능 상태(Ready Queue)로 만들지 결정합니다.
  • 시스템에 과도한 작업이 몰리는 것을 방지해 부하 조절 역할 수행
  • 작업의 유형에 따라 I/O 바운드와 CPU 바운드 작업의 균형을 맞춥니다.
  1. 단기 스케줄러(Short-term Scheduler or CPU Scheduler)
    : Ready Queue에 대기중인 프로세스 중 하나를 선택해 CPU를 할당합니다.
  • CPU 스케줄링의 핵심을 담당
  • 프로세스의 상태를 실행 상태(Running)로 전환
  • 프로세스의 상태(ready -> running -> waiting -> ready
  1. 중기 스케줄러(Medium-term Scheduler or Swapper)
    : 실행 중인 프로세스를 일시적으로 메모리에서 Swap Out 시키거나 다시 메모리 가져오는 Swap In 작업을 통해 메모리 관리를 수행
  • 프로세스에게서 memory 를 deallocate
  • 프로세스이 상태(ready -> suspended)

Suspended(stopped)

외부적인 이유로 프로세스의 수행이 정지된 상태로 메모리에서 내려간 상태를 의미한다.
프로세스 전부 디스크로 swap out 된다.

CPU 스케줄러

스케줄링 대상은 Ready Queue에 있는 프로세스들이다.

  1. FCFS(First Come First Served)
  • 방식 : 도착 순서대로 처리
  • 장점 : 간단하고 공정
  • 단점 : 대기 시간이 길어질 수 있음
  1. SJF(Shortest - Job - First)
  • 방식 : 실행 시간이 짧은 프로세스부터 처리
  • 장점 : 평균 대기 시간 최소화
  • 단점 : 실행 시간이 긴 프로세스가 무한 대기 상태에 빠질 수 있음
  1. SRTF(Shortest Remaining Time First)
  • 방식 : 남은 실행 시간이 가장 짧은 프로세스에 CPU를 할당
  • 특징 : SJF의 선점형 버전
  • 장점 : 응답 시간 단축
  • 단점 : Starvation 발생 가능
  1. Priority Scheduling
  • 방식 : 우선순위가 높은 프로세스부터 실행
  • 특징 : 선점형 또는 비선점형으로 구현 가능
  • 단점 : 우선순위가 낮은 프로세스는 Starvation이 발생할 수 있음
  1. Round Robin (RR)
  • 방식 : 프로세스에 일정 시간(Time Quantum)을 할당, 일정시간이 지나면 Ready Queue로 돌아가 CPU 를 다른 프로세스에 할당
  • 장점 : 응답 시간이 고르게 분배되어 실시간 시스템에 적합
  • 단점 : Time Quantum 설정이 매우 중요(짧으면 오버헤드, 길면 응답 시간 증가)

동기 VS 비동기

  1. 동기
  • 작업이 순차적으로 진행되며, 작업 간 의존성이 있음
  • 이전 작업이 끝날 때까지 대기
  1. 비동기
  • 작업이 독립적으로 진행되며, 병렬적으로 실행 가능
  • 작업 완료를 기다리지 않고 다른 작업 수행

프로세스 동기화

다수의 프로세스/스레드가 자원을 공유할 때 동시 접근 문제를 해결하기 위한 방법

  1. Critical Section(임계 영역)

    동일한 자원을 동시에 접근하는 작업을 실행하는 코드 영역

  2. Critical Section Problem(임계영역 문제)

    프로세스들이 Critical Section을 함께 사용할 수 있는 프로토콜을 설계하는 것

Requirement(해결을 위한 기본조건)

  • Mutual Exclusion(상호 배제) : 프로세스 P1이 Critical Section 에서 실행중이라면, 다른 프로세스들은 그들이 가진 Critical Section에서 실행될 수 없다.
  • Progress(진행) : Critical Section 에서 실행중인 프로세스가 없고, 별도의 동작이 없는 프로세스들만 Critical Section 진입 후보로서 참여될 수 있다.
  • Bounded Waiting(한정된 대기) : P1가 Critical Section 에 진입 신청 후 부터 받아들여질 때까지, 다른 프로세스들이 Critical Section 에 진입하는 횟수는 제한이 있어야 한다.

해결 방법

  1. Lock
  • 하나의 프로세스만 공유 자원에 접근하도록 제한
  1. Semaphores
  • 카운터를 기반으로 자원 접근을 제어
  1. Monitiors
  • 동기화를 더 쉽게 구현하기 위해 공유 자원과 관련된 코드를 하나의 모듈로 캡슐화
  1. Busy Waiting
  • 특정 조건이 충족될 때까지 CPU를 사용하며 대기
  1. Condition Variables
  • 모니터 내부에서 특정 조건이 충족될 때까지 대기 상태를 관리

메모리 관리 전략

  1. 메모리 관리 배경

    각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스 공간에 접근할 수 없는 제한이 걸려있다.

  2. Paging

  • 메모리를 동일 크기의 페이지 단위로 나누어 관리
  1. Segmentation
  • 메모리를 논리적인 세그먼트로 분리하여 관리

가상 메모리

프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법

  1. 효율적인 메모리 사용
  • 프로그램의 필요한 부분만 물리 메모리에 올려 실행, 나머지는 디스크에 저장
  1. 논리 메모리 확장
  • 실제 RAM 용량보다 큰 주소 공간을 제공하여 더 큰 프로그램 실행 가능
  1. 프로세스 간 격리
  • 가상 주소 공간을 통해 프로세스 간 메모리 침범 방지
  1. 멀티태스킹 지원
  • 여러 프로세스가 동시에 실행 가능하도록 메모리를 나누어 사용

구현 방식

  1. 페이징(Paging)
  • 정의 : 메모리를 고정된 크기로 나누고, 필요한 페이지만 물리 메모리에 매핑
  • 구성 요소
    ∘ Page : 프로세스가 사용하는 논리적 메모리 단위
    ∘ Frame : 물리 메모리의 고정된 크기 단위
    ∘ Page Table : 논리 주소를 물리 주소로 변환하는 데이터 구조
  1. 요구 페이징(Demand Paging)
  • 정의 : 프로세스 실행 시 필요한 페이지만 로드하는 방식
  • 장점
    ∘ 메모리 낭비를 줄이고, 실행 속도 향상
  • Page Fault
    ∘ 필요한 페이지가 물리 메모리에 없는 경우 발생
    ∘ OS는 디스크에서 해당 페이지를 가져오고 실행 재게
  1. 페이지 교체(Page Replacement)
  • 정의 : 물리 메모리가 가득 찬 경우, 새로운 페이지를 적재하기 위해 기존 페이지를 교체
  • 알고리즘
    ∘ FIFO(First-In-First-Out) : 가장 먼저 적재된 페이지를 교체
    ∘ LRU(Least Recently Used) : 가장 오랫동안 사용되지 않은 페이지를 교체
    ∘ Optimal : 앞으로 가장 늦게 참조될 페이지를 교체(이론적 이상)
  1. 세그먼테이션(Segmentation)
  • 정의 : 메모리를 다양한 크기의 논리적 단위로 나누는 방식
  • 장점
    ∘ 사용자가 인식하기 쉬운 구조 제공(코드, 데이터, 스택 등)
  • 단점
    ∘ 외부 단편화 문제 발생

장점

  1. 효율적인 메모리 사용
    ∘ 실제로 필요한 데이터만 메모리에 적재
  2. 프로그램 실행 기능
    ∘ 물리 메모리보다 큰 프로그램도 실행 가능
  3. 시스템 안정성 향상
    ∘ 프로세스 간 메모리 보호

단점

  1. Page Fault 비용
    ∘ 디스크 접근 시간이 매우 길어 성능 저하 기능
  2. 복잡한 관리
    ∘ Page Table 관리 및 교체 알고리즘 구현이 복잡
  3. 추가 오버헤드
    ∘ 메모리 매핑 및 페이지 교체로 인한 시스템 자원 소모

캐시의 지역성

프로그램 실행 중 데이터 접근 패턴을 분석하여, CPU와 메모리 간의 데이터 접근 효율을 높이는 데 중요한 개념입니다.

종류

  1. 시간 지역성(Temporal Locality)
  • 최근에 참조된 데이터는 가까운 시간 안에 다시 참조될 가능성이 높다는 특성
  1. 공간 지역성(Spatial Locality)
  • 특정 데이터가 참조되면, 그 주변의 데이터도 곧 참조될 가능성이 높다는 특성
  1. 순차 지역성(Sequentail Locality)
  • 데이터가 순차적으로 참조되는 경향

캐싱 라인

캐시에 데이터를 저장할 때 특정 자료 구조를 사용하여 묶음으로 저장한다.

3가지 종류
1. Full Associative
2. Set Associative
3. Direct Map

0개의 댓글