프로세스

Kim, Beomgoo·2022년 10월 4일
0

운영체제

목록 보기
1/1

프로그램과 프로세스

  • 프로그램 : 디스크에 저장된 실행할 수 있는 형태의 파일
  • 프로세스 : 프로그램이 main memory에 로드되어 실행되고 있는 것

프로세스의 메모리 영역

  • Text(Code) 영역 : 실행 중인 프로그램의 바이너리(어셈블리)코드
  • Data 영역 : 전역 변수가 저장된다.
  • Stack 영역 : 로컬 데이터 (함수의 파라미터, return address, 지역 변수 등)
  • Heap 영역 : Runtime시 동적으로 할당된 데이터 (C의 malloc(), C++의 new, Java의 Object)

PCB

프로세스는 OS가 관리하는데, 이를 위해 프로세스의 현재 상태를 저장하는 자료 구조를 Process Control Block(PCB)이라고 한다.

PCB의 구성

  • 포인터 : Ready Queue, Waiting Queue의 PCB들을 연결할 때 사용한다.
  • 프로세스 상태
  • PID(Process Identification) : 운영체제가 각 프로세스들을 식별하기 위해 부여한 고유 번호
  • PC(Program Counter) : CPU가 다음으로 실행할 명령어가 저장된 메모리의 주소 값
  • 스케쥴링 우선순위
  • 각종 레지스터값
  • 메모리 관련 정보 : 프로세스의 메모리 위치 정보, memory protection을 위한 경계 레지스터와 한계 레지스터 값, segmentation table과 page table
  • 할당된 자원 정보 (I/O, File 등)
  • 계정 정보
  • PPID(Parent PID), CPID(Child PID)

멀티프로그래밍

하나의 CPU 코어는 한 시점에 하나의 프로세스만 실행 가능하다. OS는 CPU Utilization의 최대화를 위해 context switching을 통해 CPU에서 실행 중인 프로세스를 일정 주기로 교체한다.

Process State

  • new : 프로세스가 생성되는 중이다.
  • ready : 프로세스가 메모리에 로드되어 CPU에 할당될 준비가 되었다.
  • running : CPU가 프로세스를 작업 중이다.
  • waiting : I/O또는 이벤트를 대기 중이다.
  • terminated : 작업이 모두 끝나 종료되었다.

Context Switching

실행 중이던 프로세스의 상태를 저장하고, 대기 중이던 프로세스들(Ready Queue) 중 실행할 다음 프로세스의 저장된 상태를 불러오는 과정

Ready Queue

main memory에서 실행 대기 중인 프로세스들 (Ready 상태)

프로세스 생성과 종료

fork() 시스템 콜을 통해 parent process의 메모리 영역을 복사하고, exec() 시스템 콜을 통해 새로운 프로그램 코드로 이를 대체한다.

IPC

프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로를 Inter Process Communication(IPC)이라고 한다.

Shared Memory(공유 메모리)

  • OS는 Memory Protection을 위해 다른 프로세스들의 메모리 접근을 제한한다.
  • 프로세스 간 통신을 위해 User Memory 영역에 공유 메모리 공간을 설정한다.
  • System Call에 의해 공유 메모리 영역이 생성된 후 사용은 프로세스들이 알아서 처리한다. (커널을 거쳐야 하는 Message Passing보다 속도가 빠르다.)
  • Producer-Consumer Problem, Cache Coherence 등의 가능성이 있으므로 프로세스 간 동기화는 프로세스가 알아서 처리해야 한다.

Message Passing

  • Kernel Memory 영역의 메시지 큐 공간을 이용해 프로세스 간 통신을 한다.
  • send(), receive() 시스템 콜을 이용한다.
  • 동기화는 OS가 제공한다.
profile
하나에 하나를 보탠다

0개의 댓글