프로세스Process
커널에 등록된 실행단위(프로그램)이며, 사용자 요청/ 프로그램의 수행 주체이다.
OS에서 프로세스 생성/삭제, 상태관리, 자원할당, 프로세스 간 통신 및 동기화, 교착상태 해결 등의 작업을 한다.
프로그램이 커널 위에 등록된 상태가 프로세스이며, 각종 자원(프로세서, 메모리 등)들을 요청하고, 할당받을 수 있는 개체이며,
프로세스 관리블록(PCB)를 할당받았고, 실행중에 각종 자원을 요구/할당/반납할 수 있는 능동적인 개체이다.
PCB(Process Control Block 프로세스 관리블록)
OS가 프로세스 관리에 필요한 정보를 저장한 것. 프로세스 생성 시 생성된다.
https://m.blog.naver.com/jk130694/220690136194
PCB는 프로세스 고유 식별번호(PID) 스케쥴링 정보, 프로세스 상태, 메모리 관리정보,
입출력 상태정보, 문맥 정보영역(Context Save Area), 계정정보 등을 관리한다.
PCB 정보는 OS별로 다르며, PCB참조 및 갱신속도는 OS의 성능을 결정짓는 중요한 요소 중 하나이다.
https://m.blog.naver.com/jk130694/220689739751
호출된 함수의 복귀 주소와 지역 변수처럼 일시적인 데이터를 저장하는 영역
함수를 호출할수록 커지고, 호출했던 함수를 반환할때 줄어든다
사용자가 직접 접근할 수 있는 자유영역
프로세스 실행 중에 동적으로 할당받는 영역으로,
코드에서 선언한 전역변수 또는 static 변수 등이 저장된 공간. 읽고 쓸 수 있다.
프로세서가 실행하는 코드를 저장한다.
프로그램이 텍스트 영역을 침범하여 기록하려고 하면 오류발생으로 프로그램이 종료된다
https://m.blog.naver.com/jk130694/220689831812
프로세스가 생성된 상태. 작업을 커널에 등록하며, PCB할당 및 프로세스를 생성한다.
이 상태일때 커널은 가용메모리 공간 체크 및 프로세스 상태를 전이한다.(Ready 혹은 Suspended Ready로)
프로세서 이외의 다른 모든 자원을 할당받은 상태
프로세서 할당 대기 상태이며, 즉시 실행 가능한 상태이다.
메모리와 프로세스를 모두 할당받은 상태
이 상태에서 프로세스 스케줄링에 따라 Ready상태로 내려올 수 있고,
I/O 입력을 기다려야 할때 ASleep 상태가 될 수 있으며 이를 Block이라고 한다.
프로세서 외의 다른 자원을 기다리는 상태
자원 할당은 System Call에 의해 이루어지며, Wake-Up을 통해 다시 Running 상태가 될 수 있다.
지연됨 이라는 뜻의 영단어에서 따왔으며, 메모리를 할당받지 못하거나 뺏긴 상태이다.
커널 혹은 사용자에 의해 발생한다.
Created상태일때 메모리를 할당받지 못하면 Suspended Ready 상태가 되고
Asleep 상태에서 입력을 기다리고 있는데, 메모리를 빼앗기면 Suspended Blocked상태가 된다.
중단되었다가 다시 시작할때, 어디까지 작업을 했는지 기록해두기 위해 Memory Image를 Swap Device에 보관한다.
SwapDevice: 프로그램 정보 저장을 위한 특별한 파일 시스템
중단하는것을 Swap Out, 재개하는것을 Swap In이라고 한다.
프로세스 수행이 끝난 상태. 모든 자원 반납 후에 커널 내에 일부 PCB 정보만 남아있는 상태가 된다.
이후 프로세스 관리를 통해 커널이 정보 수집을 하며, 수집이 끝나면 삭제된다.
이 단계를 거치는 이유
프로세스가 어떤 자원을 주로 요청했는지, 일을 얼마나 했는지 미리 알 수 있으면
추후에 비슷한 작업이 들어왔을때 관리가 유용하지기 때문
프로세스 관리를 위해 사용되는 자료구조로는
Ready Queue, I/O Queue, Device Queue등이 있다.
Inturrupt(방해하다, 중단시키다, 차단하다)
예상치 못한, 외부에서 발생한 이벤트
대표적으로 I/O 인터럽트가 있는데, 플레이어가 언제 마우스를 클릭할 지 프로그램이 알지 못하는 상태에서
예상치 못하게 플레이어가 버튼을 누를 때 발생하는 이벤트이다.
인터럽트가 발생하면 커널이 개입하여 프로세스를 중단하고, 인터럽트 처리Interrupt Handling을 수행한다.
중단할때 문맥저장Context Saving을 수행하여, 어디까지 프로세스를 수행하고 있었는지를 저장해둔다.
인터럽트 처리는 Inturrupt Handling, Interrupt Service 두 단계로 나누어 처리한다.
인터럽트 서비스 루틴을 호출한다. 이 서비스 역시 하나의 프로그램이므로, 프로세서에 할당되어 작업을 수행한다.
수행이 끝난 이후에는 Ready상태에 있던 다른 프로세스를 할당하여 수행될 수도 있다.
중단되었던 프로세스를 이어서 수행한다면, Context를 이용하여 프로세스로 복구하는 Context Restore과정을 거친다.
인터럽트가 발생하면 어떻게 할 지 정해져 있는 OS안의 코드들을 Inturrupt Service Routine이라 하고,
ISR은 인터럽트가 발생한 원인에 따라 특정 작업을 수행한 후, 인터럽트가 처리되었음을 시스템에 알립니다.
작업이 완료되면, Context Restoring 과정을 통해 이전에 수행하던 작업으로 돌아간다.
인터럽트가 걸리고 처리하는 과정을 통틀어 인터럽트 서비스라고 한다.
프로세스와 관련된 정보들의 집합
CPU Register Context는 CPU에 저장되며 Code&Data, Stack, PCB는 메모리에 저장된다.
현재 프로세스의 Register Context를 저장하는 작업
Register Context를 프로세스로 복구하는 작업
실행중인 프로세스의 Context를 저장하고, 앞으로 실행할 프로세스의 Context를 복구하는 일.
이를 통해 여러 프로세스가 하나의 CPU를 공유할 수 있으며 멀티태스킹 운영체제의 필수기능이다.
커널의 개입으로 이루어진다.
https://imhere98.tistory.com/22
Context Switching에 소요되는 비용이다.
OS별로 다르며, OS의 성능에 큰 영향을 준다.
불필요한 Context Switching을 줄이는것이 중요하다(스레드 사용 등)