본문 바로가기
운영체제

[운영체제] 3. 프로세스 관리 - (1) 프로세스 개요

by NoDapKeepGoing 2025. 4. 11.

 

<2025.3.20.목요일 수업>

 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!마인드맵!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

📍1. 프로세스 개요

1-1. 프로세스의 의미

✔️ 다중프로그래밍 운영체제에서 발생하는 에러의 원인들은 프로세스 간
    1️⃣ 부적절한 동기화*(improper synchronization)
    2️⃣ 상호배제** 실패(failed mutual exclusion)
    3️⃣ 비결정적인 프로그램 연산***(nondeterminate program operation)
    4️⃣ 교착상태 발생(deadlocks)

* 부적절한 동기화: 프로그램 실행이 보류된 상태에서 동기화를 잘못 수행해 신호가 분실되거나 중복되는 것

**상호배제: 동시에 실행되는 프로세스가 공유 자원을 동시에 사용하지 못하도록 막는 기법 = 뮤텍스(Mutext)

***비결정적인 프로그램 연산:  여러 프로그램이 동일한 메모리 주소에 데이터를 덮어쓰면서 프로그램의 실행을 서로 방해하는 것

 

1-2.  위 문제들의 해결 방안

✔️ 운영체제가 CPU에서 수행 중인 다양한 프로그램을 감시하고 제어하는 체계적인 방법 필요
✔️ 이에 대한 기반을 프로세스 개념이 제공

 

📍2. 프로세스

2-1. 프로세스의 정의

✔️ 수행 중인 프로그램
✔️ 컴퓨터상에서 수행 중인 프로그램의 인스턴스(instance)
✔️ 처리기에 할당되어 수행될 수 있는 개체(entity)
✔️ 단일 순차 수행 스레드, 현재 상태, 연계된 자원 등에 의해 특징지어지는 활동 단위

 

2-2. 이미지 측면에서 프로그램과 프로세스 차이

✔️ 프로그램

디스크에 저장된 “실행 파일”로, 명령어 코드와 초기화된 데이터만을 포함하는 정적 엔터티

 

✔️ 프로세스(단일 스레드 프로그램)

이 프로그램을 메모리에 로드하여 능동적으로 실행하는 것으로, 코드·데이터 외에도 BSS, 힙, 스택 등의 여러 메모리 영역과 실행 상태(레지스터, PC 등)를 함께 가지는 동적 엔터티

 

2-3. 프로세스 구성 요소

1️⃣ 사용자 코드(code)

    ✔️ 수행될 프로그램 코드가 적재되는 영역
    - 사용자가 작성한 모든 함수의 코드
    - 사용자가 호출한 라이브러리함수들의 코드
2️⃣ 사용자 데이터(data)

    ✔️ 사용자 코드와 연관된 전역변수값들
    - 사용자 코드와 라이브러리 포함된 전역변수 공간, 정적 변수 공간
3️⃣용자 스택(stack)

    ✔️ 함수가 수행될 때 사용될 값들을 위해 할당된 공간
    - 함수의 지역변수, 호출한 함수의 반환 주소, 반환값, 함수호 출시 매개변수 등을 저장
4️⃣ 힙(heap)

    ✔️ 프로세스의 수행 중동적으로 사용할 수 있도록 할당된 공간
    - 동적으로 생성된 값들을 저장

 

2-4. 프로세스 주소 공간

e.g.) Linux  32비트 주소 공간

 

 

 

 

e.g.) 프로세스의 메모리 적재

 

 

2-5. 프로그램의 다중 인스턴스

☑️ 이때 각 프로세스는 4가지 구성요소를 독립적으로 갖는가?

위 그림의 notepad 프로세스 1, 2, 3은 모두 같은 실행 파일로부터 시작되었지만 각자 고유한 메모리 공간을 가지고 있어 서로의 변수나 상태에 직접 접근할 수 없음

➡️ 즉, 완전히 독립된 인스턴스

 

☑️ 상호 어떻게 통신하는가?

➡️ 프로세스 간 통신(IPC: Inter-Process Communication)

 

☑️ "운영체제는 프로세스 수행을 제어해야 함"의 의미는?

운영체제가 단순히 프로세스를 실행만 시키는 것이 아니라, " 1️⃣어떻게 실행할지", " 2️⃣언제 실행할지", " 3️⃣얼마나 자원을 쓸 수 있는지" 등 모든 실행 과정에 관여하고 조절한다는 의미

 

2-6. 운영체제의 핵심 업무: 프로세스 수행 제어

✔️ 프로세스들의 수행 패턴을 결정하는 일 ➡️ 스케줄링(scheduling)
✔️ 프로세스에게 자원을 할당하는 일 ➡️ 프로세스 수행 제어를 위해 프로세스 상태(행위) 모델 필요

 

📍3. 프로세스 상태 모델

3-1. 2-상태 모델

✔️ 디스패치

준비(비수행) 상태에 있는 프로세스를 실제로 CPU 위에서 실행 상태로 전환시키는 동작

 

3-1-1. 2-상태 모델의 문제점

☑️ 2-상태 모델은 이런 입출력 대기 상태를 고려하지 않기 때문에, 다음과 같은 문제가 생김

    1️⃣ CPU 낭비 발생

    2️⃣ 효율적인 자원 할당 불가능

    3️⃣ 멀티태스킹 비효율

 

3-2. 5-상태 모델

1️⃣ 생성

    - 프로세스가 막 생성된 상태

    - 아직 메모리에 로드되지 않았고 실행 승인도 받지 않음

2️⃣ 준비

    - 실행 준비 완료

    - CPU를 기다리는 큐에 있음

3️⃣ 수행

    - CPU를 할당받아 명령어를 실행 중

4️⃣ 대기(Blocked)

    - 입출력(I/O) 등 외부 자원을 기다리는 중

    - CPU는 사용하지 않지만 메모리는 점유

5️⃣ 종료

    - 수행 완료 혹은 강제 종료되어 시스템에서 제거되는 상태

 

☑️ 메모리에 적재되어 있는 모든 프로세스가 블록 상태에 있을 가능성이 있음

➡️ 이러면 CPU를 사용할 Ready 상태의 프로세스가 없고, 처리기(CPU) 이용률이 0%로 떨어짐

➡️ 처리기 이용률과 시스템 성능 저하 유발

 

☑️ 해결책!!

다단계 큐(스왑 아웃/인) 또는 보조 저장소 활용하여 Blocked 상태의 프로세스를 메모리에서 하드디스크(보조 기억장치)로 내보내고, Ready 상태인 프로세스를 대신 메모리에 적재

➡️ 스왑 아웃(Swap Out) / 스왑 인(Swap In)

 

3-3. 스와핑(swapping)

✔️ 프로세스의 일부 또는 전체를 메모리에서 보조기억장치의 스와프 영역으로 이동시킴
    - 보조기억장치로 이동된(swap-out) 프로세스를 보류(suspended) 상태에 있다고 함
✔️ 보조기억장치에 있는 수행 준비된 프로세스를 메모리에 적재시킴(swap-in)

 

3-4. 보류 상태를 가진 모델

✔️ 보류

메모리 공간이 부족하거나 우선순위가 낮은 등의 이유로 프로세스를 메모리에서 보조기억장치(디스크 등)로 내보내 일시 정지시킨 상태

1️⃣ 생성

프로세스가 생성됨 (아직 메모리에 올라가지 않음)

2️⃣ 준비

메모리에 있고, 실행 대기 중

3️⃣ 준비-보류

실행 대기 중이지만 메모리 부족 등으로 디스크에 저장됨

4️⃣ 실행

CPU를 할당받아 실제 수행 중

5️⃣ 차단

I/O 등 자원을 기다리는 상태

6️⃣ 차단-보류

차단 상태이면서, 메모리에서 내려감 (보조기억장치에 존재)

7️⃣ 종료

프로세스 실행이 끝남

 

✔️ 상태 전이 흐름

1️⃣ 준비 → 실행 → 차단 → 준비

기본적인 실행 흐름

2️⃣ 준비 → 준비-보류 / 차단 → 차단-보류

메모리 부족 등으로 보조기억장치로 이동

3️⃣ 보류 상태 → 활성

 메모리에 여유가 생기면 다시 불러옴

4️⃣ 준비-보류 → 준비 / 차단-보류 → 차단

메모리에 다시 적재됨

5️⃣ 보류 상태끼리 이동 가능

상황에 따라 보류 상태 간 전환도 가능

 

📍4. 프로세스 생성과 종료

4-1. 프로세스 생성 이유 ➡️ 어떻게 프로세스를 생성하는가?

1️⃣ 새로운 응용프로그램을 실행할 때
2️⃣ 대화형 로그온(interactive logon): 사용자가 로그인할 때
3️⃣ 서비스를 제공하기 위해 OS가 미리 생성할 때
4️⃣ 기존 프로세스에 의한 생성: 이미 실행 중인 프로세스가 자식 프로세스를 만들 때

 

4-2. 프로세스 종료 이유 ➡️ 어떻게 프로세스를 종료시키는가?

1️⃣ 정상 완료 or 시간 한도 초과
2️⃣ 메모리 부족/ 메모리 경계 범위 위반
3️⃣ 보호 오류or 산술 오류
4️⃣ 입출력 실패 or특권명령어 수행
5️⃣ 오퍼레이터나 OS의 간섭
6️⃣ 부모 프로세스의 종료 or 요청