- 프로세스와 스레드의 차이
- 스레드는 프로세스에서 실행 제어만 분리한 것
- 프로세스가 하나의 작업 단위라면 스레드는 프로세스 내부에 존재하는 실행 단위이다.
- 프로세스 하나에서 스레드들이 자원을 공유하여 자원생성과 관리 중복성을 최소화해 작업 수행능력 향상
- 프로세스가 차지하는 메모리 공간 구조
- Stack = 호출된 함수의 복귀주소와 지역변수처럼 일시적인 데이터 저장
- heap = 프로그램 실행 중 시스템 호출을 통해 사용되다가 해지되는 등 자유자재로 사용
- data = 전역변수, 동적으로 할당받는 영역
- text = 코드
- 운영체제가 스케줄러를 이용해 프로세스 실행을 제어하는 방법
- 작업스케줄러 = 디스크에 저장된 작업들 중 선정하여 준비리스트에 삽입. 다중 프로그래밍의 정도를 결정 (디스크 -> 준비)
- 프로세스 스케줄러 = 준비리스트에 있는 프로세스들의 상태변화를 일으킨다 (준비 -> 실행 -> 대기, 종료)
- 프로세스 제어블록(PCB)
- 운영체제가 프로세스 실행을 제어하기 위해 PCB에 프로세스 정보를 저장. PCB는 프로세스를 생성할 때 만들어지고 실행이 종료되면 삭제된다
- 프로세스 교환이 발생할 때 프로세서에 있는 레지스터의 내용은 나중에 프로세스가 올바르게 사용될 수 있도록 PCB에 저장
- 프로그램과 프로세스와 차이
- 프로그램 = 프로세스 이전 단계로, 디스크에 저장되어 있는 정적인 상태
- 프로세스 = 동적으로 자원을 요청할 수 있는 동적단위
- 프로세스의 생성
- 프로세스는 실행중에 프로세스 생성 시스템을 호출하여 새로운 프로세스를 생성
- 부모 프로세스는 자식 프로세스에 자원을 나눠주거나 일부자원을 공유할 수 있는데 자원의 일부만 사용하도록 제한해서 너무 많은 자식 프로세스를 생성하지 않도록 방지
- 프로세스가 새로운 프로세스를 생성할 때에는 부모 프로세스와 자식 프로세스가 동시에 실행되거나, 부모프로세스가 자식 프로세스들이 모두 종료될때까지 기다린다
- 프로세스의 종료
- 자식 프로세스가 할당된 자원을 초과하여 자원을 사용할 때, 자식프로세스에 할당된 작업이 더이상 없을 때 부모는 자식을 종료시킨다. 또한 부모 프로세스가 종료되면 자식프로세스도 종료된다
- 프로세스의 중단과 재시작
- 시스템 부하를 조정
- 시스템에 장애가 발생시 실행중인 프로세스를 중단했다가 시스템이 기능을 회복하면 재시작
- 프로세스의 어느 부분이 의심스러울 때 사용자는 실행중인 프로세스를 중단하여 확인 후 재시작
- 시스템 부담이 크면 프로세스 몇개를 중단했다가 시스템이 정상상태가 되면 재시작
- 프로세스 우선순위 변경
- 프로세스 스케줄러는 PCB의 운선순위값을 이용해 프로세스를 처리
- 입출력 중심의 프로세스는 높은 우선순위, 프로세서를 자주 짧게 사용
- 프로세서 중심 프로세스는 낮은 우선순위, 프로세서 사용횟수는 적지만 한번에 오래 사용
- Context switch
- 프로세스를 다른 프로세스로 교환시 이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터를 적재하는 것
- 오버헤드가 발생한다
- 문맥교환 요청이 발생하면 운영체제 모드로 넘어가서 이전 프로세스는 종료된다. 이전 프로세스의 상태를 PCB에 저장하고 새로 실행할 프로세스의 PCB로부터의 내용을 프로세서에 재저장하고 다시 사용자모드로 복귀하여 새 프로세스 실행
- 스레드를 이용하여 context switch 를 효율적으로 처리