TIL/OS

3. Process

han1693516 2023. 5. 5. 21:18

 Process

      현재 메모리에 있거나 CPU에서 실행 중인 프로그램

           - 즉, HDD나 SSD에 있는 프로그램은 프로세스라 부를 수 없음

     

  Memory Address Space

      프로세스는 각각 자신의 데이터(코드, 변수, 인자 등)을 저장하기 위한 address space를 가지고 있음
     

Memory Layout

          

                   Text(code) : 프로세스의 코드 저장

                   Data : 정적 데이터 저장(전역변수 등)

                                  - 위 예시에서는 전역변수인 x, y 해당

                   Stack : local data 저장(local variable, function parameter, return address, ...)

                                  - 위 예시에서는 int * values, int i 해당

                   Heap : c language의 malloc, JAVA / JS의 object 등 저장됨

 

 

                   OS 역시 프로그램이므로, 자신의 memory space를 가지고 있음

                         - Text : OS를 이루는 코드, 시스템 콜, ISR 등 저장

                         - Data : OS의 memory space에는 실행 중인 프로세스를 관리하기 위한 PCB(Process Control Block) 저장

                         - Stack : Kernel Stack 저장

 

                 

             PCB

                 - OS가 프로세스를 관리하기 위한 요소, 프로세스의 정보를 저장

                       - Process ID(PID)

                       - Process Status - new, ready, running, waiting(blocked), terminated

                       - PC(Program Counter) - 다음 실행할 명령어의 위치 저장

                       - Register - 보다 정확히 말하면, 프로세스가 사용하는 레지스터의 값 

                       - CPU Scheduling Information

  

             Process Status           

                   

Process Status 관계도

 

                    - new : 프로세스 생성 중

 

                    - ready : 프로세스가 ready queue에서 대기 중, ready 상태인 프로세스에게 CPU 리소스 할당 시 사용 가능

 

                    - running : 프로세스가 현재 cpu에서 실행 중, cpu 리소스 사용 중

                                     하나의 코어에서는 오직 하나의 프로세스만 실행 가능,

                                     하나의 코어에서 동시에 여러 프로세스 실행 불가

 

                    - waiting : 프로세스가 waiting queue에서 대기 중, waiting 프로세스는 CPU 리소스 할당해도 사용 불가

                                    대표적으로 특정 프로세스에서 I/O 발생 시,

                                    그 프로세스는 디바이스가 task 완료 전까지 다음 명령어를 실행할 수 없으므로 waiting 상태,

                                    그 device의 waiting queue에서 대기

 

                    - terminated : 프로세스 종료 중     

 

 

       Process Scheduling

             

Process의 생명 주기

             - Ready Queue : 하나의 프로세스가 running, 코어 위에서 실행 중일 때

                                         ready 상태인 프로세스를 관리하는 곳

 

                                         현재 running 중인 프로세스가 timer, 또는 I/O, preemptive scheduling 등으로 

                                         나오게 될 때 다음 running 프로세스가 될 프로세스가 모여 있는 곳

 

                                         Linked List로 만들어졌으므로, Array와 달리 저장할 수 있는 프로세스의 개수에 제한 X

 

              - 위 Ready Queue 중, 어떠한 프로세스를 다음 running 프로세스로 할 것인가? 를 결정하는 것이 

                 Process Scheduling, 다음 running 프로세스를 결정하는 방법은 Process Scheduling Algorithm이라 함 

                     - 즉, 단순히 Queue의 FIFO(First In First Out)의 원칙대로는 다음 running 프로세스는 결정되지 않음

 

              - cf> Waiting Queue 

                         - waiting 상태인 프로세스가 저장되는 Queue, 하나만 존재하는 것이 아닌 각 디바이스별로 존재

                         - ex) 프린터 waiting queue, 키보드 waiting queue, ... 

 

  

  Context Switch

         

Context Switch의 과정, context switch 역시 메모리에 데이터를 저장, 로드하므로 syscall 발생함

           - 현재 running 상태 프로세스의 Process Context 저장, 

             ready -> running 될 프로세스의 Process Context의 정보를 로드

 

           - running 상태 프로세스가 바뀔 때, ready queue에 있는 프로세스가 running 상태로 바뀔 때 발생

                - running 상태 프로세스가 나갈 때(CPU 사용을 그만둘 때),

                  만약 Process Context를 저장하지 않는다면? 위 프로세스를 다시 실행할 때

                  지금까지의 작업을 이어서 불가, 따라서 CPU를 놓을 때, Process Context를 저장해야

 

           - Process Context

                 - 쉽게 말하면, Process Context는 프로세스를 실행시키기 위해 필요한 모든 것

                       - Memory address space(code, data, stack, heap)

                       - PCB(PID, Process Status, PC, Register)

                       - Kernel Stack  

 

            - 하지만, Context Switch 중일 동안에는 CPU는 프로세스 실행 불가

                    - Running 될 Process Context를 로드 / CPU를 놓을 Process Context를 세이브해야 하므로

                    - 이 Context Switch할 때 걸리는 시간을 Context Switch Overhead라 함

  

               

 

                    

 

                   

'TIL > OS' 카테고리의 다른 글

5. Scheduling (FCFS, SJF, RR, Priority Scheduling)  (1) 2023.08.10
4. Thread  (0) 2023.07.25