프로세스

프로세스와 메모리 구조에 대해 정리한 글

  • 프로그램 컴퓨터를 실행시키기 위해 차례대로 작성된 명령어 모음 브라우저 등
  • 프로세스 컴퓨터 내에서 실행중인 프로그램을 일컫는 용어 브라우저 등의 프로그램이 실행된 CPU, Memory 등의 상황
  • Process Lifetime 프로세스의 생성Creation 에서 종료Termination 까지의 기간 (프로그램이 시작된 후부터 꺼질 때 까지)
  • Process State
    1. Running CPU 에서 실행되고 있는 상태

      -> Ready : CPU release 작동하던 CPU를 풀어줌

    2. Ready CPU 에서 실행되기 위해 기다리는 상태

      -> Running : CPU allocation CPU를 할당 받음

      -> Block : Wait for Event 이벤트를 기다림

    3. Block Event 를 기다리고 있는 상태 (예: 사용자의 input을 기다리는 등)

      필요한 이유: Running 상태에서 기다리면 CPU 낭비 발생

      -> Ready : Event Occurs 이벤트 발생

      이벤트가 발생하더라도 CPU를 할당 받기 전까진 실행할 수 없기 떄문에 Ready

출처: 프로세스(Process)란 무엇일까?

메모리 구조

  1. TEXT 섹션
    • 프로그램에 있는 함수 코드, 제어문, 상수 등 포함
    • 일반적으로 한 번 로딩 후엔 변치 않음
    • JVM에서는 사용 않음
    • node, 브라우저 등은 TEXT 영역 대신 코드 영역 별도 존재
  2. GVAR/BSS 섹션
    • 범위(Scope)가 정해지지 않은 전역(global, static) 변수 포함
    • GVAR은 초기 값이 0이 아닌 특정 값으로 지정한 경우 사용
  3. HEAP 섹션
    • 동적으로 할당되는 메모리 공간
    • 보통 힙 영역 할당 메모리 공간에 대한 주소를 참조
  4. STACK 섹션
    • 함수 호출 시 지역 변수, 매개변수, 리턴 값등이 쌓임
def 함수1():
    print("Hello, World!") # 1
    return # 4

def 함수2():
    함수1() # 2
    return # 5

def 함수3():
    함수2() # 1
    함수1() # 6
    return # 7

함수3() # 0
0. []
< # 0 call 함수3 in global >
1. [함수3]
< # 1 call 함수2 in 함수3 >
2. [함수3, 함수2]
< # 2 call 함수1 in 함수2 >
3. [함수3, 함수2, 함수1]
< # 3 call print in 함수1 >
4. [함수3, 함수2, 함수1, print]
< # 3 return print in 함수1 >
5. [함수3, 함수2, 함수1]
< # 4 return 함수1 in 함수2 >
6. [함수3, 함수2]
< # 5 return 함수2 in 함수3 >
7. [함수3]
< # 6 call 함수1 in 함수3 >
8. [함수3, 함수1]
< # 1 call print in 함수1 >
9. [함수3, 함수1, print]
< # 1 return print in 함수1 >
10. [함수3, 함수1]
< # 4 return 함수1 in 함수3 >
11. [함수3]
< # 5 return 함수3 in global >
12. []

© 2021. All rights reserved.

Powered by Hydejack v7.5.2