CS 공부/OS 운영체제

(OS) 프로세스 (1)

그린티_ 2025. 5. 1. 22:00
반응형

개념

  • 실행중인 프로그램!
  • 운영체제가 독립적인 메모리 공간을 할당해서 관리하는 단위

예시

  • 크롬 실행 → 크롬 프로세스가 생김
  • vscode를 실행 → vscode 프로세스가 생김
  • 멜론 앱을 실행 → 멜론 프로세스가 생김 

특징

  • 완전히 독립 (서로의 메모리, 데이터 접근 X)
  • 하나가 죽어도 다른 프로세스엔 영향 X
  • 생성/전환 비용이 큼 (메모리, 리소스까지 따로 생성해야 하니까)

프로세스 상태

  • 프로세스는 실행되는 동안 아래와 같은 상태를 가짐

상태 설명

New 생성 중인 상태 (아직 실행 전)
Ready 실행될 준비가 되어 큐에서 대기
Running 실제로 CPU를 점유하고 실행 중
Waiting (Blocked) I/O 등 외부 작업을 기다리는 중
Terminated 실행이 끝난 상태

➡ 운영체제는 이 상태 정보를 참고해서 어떤 프로세스에게 CPU를 줄지 결정함


🧠 프로세스의 메모리 구조

프로세스 메모리 구조

운영체제가 각 프로세스에게 메모리 공간을 할당할 때, 이 메모리는 크게 4개의 주요 영역으로 나뉨

  1. 코드 영역 (Text Segment)
  2. 데이터 영역 (Data Segment)
  3. 힙 (Heap)
  4. 스택 (Stack)

1. 코드 영역 (Text Segment)

  • 설명: 프로그램이 실행되는 기계어 코드가 저장되는 영역
    • 여기에는 실행할 수 있는 코드정적 함수들이 포함됨
  • 특징:
    • 읽기 전용으로 설정되며, 수정할 수 없음 (보안을 위해)
    • 실행할 때 프로그램 코드가 여기에 배치되어 실행됨
    • 프로세스가 시작될 때 로딩되어 변경되지 않음

2. 데이터 영역 (Data Segment)

  • 설명: 프로그램 내에서 전역 변수정적 변수들이 저장되는 영역
    • 초기화된 데이터초기화되지 않은 데이터로 나눠지기도 함
  • 특징:
    • 초기화된 데이터: 프로그램 실행 전에 초기값을 가진 변수들
    • 초기화되지 않은 데이터(BSS): 값이 설정되지 않은 전역 변수나 정적 변수들
    • 프로그램 실행 중 변경 가능한 영역이지만, 코드 영역과는 다르게 값이 바뀔 수 있음!

3. 힙 (Heap)

  • 설명: 동적 메모리 할당에 사용되는 영역입니다.
    • 프로그램 실행 중 malloc(), new 등을 통해 동적으로 메모리를 할당하거나 free(), delete로 해제함
  • 특징:
    • 동적으로 메모리를 할당하고 해제할 수 있기 때문에, 크기가 가변적임
    • 메모리 누수가 발생할 수 있어, 관리가 중요함!!!
    • 힙 영역은 프로세스가 종료될 때까지 메모리가 계속 할당될 수 있음

4. 스택 (Stack)

설명: 함수 호출 시 생성되는 지역 변수함수 호출 정보가 저장되는 영역

  • 함수가 호출될 때마다 스택 프레임이 쌓이고, 함수가 종료되면 그 스택 프레임이 pop됨
  • 특징:
    • LIFO(Last In, First Out) 방식으로 메모리가 관리됨
    • 함수의 인자, 지역 변수, 반환 주소 등이 저장됨
    • 자동으로 메모리가 할당되고 해제되므로 수동 관리 필요 없음
    • *스택 오버플로우(Stack Overflow)**가 발생할 수 있음 -> 너무 많은 함수 호출이나 너무 많은 지역 변수 사용 할 때! 

각 영역의 메모리 관리 차이점

코드 영역 실행 가능한 프로그램 코드 읽기 전용, 수정 불가
데이터 영역 전역 변수, 정적 변수 초기화된 데이터, 초기화되지 않은 데이터(BSS)
동적 메모리 할당 (malloc(), new 등) 크기 가변, 프로세스 종료까지 메모리 유지
스택 함수 호출과 지역 변수 LIFO, 자동 할당 및 해제, 메모리 한계 있음

 

 

반응형

'CS 공부 > OS 운영체제' 카테고리의 다른 글

(OS) 스레드  (0) 2025.05.01
(OS) 프로세스 (3)  (0) 2025.05.01
(OS) 프로세스 (2)  (0) 2025.05.01
(OS) 커널과 쉘  (0) 2025.05.01
(OS) 운영체제  (0) 2025.05.01