<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 요청
'운영체제' 카테고리의 다른 글
[운영체제] 3. 프로세스 관리 - (3) 프로세스의 계층 구조 (0) | 2025.04.11 |
---|---|
[운영체제] 3. 프로세스 관리 - (2) 커널의 프로세스 관리 (0) | 2025.04.11 |
[운영체제] 2. 컴퓨터 시스템과 운영체제 - (4) 커널과 인터럽트 (0) | 2025.04.09 |
[운영체제] 2. 컴퓨터 시스템과 운영체제 - (3) 커널과 시스템 호출 (0) | 2025.04.09 |
[운영체제] 2. 컴퓨터 시스템과 운영체제 - (2) 컴퓨터 시스템의 계층구조와 운영체제 인터페이스 (0) | 2025.04.09 |