[정보 보안] 실기 이론 - 리눅스 프로세스 응용

Cookie·2025년 2월 21일
0

정보보안

목록 보기
34/40

(1) 프로세스 개요

1) 개요


1. 프로세스 제어 블록(PCB Pocess Control Block)

프로세스가 생성되면 커널은 프로세스 별로 관리 정보를 담고 있는 PCB를 생성함

  1. 프로세스 번호(Process Number)
    • 프로세스 식별 ID(PID), 부모 프로세스 식별 ID(PPID) 등
  2. 프로그램 카운터(Process Counter)
    • 문맥교환 발생 시 다음에 실행할 명령어의 위치 값 저장
  3. 레지스터 저장 영역(Register Save Area)
    • 문맥교환 발생 시 현재 프로세스의 실행 상태 정보(레지스터 정보) 저장
  4. 프로세스 상태(Process State)
    • 프로세스의 현재 상태(Ready, Running, Blocked 등) 저장
  5. 메모리 정보(Memory Limits)
    • 프로세스가 사용하는 메모리 정보(Segment 또는 Page 테이블 정보)

  • 문맥교환(Context Switching)
    : CPU에서 실행 중인 프로세스가 새로운 프로세스로 교환될 때 현재 실행 중인 프로세스의 상태 정보를 저장하고 새로운 프로세스의 상태 정보를 복원하는 과정
  • 레지스터(Register)
    : CPU내부에 있는 고속의 소용량 임시기억 장치



2. 파일 디스크립터 테이블(FDT File Descript Table)

프로세스 내에서 오픈한 각각의 파일을 식별하기 위한 양의 정수값

💡 프로세스가 생성되면 프로세스별로 오픈한 파일을 관리하기 위한 FDT가 생성됨
: 기본적으로 3개의 파일이 자동으로 오픈됨

  • STDIN (표준입력) : 키보드 등의 입력장치
  • STDOUT (표준출력) : 모니터 등의 출력 장치
  • STDERR (표준에러) : 오류 발생 시 출력



3. System open-file Table

커널이 시스템 내에서 여러 프로세스에 의해 오픈된 파일들을 관리하기 위한 자료구조

  • open_mode : 파일의 읽기/쓰기 모드
  • offset : 파일 I/O를 수행하기 위한 현재 위치값(Position)
  • reference_count : 해당 파일의 참조 개수(파일복제 시 증가)



4. Active vnode Table

해당 파일의 inode 정보를 가지고 있는 일종의 캐시역할

즉, 다양한 파일시스템의 inode 정보를 관리하기 위한 중계자 역할



2) 프로세스 기본 조건

  • 테스트 코드

1. 프로세스 테스트 코드(C 프로그램 : process.c)

  • fork() 함수는 자식 프로세스를 생성하는 시스템 함수

    → 반환값을 통해 부모 프로세스의 수행 코드와 자식 프로세스의 수행 코드를 식별

  • PID와 PPID를 각각 출력하고 1,000초 동안 대기함


2. 모든 프로세스는 부모프로세스를 가짐

  • boot 프로세스(0번 프로세스) 를 제외한 모든 프로세스는 부모프로세스를 가짐

  • 자식 프로세스가 살아있는 상태에서 부모 프로세스가 종료하게 되면 자식은 고아 프로세스가 되고 PID=1인 init 프로세스가 부모역할을 대신함

  • 프로세스 종료 시에는 자신의 ‘종료 상태정보’를 부모에게 반환해야 정상적으로 소멸함

    • 종료상태 정보
      자신의 PID, Exit Code(종료시 반환하는 값), CPU 사용시간 등

3. 좀비 프로세스

커널 오류 또는 부모프로세스가 종료된 자식프로세스에 대한 처리 오류 등으로 소멸하지 않고 남아있는 상태

  • 커널의 관점에서 프로세스는 무한히 생성할 수 있는 자원으로 좀비 프로세스가 과도하게 많아지면 시스템의 가용성에 문제 발생할 수 있음
  • 좀비 프로세스 제거 방법
    : 부모 프로세스를 종료 시키거나 시스템 재기동으로 커널 정보 초기화
    • kill 시그널 사용 불가능
      : 좀비 프로세스는 kill 시그널을 통해서도 소멸하지 않음

💡 모든 프로세스는 종료후 일시적으로 좀비 상태를 거친 후 소멸함

  • 리눅스/유닉스 시스템의 모든 프로세스는 작업을 종료하면 부모 프로세스가 종료를 확인할 때 까지 일시적으로 좀비상태가 됨

    이는 눈으로 식별 불가능할 정도로 빠르게 이루어짐

  • 지속해서 좀비 상태가 나타난다면 부모 프로세스의 오류 또는 커널 오류에 의한 비정상적인 상태일 확률이 높음



3) 프로그램 실행 과정

1. 프로세스와 프로세스 그룹 동시 생성

  • 프로세스 그룹
    • 커널이 터미널 제어권을 관리하기 위한 목적으로 사용하는 프로세스들의 집합
    • 쉘에서 실행된 프로세스와 그 자식 프로세스들이 하나의 프로세스 그룹

2. 포그라운드(Foreground)와 백그라운드(Background)

터미널과 연결되어 세션이 생성되면, 해당 세션 내에서는 하나의 포그라운드 프로세스 그룹과 하나 이상의 백그라운드 프로세스 그룹이 생성

  • Foreground Mode
    • 터미널에 대한 제어권을 가지고 동작하는 모드
  • Background Mode
    • 터미널에 대한 제어권 없이 동작하는 모드

3. 프로세스 관련 식별자

  1. Process ID
    • 커널 내에서 프로세스를 식별하기 위한 고유한 ID
  2. Parent Process ID
    • 부모 프로세스를 식별하기 위한 ID
  3. Process Group ID
    • 프로세스 그룹을 식별하기 위한 ID
    • 리더 프로세스(쉘로 부터 실행 된 프로세스)의 ID가 PGID로 결정됨
  4. Session ID
    • 세션을 식별하기 위한 ID
    • 터미널과 논리적인 연결상태를 세션이라 함
    • 세션 내에는 다수의 프로세스 그룹과 프로세스 그룹에 속하는 프로세스들이 존재
    • 해당 세션의 리더 프로세스의 PID가 SID로 결정됨(일반적으로 로그인 쉘)




(2) 프로세스 정보 확인

1) Process Status : ps

프로세스 정보를 확인할 때 사용하는 명령어


2) 필드 설명

💡 ps -ef 필드 설명

  • UID필드 = UserID, 프로세스의 EUID(Effective User ID)
  • PID필드 = Process ID
  • PPID필드 = Parent Process ID
  • STIME필드 = Start TIME, 프로세스가 시작된 시간
  • TTY필드 = 프로세스와 연결된 터미널 타입( ? 는 제어터미널에 연결되지 않음을 의미)
  • TIME필드 = CPU 사용 시간
  • CMD 필드= 명령어 이

💡 ps -el 필드 설명

  • S 필드
    • Z = 좀비
    • R = CPU를 점유하기 위해 대기중 또는 실행중
    • S = 인터럽트 가능한 sleep 상태
    • D= 인터럽트 불가능한 sleep 상태(일반적으로 IO 대기중 상태)
    • T = 정지된 상태
  • PRI 필드 = 프로세스의 우선순위
  • SZ 필드 = 프로세스가 차지하는 메모리 크기
  • WCHAN 필드 = sleep 상태의 프로세스가 기다리는 커널
  • CMD 필드 = 명령어 이름



(3) 프로세스 간 통신(시그널)

1) 개요

시그널

시그널은 유닉스/리눅스 시스템에서 지원하는 프로세스간 통신 기법(IPC)중 하나
Inter-Process Communication[IPC]

커널 또는 프로세스가 다른 프로세스에 약속된 신호를 전달하여 통신하는 목적으로 사용

  • 발생하는 경우
    : 에러 상황, 외부 상황, 이벤트 발생, 인위적 발생 등…



💡 리눅스 기준 시스템에서 지원하는 주요 시그널

profile
나만의 공부 일지... [임시 休]

0개의 댓글