프로그램을 실행하면 실제로 일어나는 일

발행: (2026년 2월 19일 오전 03:03 GMT+9)
8 분 소요
원문: Dev.to

Source: Dev.to

번역을 진행하려면 번역하고자 하는 본문 텍스트를 제공해 주시겠어요?
본문이 포함된 마크다운을 알려주시면, 요청하신 대로 한국어로 번역해 드리겠습니다.

From Keystroke to Execution

명령을 입력하고 Enter 키를 누르면 프로그램이 몇 밀리초 안에 시작됩니다. 운영 체제는 셸, 커널, CPU 스케줄러 및 메모리 관리와 관련된 일련의 단계를 조정합니다.

Shell → Kernel 상호 작용

  1. Shell이 명령을 파싱함 – 쉘은 일반 사용자 프로세스로 실행됩니다.
  2. Shell이 커널에 새 프로그램 시작을 요청함.

그 후 커널은:

  • 메모리에서 프로세스 구조체를 할당한다
  • 고유한 PID(프로세스 식별자)를 할당한다
  • 디스크에서 실행 파일을 로드한다
  • 코드와 데이터를 가상 메모리에 매핑한다
  • 프로세스를 준비 큐에 넣는다

실행 파일은 기계 명령어와 메타데이터를 포함합니다. 로더가 이러한 섹션을 매핑한 후, 프로세스가 존재하지만 CPU 시간을 기다려야 합니다.

권한 모드

  • 사용자 모드 – 애플리케이션 코드를 실행합니다; 하드웨어 접근이 제한됩니다.
  • 커널 모드 – 전체 권한을 보유하며, 하드웨어, 메모리 및 장치를 제어합니다.

프로그램이 시스템 리소스가 필요할 때 시스템 콜을 발생시키며, 이는 커널 모드로의 제어된 전환을 트리거합니다. 커널은 요청을 검증하고 작업을 수행한 뒤 사용자 모드로 제어를 반환하여, 결함이 있는 프로그램으로부터 시스템을 보호합니다.

Unix‑Style Program Launch (fork‑exec)

  1. fork – 부모의 메모리 공간과 파일 디스크립터 복사본을 받은 자식 프로세스를 생성합니다. 부모와 자식은 동일한 지점에서 실행을 계속합니다.
  2. exec – 자식이 자신의 메모리를 새로운 프로그램 이미지로 교체합니다. PID는 동일하게 유지되고, 코드와 데이터만 바뀝니다.

The shell follows this pattern:

  • The shell calls fork
  • The child process calls exec with your command
  • The parent shell waits or continues based on job rules

This model keeps process management simple and predictable.

상태설명
신규프로세스가 생성됨
준비프로세스가 CPU 시간을 기다림
실행 중프로세스가 코어에서 실행됨
대기프로세스가 I/O 또는 기타 이벤트를 위해 일시 중지됨
종료프로세스가 종료됨

스케줄링

스케줄러는 FCFS, SJF, SRTF, Round‑Robin 등과 같은 알고리즘을 사용하여 다음에 실행될 준비된 프로세스를 선택합니다. 대부분의 스케줄러는 우선순위와 time slices—컨텍스트 스위치가 발생하기 전에 프로세스가 실행될 수 있는 시간 제한—을 사용합니다.

컨텍스트 스위치가 발생할 때 커널은:

  • 현재 프로세스의 CPU 레지스터를 저장합니다
  • 다음 프로세스의 레지스터를 로드합니다
  • 스케줄링 데이터를 업데이트합니다

빠른 스위칭은 병렬 실행의 착시를 만들어냅니다.

프로세스 제어 블록 (PCB)

커널은 각 프로세스를 PCB로 추적하며, PCB에는 다음이 저장됩니다:

  • 스케줄링 정보
  • 메모리 매핑
  • 열린 파일 테이블
  • 회계 데이터

가상 메모리

가상 메모리는 각 프로세스에 격리된 주소 공간을 제공합니다. 페이지 테이블은 가상 주소를 물리 메모리와 매핑하고, 커널은 이러한 매핑을 통해 보호 규칙을 적용합니다.

파일 디스크립터

파일 디스크립터는 프로세스를 리소스와 연결합니다. 각 디스크립터는 파일, 장치 또는 파이프를 가리키는 커널 테이블 엔트리를 가리킵니다. 커널은 권한과 참조 카운트를 관리합니다.

프로세스 관찰

일반적인 명령어를 통해 이러한 개념이 실제로 어떻게 동작하는지 볼 수 있습니다.

ps aux

활성 프로세스의 스냅샷을 보여주며, 각 행은 CPU 및 메모리 사용량과 함께 커널이 추적하는 프로세스를 나타냅니다.

top

실시간으로 지속적으로 업데이트되는 뷰를 제공합니다. 스케줄러가 작업을 교체하면서 프로세스가 상태를 바꾸는 모습을 볼 수 있습니다.

시도해 보기:

  1. 한 터미널에서 장시간 실행되는 프로그램을 시작합니다.
  2. 다른 터미널에서 ps 또는 top으로 관찰합니다.
  3. 프로그램을 중지하고 해당 항목이 사라지는 것을 확인합니다.

실행하는 모든 프로그램은 프로세스 생성, 스케줄링, 자원 추적을 긴 루프 안에서 트리거합니다. 이러한 단계는 백그라운드에서 지속적으로 일어나며 시스템 동작을 형성합니다.

다음에 터미널에서 Enter 키를 누를 때, 여러분이 제어하는 전체 프로세스 수명 주기를 시작하고 있다는 것을 기억하세요.

0 조회
Back to Blog

관련 글

더 보기 »