Process

이준희·2022년 7월 5일
0

OS

목록 보기
1/6
post-thumbnail

Process

Virtualization(가상화)

resource가 하나이고 사용자도 하나라면, resource를 사용하는데 문제가 발생하지 않는다.

하지만, resource는 하나인데 사용자가 여러명이라면? -> 이런 경우에 사용하는 것이 가상화(Virtualization)이다!

Process

CPU를 공유하기 위해 만든 개념

Running a Process

image

CPU는 PC(Programm Counter)로 다음 명령어를 찾고, Decode하고, 실행한 뒤, PC를 업데이트 하는 방법을 반복해서 Process를 실행한다

Running Multiple Processes

image

그렇다면 여러개의 Process를 동시에 하려면 어떻게 해야 할까? -> 간단하다. 여러개의 CPU가 있으면 된다. 하지만, 이 방법은 불가능하다

Interleaving Multiple Processes

image

또 다른 방법은 번갈아가며 조금씩 실행하는 방법이다.

이 방법이 가능하려면, 각각의 코드들끼리 위치를 알고 있어야 한다. 하지만, 이 방법은 가상화가 아니다(가상화는 서로의 위치를 몰라도 된다)

Virtualizing the CPU

image

현대의 운영체제 방법이다! 일정시간 수행하다가 OS가 CPU를 뺏어온 뒤, 다른 Process에게 넘겨준다. 이 방식을 빠르게 반복하면, 각각의 Process들은 CPU를 독점중이라고 생각하게 된다.

Process란?

  • 실행중인 Program의 instance이다.
  • Java에 비교하자면 class는 program, Object는 process에 해당한다
  • 각각의 Process는 각각의 PID를 가진다
  • Process includes
    • CPU context(registers)
    • OS resources(address space, open files)
    • Other Information(PID, state, owner)

Process Hierarchy

  • 하나의 Process는 다른 Process를 만들 수 있다
  • Unix에서는 hierarchy를 "process group"이라고 한다
  • Window는 부모-자식 Process Hierarchy의 개념이 없다

Process Creation

  1. 프로그램 코드를 메모리로 읽어온다 -> 요즘은 프로그램의 크기가 너무 커졌고, 동시에 돌아가는 것들이 많아서 필요한 코드만 실시간으로 메모리에 올린다
  2. 프로그램에 스택이 할당된다
  3. Heap이 생성된다 -> 동적 메모리. List나 Hashtable, tree 등이 해당된다
  4. 입출력이 초기화 된다
  5. 프로그램의 시작점(main)으로 가서 실행된다

Unix에서의 Process Creation

  • fork()

    • 기존의 Process를 복제해서 새로운 Process를 만듬
    • 대부분의 것을 상속받음
    • Parent는 원한다면 Child가 종료할 때까지 wait()을 사용해서 기다릴 수 있음
    • shell이나 GUI는 fork()를 이용함
    • return이 2번
  • exec()

    • 현재 Process 이미지를 교체함
    • return을 따로 하지 않음

Process States

  • Process의 상태에는 3가지가 있다
    • Running
      • 현재 CPU에서 실행중인 Process
    • Ready
      • 실행할 준비가 끝나고, CPU를 기다리는 상태
    • Blocked
      • 무언가를 기다려야 할 때(I/O 등)

image

Process State Queues

  • Ready queue : 준비 완료된 것을 ready-queue에 넣고 우선순위에 따라 선택한다
  • Wait queue : 입력이나 event를 기다리는 block된 것들을 넣는다

Process Termination

  • Normal exit : 일반적으로 return을 받았을 때 종료
  • Error exit : 에러가 났을 때 종료
  • Fatal exit : 문제가 생겼을 때의 강제 종료(segmentation fault 등)
  • Killed by another process : 다른 프로세스에서의 종료(리눅스에서의 ctrl+c)
  • Zombie process : 종료는 되었지만, 완전히 제거되지 않은 경우

Implementing Processes

  • PCB(Process Control Block) : 프로세스의 정보를 모아놓은 자료구조이다. 다음과 같은 정보들이 있다
    • CPU registers
    • PID, PPID, process group, priority, process state, signals
    • CPU scheduling information
    • Memory management information
    • Accounting information
    • File management information
    • I/O status information
    • Credentials

Context Switch

  • Process 사이의 이동이다
  • 추가시간이 발생한다
    • 실행중이던 Process를 저장하고, 실행할 process를 복구할 시간
    • 메모리 캐시를 reloading할 시간
    • 동적 메모리를 다시 할당할 시간
  • 초당 수백 ~ 수천번씩 발생한다
profile
뉴비 개발자입니다!!

1개의 댓글

comment-user-thumbnail
2022년 7월 8일

잘보고 갑니다^^

답글 달기