[OS] 프로세스 (Process)

🧠·2022년 5월 16일
0

OS

목록 보기
2/5
post-thumbnail

프로세스

실행중인 프로그램을 의미 (program in execution)

운영체제에서 작업의 단위가 된다

프로세스는 다음과 같은 자원들을 필요로 한다

  • CPU time
  • memory
  • files
  • I/O devices

프로세스를 관리하는 것이 OS의 기본이다.


프로세스의 메모리 section

  • Text(Code) Section:
    - 명령어 / 코드
  • Data Section:
    - 전역 변수 (Uninitialized, Initialized 데이터 구분)
  • Heap Section:
    - 프로그램 실행 중 동적으로 할당한 자원
  • Stack Section:
    - 함수 호출 시 (인자, 리턴 주소값, 지역 변수)

프로세스의 생명주기 (Process Lifecycle)

  • New: 프로세스가 생성된 상태
  • Running: 프로세스가 CPU를 점유하여 명령어를 실행하고 있는 상태
  • Waiting: I/O나 이벤트가 완료될 때까지 기다리고 있는 상태
  • Ready: 다른 프로세스가 CPU를 점유하고 있어 할당을 기다리는 상태
  • Terminated: 프로세스가 종료된 상태
  • Suspend: 프로세스가 중지된 상태

프로세스의 상태 전이

  • New -> Ready:
    - 프로세스가 생성되어 PCB 블록이 Ready Queue에 올라오게 됨
  • Ready -> Running:
    - Ready Queue에 있는 프로세스 중 CPU 스케쥴링에 의해 선택받은 프로세스들이 CPU를 할당 받음
  • Running -> Ready:
    - CPU를 할당받아 실행 중인 프로세스가 특정 이유로 다시 CPU를 기다리는 상태로 들어감
    • time out: 정해진 CPU 사용시간이 지나 CPU 반납하게 됨
    • interrupt: CPU 스케쥴링에 의해 우선순위가 높은 프로세스가 들어오게 된다면 CPU를 반납하고 Ready Queue에 들어감
  • Running -> Waiting:
    - 명령어를 수행중인 프로세스가 I/O 작업을 해야될 경우 CPU를 반납하고 I/O 작업이 끝날때 까지 Waiting 상태에 들어감
  • Waiting -> Ready:
    - I/O 작업을 완료한 후 프로세스는 Ready Queue에 들어가게 됨
  • Running -> Terminated:
    - 프로세스 실행이 완료되어 자원을 반납한 상태, 다시 Running 상태에 들어가는 경우는 없음
  • Waiting/Ready -> Suspend:
    - ex) 메모리가 부족하여 Waiting/Ready 상태에 있던 프로세스들이 디스크로 swap되는 경우

PCB (Process Control Block)

하나의 구조체로 선언하여 운영체제가 관리하도록 한다

  • 프로세스 포인터
  • 프로세스 상태
  • Program Counter (다음 실행할 명령어를 가리키고 있다)
  • CPU Register
  • CPU 스케쥴링 정보
  • 메모리 관리 정보
  • 생성한 유저 정보
  • I/O 정보 등...

Register == Context(문맥)

문맥 교환 (Context Switching)

CPU가 하나의 프로세스를 실행하고 있는 상태에서 인터럽트에 의해 다음 우선 순위에 있는 프로세스를 할당해야 될 때 현재 실행중인 프로세스의 상태, 레지스터 값을 저장한 후 새로운 프로세스의 프로세스 상태와 레지스터 값으로 교체하는 작업을 말한다.

이러한 정보들을 담은 문맥들은 PCB에 저장된다.

[인터럽트 요청이 들어오는 경우]

  • I/O 요청 (다른 Interrupt가 일어날 시 문맥교환이 일어나지 않는다. 오직 I/O)
  • Time Out
  • fork()

프로세스는 프로그램이 하나의 thread로 실행된 상태이다.


Time Sharing

프로세스간 CPU 점유를 빈번하게 바꾸는 과정

사용자 입장에서는 동시에 실행되는 것 처럼 보인다.
CPU 스케쥴링이 필요하다

쓰레드 thread

프로세스가 할당 받은 자원을 이용하는 실행 단위
프로세스 안에서 실행되는 여러 흐름 단위

  • 프로세스 내에서 각각 stack만 할당 받고 나머지 자원(code, data, heap)은 공유된다
  • 중복된 자원 활용을 최소화하기 때문에 프로세스를 여러개 실행 시키는 것보다 수행 능력을 향상시킬 수 있다
  • 각각의 쓰레드는 독립적인 작업을 수행하기 때문에 별도의 레지스터 값과 스택을 가진다

멀티 쓰레드 (Multi Thread)

하나의 프로세스에 여러개의 쓰레드로 나누어 서로 자원을 공유하며 작업을 수행하는 것

[장점]

  • 프로세스를 새로 생성하는 것보다 자원을 효율적으로 관리할 수 있다.
  • 자원을 공유하기 때문에 통신 비용이 절감되며 메모리를 효율적으로 사용할 수 있다
  • context switching 비용이 적다

[단점]

  • 여러 개의 쓰레드가 동일한 데이터 공간을 공유하기 때문에 동기화 문제가 발생할 수 있다
  • 하나의 스레드에 문제가 생겼을 때 전체 프로세스가 영향을 받는다

critical section: 임계 구역. 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원을 접근하는 코드의 일부를 말한다

멀티 프로세스 (Multi Process)

하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 다수의 프로세서(CPU)가 각 프로세스를 병렬적으로 처리 하는 것

  • 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 하는 경우 활용
  • IPC를 통해 프로세스간 통신이 이루어진다

[장점]

  • 각 프로세서가 자원을 공유하며 프로세스를 처리하기 때문에 하나의 프로세서가 고장나더라도 작업은 정지되지 않는다
  • 동기화 작업이 필요하지 않다

[단점]

  • 멀티 스레드 방식보다 많은 메모리 공간과 CPU 시간을 차지한다
  • context switching 오버헤드가 발생한다

ex) 여러 사용자가 로그인을 요청하는 상황

  • 하나의 프로세스는 하나의 로그인만 처리할 수 있기 때문에 부모 프로세스가 fork()를 통하여 자식 프로세스를 생성하여 로그인을 동시에 처리한다.
profile
: )

0개의 댓글