ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로세스와 프로세스의 상태
    운영체제 2024. 3. 17. 23:03

    프로세스란?

     

    (메모리, CPU에 올라가서) 실행중인 프로그램

     

    필요한 것

    - CPU: 레지스터에 대한 정보를 알아야 함. (PC를 알면 어디까지 실행했는지 알 수 있을 것)

    - 메모리: 어드레스 스페이스 - 텍스트, 데이터, 스택, 힙

    - I/O 정보

     

    프로그램의 시작

    - 로드: 코드와 스태틱 데이터 가져오고, 이때 사용하는 포맷을 기반으로 함(ELF) 등

               보통, 필요한 코드를 싹 들고오지는 않고 Lazily하게 필요할 때 들고옴.

               * 함수 만들었다고 그걸 다 쓰는 경우보단 필요한 경우에 뽑아서 쓰는게 많기 때문

     

    - 동적할당: 스택 세그먼트, 파라미터 초기화, 힙 세그먼트

     

    - 초기화: 파일 디스크립터, I/O나 관련된 스트럭쳐 시그널

     

    - 메인 함수로 점프: main()

     

    프로세스 스테이트

    new(created, embryo): 프로세스 만들겠다고 선언된 상태, 아직 디스크에 있음

    new        --<admitted>->                                              ready : 승인되면 레디

    ready     --<dispatch, 혹은 스케쥴>->                          running : CPU에 물리적으로 올라감

    running  --<preemptive, timeout>->                        ready : 할당된 시간 종료

    running  --<wait, sleep>->                                           wating(blocked): I/O나 특정 이벤트 발생 시 대기하는 상태로 돌입

    wating    --<wakeup>->                                                ready : 기다리던 상황이 발생하면 다시 레디로 돌입

    running   --<exit>->                              terminated(zombie) : 프로세스 종료 상태

     

    PCB의 process state는 enum으로 정의되어 있음

    그런데 위에서 말한 순서는 지켜져야 함, enum 막 대입해서 집어넣고 하지 않음

    예외) 터미널에서 Ctrl + C 하면 이건 외부적 요인으로 Kill 하는 거니까 저 순환을 따르지 않음

     

    PCB (Process Control Block)

    각 프로세스에 관련된 정보를 가지고 있는 자료구조

    프로세스 스테이트, pid, PC 등 레지스터 정보(컨텍스트 스위칭 용도*), 스케쥴링 정보,

    메모리 정보, 오픈된 파일, IO 정보, CPU와 메모리 사용 정보 등..

     

    * 컨텍스트 스위칭: 스케쥴링 시스템에 의해 다른 프로세스가 스케쥴링될 때, 현재 프로세스가 어디까지 실행되었는지 정보를 저장해두고 바꿔야 하는데 그때의 정보를 컨텍스트라 하고, 이걸 스위칭한다는 의미.

    다음 명령이 어딘지 알면 어디까지 실행되는지 알 수 있으니 PC 레지스터 정보를 알면 됨.

     

     

Designed by Tistory.