기름을 넣는 프로그램을 실행한다 치자
- 기름을 넣게 해주는 것은 "주유소" = "프로세스"
- 기름이라는 자원을 이용하여 주유소가 운영되게 해주는 것은 "주유총" = "쓰레드"
- 기름총이 한개라면? 1대 넣는동안 다른 차들이 계속 기다려야함으로 성능이 떨어짐 = "싱글 쓰레드"
- 기름총이 여러개라면? 기름총 갯수만큼 동시에 주유 가능함으로 성능이 향상됨 = "멀티 쓰레드"
프로세서에 의해 수행되는 프로그램의 단위로 현재 실행 중이거나 곧 실행 가능한 프로그램
[주소공간]
- 텍스트 영역 : 프로세서가 실행하는 코드를 저장
- 데이터 영역 : 변수들을 저장, 샐행 중에 사용하려고 동적으로 할당 받은 메모리 공간
- 스택 영역 : 호출된 프로시저용으로 지역 변수와 명령어들을 저장
[스케줄러]
- 장기 : "작업 스케줄러"라고도 부르며 어떤 프로세스를 준비
큐에 삽입할지 결정하는 역할- 중기 : 메모리에 적재된 프로세스의 수를 동적으로 조절
- 단기 : "CPU스케줄러"라고도 하며 준비 상태의 프로세스 중에서 어떤 프로세스를 다음 번에 실행 상태로 만들 것인지를 결정
[상태]
- 생성(New) : 작업이 제출되어 Spool 공간에 수록
- 준비(Ready) : CPU가 사용 가능한 상태
- 실행(Running) : 프로세스가 CPU를 차지하고 있는 상태, Dispatch를 통해 실행 상태로 전이
- 대기(Block, Wait) : CPU를 양도하고 I/O 완료 시까지 대기 큐에서 대기하고 있는 상태
- 종료/완료(Terminated) : CPU 할당 받아 주어진 시간내에 수행을 종료한 상태
[장점]
1) 사용자 응답성 : 일부 스레드 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능
2) 자원 공유 : 효율성 증가, 커널의 개입을 피할 수 있음
3) 경제성 : 프로세스의 생성, context switch에 비해 효율적
4) 멀티 프로세서 활용 : 병렬처리를 통해 성능 향상
[쓰레드의 구현에 따른 종류]
- 사용자 쓰레드
- 사용자 수준에서 지원하는 스레드
- 커널 위에서 지원되고 커널의 지원 없이 관리
- 커널 쓰레드
- 커널 수준에서 제공되는 스레드
- 운영체제에 의해 직접 지원되고 관리
- 거의 모든 현대 운영체제들은 커널 스레드를 지원
여러개의 쓰레드가 자원을 공유하며 하나의 수행 업무를 동시에 처리하는 기능
[Many-to-One Model]
[One-to-One Model]
[Many-to-Many Model]