운영체제 - 프로세스

김지승·2025년 10월 9일

CS

목록 보기
22/22

1. 프로세스(Process)

정의

  • 프로세스는 실행 중인 프로그램을 의미합니다.
  • 프로그램이 디스크에 저장된 정적 코드 상태에서 메모리에 적재되어 CPU 등 자원을 할당받고 실행될 때 프로세스가 된다.

상태 전이

  1. 생성(New): 프로세스가 PCB를 가지지만 CPU 할당 전 상태
  2. 준비(Ready): 메모리에 적재되고 CPU를 기다리는 상태
  3. 실행(Running): CPU를 점유하고 명령어 수행
  4. 대기(Waiting/Blocked): I/O 등 자원을 기다려 CPU 반납
  5. 준비(Ready): 대기하던 자원이 할당되면 웨이크업되어 다시 준비 상태
  6. 실행(Running): CPU 할당 후 재실행
  7. 종료(Terminated): 실행 완료 또는 강제 종료

Tip: 인터럽트나 타임 슬라이스에 의해 Running → Ready 전이도 발생

메모리 구조

  • 코드 영역(Text): 실행 코드, 읽기 전용
  • 데이터 영역(Data): 전역 변수 및 정적 변수, 읽기/쓰기 가능
  • 힙(Heap): 동적 메모리 할당 영역
  • 스택(Stack): 함수 호출 관련 임시 데이터, 지역 변수, 매개변수 저장

2. PCB(Process Control Block)

정의

  • PCB는 운영체제가 프로세스를 관리하기 위해 사용하는 메타데이터 블록
  • 프로세스 생성 시 만들어지며, CPU 스케줄링, 상태 관리, 문맥 교환 등에 사용

PCB 정보

  • 프로세스 식별자(PID)
  • 프로세스 상태(New, Ready, Running, Waiting, Terminated)
  • 프로세스 권한
  • 프로그램 카운터(PC)
  • CPU 레지스터
  • CPU 스케줄링 정보
  • 계정 정보(CPU 사용 시간, 실행 유저 등)
  • I/O 상태 정보

3. 스레드(Thread)와 TCB(Thread Control Block)

정의

  • 스레드는 프로세스 내에서 실제로 실행되는 흐름 단위
  • 같은 프로세스 주소 공간과 자원을 공유하며 독립적 실행

TCB 정보

  • 스레드 ID(TID)
  • 스레드 상태(New, Ready, Running, Waiting, Terminated)
  • CPU 레지스터, 프로그램 카운터
  • 스택 포인터(Stack Pointer)
  • 스케줄링 정보

스레드는 PCB와 달리 주소 공간을 공유하므로 메모리 복사 없이 빠른 생성과 전환 가능


4. 컨텍스트 스위칭(Context Switching)

정의

  • CPU가 한 프로세스 또는 스레드에서 다른 프로세스로 전환되는 과정
  • 멀티태스킹 환경에서 한 시점에 CPU는 하나의 프로세스만 실행

순서

  1. CPU가 P1 실행 중
  2. 인터럽트 발생 → 운영체제 개입
  3. P1 상태 PCB1에 저장 (레지스터, PC, 스택 포인터 등)
  4. P2 상태 PCB2에서 복원 → CPU 점유
  5. P2 실행 시작
  6. P2 실행 중 또 다른 인터럽트 발생
  7. P2 상태 PCB2에 저장
  8. P1 상태 PCB1에서 복원 → CPU 점유, 실행 재개

CPU 제어권

CPU 제어권(Control)이란 CPU가 어떤 코드(프로세스/스레드)를 실행할지 결정하는 권한을 의미합니다.

사용자 모드(User Mode) vs 커널 모드(Kernel Mode)

사용자 모드

  • 우리가 작성한 일반 프로그램(예: 메모장, 웹 브라우저 등)이 실행되는 모드
  • CPU 권한 제한:
    • 직접 하드웨어 접근 불가
    • OS 핵심 자원 접근 불가
  • 목적: 안정성과 보안 확보

커널 모드

  • 운영체제(OS)가 실행되는 모드
  • CPU 완전 권한:
    • 하드웨어 접근 가능
    • 메모리, 파일 시스템, 장치 제어 가능

CPU 제어권 전환 과정

사용자 프로그램이 OS 서비스를 요청할 때 CPU 제어권이 사용자 모드에서 커널 모드로 전환됩니다.

예시: 파일 읽기

사용자 프로그램:
fd = open("file.txt")  # 파일 읽기 요청 (시스템 콜)
  1. CPU가 커널 모드로 전환
  2. OS가 파일 시스템 접근 → 데이터 읽기
  3. 처리 완료 후 사용자 모드로 반환
  4. 사용자 프로그램 실행 재개
[사용자 모드: 내 코드 실행] 
       │
       │ 시스템 콜 호출 (read, write, open 등)
       ▼
[커널 모드: OS 코드 실행]
       │
       │ 처리 완료
       ▼
[사용자 모드: 내 코드 실행 재개]

5. 인터럽트 (Interrupt)

정의

CPU가 현재 실행 중인 작업을 중단하고, 긴급한 사건을 먼저 처리하도록 하는 신호

즉, 예상치 못한 외부 사건이나 예외 상황이 발생했을 때 CPU에게 알리는 메커니즘입니다.

인터럽트 종류

구분설명예시
하드웨어 인터럽트외부 장치가 CPU에 신호를 보냄키보드 입력, 마우스 클릭, 디스크 I/O 완료 등
소프트웨어 인터럽트프로그램이 명령을 통해 발생시킴시스템 콜, 예외(Exception) 등

처리 과정

  1. CPU가 현재 실행 중인 명령을 잠시 중단
  2. 인터럽트 벡터 테이블을 통해 처리 루틴(Handler) 주소 탐색
  3. 해당 인터럽트 서비스 루틴(ISR, Interrupt Service Routine) 실행
  4. 처리 완료 후 중단된 위치로 복귀

목적

  • 외부 장치나 예외 상황에 즉각 대응
  • CPU 자원을 효율적으로 사용 (폴링 방식보다 효율적)
  • 시스템 안정성과 응답성 향상

6. 시스템 콜 (System Call)

정의

사용자 프로그램이 운영체제의 커널 서비스를 요청하는 인터페이스

사용자 모드에서는 하드웨어나 커널 자원에 직접 접근할 수 없기 때문에,
운영체제에 공식적으로 요청하는 통로가 필요합니다.
그게 바로 시스템 콜입니다.

동작 과정

  1. 사용자 프로그램이 read(), write(), fork(), open()시스템 콜 호출
  2. 내부적으로 소프트웨어 인터럽트 발생 (int 0x80 또는 syscall 명령)
  3. CPU가 커널 모드로 전환
  4. 커널의 시스템 콜 핸들러가 요청 처리
  5. 처리 결과를 사용자 모드로 반환

예시

#include <unistd.h>
#include <fcntl.h>

int main() {
    int fd = open("test.txt", O_RDONLY);  // 파일 열기 (시스템 콜)
    char buf[100];
    read(fd, buf, sizeof(buf));           // 파일 읽기 (시스템 콜)
    close(fd);                            // 파일 닫기 (시스템 콜)
    return 0;
}

위 코드의 open, read, close 모두 커널의 도움 없이 직접 수행 불가능한 작업이므로
시스템 콜을 통해 수행됩니다.

인터럽트 vs 시스템 콜 비교

구분인터럽트 (Interrupt)시스템 콜 (System Call)
발생 주체하드웨어 또는 소프트웨어사용자 프로그램
발생 원인외부 이벤트나 예외 상황커널 서비스 요청
트리거하드웨어 신호 또는 예외syscall, int 0x80 명령
모드 전환사용자 → 커널사용자 → 커널
예시I/O 완료, 타이머 인터럽트, 0으로 나누기 예외read(), write(), open()
핵심 목적외부 사건 처리 및 CPU 제어권 전환커널 기능(입출력, 메모리, 프로세스) 이용

핵심 요약

시스템 콜은 프로그램이 커널 기능을 요청하기 위해 의도적으로 발생시키는 소프트웨어 인터럽트이고,
인터럽트는 외부나 내부의 예기치 못한 사건에 CPU가 반응하기 위한 메커니즘입니다.

profile
디등

0개의 댓글