프로세스의 생성과 종료
👉프로세스 생성 Process Creation
- 프로세스는 프로세스에 의해 만들어짐
- 컴퓨터가 부팅이 되면 운영체제가 메모리에 올라 최초의 프로세스를 생성함
- 이렇게 만들어진 프로세스가 다른 프로세스, 그 프로세스가 또 다른 프로세스를 만드는 과정 반복
-> 프로세스를 생성한 쪽은 부모 프로세스, 만들어진 프로세스는 자식 프로세스
-> 같은 부모를 갖는 자식 프로세스는 형제 프로세스 Sibling processes
- 프로세스는 각각의 고유 번호 PID 를 가짐 (Process Identifier), 정수형
👉 프로세스 종료 Process Termination
- 종료하는 시스템 콜 : exit()
- 해당 프로세스가 가졌던 메모리,파일,입출력 장치 등 가졌던 모든 자원을 O/S에 반환
쓰레드
👉 단일 쓰레드 (single Thread)
- 아래와 같이 하나의 흐름을 가지고 있는 쓰레드
- 일반적으로 하나의 프로그램은 하나의 쓰레드를 가짐
class Test {
public static void main(String[] args) {
int n = 0;
int m = 6;
System.out.println(n+m);
while (n < m)
n++;
System.out.println("Bye");
}
👉 다중 쓰레드 (Mulitithreads)
- 한 프로그램에 2개 이상의 흐름, 맥을 가지고 있을 때
- context switching이 되는 단위 (Process 아님, Thread임)
-> 현재 운영체제에서는 대부분 다중 쓰레드를 지원하기 때문에 하나의 프로세스 안에서 여러 쓰레드를 수행하다가 다른 프로세스로 넘어가서 그 프로세스의 쓰레드를 수행
- 맥이 빠른 간격으로 스위칭되기 때문에 여러 쓰레드가 동시에 실행되는 것 처럼 보임
- concurrent vs simultaneous = 동시에 vs 한 순간에 여러번
-> concurrent : CPU가 하나인 환경에서 여러 쓰레드가 스위칭에 의해 동시에 수행되는 효과
-> simultaneous : 여러 CPU 환경에서 여러 쓰레드가 실제로 동시에 수행되는 것
- 현재 대부분의 프로그램은 다중 쓰레드로 동작
예시
- Web browser : 화면을 출력하는 쓰레드, 데이터를 읽어오는 쓰레드 따로 동작
- Word processor : 화면 출력하는 쓰레드, 키보드 입력 받는 쓰레드, 철자/문법 오류 확인 쓰레드
- Media player 등 ...
👉 Thread vs Process
단일 쓰레드 (single thread) 프로그램 : 한 프로세스에는 기본 1개의 쓰레드
다중 쓰레드 (multi-thread) 프로그램 : 한 프로세스에 여러 개의 쓰레드
쓰레드구조
- 프로세스는 code,data 메모리 공간이 존재하는데, 이는 여러 쓰레드가 공유
- 프로세스의 자원인 file, i/o, ... 등 여러 쓰레드가 공유
- 각 쓰레드가 고유하게 가지고 있는 것 (비공유): 개별적인 Program Counter(PC), Stack Pointer(SP), registers, stack