티스토리 뷰

CS/OS

프로세스

bool-flower 2022. 8. 8. 19:32

인프런에 무료로 공개되어 있는 주니온님의 운영체제 공룡책 강의 내용을 정리한 글입니다. 수강해보시는 걸 추천드려용

프로세스의 개념


OS의 가장 기본적인 역할은 프로세스를 관리하는 것이다. Storage에 있는 프로그램을 Memory에 load 하면, 실행 중인 프로그램(program in execurtion)이 된다. 이것이 프로세스이다.

 

  • Text section : 실행 가능한 코드를 저장하는 영역, 코드 영역이라고도 함.
  • Data section : 전역 변수를 저장하는 영역
  • Heap section : 프로그래머가 필요에 따라 직접 메모리를 할당하는 영역
  • Stack section : 함수를 호출할 때 파라미터나 반환 주소, 지역 변수 등을 저장하는 영역

프로세스 메모리 구조

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

  • New : 프로세스가 막 생성된 상태
  • Running : 프로세스가 cpu를 점유해서 해당 프로세스의 명령어를 cpu가 실행하는 상태
  • Waiting : 프로세스가 종료되진 않았지만, cpu 점유를 기다리고 있는 상태
  • Ready : ready queue에서 cpu를 점유할 준비가 되어있는 상태
  • Terminated : 프로세스가 종료된 상태

PCB (Process Control Block)

프로세스를 관리하기 위해 프로세스가 가져야 하는 모든 정보를 저장하기 위해 만들어진 구조체

 

  • Process state
  • Program counter
  • CPU registers
  • CPU-scheduling information, Memory-management information... 등등

프로세스를 single thread of execution이라고 하고, 이러한 프로세스를 여러 개 동시에 실행하는 것을 multitasking 또는 multiprocessing이라고 한다. 또한, 프로세스가 여러 개의 쓰레드를 갖게 할 수 있는데 이를 multithreading이라고 한다. 이 때 thread는 프로세스 안의 더 작고 가벼운 프로세스를 의미한다.

 

프로세스 스케쥴링


MultiProgramming의 목적은 동시에 여러 프로세스를 실행시키는 것이다. 이 때 Time Sharing을 하게 되는데, 이를 위해 스케쥴링을 한다.

스케쥴링 큐

실행 중인 프로세스에 I/O가 들어오면 Wating queue로 갔다가 Ready queue로 간다.

Ready queue와 Waiting queue

Queueing Diagram

Context Switch (문맥 교환)

Context란 프로세스가 사용되고 있는 상태라고 볼 수 있다. 이 상태는 PCB에 저장되어 있다. 즉, PCB 정보가 문맥이라고 볼 수 있다. Cotext Switch는 CPU를 다른 프로세스에 넘겨주는 것이다.

 

  • 실행 중인 프로세스 상태를 해당 PCB 저장
  • 다른 프로세스의 상태를 해당 PCB에서 로드

프로세스 운영


프로세스를  실행 시 두 가지 가능성

  • 부모가 자식을 fork 하고 부모와 자식이 동시에 실행되는 경우
  • 부모는 실행하지 않고 자식의 종료를 기다리는 경우

주소-공간 측면에서 두 가지 가능성

따라서 프로세스 공간을 

  • 프로세스가 중복된 메모리 공간을 갖는 경우
  • 따로 메모리 공간을 갖는 경우

좀비와 고아

  • 좀비 프로세스 - 프로세스를 분기 한 뒤 부모 프로세스는 따로 실행하고 있는 경우
  • 고아 프로세스 - 프로세스를 분기한 뒤 부모 프로세스가 종료돼버린 경우

 

프로세스 생성

  • UNIX 기반에서는 fork()라는 시스템 콜을 통해 프로세스 생성
  • 자식 프로세스는 주소 공간을 복사하는 것이다. 이후 둘 다 실행
  • fork 했을 때, 자식 프로세스 id는 0으로 반환

fork 이후

  • 부모 프로세스는 실행을 계속하거나
  • wait() 시스템 콜 통해 자식 프로세스가 종료된 후 interrupt를 걸어주길 기다림

execlp 시스템 콜

  • 전달받은 파라미터를 fork로 생성된 프로세스에 덮어쓰는 명령
  • UNIX 기반 운영 체제에서는 fork로 프로세스를 생성하기 때문에 전혀 다른 일을 하고 싶을 때 사용

'CS > OS' 카테고리의 다른 글

페이징과 스와핑  (0) 2022.08.18
스토리지와 입출력  (0) 2022.08.13
주 메모리  (0) 2022.08.13
프로세스 간 통신(IPC)  (0) 2022.08.08
CPU 스케쥴  (0) 2022.08.07
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday