프로그램과 프로세스

프로그램
- 하드디스크 등과 같은 저장장치에 저장된 명령문의 집합체
- 저장장치만 사용,수동적
- 애플리케이션이나 앱이라고 부르는것들
프로세스
- 실행중인 프로그램(운영체제에 의해 관리됨)
- 메모리, CPU 사용하며 필요에 따라 입출력 진행(능동적)
- 코드, 데이터, 스택, 힙 영역 존재
- 스택 영역에는 지역변수와 함수를 호출했을 때 필요한 정보 저장
- 힙은 동적으로 메모리 할당하는데 쓰임
멀티프로그래밍 멀티프로세서
- 유니프로그래밍 - 메모리에 오직 하나의 프로세스가 처리
- 멀티프로그래밍 - 메모리에 여러개의 프로세스로 처리
- 멀티프로세서 - CPU가 여러개 존재
- 멀티프로세싱 - 멀티프로세서로 작업을 처리
멀티프로세싱을 사용하는 경우
I/O 작업의 종류
- 파일 I/O : 파일 읽기/쓰기
- 네트워크 I/O : API 호출
- 데이터베이스 I/O : DB 쿼리 실행 대기
- 사용자 입력 I/O : 클릭과 같은 이벤트
I/O 작업의 특징
- CPU가 대기 상태가 됨
- 시간이 오래 걸림
- 예측 불가능한 지연
멀티 프로세싱을 사용하는 경우
- CPU 집약적 작업 (복잡한 계산)
- 대용량 데이터 처리
- 독립적인 작업들(여러개 비디오 렌더링의 경우 별도 프로세서에서 렌더링)
언제 사용할까?
사용하는 경우:
- CPU 집약적 작업 (계산, 암호화, 이미지 처리)
- 병렬 처리 가능한 작업 (독립적인 데이터 처리)
- 시간이 오래 걸리는 작업 (1초 이상)
- 사용자 경험을 해치지 않으려는 경우
사용하지 않는 경우:
- 간단한 I/O 작업 (파일 읽기, API 호출)
- 빠른 계산 (밀리초 단위)
- 순차적으로 처리해야 하는 작업
- 메모리 사용량을 절약해야 하는 경우
I/O 작업: 입출력으로 인한 대기 시간 → 비동기 처리로 해결
CPU 집약적 작업: 계산으로 인한 블로킹 → 멀티프로세싱으로 해결
PCB(Process control block)
운영체제가 만든 PCB에 프로세스의 정보 저장
여러개의 PCB들은 연결리스트라는 자료구조로 저장
프로세스가 종료되면 연결리스트에서 해당 PCB 제거
프로세스가 시분할처리를 위해 가지는 다섯가지 상태

생성 - PCB 생성, 메모리에 프로그램 적재를 요청한 상태
준비 - CPU 할당
대기 - 프로세스가 입출력 요청을 하면 완료될때까지 기다리는 상태
실행 - 준비에서 실행 됨, CPU 개수만큼 프로세스 할당
완료 - 프로세스가 종료된 상태 데이터를 메모리에서 제거, PCB 제거
컨텍스트 스위칭
실행중인 프로세스의 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 것
PCB의 내용이 변경됨
프로세스 생성과 종료
실행되는 애플리케이션의 부모 계층의 프로세스를 복사해 실행(자식 프로세스)
부모 프로세스의 코드영역, 데이터영역, 스택영역 PCB 내용을 복사
exec 함수로 원하는 코드 실행
쓰레드
서로 다른 프로세스들이 통신하려면 IPC를 사용해야 함
IPC는 통신비용이 상대적으로 많이 듦
문제를 해결하기 위해 한 개의 프로세스 사용 → 여러개의 쓰레드들이 서로 공유함(단 스택은 각각 가지고 있음)
독립된 프로세스는 안정성이 장점, 쓰레드는 하나의 프로세스에 문제가 생기면 안에있는 모든 쓰레드가 영향을 받을 수 있는 단점이 있음