Notice
Recent Posts
Recent Comments
Link
관리 메뉴

look-forest

프로세스의 이해 본문

Computer Science/Operating System

프로세스의 이해

studyHub 2021. 6. 6. 17:24

Process Concept

프로세스는

- 실행 중인 프로그램.

- 작업의 단위로, OS가 관리한다.

- CPU와 Memory, Resource(file, I/O device 등)이 필요하다.

 

프로세스가 차지하는 메모리 레이아웃

Layout of a process in memory

  • Text section: 코드
  • Data section: 전역 변수 등
  • Heap section: 동적 할당
  • Stack section: 함수 호출 시 할당되는 임시 데이터 저장소. 함수의 파라미터, 지역 변수, return address 등 저장

예)

각 line을 실행하면 어떤 영역에 할당되는지 생각해보자

 

 

프로세스의 생명 주기와 상태

프로세스를 관리하려면 프로세스의 생명 주기와 상태를 알아야 한다.

  • New: 프로세스가 생성됨
  • Running: 명령어가 실행 중
  • Waiting: I/O 작업 완료 등 이벤트가 발생하길 기다림
  • Ready: CPU에게 할당되길 기다림
  • Terminated: 프로세스 종료
Ready는 준비가 된 것이고, Waiting은 기다리는 것이다.
Waiting 상태에서 조건이 갖춰지면 Ready 상태가 된다.

Diagram of process state

 

PCB (Process Control Block)

프로세스 관리를 위한 정보를 담고 있는 구조체

  • Process state
  • Program counter (실행해야 할 명령어 주소)
  • CPU registers (IR, DR 등 context)
  • CPU-scheduling information
  • Memory-management information (동적 할당을 얼마나 했는지 등)
  • Accounting information (사용자 계정)
  • I/O status information (어떤 자원을 open했고 lock을 걸어놨는지)

 

Process Scheduling

멀티프로세싱의 목적은 여러 프로세스를 동시에 실행하고 CPU 이용률을 극대화하는 것이다.

이를 위해 time sharing을 하여 짧은 주기로 CPU core를 차지하는 프로세스를 바꾸면 된다.

멀티프로세싱(멀티태스킹)을 위해서는 PCB를 바꾸면 된다. (PC 등이 바뀌므로)

thread는 lightweight process로, 현재는 멀티프로세싱보다 장점이 많은 멀티스레딩이 대세이다.

Scheduling Queues

프로세스들은 CPU core를 할당받기 위해 ready queue에서 대기한다.

프로세스들은 wait queue에서 이벤트가 발생하길 기다린다.

Queueing-diagram representation of process scheduling

이러한 queue들은 PCB의 linked list로 구현된다.

wait queue는 같은 입출력을 요구한 프로세스끼리 모아 놓는다.

 

다중 큐: queue는 우선순위 별로 따로 운영된다.

Context Switch

  1. CPU 스케줄러가 프로세스에게 CPU를 배정해 주기 위해 문맥을 교환한다 
    context: PC, CPU register 등 프로세스를 이어 실행하기 위한 정보

  2. Context 정보는 Process Control Block에 저장하고, PCB로부터 로드한다
    즉, CPU 레지스터에 PCB를 바꿈으로써 Context Switch가 일어난다

  3. 주어진 시간(타임 슬라이스)  사용하거나 인터럽트 걸렸을  발생한다
    interrupt가 발생하면, OS는 현재 실행 중인 프로세스의 context를 저장하고, 다음 프로세스의 context를 로드한다

Diagram showing context switch from process to process

 

 

프로세스의 계층 구조

프로세스는 자식 프로세스를 생성할 수 있다.

 프로세스 계층 구조는 동시에 여러 작업을 처리하고, 종료된 프로세스의 자원을 회수하는데 유용하다.

A tree of processes on a typical Linux system

 

프로세스의 생성

fork()를 통해 자식 프로세스를 생성하고, 자식 프로세스는 부모 프로세스의 메모리 영역을 복사한다.

메모리가 공유되는게 아니다. 프로세스끼리는 독립적이다.

PCB에 부모, 자식의 PID가 기록되고 PC 등은 그대로 이어받는다.

자식은 새로운 메모리 공간을 할당받되, 내용은 부모의 것을 그대로 복사한다.

프로세스 복사의 이점

  • 하드디스크로부터 프로그램 가져오지 않고 메모리에서 복사하므로 프로세스 생성 속도가 빠르다.
  • 추가 작업 없이 부모가 사용하던 자원을 상속  있다.
  • 구분자로 연결되어 있어, 자식이 사용하던 자원을 부모 프로세스에게 맡겨 정리함으로써 시스템 관리가 효율적

이러한 이점을 활용하기 위해 fork()로 복사 후 exec()로 전환한다.

코드 영역은 교체되고, 데이터, 스택 영역은 리셋된다.

자식은 fork()된 후 execlp()로 덮어쓰기 때문에 "LINE J"는 출력되지 않는다

 

자식 프로세스를 생성하면,

- 부모 프로세스는 자식과 concurrently하게 실행할 수도 있고,

- 자식 프로세스가 끝날 때까지 기다릴 수도 있다.

Process creation using the fork() system call

 

 

Zombie and Orphan: 자원 낭비의 원인
zombie process: 자식 프로세스가 종료되었으나, 부모 프로젝트에서 wait()를 호출하지 않아 정리 X
orphan process: 부모 프로세스가 wait()하지 않고 terminated 되어버림

※ return(), exit(): 자식 프로세스가 끝났음을 부모에게 알려 자원 정리나 동기화하게 함
※ wait(): 부모 프로세스가 자식 프로세스가 끝날때까지 기다림

 

 

 


참고 자료 & 이미지 출처
운영체제 공룡책 강의 (주니온 님)
Operating System Concepts, 10th Ed (Silberschatz et al)
쉽게 배우는 운영체제 (조성호 님)

 

'Computer Science > Operating System' 카테고리의 다른 글

Critical Section Problem: 프로세스 동기화가 필요한 상황  (0) 2021.06.09
CPU Scheduling  (0) 2021.06.08
Thread  (0) 2021.06.07
프로세스 간 통신 : IPC  (0) 2021.06.06
OS 란?  (0) 2021.06.05