[혼공컴운] 4주차 Chapter 09~11

yeon·2024년 1월 28일
0

기본 미션

p.304의 확인 문제 1번 풀고 인증하기

  1. 다음은 프로세스 상태를 보여주는 프로세스 상태 다이어그램입니다. ①부터 ⑤까지 올바른 상태를 적어보세요.

    정답 ① 생성 상태, ② 준비 상태, ③ 실행 상태, ④ 종료 상태, ⑤ 대기 상태

선택 미션

ch11(11-2) 준비 큐에 A, B, C, D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케쥴링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기

정답:
선입 선처리 스케줄링 알고리즘은 준비 큐에 삽입된 순서대로 CPU를 할당함
-> A-B-C-D 순으로 CPU를 할당받음

내용 정리

9-1. 운영체제를 알아야 하는 이유

  • 운영체제: 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
  • 운영체제와의 대화를 통해 하드웨어와 프로그램을 더 깊이 이해하고 문제 해결의 실마리를 찾을 수 있음

  • 운영체제는 메모리 내 커널 영역 (kernel space)에 적재됨
    • 사용자 영역 (user space)에 적재된 프로그램들에 자원을 할당하고 이들이 올바르게 실행되도록 관리하는 역할

9-2. 운영체제의 큰 그림

  • 커널 (kernel): 운영체제의 핵심 기능을 담당
  • 이중 모드 (dual mode): CPU가 명령어를 실행하는 모드를 커널 모드 (kernel mode)와 사용자 모드 (user mode)로 구분하는 방식
  • 시스템 호출 (system call): 운영체제의 서비스를 제공받기 위해 커널 모드로 전환하는 방법
  • 대표적인 운영체제 서비스로 프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리가 있음


  • 운영체제의 핵심 서비스는 커널 모드로 실행
  • 일반적인 응용 프로그램은 사용자 모드로 실행
  • 시스템 호출을 통해 사용자 모드에서 커널 모드로 전환할 수 있음
  • 시스템 호출은 일종의 인터럽트이며, 소프트웨어적인 인터럽트임
  • 사용자 인터페이스는 운영체제에서 제공하는 서비스지만, 커널에 포함되지 않음 (GUI, CLI)

10-1. 프로세스 개요

  • 프로세스: 실행 중인 프로그램
    • 포그라운드 프로세스
    • 백그라운드 프로세스
  • 운영체제는 프로세스 제어 블록 (PCB: Process Control Block)을 통해 여러 프로세스를 관리
  • 문맥 교환: 프로세스 간에 실행을 전환하는 것
  • 프로세스 사용자 영역
    • 코드 영역
    • 데이터 영역
    • 스택 영역
    • 힙 영역

프로세스 제어 블록 (PCB)
프로세스와 관련된 정보를 저장하는 자료 구조이며 커널 영역에 생성됨

  • 프로세스 ID (PID: Process ID)
    • 특정 프로세스를 식별하기 위해 부여하는 고유한 번호
  • 레지스터 값
    • 자신의 실행 차례가 돌아오면 이전까지 사용했던 레지스터의 중간값들을 모두 복원 -> 이전까지 진행했던 작업들을 그대로 이어 실행할 수 있음
    • PCB 안에는 해당 프로세스가 실행하며 사용했던 프로그램 카운터, 스택 포인터 등을 비롯한 레지스터 값들이 담김
  • 프로세스 상태
    • 현재 프로세스가 어떤 상태인지 PCB에 기록
  • CPU 스케쥴링 정보
    • 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보도 PCB에 기록
  • 메모리 관리 정보
    • 프로세스가 어느 주소에 저장되어 있는지에 대한 정보 저장
  • 사용한 파일과 입출력장치 목록
    - 특정 입출력장치나 파일을 사용하면 PCB에 해당 내용이 명시됨

문맥 교환 (context switching)
기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것
(문맥: 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보)

프로세스의 메모리 영역

(동적 할당 영역은 프로세스 실행 과정에서 그 크기가 변할 수 있음)

  • 코드 영역 (code segment)
    • 기계어로 이루어진 명령어(CPU가 실행할 명령어) 저장
    • 쓰기 금지, 읽기 전용 (read-only) 공간
  • 데이터 영역 (data segment)
    • 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간
      ex) 전역 변수 (global variable)
  • 힙 영역
    - 사용자가 직접 할당할 수 있는 저장 공간
    • 언젠가는 해당 공간 반환해야 함
      ex) 가비지 컬렉션
      반환하지 않으면 메모리 낭비 초래 -> 메모리 누수 (memory leak)
  • 스택 영역
    • 데이터를 일시적으로 저장하는 공간
      ex) 매개 변수, 지역 변수

Java의 가비지 컬렉션

GC(Garbage Collection) 진행 방법
1. Eden 영역에서 객체가 생성됨
2. Eden 영역이 꽉 차면 살아있는 객체만 Survivor 영역으로 복사되고, 다시 Eden 영역을 채우게 됨
3. Survivor 영역이 꽉 차게 되면 다른 Survivor 영역으로 객체가 복사됨. 이때, Eden 영역에 있는 객체들 중 살아있는 객체들도 다른 Survivor 영역으로 감. 즉, Survivor 영역의 둘 중 하나는 반드시 비어 있어야만 함.


10-2. 프로세스 상태와 계층 구조

  • 프로세스 상태에는 생성, 준비, 실행, 대기, 종료가 있음
  • 프로세스가 다른 프로세스를 생성한 경우 프로세스를 생성한 프로세스를 부모 프로세스, 생성된 프로세스를 자식 프로세스라고 부름
  • 많은 운영체제는 프로세스가 프로세스를 낳는 프로세스 계층 구조로 프로세스들을 관리

프로세스 상태

  • 생성 상태 (new)
    • 이제 막 메모리에 적재되어 PCB를 할당받은 상태
  • 준비 상태 (ready)
    • CPU를 할당받기를 기다리고 있는 상태
    • 디스패치 (dispatch): 준비 상태인 프로세스가 실행 상태로 전환되는 것
  • 실행 상태 (running)
    • CPU를 할당받아 실행 중인 상태
    • 프로세스가 할당된 시간을 모두 사용한다면(타이머 인터럽트가 발생하면) 다시 준비 상태가 됨
    • 실행 도중 입출력장치를 사용하여 입출력장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 됨
  • 대기 상태 (blocked)
    • 특정 이벤트가 일어나길 기다릴 때 프로세스는 대기 상태가 됨
    • 프로세스가 대기 상태가 되는 대부분의 원인이 입출력 작업임
      • 입출력작업은 CPU에 비해 처리 속도가 느리기에, 입출력 작업을 요청한 프로세스는 입출력장치가 입출력을 끝낼 때까지 (입출력 완료 인터럽트를 받을 때까지) 기다려야 함
  • 종료 상태 (terminated)
    • 프로세스가 종료되는 상태
    • 프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리함

프로세스 계층 구조

  • 프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있음
  • 새 프로세스를 생성한 프로세스를 부모 프로세스 (parent process)
  • 부모 프로세스에 의해 생성된 프로세스를 자식 프로세스 (child process)

프로세스 생성 기법

  • fork 시스템 호출을 하면 부모 프로세스의 복제본이 자식 프로세스로서 생성됨
  • exec 시스템 호출을 하면 프로세스의 메모리 공간이 다른 프로세스의 내용으로 변경됨
  • 많은 운영체제는 fork와 exec를 통해 프로세스 계층 구조를 형성함

10-3. 스레드

  • 스레드: 프로세스 내의 실행 흐름 단위
  • 멀티프로세스: 여러 프로세스를 동시에 실행하는 것
  • 멀티스레드: 여러 스레드로 프로세스를 동시에 실행하는 것

스레드

  • 프로세스 내의 실행의 흐름 단위
  • 각기 다른 스레드 ID, 프로그램 카운터 값을 비롯한 레지스터 값, 스택으로 구성됨 -> 스레드마다 각기 다른 코드 실행 가능
  • 프로세스 자원을 공유한 채(코드/데이터/힙 영역) 실행에 필요한 최소한의 정보만으로 실행됨
  • 최근 많은 운영체제는 CPU에 처리할 작업을 전달할 때 프로세스가 아닌 스레드 단위로 전달

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

  • 프로세스끼리는 기본적으로 자원을 공유하지 않음
    • 쓰기 시 복사 (copy on write) 기법 (fork를 한 직후 같은 프로세스를 통째로 메모리에 중복 저장하지 않으면서 동시에 프로세스끼리 자원을 공유하지 않는 방법)도 있음

  • 스레드끼리는 같은 프로세스 내의 자원을 공유함
    • 서로 협력과 통신에 유리
    • 하나의 스레드에 문제가 생기면 다른 스레드도 영향을 받음

11-1. CPU 스케줄링 개요

  • CPU 스케줄링 (CPU scheduling): 공정하고 합리적으로 CPU 자원을 배분하는 방법을 의미
  • 프로세스는 우선순위를 가지고 있고, 이는 PCB에 명시됨
  • 운영체제는 효율적인 스케줄링을 위해 스케줄링 큐를 사용함
  • 준비 큐 (ready queue): CPU 할당을 기다리는 프로세스들을 위한 큐를 의미
  • 대기 큐 (waiting queue): 입출력장치를 기다리는 프로세스들을 위한 큐를 의미
  • 선점형 스케줄링 (preemptive scheduling): 프로세스가 이용 중인 자원을 빼앗을 수 있음
  • 비선점형 스케줄링 (non-preemptive scheduling): 프로세스가 이용 중인 자원을 빼앗을 수 없음

프로세스 스케줄링

  • 운영체제는 우선순위를 토대로 프로세스들을 스케줄링함
  • 운영체제는 스케줄링 큐를 사용하여 스케줄링할 프로세스들을 관리
  • 준비 큐에는 준비 상태인 프로세스들이, 대기 큐에는 대기 상태인 프로세스들이 삽입됨

선점형과 비선점형 스케줄링

  • 선점형 스케줄링은 어느 한 프로세스가 자원을 독점할 수 있는 스케줄링 방식
    • 문맥 교환 과정의 오버헤드가 비선점형 스케줄링에 비해 더 큼
  • 비선점형 스케줄링은 어느 한 프로세스가 자원을 독점할 수 없는 스케줄링 방식
    • 문맥 교환 과정의 오버헤드가 선점형 스케줄링에 비해 적음

11-2. CPU 스케줄링 알고리즘

  • 선입 선처리 스케줄링 (First Come First Served Scheduling) 알고리즘: 준비 큐에 삽입된 순서대로 CPU를 할당
  • 최단 작업 우선 스케줄링 (SJF: Shortest Job First Scheduling) 알고리즘: 준비 큐에 삽입된 프로세스들 중 CPU 사용 시간의 길이가 가장 짧은 프로세스부터 CPU를 할당
  • 라운드 로빈 스케줄링 (round robin scheduling) 알고리즘: 정해진 시간만큼만 돌아가며 CPU를 할당
  • 우선순위 스케줄링 (priority scheduling) 알고리즘: 가장 높은 우선순위를 가진 프로세스에 CPU를 할당
  • 다단계 피드백 큐 스케줄링 (multilivel feedback queue scheduling) 알고리즘: 프로세스들이 큐 사이를 이동할 수 있는 다단계 큐 스케줄링

선입 선처리 스케줄링 (First Come First Served Scheduling)

  • 단순히 준비 큐에 삽입된 순서대로 처리하는 비선점 스케줄링
  • 먼저 CPU를 요청한 프로세스부터 CPU 할당
  • 단점: 프로세스들이 기다리는 시간이 매우 길어질 수 있다는 부작용
    -> 호위 효과 (convoy effect)

최단 작업 우선 스케줄링 (SJF 스케줄링: Shortest Job First Scheduling)

  • CPU 사용 시간이 가장 짧은 프로세스부터 처리하는 스케줄링 방식
  • 호위 효과를 방지하려면?
    -> CPU 사용이 긴 프로세스는 나중에 실행, CPU 사용 시간이 짧은 프로세스는 먼저 실행

라운드 로빈 스케줄링 (Round Robin Schedling)

  • 선입 선처리 스케줄링 + 타임 슬라이스 (time slice)
    • 타임 슬라이스: 각 프로세스가 CPU를 사용할 수 있는 정해진 시간
  • 정해진 타임 슬라이스만큼의 시간동안 돌아가며 CPU를 이용하는 선점형 스케줄링
    • 큐에 삽입된 프로세스들은 순서대로 CPU를 이용하되 정해진 시간만큼만 이용
    • 정해진 시간을 모두 사용하였음에도 아직 프로세스가 완료되지 않았다면 다시 큐의 맨 뒤에 삽입 (문맥교환)
      -> 타임 슬라이스의 크기가 중요

최소 잔여 시간 우선 스케줄링 (SRT 스케줄링: Shortest Remaining Time Scheduling)

  • 최단 작업 우선 스케줄링 + 라운드 로빈 스케줄링
    - 최단 작업 우선 스케줄링: 작업 시간이 짧은 프로세스부터 처리하는 스케줄링 알고리즘
    - 라운드 로빈 스케줄링: 정해진 타임 슬라이스만큼 돌아가며 사용하는 스케줄링 알고리즘
    -> 정해진 시간만큼 CPU를 이용하되, 다음으로 CPU를 사용할 프로세스로는 남은 작업 시간이 가장 적은 프로세스 선택

우선순위 스케줄링 (Priority Scheduling)

  • 프로세스들에 우선순위를 부여하고, 우선순위 높은 프로세스부터 실행

  • 우선순위가 같은 프로세스들은 선입 선처리로 스케줄링

  • (최단 작업 우선 스케줄링, 최소 잔여 시간 스케줄링) ⊂ 우선순위 스케줄링

  • 우선순위 스케줄링의 근본적인 문제점 -> 기아 (starvation) 현상
    - 우선순위 높은 프로세스만 주구장창 실행
    - 우선순위 낮은 프로세스는 (준비 큐에 먼저 삽입되었음에도 불구하고) 실행 연기
    -> 이를 방지하기 위한 기법: 에이징 (aging)

    • 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식

    • 대기 중인 프로세스의 우선순위를 마치 나이 먹듯 점차 증가시키는 방법

      • 우선순위가 낮아도 언젠가는 우선순위가 높아짐

다단계 큐 스케줄링 (Multilevel Queue Scheduling)

  • 우선순위 스케줄링의 발전된 형태
  • 우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식
    • 우선순위가 가장 높은 큐에 있는 프로세스를 먼저 처리
    • 우선순위가 가장 높은 큐가 비어 있으면 그 다음 우선순위 큐에 있는 프로세스 처리

다단계 피드백 큐 스케줄링 (Multilevel Feedback Queue Scheduling)

  • 다단계 큐 스케줄링의 발전된 형태
  • 큐 간의 이동이 가능한 다단계 큐 스케줄링
  • 다단계 큐 스케줄링에서는 기본적으로 큐 간의 이동 불가
    • 우선순위 낮은 프로세스는 계속해서 실행 연기 우려
    • 기아 현상 발생 가능
  • 자연스럽게 CPU 집중 프로세스의 우선순위는 상대적으로 낮아지고, 입출력 집중 프로세스의 우선순위는 상대적으로 높아짐
  • 다단계 피드백 큐에서의 에이징 기법 적용
  • 어떤 프로세스의 CPU 시간이 길면 우선순위가 낮아지고, 어떤 프로세스가 낮은 우선순위 큐에서 너무 오래 기다리면 우선순위를 높이는 방식
  • CPU 스케줄링 방식으로 알려져 있음

0개의 댓글