본문 바로가기

Development/CS

프로세스 생명주기와 프로세스 메모리

프로세스 생명주기

  1. 신규
    프로세스가 메인메모리에 올라옴 (실행X)
  2. 준비
    변수 초기화 등 기초작업 끝낸 후 실행 할 수 있는 상태
  3. 수행
    CPU가 프로세스 수행
    스케줄링에 의해 중단되면 준비 상태로
    I/O 또는 이벤트가 필요하면 대기 상태로
    수행이 완료되면 종료 상태로
  4. 대기
    프로세스 도중에 I/O 또는 이벤트 작업이 필요할 경우
  5. 종료
    최종적으로 프로세스가 종료된 상태
    사용하던 메모리 영역 해제

 

대기 큐 (Waiting Queue)

  • Job queue
    HDD에 있던 프로그램이 메모리에 올라올 때 메인 메모리가 가득 찼거나
    CPU가 다른 작업을 수행 중이라면 메모리에 올라오기 전에
    어느 정도 기다려야하는데 HDD의 프로그램들이 잠시 기다리는 곳
  • Ready Queue
    메모리에 올라온 프로세스들이 실행을 위해 대기하는 곳
  • Device Queue
    키보드, 마우스 등 입출력 장치들은 각자가 가지고 있는 대기 

 

스케줄링 (Scheduling)

  • Job Scheduler
    Job queue의 프로그램들을 어떤 순서로 메모리에 올릴 것인지 결정
  • CPU Scheduler
    Ready Queue의 프로세스들을 어떤 순서로 실행할 것인지 결정
    모든 스케줄링 중에 CPU 스케줄링이 가장 중요
  • Device Scheduler
    Device Queue의 프로세스들을 어떤 순서로 I/O 장치를 이용하게 할 것인지 결정

 

주-보조 교환 (Swapping)

서버와 같이 여러 사용자가 하나의 메모리를 공유하는 경우에 만약 한 사용자가 자리를 비우면 그 사용자가 돌아올 때 까지 해당 프로세스에 메모리를 할당할 이유가 없다.

그래서 PCB(Process Control Block)의 CPU Time 등을 확인해서 오랫동안 동작이 없는 프로세스는

잠시 HDD로 내려놓고 다른 프로세스를 실행하거나 기존 프로세스에 메모리를 더 할당하는 등 메모리를 더 효율적으로 활용한다.

  • Swap Out
    메모리에서 HDD로 내리는 작업
  • Swap In
    HDD에서 다시 메모리로 올리는 작업

 

문맥 교환 (Context Switching)

  • Context Switching
    일정 시간이 지나면 기존 프로세스를 준비 상태로 만들로 다른 프로세스를 수행 상태로 만들어서 실행
  • Scheduler
    Context Switching을 전문적으로 담당하는 스케줄러는 CPU 스케줄러이다.
    CPU 스케줄러는 Ready Queue에 대기 중인 프로세스를 어떤 순서로 실행시킬 것인지에 대한 스케줄러이다.
  • Dispatcher
    프로세스가 수행 -> 대기 -> 수행 상태가 되었을 때 작업중이던 정보를 보존했다가 레지스터 등에 다시 할당하는 작업을 수행하는 프로그램

 

프로세스 메모리

Code 영역
- 실행할 프로그램의 코드가 저장되는 영역.

- CPU는 이 영역에서 명령어를 하나씩 가져와 처리.

Data 영역

- 전역변수와 정적 변수가 저장.

- 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸.

 

Stack 영역

- 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 공간

- 함수 호출 시 기록하고 수행이 완료되면 사라짐 (Last In First Out)

 

Heap 영역

- 동적 데이터 영역

- 메모리 주소 값에 의해서만 참조되고 사용되는 영역

- 프로그램 동작 시 크기가 결정됨

 

 

커널 프로세스의 메모리

커널 : kernel

운영체제 (OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스이다.

메모리 관리, 프로세스 관리, 하드웨어와 프로세스 사이에서 명령을 즉시 실행할 수 있는 역할을 수행하거나 시스템의

호출이나 보안등의 기능을 수행한다.

 

Code 영역

- 시스템 콜, 중단 처리 코드

- CPU, 메모리 등 자원 관리를 위한 코드

- 편리한 인터페이스 제공을 위한 코드

 

Data 영역

 - CPU, Memory 등 하드웨어 자원을 관리하기 위한 자료구조 저장

- PCB (Process Controll Block) 자료 구조가 저장

  • 현재 수행중인 프로세스의 상태, CPU 사용 정보 등을 유지하기 위한 자료 구조
  • 프로세스 제어 블록이란, 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조이다.
  • PCB는 각 프로세스에 대한 다양한 정보를 담고 있는 데이터로써 사람으로 따지면 주민등록증과 유사하다.

 

Stack 영역

각 프로세스의 커널 스택을 저장

프로세스는 함수 호출 시 자신의 복귀 주소를 저장하지만 커널은 커널 내의 주소가 된다.

각각의 프로세스마다 별도의 스택을 두어 관리한다.

 

출처 및 참고

https://velog.io/@moonheekim0118/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%93%B0%EB%A0%88%EB%93%9C

 

[운영체제] 프로세스와 쓰레드

프로그램은 디스크에 저장되어있는 실행코드프로세스는 프로그램을 구동하여 프로그램 자체와, 프로그램의 상태가 메모리 상에서 실행되는 작업단위Text 영역코드가 저장된다.Data 영역전역 변

velog.io

https://zangzangs.tistory.com/107

 

[OS] 프로세스 메모리 구조 (코드, 데이터, 스텍, 힙)

프로세스 메모리 구조 (코드, 데이터, 스텍, 힙) 프로그램의 실행 프로그램의 실행은 두가지 중요한 의미를 가진다. 파일 시스템에 존재하던 실행파일이 메모리에 적재된다는 의미 프로그램이 CP

zangzangs.tistory.com

https://gusdnd852.tistory.com/82

 

Process Management

1. Process 란? 우리가 흔히 알고있는 프로그램은 해당 프로그램이 하드디스크에 존재할 때를 의미하고, 만약 그 프로그램이 실행되어 메인메모리로 올라오게 되면, 그 프로그램을 프로세스라고

gusdnd852.tistory.com

 

'Development > CS' 카테고리의 다른 글

Thread, Thread Pool  (0) 2023.07.02
CPU와 메모리  (0) 2023.06.11