정의 : 실행중인 프로그램
→ 디스크에 있던 프로그램을 메모리에 적재하여 운영체제의 제어를 받는 상태
→ 이는 자신만의 메모리 영역이 있다는 것
프로세스가 실행되려면 자원이 필요함
프로세서 점유 시간
메모리
파일
입출력 장치
프로세스는
프로그램 카운터 (현재의 활동 상태)
레지스터 내용 ( 프로세서의 현재 활동)
를 포함함
스택
데이터를 일시적으로 저장
지역변수 - 변수가 범위 밖으로 이동하면 공간 해제
호출한 함수의 반환 주소, 반환 값, 매개 변수 등에 사용
힙
코드 영역과는 별도로 유지되는 자유 영역
동적 메모리 할당
데이터
프로그램의 가상 주소 공간- 전역변수 or 정적변수를 저장 할당
코드
읽기 전용 → 코드 영역은 곻ㅇ유할 수 있어, 자주 실행하는 프로그램의 사본은 메모리에 존재
프로세스의 상태 변화
준비 → 실행 : dispatch = 준비 큐 맨 앞에 있던 프로세스가 프로세서를 점유하는 것
실행 → 준비 : timeout = 운영체제는 실행 상태 프로세스가 일정 시간 이후 자원을 내놓게 함.
실행 → 대기 : block = 입출력 연산 등이 필요하거나 새로운 자원 요청 등의 문제로 대기하게 될 경우
대기 → 준비 : wakeup
현재 실행중인 프로세스와 별도로 외부에서 이벤트가 일어나면 인터럽트가 발생하는데, 인터럽트 처리를 한 후 이 유형에 따라 각각 별도의 루틴으로 분기한다.
인터럽트가 발생하더라도 실행중인 프로세스를 재실행할 수 있으므로 인터럽트가 반드시 컨텍스트 스위칭으로 이어지지는 않음
컨텍스트 스위칭이 발생하면 현재 프로세스 P1 은 PCB1에 현재 상태를 저장하고 P2 와 교환, PCB2에서 P2의 정보를 받아와 프로세서에 적재
프로세스는 자원, 제어라는 두 가지 특성이 있다.
자원 : 프로세서 점유시간, 메모리, 파일, 입출력 등
이 중에 제어만 분리한 실행 단위를 스레드라고 정의한다.
스레드는 프로세스의 직접 실행 정보(코드)를 제외한 나머지 프로세스 관리 정보를 공유함 (스택, 힙, 전역 데이터)
사용자 응답성 증가 : 웹 브라우져가 다운로드를 하는 동안 사용자가 브라우져의 다른 기능을 사용한다.
프로세스의 자원과 메모리 공유 가능 : 프로세스의 자원을 스레드가 공유함.
경제성 : 프로세스를 생성하는 것보다 스레드를 생성하는 것이 오버헤드가 적음
다중 처리로 성능과 효율 향상 : 병렬 실행
결론 : 프로세스보다 스레드를 생성하는 것이 더 빠르고, 동일한 프로세스에 있는 스레드 간의 교환이나 스레드 종료도 훨씬 빠름. 경제적임
ex) 워드 편집기: 사용자 키 입력 응답 스레드, 이미지나 텍스트를 보여주는 스레드, 지정된 시간에 디스크에 저장하는 백업 스레드 등
프로세스와 상태 변화 과정은 거의 같음
but, 프로세스와 달리 자원을 초기화할 필요가 없음. 프로세스가 스택과 레지스터를 제공하기 때문에