Post

02 OS - 프로세스

02 OS - 프로세스

1. 프로세스

  • 다중 프로그래밍 환경에서 여러 프로그램이 동시에 메모리에 적재되어 CPU를 공유하며 병행 실행되기 시작했고, 이 과정에서 각 실행 중인 프로그램을 구분하고 자원 할당/보호/스케줄링을 위해 운영체제가 도입한 관리 단위가 프로세스(Process)
  • 프로세스의 일반적인 정의는 실행중인 프로그램

2. 프로그램과 프로세스

  • 프로그램은 컴파일한 코드와 초기화 전역변수, 문자열과 문자열 상수 등 정적 데이터를 포함하는 디스크에 존재하는 정적인 객체
  • 프로세스는 메모리구조를 이루고 프로그앰 카운터나 레지스터처럼 현재 어떤 자원을 사용하는지 관련 정보가 들어있는 동적인 객체

3. 프로세스의 일반적인 메모리 구조

1
2
3
4
5
6
7
8
9
10
11
12
13
 +----------------------------+
 | 코드 영역 (Text Segment)     |
 +----------------------------+
 | 데이터 영역 (Data Segment)   |
 | - 초기화된 데이터             |
 | - 초기화되지 않은 데이터 (BSS) |
 +-----------------------------+
 | 힙 영역 (Heap)               |
 +-----------------------------+
 | **자유 영역 (Free Area)**     |  ← 동적 할당 가능한 여유 공간 (힙과 스택 사이) 
 +-----------------------------+
 | 스택 영역 (Stack)             |
 +-----------------------------+
  • 코드 영역: 프로그램 명령어들이 저장되는 영역. 보통 읽기 전용.
  • 데이터 영역: 전역 변수, 정적 변수들이 저장됨. 초기화 여부에 따라 나눔.
  • 힙 영역: 런타임 중 동적 메모리 할당을 위한 영역.
  • 자유 영역: 힙과 스택 사이에 남아있는 비할당 메모리 공간.
  • 스택 영역: 함수 호출 시 생성되는 지역 변수, 매개변수, 리턴 주소 등이 저장됨.

4. 프로세스의 종류

분류 기준분류 항목설명
역할(Role)시스템(커널) 프로세스운영체제 내부 기능
모든 시스템 메모리와 프로세서의 명령에 엑세스 할 수 있는 프로세스
 사용자 프로세스사용자가 실행한 앱
병행 수행 방식독립 프로세스다른 프로세스에 영향을 주지 않거나, 다른 프로세스의 영향을 받지 않는 병행 프로세스
 협력 프로세스다른 프로세스에 영향을 주거나, 다른 프로세스에 영향을 받는 병행 프로세스

5. 프로세스 상태 🔖

  • 운영체제에서 프로세스 상태(Process States)는 프로세스가 실행되는 동안 가질 수 있는 여러 단계(상태)

| 상태 이름 | 설명 | | ——————- | —————————– | | New (생성) | 프로세스가 생성되어 아직 준비되지 않은 상태 | | Ready (준비) | CPU 할당을 기다리는 상태, 실행 대기 중 | | Running (실행) | CPU를 할당받아 현재 명령어를 실행 중인 상태 | | Waiting (대기) | 입출력 완료 등 이벤트를 기다리는 상태 (블록 상태) | | Terminated (종료) | 프로세스가 실행을 마치고 종료된 상태 |

  • 흐름
    1
    
     New → Ready → Running → Waiting → Ready → Running → Terminated
    
  • New → Ready : 프로세스 생성 후 준비 상태로 전환
  • Ready → Running : (dispatch) CPU 할당 받아 실행
  • Running → Waiting : (block) I/O 등 이벤트 대기 위해 대기 상태로 전환
  • Waiting → Ready : (timeout) 이벤트 완료 후 다시 실행 대기
  • Running → Terminated : 작업 완료 후 종료
  • 문맥전환은 CPU가 실행하는 프로세스를 교체하는 작업으로 교체 당하는 프로세스의 문맥은 보관하고 교체하는 프로세스의 문맥은 복원하는 과정

6. 프로세스 제어블록

  • 프로세스 제어블록(PCB, Process Control black)은 프로세스의 정보를 담은 하나의 구조체
  • 프로세스 ID, 프로세스 상태, 프로세스 주소, 크기등의 정보를 가지고 있음.
  • 프로세스 제어블록의 내용
범주설명
프로세스 상태현재 상태 (Running, Ready, Blocked 등)
프로세스 ID (PID)고유 식별자 (Process ID)
Program Counter다음에 실행할 명령어의 주소
CPU 레지스터연산 중이던 레지스터 값들 (R1, R2, PC, SP 등), 문맥 교환 시 저장
메모리 정보코드, 데이터, 스택 영역 주소, 페이지 테이블, 세그먼트 테이블 등
파일 정보열린 파일 핸들, 파일 디스크립터 테이블 등
스케줄링 정보우선순위, 스케줄링 큐 포인터, CPU 점유 시간 등
계정 정보사용자 ID, 그룹 ID, 권한 정보 등
입출력 상태사용 중인 I/O 장치, 대기 중인 I/O 요청 정보 등

7. 프로세스들끼리 메모리 영역 구조가 같은 이유

  • 운영체제 설계의 표준화
    • 대부분 운영체제(OS)는 프로세스를 효율적으로 관리하기 위해 일관된 메모리 구조 모델 사용
    • CPU, 메모리 관리장치(MMU), 가상 메모리 시스템, 스케줄러 등 시스템 구성 요소들이 프로세스를 공통된 방식으로 다룰 수 있음.
  • 프로그램 실행 방식의 공통성
    • 프로그램 실행은 기본적으로 코드 실행 → 데이터 사용 → 동적 메모리 할당 → 함수 호출과 반환 과정을 거침
    • 이 흐름에 맞춰 메모리를 나누면 구조가 자연스럽게 코드/데이터/힙/스택 으로 나뉨
  • 가상 메모리 관리와 보호를 위한 논리적 분할
    • 각 영역별로 접근 권한(읽기, 쓰기, 실행)을 다르게 주고, 메모리 충돌이나 오염을 막기 위해 영역을 분리함
    • 이런 분리는 OS가 안정성과 보안을 유지하는 데 필수적
  • 컴파일러와 링커의 역할
    • 컴파일러는 코드, 전역 변수, 정적 변수, 초기화되지 않은 변수 등을 각각 다른 세그먼트에 배치함.
This post is licensed under CC BY 4.0 by the author.