프로세스가 프로그램과 정확이 어떻게 다른지 알아보고, 관련 개념들에 대해 알아보도록 하겠다.
📌 순서
- 프로세스란?
- Process Control Block(PCB)
- 문맥 교환(Context Switch)
프로세스란, 실행중인 프로그램을 말한다. 파일 시스템에 파일 형태로 저장되어 있다가 실행을 위해 메모리에 load되는 순간 실행중인 프로그램, 즉 프로세스라고 한다.
프로세스의 문맥은 프로세스 수행에 다른 프로세스의 상태를 나타내는 개념이다.
CPU 수행 상태를 나타내는 하드웨어 문맥✔️
CPU에서 어디까지 수행했는가?
👉🏻 Program Counter: 코드 중 어느 곳을 실행했는가?
👉🏻 각종 register: 레지스터에 어떤 값을 넣고 있었는가?프로세스의 주소 공간✔️
👉🏻 Code, Data, Stack
프로세스 관련 커널 자료 구조✔️
👉🏻 PCB(Process Control Block): CPU를 어디에 얼마나 썼는가?
👉🏻 Kernel stack: 각 프로세스의 커널 스택
프로세스는 상태(State)가 변경되며 수행된다.
Running✔️
👉🏻 프로세스가 CPU를 잡고 instruction을 수행중인 상태이다.
👉🏻 프로세스 수행 중에 시스템 콜을 통해 모니터 모드로 수행이 이루어질 때도 해당 프로세스가 진행중이라고 본다.Ready✔️
👉🏻 메모리 등 다른 조건을 모두 만족하고 CPU를 기다리는 상태이다.
👉🏻 Running 상태이던 프로세스가 할당 시간이 만료되면 Ready 상태가 된다.
👉🏻 Block 상태이던 프로세스가 깨어나면 Ready 상태가 된다.
👉🏻 Suspended Ready 상태이던 프로세스를 외부에서 resume 해주면 다시 active한 Ready 상태가 된다.Blocked(wait, sleep)✔️
👉🏻 CPU를 주어도 당장 instruction을 수행할 수 없는 상태이다.
👉🏻 프로세스 자신이 요청한 event(ex: I/O)가 즉시 만족되지 않아 기다릴 때 Blocked 상태가 된다.
👉🏻 자신이 요청한 event가 만족되면 Ready 상태가 된다.Suspended✔️
👉🏻 외부적인 이유로 프로세스의 수행이 정지된 상태이다.
👉🏻 프로세스는 통째로 디스크에 swap out된다.
👉🏻 사용자가 프로그램을 일시 정지시킨 경우 Suspended 상태가 된다.
👉🏻 시스템이 여러 이유(ex: 메모리에 너무 많은 프로세스가 올라와 있는 경우)로 프로세스를 자시 중단 시킨 경우 Suspended 상태가 된다.
👉🏻 프로세스가 아예 정지된 상태(inactive)로, 외부에서 resume 해줘야 active 상태로 돌아갈 수 있다.New✔️
👉🏻 프로세스가 생성중인 상태이다.
👉🏻 생성되기 전은 프로세스가 아닌 프로그램이라고 보기 때문에 New 상태는 생성되기 전 상태가 아닌, 생성 중인 상태를 말한다.Terminated✔️
👉🏻 프로세스의 수행(execution)이 끝나는 중인 상태이다.
👉🏻 프로세스가 끝나게 되면 더 이상 프로세스가 아닌 프로그램이라고 보기 때문에 Terminated 상태는 프로세스가 종료되기 위한 처리를 하는 중의 상태를 말한다.
운영체제가 각 프로세스를 관리하기 위해 프로세스 마다 유지하는 정보를 담고 있다.
OS가 관리상 사용하는 정보✔️
👉🏻 Process state: 프로세스 상태
👉🏻 Process ID: 프로세스 식별자
👉🏻 Scheduling information, priority: CPU를 점유하기 위한 스케줄링 정보와 우선순위 값CPU 수행 관련 하드웨어 정보✔️
👉🏻 Program counter, registers: 프로세스 코드를 어디까지 수행했는지, register에 어떤 값을 넣었는지에 대한 정보
👉🏻 커널 메모리 안에 보관한다.
👉🏻 매번 CPU를 뺏길 때 어디까지 수행된 건지 저장하기 위함이다.메모리 관련 정보✔️
👉🏻 Code, Data, Stack의 위치 정보
파일 관련 정보✔️
👉🏻 Open file descriptors: 프로세스가 연 파일 정보
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정이다.
문맥 교환 시 운영체제의 역할✔️
👉🏻 CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장한다.
👉🏻 CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어온다.
모니터 모드를 거친다고 해서 무조건 문맥교환은 아니다✔️
1.
사용자 프로세스 A
→인터럽트, 시스템 콜
→모니터 모드
→사용자 프로세스 A
👉🏻 이 경우는 문맥교환이 이뤄지지 않았다.2.
사용자 프로세스 A
→타이머 인터럽트, I/O 시스템 콜
→모니터 모드
→사용자 프로세스 B
👉🏻 이 경우는 프로세스 A에서 B로 문맥 교환이 일어났다.
👉🏻 모니터 모드로 전환되었는지가 아니라 CPU를 다른 프로세스로 넘겨주었는지가 중요하다.
👉🏻 1번의 경우에도 CPU의 수행 정보 등 context의 일부를 PCB에 저장해야 한다. 하지만 문맥교환이 일어나는 2번의 경우 그 부담이 훨씬 크다. (캐시 메모리 flush)
- A. Silberschatz et al., Operating System Concepts, 9th Edition, John Wiley & Sons, Inc. 2013.
- A. Silberschatz et al., Operating System Principles, Wiley Asia Student Edition
- 반효경님, 운영체제와 정보기술의 원리