프로세스

1. 프로세스의 개념

Untitled

  • 프로세스의 문맥 : 프로세스의 현재 상태를 나타내는데 필요한 모든 요소
    • CPU 수행 상태를 나타내는 하드웨어 문맥 - Program Counter, 각종 register
    • 프로세스의 주소 공간 : code, data,stack
    • 프로세스 관련 커널 자료 구조 : PCB(Process Control Block), Kernel stack
  • 프로세스가 번갈아가며 실행되기 때문에 다음번 CPU를 점유했을 때 작업을 이어서 실행하기 위해서는 프로세스 문맥이 필요하다

프로세스의 상태

Untitled

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

  • Running : CPU를 잡고 instruction을 수행중인 상태
  • Ready : 메모리 등 다른 조건을 만족하고 CPU를 기다리는 상태
  • Blocked(wait, sleep) : CPU를 주어도 당장 instruction을 수행할 수 없는 상태, Process 자신이 요청한 event(I/O)가 즉시 만족되지 않아 이를 기다리를 상태 ex) 디스크에서 file을 읽어와야 하는 경우
  • New : 프로세스가 생성중인 상태
  • Terminated : 수행이 끝난 상태

Untitled

하나의 프로세스만 CPU에서 수행됨. timer interrupt가 들어오면 다음 프로세스가 CPU 점유.

Queue!!

Process Control Block(PCB)

운영체제가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 정보.

Untitled

1) OS가 관리상 사용하는 정보

  • Process state, Process ID
  • schekduling information, priority

2) CPU 수행 관련 하드웨어 값

  • Program counter, registers

3) 메모리 관련

  • code, stack, data의 위치정보

4) 파일 관련

  • open file descriptors

문맥 교환(Context Switch)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행한다
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 PCB를 읽어옴

Untitled

  • system call이나 interrupt 발생시 반드시 context switch가 일어나는 것은 아니다

Untitled

사용자 프로세스 간에 CPU가 넘어갈 때 context switch가 일어남.

system call이나 interrupt가 발생하면 운영체제로 CPU로 넘어감 → 이건 context switch가 아님!

2. 프로세스 스케줄링

프로세스를 스케줄링하기 위한 큐

프로세스들은 각 큐들을 오가며 수행된다.

  • Job Queue : 현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready Queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device Queues : I/O device의 처리를 기다리는 프로세스의 집합

스케줄러

  • CPU scheduler=Short-term scheduler : 프로세스에 CPU를 주는 문제, 어떤 프로세스를 다음번에 running 시킬지 결정,충분히 빨라야함
  • Job scheduler = Long-term scheduler : 프로세스에 메모리를 주는 문제, 프로세스시작(new)→ 메모리에 올라가면 ready 상태가 됨, 시작 프로세스 중 어떤 것들을 ready queue(메모리)로 보낼지 결정, degree of Multiprogramming(메모리에 올라가는 프로세스 수)을 제어. time sharing system에는 보통 장기 스케줄러가 없고 무조건 ready 상태임.
  • Swapper = Medium-term Scheduler : 요즘 시스템은 프로그램이 시작되자마자 메모리를 줌. 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄, 프로세스에게서 memory를 뺏는 문제, degree of Multiprogramming을 제어 → 프로세스를 Suspended 상태로 만듦!!!

Untitled

3. Thread 쓰레드

프로세스 내부의 CPU 수행단위. 프로세스하나에서 공유할 수 있는 건 최대한 공유(PCB, 메모리의 data,code), 별로도

Untitled

Untitled

  • 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked 상태인 동안에도 동일한 태스크 내의다른 스레드가 실행(running)되어 빠른 처리를 할 수 있다.
  • 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다.
  • 스레드를 사용하면 병렬성을 높일 수 있다.

Thread의 구성

  • program counter
  • register set
  • stackspace

Thread가 동료 thread와 공유하는 부분(=task)

  • code section
  • data section
  • OS resources

스레드의 장점

  • 응답성 : 스레드를 여러개 가지고 있으면 하나의 스레드가 blocked 상태일 때 (예 - 네트워크 통신) 다른 스레드가 동작한다(예 - 화면 보여주기)
  • 자원 공유 : 같은 일을 하는 프로그램이 여러 개 있을 때 여러 프로세스를 쓰는 것보다는 하나의 프로세스를 만들고 CPU 수행단위를 여러개를 만들어 code, data, 프로세스 resource를 공유하면 자원을 더 효율적으로 사용할 수 있다.
  • 경제성 : 스레드의 create & CPU swithing이 프로세스의 그것보다 오버헤드가 적음
    프로세스를 하나 만드는 것이 프로세스 내부에서 스레드를 만드는 것 보다 오버헤드가 더 큼, 문맥교환(프로세스 간 cpu 점유 이동) 프로세스 내부에서 스레드 내 CPU swithing이 context switch보다 오버헤드가 작음

스레드 구현 방법

  • Kernerl Thread : kernel 방식 - 스레드가 여러개 있다는 사실을 운영체제 커널이 알고 있다. 스레드를 넘길 때 커널이 관여한다
  • User Thread : library 방식 - 운영체제는 스레드가 여러개라는 걸 모르고, 사용자 프로그램이 자체적으로 스레드를 관리함.

4. 프로세스 관리

프로세스 생성

  • 부모 프로세스(Parent process)가 자식 프로세스(children process) 생성 - 복제
    • Copy on Write(COW) : 효율적인 운영ㅊ제에서는 PCB 정도만 복제하고, 우선 자원을 공유한다. 내용이 바뀔 때만 복제를 함.
  • 프로세스의 트리(계층 구조) 형성
  • 프로세스가 실행되려면 자원(cpu, memory,..)이 필요하다
    • 운영 체제로부터 받는다
    • 부모와 공유한다
  • 주소 공간(Address space)
    • 자식은 부모의 공간을 복사함(binarhy and OS data - PCB,자원,..) - ex) unix fork()
    • 자식은 그 공간에 새로운 프로그램을 올림 ex] exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림

프로세스 종료

  • 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌 ex] exit() system call - 자발적
    • 자식이 부모에게 output data를 보냄 ex] wait()
    • 프로세스의 각종 자원들이 운영체제에게 반납됨
  • 강제 종료 : 부모 프로세스가 자식의 수행을 종료시킴 ex] abort()
    • 자식이 할당 자원의 한계치를 넘어섬
    • 자식에게 할당된 태스크가 더 이상 필요하지 않음
    • 부모가 exit 하는 경우
      • 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수햏ㅇ되도록 두지 않는다
      • 단계적인 종료

프로세스 관련 시스템 콜 정리

  • fork() : 프로세스 복제
  • exec() : 새로운 프로그램으로 덮어씌움.
  • wait() :
  • exit() : 자발적 프로세스 종료

프로세스 간 협력 - IPC(Interprocess Communication)

  • 독립적 프로세스 : 프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함

  • 협력 프로세스 : 프로세스 협력 메커니즘을 톨ㅇ해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음

  • 프로세스 간 협력 메커니즘 (IPC : Interprocess Communication)

    Untitled

    • message passing : 메시지를 전달하는 방법, 커널을 통해, 프로세스 사이에 공유 변수를 사용하지 않고 통신하는 시스템

      Untitled

      • Direct Communication : 통신하려는 프로세스의 이름을 명시적으로 표시
      • Indirect Communication : mailbox(또는 port)를 통해 메시지를 간접 전달
    • shared memory : 주소 공간을 공유하는 방법. 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 메커니즘이 있다.

  • 스레드는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만 동일한 프로세스를 구성하는 스레드들간에는 주소 공간을 공유하므로 협력이 가능

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

컴퓨터 시스템의 구조  (0) 2022.03.15
컴퓨터 내부의 언어체계  (0) 2022.01.18

+ Recent posts