본문 바로가기

CS지식/운영체제

운영체제 : Process란? (개념, 용어 정리)

프로세스란? 실행 중인 프로그램.

프로그램은 실행 가능한 파일이 메모리로 로드되면 프로세스가 된다.

하나의 프로그램은 여러 개의 프로세서가 될 수 있다.

프로세서가 한개라면 실행중인 프로세스는 한 개 이상 있을 수 없다.

multi-programming의 목적은 CPU utilization을 최대화하기 위하여 항상 어떤 프로세스가 실행되도록 하는 것이다.

 

Process in Main Memory

text section : 프로그램 코드.

Data section : 전역변수

Stack : 함수, return address, 지역변수 등.. 위에서 아래로 내려온다

Heap : 동적 할당 메모리

 

프로세스 상태(Process State)

프로세스는 실행되면서 상태가 변화한다. 

(1) New : 프로세스가 생성 중이다.

(2) Running : 명령어들이 실행되고 있다.

(3) Waiting : 프로세스가 어떤 event가 일어나기를 기다린다.

(4) Ready : 프로세스가 processor에 할당되기를 기다린다.

(5) Terminated : 프로세스의 execution이 종료되었다.

 

  • ready, running, waiting은 실행 중인 상태이다.
  • ready는 CPU 할당 받으면 실행 가능한 상태
  • waiting은 CPU줘도 사용 못하는 상태

while(1) 은 무한히 실행되는 것 같지만, ready와 running 상태를 무한 반복 중인 상태이다.

running → ready : time out interrupt

ready → running : shceduler dispatch

runnig → waiting : I/O 요청 , 혹은 이벤트 발생을 기다림

waiting → ready : I/O와 event가 끝나고 대기 큐에 들어감 (입출력 인터럽트)

 

PCB (Process Control Block)

  • 각 프로세스에 관련된 중요한 정보
  • 메인 메모리에 저장된다.

<PCB에 저장된 내용>

  • Process state - running, waiting
  • Program Counter - 다음에 실행할 명령어의 시작 주소
  • CPU 레지스터
  • CPU 스케줄링 정보 : 프로세스 우선순위, 큐에 대한 포인터
  • Memory 관리 정보 : base register, page table, segment table 등의 정보가 담겨있다.
  • Accounting 정보 : CPU 사용시간, real time used, time limit
  • 입출력 상태 정보 : 해당 프로세스에 할당된 I/O 디바이스 open file 목록 등

Thread

  • CPU 이용의 기본 단위
  • 한 프로세스가 하나 이상의 스레드를 가져 한 번에 하나 이상의 task를 수행할 수 있도록 하는 것.
  • 여러 Thread가 병렬로 수행되는 multi-core system에서 이익을 얻을 수 있다.
  • PCB는 각 Thread에 대한 정보를 포함하도록 한다.

프로세스 스케줄링

  • process scheduler는 CPU에서 실행 가능한 여러 프로세스들 중 한 프로세스를 선택한다.
  • CPU utilization을 최대화하기 위하여 빠르게 프로세스를 교체한다.

스케줄링 큐

  • 프로세스가 시스템에 들어오면 job queue에 들어간다.
  • Ready queue : Ready 상태에서 실행을 대기하는 프로세스들
  • Wait queue : wait 상태에서 이벤트를 기다리는 프로세스들이 들어간다.
  • PCB를 링크드리스트로 연결하여 Queue에 저장되어 있다.

<프로세스가 waiting 하는 이유는 다 다르다. 기다리는 이유 별로 queue를 가지고 있다.>

 

Context Switch (문맥교환)

  • CPU는 하나이고 실행할 프로세스는 여러개이니 문맥교환이 꼭 필요하다.
  • 문맥교환 시간은 오버헤드(간접적인 처리 시간)다. 시스템은 문맥교환하는 동안 일을 제대로 하지 못함

문맥 교환 시, running 하던 프로세스의 상태 정보를 PCB에 저장하고, 실행할 프로세스의 PCB를 로드한다.

 

모바일 시스템에서의 멀티테스킹 : user interface에 의해 제어되는 process는 foreground process. 메모리에 있고 실행 중이지만 화면에 보이지 않는 프로세스는 background process.

 

프로세스 생성

  1. OS kernel 내부에 PCB를 생성한다
  2. 메모리 공간을 할당한다.
  3. binary 프로그램을 로드한다. (.exe)
  4. 프로그램을 초기화한다.

(프로그램이 실행할 때 메모리에 있는 프로그램의 시작 주소를 PC에 저장한다!)

 

부모 프로세스 and 자식 프로세스

Create

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

 

자원 공유 옵션

  1. 부모와 자식은 모든 자원을 공유한다
  2. 자식은 부모의 자원 일부를 공유한다
  3. 부모와 자식을 자원을 공유하지 않는다.

실행 옵션

  1. 부모와 자식 동시 실행
  2. 부모는 자식 프로세스가 죽기를 기다린다.

주소 공간

  1. 자식 프로세스가 부모 프로세스를 복제한다. code, heap, data, stack이 동일 (pid는 당연히 다름)
  2. 자식 프로세스는 새로 로드된다.

fork()

  • fork를 실행하는 순간 하나가 더 복사된다.
  • return이 두 군데서 일어난다.
    • 부모의 return 값 = 자식의 pid 즉 > 0
    • 자식의 return 값 = 0
  • init 최초의 프로세스 pid = 1
  • 보통 자식 프로세스 pid = 부모 pid + 1
  • ppid는 프로세스의 부모 프로세스 pid 값을 나타냄
  • 부모 프로세스는 자식 프로세스가 종료될 때 까지 wait 한다.
    • wait는 자식 프로세스가 정상 종료하면 종료된 자식의 pid를 반환, 비정상 종료 시 -1을 반환

Termination

  • 보통 OS 는 부모프로세스가 죽었을 때 자식프로세스가 살아 있는 것을 불허한다. 부모가 죽는 순간 자식 프로세스 다 죽임
  • 자식이 먼저 exit 하고 부모가 wait해서 끝나지 않는 프로세스 → 좀비프로세스
  • 부모 프로세스가 wait를 호출하지 않고 종료해버린 프로세스 → 고아 프로세스
    • 고아 프로세스는 ppid = 1로 바꾸어 init 프로세스를 새로운 부모 프로세스로 지정한다.

멀티프로세스 구조 - 크롬 브라우저

만약 크롬이 싱글 프로세스로 운영되었다면? - 한 사이트가 먹통이 되면 모든 작업이 망가진다!

  • Browser process 는 유저 인터페이스, 디스크, 네트워크 I/O를 관리함
  • Renderer process는 각 오픈된 탭마다 별도로 생성된다.

프로세스 간 통신(IPC)

Independent process는 서로 실행에 영향을 주지 않는다. 하지만 Cooperation process는 서로 협조하는 프로세스이다. 따라서 IPC ( Interprocess communication)이 필요하다.

Shared memory

공유 가능한 별도의 메모리공간. 효율적이다.

  • (원래 프로세스는 다른 프로세스의 메모리에 접근할 수 없다)

Message Passing

메세지 큐를 통해 통신한다. 보안상 좋다. 그러나 많은 데이터를 주고 받을 때 비효율적임. 

메세지 전달 시스템에서 사

  • Direct Communication
    • 프로세스 간에 서로의 이름을 명시적으로 지정해야 한다.
  • Indirect Communication
    • 메세지가 메일 박스를 통해 전달된다.

동기화 Synchronization

  • 동시에 여러 개의 프로세스가 동일한 데이터에 접근하여 조작하고, 그 실행 결과가 접근이 발생한 특정 순서에 의존하는 상황을 경쟁 상황이라고 한다. -> 이러한 경쟁 상태를 해결하고 공유자원의 일관성을 유지하기 위해 동기화가 필요함
  • Blocking은 동기화를 고려한다. 요구가 만족될 때 까지 블로킹함
  • Non-blocking은 동기화를 고려하지 않음. ex ) email

Buffering

  1. 무용량(zero capacity) - 큐의 최대 길이가 0이다. 이 경우 sender는 reciever가 메세지를 수신할 때 까지 기다려야 한다
  2. 유한 용량(bounded capacity) - 큐는 유한한 길이 n을 가진다. 큐가 꽉 찼을 때 sender는 큐가 이용 가능할 때 까지 blocking 된다.
  3. 무한 용량 (unbounded capacity) - 큐는 무한한 길이를 가지며, sender는 어느 경우에도 blocking되지 않는다.

'CS지식 > 운영체제' 카테고리의 다른 글

운영체제 : Synchronization  (0) 2023.09.23
운영체제 : CPU 스케줄링 간단 정리  (0) 2023.09.23
운영체제 : Thread 란?  (0) 2023.09.23
OS 구조  (0) 2023.09.23
OS가 하는 일  (0) 2023.09.23