기본적으로 프로세스마다 최소 1개의 스.레.드.를 소유 (메인 스레드 포함)
- code
- Data : 전역변수, 정적변수, 배열 등
- Heap : 동적 할당 시 사용
- Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)
-> 스레드는 Stack만 따로 할당 받음, 나머지는 공유받음.
하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행
- 장점
안전성 (메모리 침범을 OS 내에서 해결)- 단점
독립적인 메모리 영역을 가져, 작업량이 많아질 수록 '오버헤드' 발생, '컨텍스트 스위칭'으로 성능저하
하나의 프로세스에서 여러개의 스레드를 만들어 자원의 생성과 관리의 중복을 최소화 하는 것
프로레스는 자신만의 고유 공간과, 자원 할당을 받아 사용
but 스레드는 다른 스레드와 공간, 자원을 공유하여 사용
=> 그래서 스레드는 좀 더 효율적으로 통신할 수 있음
프로세스들의 상태 전이를 통해 현재 실행중인 (running state) 프로세스를 변경하는 작업, CPU에서 실행할 프로세스를 교체하는 기술
1) 각 프로세스에 주어진 시간 자원을 모두 사용했을때
2) 현재 프로세스에서 i/o 호출이 일어나 해당 i/o 작업이 끝날때 까지 waiting 상태로 전이될 경우
우리는 실제로 음악과 채팅 등을 동시에 하는것처럼 보이지만 동시에 처리되는게 아니다. 짧고 빠른 시간 내에 시스템이 처리 되는 것을 동시처리로 착각한 것일 뿐. 그런 동작을 하기 위해서는 프로세스들이 교체되어 수행하고 다시 기존 프로세스를 불러올 수 있어야 하는데 이전 작업에 대한 내용을 기억하기 위해서 무언가 필요하지 않을까?
운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로 즉, 프로세스의 상태정보를 저장하는 구조체이다.
컨텍스트 스위칭은 크게 다음과 같은 두 동작으로 구분할 수 있다.