본문 바로가기
개발자 도전기/[OS] 운영체제 개념 익히기

운영체제(Operating System) | 프로세스 관리

by 답수 2021. 9. 28.
728x90
반응형

 

 

작업 관리자에서 볼 수 있는 프로세스들

 

전 장에서 프로세스는 실행 중인 프로그램이라고 했다. 이번 글에서는 프로세스에 대해 더 자세하게 정리하려고 한다.

 

 

1. 프로세스 정의

프로세스는 실행 중인 프로그램으로, 커널에 등록되고 커널이 관리하는 작업이다. 프로세스는 각종 자원들을 요청하고 할당 받을 수 있는 개체(entity)이며, 실행 중에도 각종 자원을 요구하고 할당, 반납이 진행된다(active entity).

* 자원(Resource)?
커널의 관리 하에 프로세스에게 할당/반납 되는 수동적 개체(passive entity)
하드웨어 자원: CPU, memory, 모니터, 키보드 등
소프트웨어 자원: 메시지, 시그널, 파일 등

 

* cf) Job vs Process

프로세스 이전에 작업(Job)이라는 개념이 있다. Job은 실행할 프로그램 + 데이터를 의미하며, 컴퓨터 시스템에 실행 요청 전의 상태를 말한다. 즉 커널에 등록되지 않은 프로그램은 Job이고 커널에 의해 관리된 프로그램은 프로세스다.

 

Job과 Process

 

 

2. Process Control Block (PCB)

PCB는 운영체제가 프로세스 관리에 필요한 정보를 저장한 블록이다. PCB는 프로세스가 생성될 때 커널에 생성된다.

 

 

PCB가 관리하는 정보는 이렇다.

  • PID(Process Identification Number): 프로세스 고유 식별 번호
  • 스케줄링 정보: 프로세스 우선순위 등과 같은 스케줄링 관련 정보들(스케줄링에 대해서 차후에 정리하자)
  • 프로세스 상태: 자원 할당, 요청 정보 등
  • 메모리 관리 정보: Page table, Segment table 등
  • 입출력 상태 정보: 할당 받은 입출력 장치, 파일 등에 대한 정보 등
  • 문맥 저장 영역(context save area): 프로세스의 레지스터 상태를 저장하는 공간 등
  • 계정 정보: 자원 사용 시간 등 관리

PCB 정보는 OS별로 서로 다르며 PCB 참조 및 갱신 속도는 OS의 성능을 결정 짓는 중요한 요소 중 하나이다.

 

 

3. 프로세스 상태(Process States)

프로세스의 상태는 자원의 할당 상태에 의해 결정된다.

 

Process state transition diagram

 

| Created state

  • 작업(Job)을 커널에 등록
  • PCB 할당 및 프로세스 생성
  • 이 때, 커널은 가용 메모리 공간을 체크하고 프로세스 상태를 전이시킨다.
    (메모리가 할당되었다면 ready state, 아니라면 suspended ready state)

| Ready state

  • 프로세서(CPU) 외에 다른 모든 자원을 할당 받은 상태: 프로세서 할당을 대기하는 상태이며, CPU 할당 시 즉시 실행 가능하다.
  • Dispatch(Schedule)
    - Ready state -> Running state

| Running state

  • 프로세서와 필요한 자원을 모두 할당 받은 상태
  • Preemption(선점, 즉 다른 프로세스가 빼앗음)
    - Running state -> Ready state
    - 프로세서 스케줄링에 의해(쉽게 말해 성능을 위해서 뒤에 기다리고 있는 프로세스, 혹은 중요한 프로세스가 프로세서 이용)
  • Block/Sleep
    - Running state -> Asleep state
    - I/O 등 자원 할당 요청이 있을 때

| Blocked/Asleep state

  • 프로세서 외에 다른 자원을 기다리는 상태(자원 할당은 system call에 의해 이루어진다)
  • Wake-up
    - Asleep state -> Ready state (자원을 할당 받은 프로세스는 바로 running으로 가는 것이 아니라, 다시 ready 상태로 간다)

| Suspended state

  • 메모리를 할당 받지 못한(빼앗긴) 상태
    - Memory image를 swap device에 보관
    - 커널 또는 사용자에 의해 발생
  • Swap-out(suspended): memory image를 swap device에 임시 저장
  • Swap-in(resume): meomory image가 다시 사용될 때, swap device에서 다시 메모리에 올림
* swap device
프로그램 정보 저장을 위한 특별한 파일 시스템. disk에 보관되어 있음

| Terminated/Zombie state

  • 프로세스 수행이 끝난 상태
  • 모든 자원을 반납
  • 커널 내 일부 PCB 정보만 남아 있는 상태(이후 프로세스 관리를 위해 정보 수집)

프로세스의 상태를 표로 정리하면 이렇다.

 

 

 

4. 인터럽트(Interrupt)

인터럽트는 예상치 못한, 외부에서 발생한 이벤트를 말한다. 인터럽트의 처리 과정은 아래 그림과 같다.

 

 

 

5. Contexts switching(문맥 교환)

| Context

프로세스와 관련된 정보들의 집합

 

| Context saving

현재 프로세스의 Register context를 저장하는 작업

  • CPU register context -> in CPU
  • Code & data, stack, PCB -> in memory

 

| Context restoring

Register context를 프로세스로 복구하는 작업

 

| Context switching

실행 중인 프로세스의 context를 저장하고, 앞으로 실행할 프로세스의 context를 복구하는 일(커널의 개입으로 이루어짐)

 

Context switching이 자주 일어나게 되면 OS의 성능에 큰 영향을 준다(CPU가 여러 프로세스들 자주 옮기면 안 좋음). 이렇게 콘텍스트 스위칭에 소요되는 비용을 Context switch overhead라고 한다. 불필요한 context switching을 줄이는 것이 컴퓨터 성능 향상을 위해 중요하다. 이를 해결하기 위한 방법으로 스레드(Thread) 사용 등이 있다. 스레드에 대해 다음 포스팅에 정리하도록 하겠다.

728x90
반응형

댓글