[OS] 프로세스 1

정의정·2023년 8월 31일
0

OS

목록 보기
4/6
post-thumbnail

💡 프로세스 1

프로세스가 프로그램과 정확이 어떻게 다른지 알아보고, 관련 개념들에 대해 알아보도록 하겠다.

📌 순서

  1. 프로세스란?
  2. Process Control Block(PCB)
  3. 문맥 교환(Context Switch)

🌟 프로세스란?

프로세스란, 실행중인 프로그램을 말한다. 파일 시스템에 파일 형태로 저장되어 있다가 실행을 위해 메모리에 load되는 순간 실행중인 프로그램, 즉 프로세스라고 한다.

1. 프로세스의 문맥(Context)

프로세스의 문맥은 프로세스 수행에 다른 프로세스의 상태를 나타내는 개념이다.

CPU 수행 상태를 나타내는 하드웨어 문맥✔️

CPU에서 어디까지 수행했는가?
👉🏻 Program Counter: 코드 중 어느 곳을 실행했는가?
👉🏻 각종 register: 레지스터에 어떤 값을 넣고 있었는가?

프로세스의 주소 공간✔️

👉🏻 Code, Data, Stack

프로세스 관련 커널 자료 구조✔️

👉🏻 PCB(Process Control Block): CPU를 어디에 얼마나 썼는가?
👉🏻 Kernel stack: 각 프로세스의 커널 스택

2. 프로세스의 상태(Process State)


프로세스는 상태(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 상태는 프로세스가 종료되기 위한 처리를 하는 중의 상태를 말한다.


🌟 Process Control Block(PCB)


운영체제가 각 프로세스를 관리하기 위해 프로세스 마다 유지하는 정보를 담고 있다.

1. PCB 구성요소

OS가 관리상 사용하는 정보✔️

👉🏻 Process state: 프로세스 상태
👉🏻 Process ID: 프로세스 식별자
👉🏻 Scheduling information, priority: CPU를 점유하기 위한 스케줄링 정보와 우선순위 값

CPU 수행 관련 하드웨어 정보✔️

👉🏻 Program counter, registers: 프로세스 코드를 어디까지 수행했는지, register에 어떤 값을 넣었는지에 대한 정보
👉🏻 커널 메모리 안에 보관한다.
👉🏻 매번 CPU를 뺏길 때 어디까지 수행된 건지 저장하기 위함이다.

메모리 관련 정보✔️

👉🏻 Code, Data, Stack의 위치 정보

파일 관련 정보✔️

👉🏻 Open file descriptors: 프로세스가 연 파일 정보


🌟 문맥 교환(Context Switch)

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
  • 반효경님, 운영체제와 정보기술의 원리
profile
배움 기록

0개의 댓글