Process

Process란 ?

실행중인 프로그램입니다. 메모리에 적재되어 CPU 할당을 받을 수 있습니다.

Context란 ?

CPU 수행상태를 나타내는 하드웨어 문맥입니다.

프로세스의 상태 (Process State) 란 ?

프로세스는 상태가 변경되며 수행됩니다.

  1. Running
    CPU를 잡고 instruction을 수행중인 상태입니다.
  2. Ready
    메모리 등 다른 조건을 모두 만족하고 CPU를 기다리는 상태 입니다.
  3. Blocked (wait, sleep)
    CPU를 주어도 당장 instruction을 수행할 수 없는 상태입니다. 프로세스 자신이 요청한 event(io같은거) 가 만족되지않아 이를 기다리는 상태입니다. 자신이 요청한 event 만족되면 ready 상태가 됩니다.
  4. New
    프로세스가 생성중인 상태입니다.
  5. Terminated
    execution이 끝난 상태입니다.
  6. Suspended (stopped)
    프로세스가 통째로 메모리에서 쫓겨난 상태입니다. 디스크에 swap out 됩니다. 외부에서 resume해 주어야 active가 됩니다.

PCB란 ?

운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보입니다. 프로세스는 CPU 를 할당받아 작업을 처리하다가도 프로세스 전환이 발생하면 진행하던 작업을 저장하고 CPU 를 반환해야 하는데, 이때 작업의 진행 상황을 모두 PCB 에 저장하게 됩니다.

  1. OS가 관리상 사용하는 부분
  2. CPU 수행 관련 하드웨어 값
  3. 메모리 관련
  4. 파일 관련

문맥 교환이 뭔가요?

CPU를 한 프로세스에서 다른 프로세스로 넘겨누는 과정입니다.

system call이나 interrupt 발생시 항상 문맥교환이 일어납니까?

system call이나 interrupt 발생시 context switch가 반드시 일어나는 것은 아닙니다. 프로세스 A가 CPU를 잡고 있다가, interrupt 가 걸리거나, system call을 하게되어 user mode에서 kernel mode에 갔다가, 다시 사용자 프로세스 A가 CPU를 잡게 되면 문맥교환이 일어나지 않습니다.

프로세스 스케쥴링 큐의 모습은 ?

스케쥴러란 ?
  1. Long-term scheduler (job scheduler)
    메모리를 어떤 프로세스에게 줄지 결정합니다. 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정합니다.

  2. Short-term scheduler (cpu scheduler)
    어떤 프로세스에게 cpu를 줄지 결정합니다. 어떤 프로세스를 다음번에 running시킬지 결정합니다.

  3. Medum-term scheduler (swapper)
    메모리에 많은 프로그램이 올라가있으면 일부를 골라서 쫓아냅니다. 프로세스에게서 메모리를 뺏는 문제입니다.

Thread 란 ?

프로세스의 내부의 CPU 수행단위입니다. 스레드는 스레드 ID, PC, register set, 그리고 stack으로 구성됩니다. 같은 프로세스에 속한 다른 스레드와 code seciton, data section, 그리고 OS resource를 공유합니다.

왜 스레드마다 스택을 독립적으로 가지고 있나요?

스레드는 독립적인 실행 흐름이기 때문입니다.

함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간인 스택을 독립적으로 가지고 있어야 합니다.

왜 스레드마다 PC 레지스터를 독립적으로 가지고 있나요?

스레드가 CPU를 할당받았다가 스케쥴러에 의해 CPU를 빼앗기면, 어느 부분까지 수행되었는지 기억할 필요가 있기 때문에 PC 레지스터를 독립적으로 가지고 있어야 합니다.

멀티스레딩이 무엇인가요?

하나의 프로세스를 다수의 실행 단위로 구분하여, 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여, 수행 능력을 향상 시키는 것입니다.

멀티스레딩의 장점은 무엇인가요?

Responsiveness와 Resource Sharing 이 뛰어나며, 스레드 간 통신 방법이 간단합니다.

  1. Responsiveness가 좋습니다.
    한 스레드가 blocked 되어도, 다른 스레드는 continue 가능합니다
  2. Resource Sharing 이 가능합니다.
    n개의 스레드는 프로세스의 코드 영역, 데이터 영역 그리고 자원을 공유합니다.
  3. 프로세스 간 통신 방법에 비해 스레드 간 통신 방법이 간단합니다.
    별도의 자원을 이용하지 않고 전역 변수의 공간, 또는 동적으로 할당된 공간인 Heap 영역을 이용해 데이터를 주고 받을 수 있습니다.
멀티스레딩의 단점은 무엇인가요?

동기화 작업이 필요합니다. 서로 다른 스레드가 data 영역과 heap 영역을 공유하기 때문입니다.

reference

이화여자대학교 반효경 (http://www.kocw.net/home/search/kemView.do?kemId=1046323)

Comments