프로그램 : 정적, 실행 파일
프로세스 : 동적, 메모리에 할당되어 실행되고 있는 프로그램의 인스턴스
스레드를 가짐code, data, stack, heap
사용자가 작성한 프로그램 함수초기화한 전역, static 변수초기화되지 않은 전역, static 변수프로그래머가 필요 시 직접 사용 객체함수 수행 후 복귀할 주소👦 고아 프로세스
종료 이전에 부모 프로세스를 잃은 프로세스
부모 프로세스가 자식 프로세스보다 먼저 종료
🧟 좀비 프로세스
실행이 종료되었지만 삭제되지 않은 프로세스
자식 프로세스가 부모 프로세스보다 먼저 종료
부모 프로세스가 자식 프로세스의 종료 상태를 회수하면 제거됨
💀 Sub Reaper
프로세스의 종료 상태를 수신/처리 하는 부모 프로세스의 역할을 수행
LWP (경량 프로세스)
프로세스 내의 실행되는 흐름
Light Weight Process
리눅스에서 스레드와 프로세스가 비슷한 역할을 하기에 스레드를 Light Weight Process 로 지칭
스레드가 생성되고 실행되는 동안 접근 가능한 메모리 영역
프로세스 주소 공간 내부에 형성
스레드 로컬 스토리지 + 프로세스에 의해 공유되는 변수 공간스레드끼리 공유하지 않음다중 처리
여러 개의 프로세스가 작업을 병렬처리
독립적인 주소 공간
각 프로세스 간 메모리 구분
장점
- 높은 안정성
단점
- 많은 메모리 공간과 CPU시간 차지
- 작업량이 많을수록 성능 저하 :
Context-Switching
SMP (Symmetric Multi-procssing)
한 개의 공유된 메모리 사용 -> 동기화 작업 필요
AMP (Asymmetric Multi-procssing)
프로세서들 간에 master-slave 관계가 존재
master 프로세스만 OS에서 작업을 실행
하나의 프로세스에서, 여러 스레드로 자원을 공유하며 작업을 나누어 수행
장점
- 작은 메모리 공간
- 높은 속도
단점
- 동기화 문제 발생
- 문제 발생 시 전체 프로세스에 영향을 끼침
Thread safety
멀티 스레드 환경에서 함수/변수/객체 에 여러 스레드로부터의 동시 접근이 문제를 발생시키지 않는 상태
유저 스레드 : 커널 위에서 커널의 지원 없이 유저가 관리하는 스레드
커널 스레드 : 커널이 지원하는 스레드
Many-to-One Model
Many 유저 스레드, One 커널 스레드
병렬 처리 불가능
One-to-One Model
One 유저 스레드, One 커널 스레드
동시성 향상
여러 스레드 동시 수행 in 멀티 프로세서 시스템
Many-to-Many Model
Many 유저 스레드, Many- 커널 스레드
동시성 향상 +
2-level Model
Many-to-Many Model
특정 유저 스레드를 위한 커널 스레드 별도 제공
| 멀티 프로세스 | 멀티 스레드 | |
|---|---|---|
| 안정성 | 높음 | 낮음 |
| 메모리 공간 | 큼 | 작음 |
| CPU 시간 | 느림 | 빠름 |

생성 Created
프로세스가 생성된 상태
준비 Ready
CPU 할당 대기
디스패치 : 메모리 큐에 올라감
실행 Running
대기 Blocked
사건 발생 시 CPU 양도 후 대기
종료 Terminated :
모든 자원 회수
PCB 삭제
중단된 준비 Suspended Ready :
프로세스가 메모리를 바로 받지 못 할 때
중단된 대기 Suspended Blocked :
대기 중 메모리 공간을 잃은 상태
오버헤드 (어떤 처리를 위해 추가되는 간접적인 처리시간/메모리)
활동 상태 Active State
메모리 공간의 일정량을 부여받은 상태
메모리
중단 상태 Suspended State
메모리가 회수된 상태
하드디스크
Swap in : Suspended -> Active
Swap out : Active -> Suspended
Process Control Block
하나의 프로세스에 대한 중요한 정보를 표현
커널 영역 보호된 메모리 영역 에 저장
포인터
프로세스의 현재 위치
프로세스 상태
생성/준비/실행/대기/완료 상태
프로세스 번호
프로세스 식별자
프로그램 카운터
다음에 실행할 명령어의 주소
레지스터
메모리 제한
열린 파일 목록
문맥 교환
여러 프로세스/스레드 를 돌아가며 작업을 처리
프로세스/스레드 를 돌며 상태(Context)를 보관/복구 반복
오버헤드 (어떤 처리를 위해 추가되는 간접적인 처리시간/메모리)
가상 메모리 공간 초기화
가상 메모리 공간이 동일 스레드는 프로세스의 자원을 공유
CPU의 자원은 한정
한정된 자원을 효율적으로 사용
호위 효과
이전 프로세스의 실행시간이 길다면 이후 실행시간이 짧은 프로세스들이 실행되지 못해 호위무사처럼 뒤따라서 기다리고 있는 것
다중 우선순위 큐
각각의 우선순위를 가진 여러 개의 큐
동적으로 우선순위를 부여
높은 우선순위를 가진 프로세스와 낮은 우선순위를 가진 프로세서를 따로 관리
선점 스케줄링 preemptive scheduling
다른 프로세스가 할당받은 cpu를 중지시키고 차지 새치기
많은 오버헤드 발생
대기 상태가 존재하지 않음
시분할 에이징Shortest Remaining Time비선점 스케줄링 non-preemptive scheduling
모든 프로세스가 요구에 대해 공정
병목현상
대기 상태가 존재하지 않음
First In First OutShortest Job FirstHighest Response Ratio Next 에이징 스케줄링을 수행하는 모듈
📌 단기 스케쥴러 Short-Term Scheduler Dispatcher CPU Scheduler
CPU 할당 관리
CPU 사용률 최대화
응답 시간 최소화
📌 중기 스케쥴러 Medium-Term Scheduler
메모리 사용 관리
프로세스 스와핑
📌 장기 스케쥴러 Long-Term Scheduler Job Scheduler
프로세스 생성/종료 관리
시스템 안정성 유지
일괄처리 시스템
✔️ 단기
사용한다
❌ 중기
가상 메모리 사용 시 일부만 실제 메모리에 올라와도 됨
❌ 장기
장기 스케쥴러 : 일괄처리 시스템
현대 운영체제 : Round Robin, 가상 메모리 사용