241014 CS 스터디 정리

apple-mint·2024년 10월 14일

CS study

목록 보기
2/15

1. 운영체제의 큰 그림

  • 커널: 운영체제의 핵심 기능을 담당하는 부분
  • 운영체제는 응용 프로그램 대신 컴퓨터 부품에 접근해 효율적으로 사용되도록 관리하고 이러한 자원들을 다시 응용 프로그램에게 할당함

1) 운영체제의 역할

(1) 자원 할당 및 관리

  • 자원: 프로그램 실행에 필요한 요소
    ex. 데이터, 컴퓨터 핵심 부품
  • CPU, 메모리, 파일/디렉터리와 같은 자원을 할당하고 관리함

(2) 프로세스 및 스레드 관리

  • 프로세스: 실행 중인 프로그램을 지칭
  • 스레드: 프로세스를 이루는 실행의 단위

동시다발적으로 실행되는 프로세스와 스레드를 올바르게 처리할 수 있도록 실행순서를 제어하고 요구자원을 적절하게 배분함

2) 시스템 콜과 이중 모드

  • 커널 영역: 운영체제가 적재되는 영역
  • 사용자 영역: 사용자 응용 프로그램이 적재되는 영역
  • 시스템 콜: 소프트웨어 인터럽트의 일종으로 응용 프로그램의 자원 접근 및 조작을 대행하는 운영체제 코드를 실행할 수 있는 방법
  • 커널 모드: 커널 영역에 적재된 코드를 실행할 때의 실행 모드
  • 사용자 모드: 사용자 영역에 적재된 코드를 실행할 때의 실행 모드
  • 이중 모드: 위 2개의 모드로 구분하여 실행하는 것

2. 프로세스와 스레드

1) 프로세스를 구성하는 메모리 정보

(1) 커널 영역

  • 프로세스 제어 블록(PCB)
    • 프로세스를 식별할 수 있는 정보
    • 프로세스 테이블 형태로 관리되며 추가/삭제를 통해 자원 할당/해제함

(2) 사용자 영역

  • 정적 할당 영역: 코드 영역, 데이터 영역
  • 동적 할당 영역: 힙 영역, 스택 영역
  • 코드 영역
    • 실행 가능한 명령어가 저장되는 공간
  • 데이터 영역
    • 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간
    • 정적 변수, 전역 변수
  • 힙 영역
    • 사용자가 직접 할당 가능한 저장공간
    • 메모리 누수 발생 위험이 있음
    • 이를 해결하기 위해 가비지 컬렉션 기능을 제공하기도 함
  • 스택 영역
    • 일시적으로 사용할 값들이 저장되는 공간
    • 매개변수, 지역변수, 스택 트레이스 형태의 함수 호출 정보 등
    • 스택 트레이스: 특정 시점에 스택 영역에 저장된 함수 호출 정보

2) 프로세스

(1) 프로세스 실행과정

  • 프로세스가 실행된다 = 운영체제에 의해 CPU의 자원을 할당받았다
  • 프로세스는 타이머 인터럽트에 의해 정해진 시간만큼 CPU를 사용
  • 프로세스를 다시 수행하기 위해 중간 정보를 백업
  • 백업된 정보를 PCB에 명시하고 다음 프로세스의 중간 정보를 백업
  • 문맥: 프로세스 수행 재개를 위해 기억해야 할 정보
  • 문맥교환: 기존 프로세스의 문맥을 PCB에 백업하고 PCB에서 문맥을 복구하여 새로운 프로세스를 실행하는 것

(2) 프로세스 상태

  • 생성 상태
    • 프로세스를 생성 중으로 메모리에 적재되어 PCB를 할당받은 상태
    • 생성 상태를 거쳐 실행할 준비가 완료된 프로세스는 준비 상태가 됨
  • 준비 상태
    • CPU 할당을 받는 것을 기다리고 있는 상태
    • 준비 상태인 프로세스가 CPU 할당받으면 실행 상태가 됨
    • 디스패치: 준비 상태인 프로세스가 실행 상태로 전환되는 것
  • 실행 상태
    • CPU를 할당받아 실행 중인 상태로 일정 시간 동안 CPU 사용 가능한 상태
    • 타이머 인터럽트가 발생하며 할당된 시간을 모두 사용하면 준비 상태로 전환
    • 실행 중 입출력장치를 사용해 입출력장치의 작업이 끝날 때까지 기다려야 하면 대기 상태로 전환
  • 대기 상태
    • 프로세스가 입출력 작업을 요청하거나 바로 확보할 수 없는 자원을 요청하는 등 바로 실행히 불가한 조건에 놓이는 경우의 상태
    • 실행 가능한 상태가 되면 준비 상태가 됨
  • 종료 상태
    • 프로세스가 종료된 상태
    • 운영체제가 PCB, 프로세스가 사용한 메모리를 정리

3) 멀티프로세스와 멀티스레드

(1) 멀티프로세스

  • 동시에 여러 프로세스가 실행되는 것
  • 자원 공유X: 독립적으로 실행하며 다른 프로세스에 문제가 발생해도 지장이 없거나 적음

(2) 멀티스레드

  • 프로세스를 동시에 실행하는 여러 스레드
  • 자원 공유: 동일한 주소 공간의 코드, 데이터, 힙 영역을 공유하며 협력 및 통신이 가능

4) 프로세스 간 통신

(1) 공유 메모리

  • 공유하는 메모리 영역을 토대로 데이터를 주고받는 통신 방식
  • 자신에게 할당된 메모리 공간처럼 사용하며 통신 속도가 빠름
  • 데이터의 일관성이 훼손되는 레이스 컨디션이 발생할 수 있음
  • 레이스 컨디션: 프로세스 또는 스레드가 동시에 임계 구역의 코드를 실행하여 문제가 발생하는 상황
  • 임계 구역: 공유 자원에 접근하는 코드 중 동시에 실행했을 때 문제가 발생할 수 있는 코드

(2) 메시지 전달

  • 프로세스 간 데이터가 커널을 거쳐 송수신되는 통신 방식
  • 파이프, 시그널, 소켓, 원격 프로시저 호출 등이 있음
  • 파이프
    • 단방향 프로세스 간 통신 도구
    • 양방향으로 사용할 경우 읽기용, 쓰기용 2개를 활용
  • 시그널
    • 프로세스에게 특정 이벤트가 발생했음을 알리는 비동기적 신호
    • 시그널 발생 시 하던 일을 잠시 중단
    • 시그널 처리를 위해 시그널 핸들러 실행 뒤 실행을 재개
  • 원격 프로시저 호출(PRC)
    • 원격 코드를 실행하는 IPC 기술
    • 프로그래밍 언어나 플랫폼과 무관하게 성능 저하를 최소화하고 메시지 송수신이 가능하므로 대규모 트래픽 처리환경, 서버 간 통신 환경에서 주로 사용

3. 동기화와 교착 상태

1) 동기화

  • 레이스 컨디션을 방지하면서 임계 구역을 관리하기 위해 실행 순서 제어, 상호 배제를 준수하며 실행하는 것

(1) 동기화 조건

  • 실행 순서 제어: 프로세스 및 스레드를 올바른 순서로 실행
  • 상호 배제: 동시 접근이 불가한 자원에 하나의 프로세스 및 스레드만 접근

(2) 동기화 기법

  • 뮤텍스 락
    • 동시 접근이 불가한 자원에 동시 접근할 수 없도록 상호 배제를 보장하는 동기화 도구
    • 한번에 하나의 프로세스 및 스레드만 공유 자원을 이용할 수 있도록 하는 데에 적합
  • 세마포
    • 하나의 공유 자원을 고려하는 동기화 도구
    • 공유자원이 여러 개 있는 상황에서 동기화 가능
  • 모니터
    • 공유 자원과 그 공유 자원을 다루는 함수로 구성된 동기화 도구
    • 상호 배제뿐만 아니라 실행 순서 제어 동기화도 가능
  • 스레드 안전
    • 멀티스레드 환경에서 어떤 변수나 함수, 객체에 동시 접근이 이루어져도 실행에 문제가 없는 상태
    • 어떤 함수가 스레드 안전하다면 여러 스레드에 의해 호출되어도 레이스 컨디션이 발생하지 않음

2) 교착 상태

  • 일어나지 않을 사건을 기다리며 프로세스의 진행이 멈춰 버린 현상
  • 한정된 자원의 무분별한 할당으로 인해 발생하는 문제

(1) 교착 상태 발생 조건

다음과 같은 4개의 조건이 모두 만족했을 때 발생 가능성이 생김

  • 상호 배제: 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없을 때 발생할 수 있음

  • 점유와 대기: 한 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다릴 때 발생할 수 있음

  • 비선점: 해당 자원을 이용하는 프로세스의 작업이 끝날 때까지 대기해야 할 때 해당 자원을 강제로 빼앗지 못하는 경우 발생할 수 있음

  • 원형 대기: 프로세스와 프로세스가 요청한 자원의 원의 형태를 이룰 때 발생할 수 있음

(2) 교착 상태 해결법

  • 예방: 교착 상태 발생 조건 중 하나를 만족시키지 못하게 함
  • 회피: 프로세스에 할당할 수 있는 자원이 충분한 상태에서 적은 프로세스에게 자원을 할당
  • 검출 후 회복: 교착 상태 검출 시 자원 선점을 통해 회복시키거나 교착 상태에 놓인 프로세스를 강제 종료함으로써 회복시킴

0개의 댓글