.exe
.py
.class
.js
파일동적인 상태
의 프로그램code
, data
, stack
, heap
가짐)+-------------------+ ← 높은 주소
| Stack | ← 함수 호출, 지역 변수
+-------------------+
| Heap | ← 동적 메모리 할당 (new, malloc 등)
+-------------------+
| Data (변수) | ← 전역 변수, static 변수
+-------------------+
| Code (Text) | ← 프로그램의 명령어 (기계어)
+-------------------+ ← 낮은 주소
# 메모리 구조**(프로세스 기준)**
이전과 다르게 멀티 태스킹, 멀티 프로세싱, 멀티코어 기술 덕분에 여러 작업이 동시에 또는 거의 동시에 돌아가는 것처럼 보인다. 이로인해, 동시성과 병렬성을 가진다.
구분 | 설명 | 예시 |
---|---|---|
멀티 태스킹 | 하나의 CPU에서 여러 프로그램을 교대로 빠르게 실행 | 크롬 켜두고 노래 들으면서 워드작업 |
멀티 프로세싱 | 여러개의 CPU나 코어가 각각 다른 작업을 동시에 수행 | 쿼드코어 CPU에서 4개의 프로세스를 병렬로 실행 |
※ 멀티 태스킹의 교대로
빠르게 실행하는 방법엔 멀티 프로그래밍 방식, 시분할 방식, 실시간 시스템 방식이 있음
A: 계산 작업 중 → IO 요청 → 대기
→ B: 계산 시작
→ B 끝나면 다시 A로 복귀
프로세스 A에게 50ms → 프로세스 B에게 50ms → 다시 A ...
구분 | 설명 |
---|---|
하드 실시간 | 마감 시간 반드시 지켜야 함 (안 지키면 시스템 장애) |
소프트 실시간 | 마감 시간 지키는게 중요하지만 유연함 |
항목 | 프로세스 | 스레드 |
---|---|---|
정의 | 실행 중인 독립 프로그램 | 프로세스 내부의 실행 흐름 단위 |
메모리 공간 | 각자 공유한 메모리 공간 | 같은 프로세스 안에서 메모리 공간 공유 |
안정성 | 프로세스 끼리 독립적임 | 스레드는 메모리를 공유하기에 동기화 이슈 존재함 |
커뮤니케이션 | IPC 필요 | 메모리를 공유하기에 빠름 |
디버깅 어렵다: Race condition, 데드락 발생 시 원인 찾기 힘듦
스레드 A | 스레드 B |
---|---|
자원 X확보 | 자원 Y확보 |
자원 Y요청 및 대기 | 자원 X요청 및 대기 |
✅ Deadlock 발생 4조건 (모두 충족해야 발생):
- 상호 배제(Mutual Exclusion) – 자원은 한 번에 하나만 사용 가능
- 점유 대기(Hold and Wait) – 자원을 점유한 채 다른 자원을 기다림
- 비선점(No Preemption) – 다른 스레드가 자원을 강제로 뺏을 수 없음
- 환형 대기(Circular Wait) – A → B → C → A 같은 대기 구조 존재
1-a. 해결 방법으로 Race Condition은 Lock,Mutex,Semaphore,Atomic 변수 등이 있고, Deadlock은 락 순서 정하기, 타임아웃, 교착 상태 탐지 및 회복, 자원 순환 방지 등이 있다.
동기화 필요: 메모리를 공유하기 때문에 충돌 가능
스레드 하나가 죽으면 전체 프로세스 영향 → 스레드는 독립성이 낮음
단일코어 환경에서는 오히려 효율 떨어질 수도 있음