프로그램과 프로세스
1. 프로그램 (Program)
: 저장장치(하드 디스크 등)에 저장된 명령어들의 모음
- 특징
- .exe 확장자 파일 (windows 운영체제에서)
- 단순히 저장된 상태 → 메모리에 올라가지 않음
- CPU, 메모리 자원을 아직 사용하지 않음 ⇒ 수동적 존재
https://www.crocus.co.kr/1369
2. 프로세스 (Process)
: 프로그램이 메모리에 올라가서 실행되고 있는 상태
- 특징
- 메모리, CPU 같은 자원 사용, 필요에 따라 입출력도 함 ⇒ 능동적 존재
- 구조
- code 영역: 자신을 실행하는 코드 저장(실행할 명령어)
- data 영역: 전역 변수, static(정적) 변수 저장
- heap 영역: 프로그래머가 런타임 시 동적으로 메모리를 할당할 수 있는 메모리 공간
- stack 영역: 지역 변수(int vat = 1;), 함수 호출 시 필요한 정보(매개변수, 돌아갈 주소) 저장
https://hackmd.io/@KangMoo/Bk5Z1c_en
멀티 프로그래밍과 멀티 프로세싱
1. 유니 프로그래밍 (Uniprogramming)
: 메모리에 하나의 프로세스만 올려놓고 처리하는 방식
- 동작 방식
- CPU는 프로세스를 실행하다가 I/O 작업을 만나면 I/O 작업이 완료될 때까지 기다림
→ I/O 작업이 완료되면 이어서 처리함
- CPU는 프로세스를 실행하다가 I/O 작업을 만나면 I/O 작업이 완료될 때까지 기다림
- 단점
- 프로세스가 I/O 작업을 하는 동안 CPU는 쉬게 됨
- 하나의 프로세스를 다 끝내야 다른 프로세스를 실행 가능함
→ 비효율적
2. 멀티 프로그래밍 (Multiprogramming)
: 메모리에 여러 개의 프로세스를 올려놓고 번갈아가며 처리하는 방식
- 동작 방식
- CPU가 프로세스를 실행하다가 I/O 작업을 만나면, 해당 프로세스에서 발생한 I/O 작업을 기다리면서 다른 프로세스를 실행함
- 각각의 프로세스들을 짧게 짧게 나눠 실행하면서 동시에 실행되는 것처럼 보이게 함 (→ 멀티 태스킹)
- 장점
- CPU가 쉬는 시간이 줄어듦 → 효율적
3. 멀티 프로세싱 (Multiprocessing)
: 여러 개의 CPU를 사용하는 방식
- 동작 방식
- 각 CPU가 동시에 다른 프로세스를 실행
- 병렬 처리 가능
- 조건
- CPU가 2개 이상일 때만 가능
- 멀티 프로그래밍보다 더 강력한 처리 성능 제공
Q. I/O 작업 중 CPU가 쉬는 이유는?
A. CPU는 빠르고, I/O 장치는 느리기 때문
- CPU: ↔ I/O 장치(하드디스크, 키보드 등): 느린 우체국
- 만약 CPU가 파일을 읽어달라고 하드디스크에 요청하면, 하드디스크는 천천히 작업을 진행함
→ CPU는 기다리는 동안 멍 때림 - 이때, 운영체제가 CPU에게 다른 작업을 주거나(=멀티 프로그래밍) 멍 때리게 둠(= 유니 프로그래밍)