Index
Search
1. 프로세스
1.1. 프로세스의 개요
•
프로세스(process): 실행중인 프로그램
◦
프로그램: 동작을 하지 않는 정적/수동적 개체
◦
프로세스: 동작을 하는 능동적 개체
•
운영체제로 부터 자원을 할당 받아 동작
◦
자원: CPU, 메모리, 입출력장치, 파일 등
◦
동작: CPU가 프로세스의 명령을 실행
1.2. 프로세스와 운영체제
•
운영체제(프로세스 관리자)가 처리하는 작업
◦
프로세스 생성 및 종료
◦
프로세스를 실행 시키기 위한 스케줄링 작업
◦
프로세스의 상태 관리
1.3. 프로세스의 구성
•
메모리 구조
◦
프로그램 실행에 직접적으로 필요한 코드와 데이터
▪
코드 영역
•
프로그램 자체
▪
데이터 영역
•
프로그램 실행 시 필요한 데이터
◦
상수나 변수 값
◦
서브프로그램 호출 상태 등
•
구성
◦
정적 데이터
◦
스택
◦
힙
•
프로세스 제어 블록 (Process Control Block: PCB)
◦
운영체제가 프로세스를 관리하기 위해 필요한 정보
◦
각 프로세스마다 존재
◦
여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용
1.4. 프로세스 상태 관리
•
생성
◦
처음 작업이 시스템에 주어진 상태
•
준비
◦
실행 준비가 되어 CPU 할당을 기다리는 상태
•
실행
◦
프로세스가 처리되는 상태
•
대기
◦
프로세스가 I/O 작업이 끝날 때까지 또는 특정 자원을 할당 받을 때 까지 보류되는 상태
•
종료
◦
프로세스가 더이상 실행되지 않도록 끝난 상태
•
프로세스 상태 변화
1.5. 부모 프로세스와 자식 프로세스
•
프로세스 생성 방법
1.
사용자가 프로그램을 직접 실행
2.
한 프로세스가 다른 프로세스를 실행
•
프로세스 생성 시스템 콜 이용
•
부모 프로세스
◦
시스템 콜을 하는 프로세스
•
자식 프로세스
◦
시스템 콜을 통해 새로 생성된 프로세스
•
프로세스 종료 방법
1.
프로세스가 모든 처리를 완료(정상적 종료)
2.
부모 프로세스에 의해 자식 프로세스가 강제 종료
•
프로세스 종료 시스템 콜 이용
•
자식 프로세스 생성시 얻은 자식 PID 이용
3.
부모 프로세스가 종료되는 경우, 운영체제가 자식 프로세스 종료
1.6. 프로세스 생성 시스템 호출
•
UNIX, Linux
◦
fork()
◦
자식 프로세스는 부모 프로세스의 복제본
◦
자식 프로세스는 PID만 다름
•
UNIX, Linux
◦
exec()
◦
자식 프로세스는 부모 프로세스와는 다른 프로그램 실행
•
Windows
◦
CreateProcess()
◦
자식 프로세스는 새로운 프로그램으로 실행
2. 스레드
2.1. 전통적인 프로세스
•
하나의 프로그램을 실행하기 위한 기본적인 단위
•
자원소유의 단위
◦
하나의 메모리 구조
•
디스패칭의 단위
◦
하나의 제어 흐름
•
프로세스 내 다중 처리 불가능
2.2. 스레드
•
프로세스 내에서 다중 처리를 위해 제안된 개념
•
하나의 프로그램을 실행하기 위한 기본적인 단위
•
디스패칭의 단위
◦
CPU를 할당받아서 명령어를 처리하는 것
◦
스레드별로 디스패칭 받아서 처리 가능
•
자원 소유의 단위는 여전히 프로세스
•
하나의 프로세스에는 하나 이상의 스레드 존재
•
스레드에는 별도의 스택이 존재 (데이터, 힙은 공유)
2.3. 프로세스 비교
•
전통적인 프로세스
◦
하나의 PC를 가지고 디스패칭
•
스레드가 있는 프로세스
◦
프로세스 안에 스레드가 PC를 가지고 있음
2.4. 스레드와 프로세스
•
스레드는 실행에 필요한 최소한의 정보만 가짐
◦
PC를 포함한 레지스터 값
◦
상태 정보
◦
스택 영역
•
나머지 정보는 프로세스에 두고 다른 스레드와 공유
2.5. 멀티 스레드
•
멀티 CPU 또는 멀티 코어 컴퓨터 시스템
◦
다중 스레드를 병렬로 처리 가능
•
처리 속도 별로 스레드가 나눠진 경우
◦
효율적인 처리 가능