본문 바로가기
TIL/CS

프로그램과 프로세스

by J1-H00N 2023. 8. 22.

프로그램이 저장되는 곳 - 보조 기억장치

프로그램이 로딩되는 곳 - 주 기억장치

프로그램을 실행하는 주체 - 프로세스

작업을 처리하는 주체 - 쓰레드

 

프로세스 생명주기 = 프로세스 상태변화

 

프로세스 상태

  • 신규
    • 프로세스가 이제 막 메인메모리에 올라온 상태
    • 수용을 거쳐 준비 상태가 되야 실행 가능
  • 준비
    • 변수 초기화와 같은 준비작업을 마쳐 실행이 가능한 상태
    • 스케쥴러를 통해 발송되어야 수행 상태가 됨
    • 신규 상태에서 수용/대기 상태에서 입출력 or 이벤트가 완료/수행 상태가 중단되면 준비 상태가 됨
  • 수행
    • CPU가 실제로 프로세스를 실행하는 상태
    • 선점 스케쥴링에 의해 중단 > 준비
    • 입출력 or 이벤트가 필요 > 대기
    • 수행 완료 > 종료
  • 대기
    • 프로세스 중에 입출력이 필요해 입출력을 수행하는 상태
    • CPU는 이때 다른 프로세스를 수행
    • 대기 상태가 끝나면 프로세스는 준비 상태가 되고 곧 수행 상태가 됨
  • 종료
    • 최종적으로 프로세스가 종료된 상태
    • 사용하던 메모리 영역 해제

 

대기 큐

  • Job Queue
    • HDD에 있던 프로그램들이 메모리로 올라가야 하는데 메모리가 이미 가득 찼거나 CPU가 다른 작업을 수행중일 때 이 프로그램들이 대기할 공간
  • Ready Queue
    • 이미 메모리에 올라온 프로그램이 실행되기 전 다른 프로그램이 수행 중이면 대기 상태가 되거나 선점 스케쥴리에 의해 준비 상태가 될 때까지 대기할 공간
  • Device Queue
    • 입출력 장치를 사용하려면 입출력을 위해 대기 중이던 다른 작업들이 끝난 후에야 사용할 수 있다.
    • 각각의 입출력 장치들은 각자의 대기 큐(ex. 키보드 큐, 마우스 큐, ...)를 가지고 있는데, 이 큐들을 통틀어서 Device Queue라고 부른다.

 

스케쥴링

  • Job Scheduler
    • Job Queue의 프로그램들을 어떤 순서로 메모리에 올릴 것인지 결정
    • 이러한 과정은 프로그램이 새로 시작될 때, 메인메모리가 가득찬 경우 등의 상황에만 발생하므로 자주 일어나지 않고 어쩌다 한번(수분 ~ 수십분) 일어난다.
    • 이와 같이 긴 간격으로 동작하는 스케쥴러를 Long Term Scheduler라고 한다.
  • CPU Scheduler
    • Ready Queue의 프로세스들을 어떤 순서로 서비스 할 것인지 결정
    • 모든 스케줄링 중에서 CPU 스케줄링이 가장 중요
    • 시공유 시스템의 경우 이러한 과정은 1초에도 수십번에서 많게는 수백번도 일어나기 때문에 이러한 스케줄러를 Short Term Scheduler라고 한다.
  • Device Scheduler
    • Device Queue의 프로세스들을 어떤 순서로 입출력 장치를 이용하게 할 것인지에 대한 스케줄러
    • 이는 Disk Scheduler, Printer Scheduler, Mouse Scheduler 등 I/O, 보조기억 장치 스케줄러를 통틀어 가리킨다.
  • I/O Bound Process VS CPU Bound Process
    • 각각 입출력/CPU 연산에 대부분의 시간을 보내는 프로세스인데, 운영체제(Job Scheduler)는 성능을 위해 각자가 너무 오래 쉬지 않게 배합해야 한다.

 

주-보조 교환

  • 서버처럼 여러 사용자가 하나의 메모리를 공유하는 경우 한 사용자가 자리를 비웠을 때 돌아올 때까지 해당 사용자를 위해 메모리를 할당하는 비효율적이다.
  • 따라서 CPU Time 등을 통해 오랫동안 동작이 없는 프로세스는 잠시 HDD로 내려놓고 기존 프로세스에 메모리를 더 할당하는 등의 방식으로 메모리를 더 효율적으로 사용할 수 있다.
  • 그러다 사용자가 돌아오면 다시 HDD에서 메모리로 올리는 작업을 Swapping이라고 한다.
  • Swap out - 메모리에서 HDD로 내리는 작업
  • Swap in - HDD에서 다시 메모리로 올리는 작업
  • 이렇게 임시 메모리처럼 사용되는 HDD 공간을 Backing Store 혹은 Swap Device라고 한다.
    • Swapping 같은 스케줄링 작업은 Long Term 보다는 자주 일어나고 Short Term 보다는 적게 일어나 Midium Term Scheduling이라고 한다.

 

문맥 교환(Context Switching)

  • Context Switching
    • 시간공유 시스템의 경우 기존 프로세스의 작업 시간이 너무 길어지면 선점 스케쥴링을 통해 프로세스를 준비 상태로 만들고 다른 프로세스를 수행 상태로 바꿔 실행한다.
    • 이처럼 실행하는 프로세스를 Switch 하는 작업을 통틀어 Context Switching이라고 한다.
  • Scheduler
    • Context Switching를 전문적으로 담당하는 스케쥴러 - CPU 스케쥴러
  • Dispatcher
    • 작업중이던 프로세스가 사용하던 데이터를 레지스터에 올려놓고, 스위치 할 때 이 데이터들을 보존해야 해당 프로세스가 다시 수행 상태가 됐을 때 작업이 끊기지 않을 것이다.
    • 이러한 작업을 수행하는 프로그램을 Dispatcher라고 한다.

 

프로세스 메모리 구조

  • Code
    • 실행할 프로그램의 코드가 저장되고, CPU가 이 영역에서 명령어를 하나씩 가져와 처리
  • Data
    • 전역변수와 정적변수 저장되고 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸
    • BSS 영역
      • 초기화 된 전역변수는 Data 영역에 저장되어 비휘발성 메모리 ROM에 저장되는데 이 비용이 많이 들어 RAM과 ROM에 저장될 데이터를 구분하기 위해 영역도 구분하여 사용
  • Heap
    • 동적 데이터 영역
    • 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다. 따라서 런타임 때 크기가 결정된다.
    • 자바에서는 객체를 heap 영역에 저장하고 안쓰는 heap 영역을 치우는 GC를 사용해 정리한다.
  • Stack
    • 지역변수, 매개변수, 리턴값 등의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 영역
    • 함수 호출 시 기록하고 수행이 완료되면 사라지는데, 자료구조 Stack과 같은 방식(후입선출)으로 저장/출력된다.
    • 영역의 크기는 컴파일 때 결정되므로 무한정 할당 할 수 없다.
    • 따라서 재귀함수가 반복돼서 호출하거나 지역변수를 메모리가 초과될 정도로 가지고 있다면 stack overflow가 발생

 

커널 프로세스의 메모리

커널
운영체제의 주요 구성요소로서 하드웨어와 프로세스를 잇는 핵심 인터페이스
명령을 즉시 실행할 수 있는 인터프리터 역할이나 시스템의 호출, 보안 등의 기능을 수행
응용 프로그램을 조회해서 강제 종료할 수 있는 기능도 커널의 역할
따라서 하나의 프로세스가 아닌 인터페이스로 취급한다.
  • Code
    • 시스템 콜, 중단 처리 코드
    • 자원 관리를 위한 코드
    • 편리한 인터페이스 제공을 위한 코드
  • Data
    • PCB 자료구조가 저장되어있다.
      • 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조
      • 현재 수행 중인 프로세스의 상태, CPU 사용 정보 등을 유지하기 위한 자료구조
      • OS내부의 Process Management 부서에서 관리되며, PC, Register, MMU 정보, Process의 상태, CPU Time, PID(Process ID)등 많은 정보들이 포함됨
      • 간단히 말해서 운영체제가 프로세스에 대한 정보를 담고있는 구조체
  • Stack
    • 각 프로세스의 커널 스택을 저장
    • 각각의 프로세스마다 별도의 스택을 두어 관리

'TIL > CS' 카테고리의 다른 글

디자인 패턴  (0) 2023.10.11
DBMS의 기능과 종류  (0) 2023.08.30
쓰레드와 쓰레드 풀  (0) 2023.08.24
CPU와 메모리 예상 문답  (0) 2023.08.22
CPU와 메모리  (0) 2023.08.21