프로세스
실행중인 프로그램
디스크로부터 메모리에 적재되어 CPU 할당을 받을 수 있는 것
OS로부터 주소공간, 파일, 메모리 등을 할당받음
- 프로세스 스택 : 임시자료 (함수 매개변수, 복귀주소, 로컬변수)
- 데이터 섹션 : 전역변수
- 힙(heap) : 프로세스실행 중에 동적 할당되는 메모리
PCB
프로세스 제어 블록
특정 프로세스에 대한 중요한 정보를 저장 하고 있는 운영체제의 자료구조
OS는 프로세스 관리를 위해 프로세스 생성 시 동시에 고유 PCB를 생성함
CPU 할당받은 프로세스가 작업 처리 중에 프로세스 전환이 발생하면 진행작업을 PCB에 저장 후 CPU를 반환함
> 다시 CPU 할당 받으면 이전에 종료된 시점부터 작업 수행 가능
PCB 에 저장되는 정보
- 프로세스 식별자(Process ID, PID) : 프로세스 식별번호
- 프로세스 상태 : new, ready, running, waiting, terminated 등의 상태를 저장
- 프로그램 카운터 : 프로세스가 다음에 실행할 명령어의 주소
- CPU 레지스터
- CPU 스케쥴링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
- 메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함
- 입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
- 어카운팅 정보 : 사용된 CPU 시간, 시간제한, 계정번호 등
스레드
프로세스의 실행단위 (흐름)
한 프로세스 내에서 동작하는 여러 흐름으로 프로세스 내의 공간/자원 공유가능
구성 : 스레드 ID, 레지스터 집합, 독립된 PC(program counter), 독립된 스택 (메모리공간)
같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 열린파일, 신호 등 OS 자원을 공유함
멀티 스레드
하나의 프로세스를 다수의 실행단위로 구분하여 자원을 공유 (하나의 프로그램에서 병렬 처리)
자원의 생성, 관리의 중복을 최소화하여 수행능력 향상 (메모리 공간, 시스템 자원소모 감소)
스레드 간의 통신 = 자원 이용 없이 전역변수의 공간/ 동적할당 공간(heap) 에서 통신가능
주의 : 동기화작업 필요 > 스레드 간 접근 가능하므로 엉뚱한 값 읽기/수정 가능 > 동기화로 작업처리 순서, 공유자원 접근 제어 > 과도한 동기화는 락발생 > 병목현상 주의
멀티 스레드 : 하나의 프로그램 병렬 처리. 적은 메모리공간 사용, 문맥전환 빠름, 오류로 하나의 스레드 종료 시 전체 스레드 종료 가능, 동기화 문제(병목현상)
RPC 서버 (Remote Procedure Call 원격 프로시저 호출) : 서버가 메시지 수신 시 서비스를 위한 새로운 스레드 생성, 여러 요청을 병렬로 처리
멀티 프로세스 : fork(), 여러 프로그램 병렬 처리. 하나의 프로세스 종료 시 다른 프로세스에 영향없음, 많은 메모리공간, 많은 CPU시간 소요
멀티 태스킹 : OS에서 지원, TASK 번갈아 수행. 독립된 자원사용, 공유 X
멀티 프로그래밍 : 프로세서의 I/O작업 종료대기 중에 하나의 프로세서에서 다른 프로그램을 수행 (자원낭비 방지)
>>> 대상 시스템 특징에 따라 적합한 동작방식 선택/적용해야 함
Reference