반응형


운영체제 2탄 프로세스 영역입니다.

면접 부분에서 오히려 더 자주 나오는 파트이기도 한 것 같습니다.


프로세스란?

  • 컴퓨터에서 실행되고 있는 프로그램들은 모두 프로세스
  • 운영체제 프로세스와 사용자 프로세스로 분류
  • 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받음
  • 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있음
  • 각 프로세스는 별도의 주소 공간에서 실행, 한 프로세스는 다른 프로세스의 변수나 자료구조에 직접 접근 불가
  • 다른 프로세스의 자원에 접근하려면 IPC(Inter-Process Communication)을 사용해야 함
    (파이프, 파일, 소켓 등을 이용한 통신 방법)

프로세스 메모리 구조

  • 코드 영역 : 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 함
    CPU는 코드 영역에 저장된 명령어를 하나씩 처리
  • 데이터 영역 : 메모리의 데이터 영역은 프로그램의 전역 변수와 정적변수가 저장되는 영역
    프로그램 시작과 함꼐 할당되고, 종료되면 소멸
  • 힙 영역 : 사용자가 직접 관리할 수 있고, 관리 해야만 하는 메모리 영역
    사용자에 의해 동적으로 할당되고 해제됨
    낮은 주소에서 높은 주소의 방향으로 할당
  • 스택 영역 : 함수의 호출과 관련된 지역 변수와 매개변수가 저장
    함수의 호출과 함께 할당, 함수 호출 완료 후 소멸
    스택 영역에 저장되는 함수 호출 정보를 스택 프레임이라고 함

 

Thread란?

  • CPU 사용의 기본 단위
  • 프로세스 내에서 실행되는 여러 흐름의 단위
  • Thread ID, PC, 레지스터 세트 및 스택으로 구성
  • Thread는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유
  • 한Thread가 프로세스 자원을 변경하면 다른 Thread도 그 결과가 반영됨

Thread vs Process

  • 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위
  • 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 프로세스는 운영체제로부터 독립된 메모리, 주소 공간을 할당받음
  • 스레드는 할당받은 자원들을 내부 스레드끼리 공유하며 실행
  • 스레드는 일종의 경량화된 프로세스 개념
  • 스레드간의 자원 공유는 전역 변수를 이용하므로, 동기화 문제에 주의 필요

멀티쓰레딩의 특징

  • 하나의 프로세스를 다수의 스레드를 통해 실행하는 것
  • 하나의 프로세스 내에 다수의 실행 단위가 존재하여, 작업의 수행에 필요한 자원을 공유하기 때문에 자원의 생성과 관리가 중복되는 것을 방지
  • 교착 상태(DeadLock) 발생 가능, 동기화 주의 필요
  • 프로세스 간의 통신 IPC보다 효율적으로 통신이 가능, Context Switch 속도 빠름(Stack만 처리하므로)

멀티프로세싱 VS 멀티프로그래밍

  • 멀티프로세싱은 여러 개의 처리장치를 장착하여 동시에 여러 작업을 병렬로 실행하는 방법
  • 멀티프로그래밍은 다수 개의 프로그램이 같이 주기억장치에 있도록 한 방식

프로세스의 상태

  • 생성(New) : 프로세스가 막 생성된 상태
  • 준비(Ready) : 프로세스가 CPU에 실행되기 위해 대기하는 상태
  • 실행(Running) : 프로세스에 포함된 명령어가 CPU에서 실행되고 있는 상태
  • 대기(Waiting) : 프로세스가 특정 자원이나 이벤트를 기다리고 있는 상태
  • 종료(Terminated) : 프로세스가 실행을 완료한 상태

프로세스 상태 전이 동작


PCB(Process Control Block)

  • PCB는 특정한 프로세스를 관리할 때 필요한 정보를 저장하는 운영체제 커널의 자료구조
  • 프로세스가 생성될 때마다 고유의 PCB 생성

 

 

반응형

'IT > CS지식[면접대비]' 카테고리의 다른 글

[면접대비 CS지식] 운영체제 - 일반  (2) 2020.12.21
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,