프로세스
- 프로세스 : 하드디스크에 저장된 프로그램이 메모리에 올라가서 실행된 상태(=실행중인 프로그램)
프로세스의 구조
- Code : 프로그램을 실행하는 코드들 저장
- Data : 전역 변수와 정적 변수들 저장
- Stack : 지역 변수와 함수 호출시 매개변수와 돌아갈 주소가 저장
- Heap : 프로그래머가 런타임시 할당할 수 있는 메모리 공간
유니프로그래밍 vs 멀티프로그래밍
- 유니프로그래밍: 메모리에 프로세스 1개
- 멀티프로그래밍 : 메모리에 프로세스 여러 개
멀티프로세싱
멀티프로그래밍과 멀티프로세싱
- 메모리에 프로세스 여러개 올라감
- 시분할 처리로 CPU가 각각의 프로세스를 짧은 시간 동안 교대로 실행
PCB(Process Control Block)
- 각각의 프로세스의 정보를 저장
- 연결리스트 형태로 있음 : 각각의 데이터가 다음 데이터로 연결되어있음
PCB의 구조
- 포인터 : 효율적인 접근을 위해
- 프로세스 상태
- 프로세스 ID : 프로세스 식별용
- 프로세스 카운터 : 다음에 실행될 명령어의 주소 등
- 레지스터 정보 : 프로세스가 실행될 때 CPU에서 열심히 계산 돌린 레지스터 값들을 저장
- 메모리 관련 정보 : 프로세스가 메모리에 있는 위치 정보 등
- CPU 스케줄링 정보 : 우선순위, 실행시간, CPU 점유시간 등
프로세스 상태
- 생성 : PCB 생성, 메모리에 프로그램 적재 요청
- 준비 : CPU를 사용하기 위해 기다리고 있음
- 대기 : 인터럽트(입출력 작업이 끝나는 동안 비동기로 돌아가는 거임) -> 그 동안 다른 프로세스에게 cpu 양보함
- 실행 : 스케줄러에 의해 CPU를 할당받아 실행
- 완료 : 프로세스와 pcb를 메모리에서 제거
쓰레드
- 프로세스 내에서 PCB, 코드, 데이터, 힙 영역을 공유
- 스택은 각각
프로세스 vs 쓰레드
프로세스
- 각각의 프로세스가 독립적(안정적)
- 프로세스 간의 통신 -> 오버헤드 큼, 느림
쓰레드
- 해당 프로세스에 문제가 생기면 위험
- 스택을 제외한 모든 영역을 공유해서 오버헤드가 작음