CS/운영체제

프로세스

수수한개발자 2023. 8. 8.
728x90

반효경 교수님의 강의로 운영체제를 공부하고 있습니다.

 

프로세스 개념

Process is a program in execution 즉, 실행 중인 프로그램을 의미합니다.

프로세스의 문맥(context)

  • CPU 수행 상태를 나타내는 하드웨어 문맥
    • 하드웨어 문맥
      • Program Counter
      • 각종 register
  • 프로세스의 주소 공간
    • code, data, stack
  • 프로세스 관련 커널 자료 구조
    • PCB(Process Cotrol Block)
    • Kenel stack

우리가 프로그램을 실행시키면 프로세스 A의 주소공간에 stack, data, code 메모리가 있습니다.

현재 프로세스의 함수를 실행시켜 스택에 쌓여있고, 변수들의 값이 얼마이고 레지스터의 값을 넣고 어디까지 실행했는가

이런것들이 현재 프로세스의 상태를 나타내는것이라고 할 수 있습니다.

이 중에서 현재 우리가 어디를 실행시키고 있는지가 그거를 규명하는데 필요한 것이 프로세스 문맥입니다.

 

 

프로세스 상태 (Process State)

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

  • Running
    • CPU를 잡고 instruction을 수행중인 상태
  • Ready 
    • CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
  • Blocked (wait, slee)
    • CPU를 주어도 당장 instuction을 수행할 수 없는 상태
    • Process 자신이 요청한 event(예 : I/O) 가 즉시 만족되지 않아 이를 기다리는 상태
    • 디스크에서 file을 읽어와야 하는 경우
  • Suspended(stopped)
    • 외부적인 이유로 프로세스의 수행이 정지된 상태
    • 프로세스는 통째로 디스크에 swap out 된다.
    • 예 : 사용자가 프로그램을 일시 정지시킨 후 시스템이 여러가지 이유로 프로세스를 잠시 중단 시킴(메모리에 너무 많은 프로세스가 올라와 있을 때)
  • New : 프로세스가 생성중인 상태
  • Terminated: 수행(execution)이 끝난 상태
  • Blocked : 자신이 요청한 event가 만족되면 Ready
  • Suspended : 외부에서 resume해 주어야 Active

 

Process Control Block (PCB)

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

다음의 구성요소를 가진다.(구조체로 유지)

  1. OS가 관리상 사용하는 정보
    • Process state, Process ID
    • scheduling information, priority
  2. CPU 수행 관련 하드웨어 값
    • Program counter, registers
  3. 메모리 관련
    • Code, data, stack의 위치 정조
  4. 파일 관련
    1. Open file descripts...

 

 

문맥 교환(Context Switch)

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행

  • CPU를 내어주는 프로세스의 상태를 그  프로세스의 PCB에 저장
  • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

컨텍스트 스위치는 System call 이나 Interrupt 발생시 반드시 일어나는것은 아니다.

 

 

유저 모드에서 인터럽트나 시스템 콜이 일어나도 처리 후 다시 유저 모드로 복귀하므로 컨텍스트 스위치가 발생하지 않았습니다.

 

 

유저 모드에서 타이머 인터럽트가 들어왔습니다. 타이머 인터럽트는 CPU를 다른 프로세스로 넘기기 위한 의도를 가진 인터럽트 입니다. 프로세스의 시간이 끝났기 때문에 타이머 인터럽트를 발생시켰기 때문에 또다른 사용자 프로세스에게 CPU를 넘기게 됩니다.

첫번째 경우는 CPU의 수행 정보 등 context의 일부를 PCB에 저장합니다.

하지만 문맥교환을 하는 두번째의 경우 그 부담의 훨씬 큽니다.

 

 

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

  • Job queue : 현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device queues : I/O device의 처리를 기다리는 프로세스의 집합
  • 프로세스들은 각 큐들을 오가며 수행된다.

 

 

스케쥴러

Long-term scheduler( 장기 스케줄러 or job scheduler)

  • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
  • 프로세스에 memory(및 각종 자원)을 주는 문제
  • degree of Multiprogramming을 제어
  • time sharing system에는 보통 장기 스케줄러가 없음(무조건 ready)

Short-trem scheduler(단기 스케줄러 or CPU scheduler)

  • 어떤 프로세스를 다음번에 running 시킬지 결정
  • 프로세스에 CPU을 주는 문제
  • 충분히 빨라야 함(millisecond 단위)

Medium-term Scheduler(중기 스케줄러 or Swapper)

  • 여유 공간 마련을 위해 프로세스를 통쨰로 메모리에서 디스크로 쫓아냄
  • 프로세스에게서 memory를 뺏는 문제
  • degree of Multiprogramming을 제어

 

Thread

Thread의 구성

  • program counter
  • register set
  • stack space

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

  • code section
  • data section
  • OS resources

전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다.

 

다중 스레드로 구성된 테스크 구조에서는 하나의 서버 스레드가 blocked (waiting) 상태인 동일한 테스크 내의 다른 스레드가 실행되어 빠른 처리가 될 수  있다.

동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다.

스레드를 사용하면 병렬성을 높일 수 있다.

 

 

Single and Multi Threaded process

코드, 데이터, 영역은 쓰레드들끼리 공유합니다.

register, stack 부분은 쓰레드별로 각자 가지게 됩니다.

 

 

쓰레드의 장점

  • Responsiviveness
    • multi-threaded - Web : 웹 브라우저가 여러개의 쓰레드를 가지고 있으면 하나의 쓰레드가 서버에서 응답이 느리게 되면 블락이 됩니다. 이때 쓰레드가 여러개면 그 쓰레드만 멈추고 다른 쓰레드가 응답을 하게 되면 응답이 됩니다.
  • Resource Sharing
    • n thread can share binary doce, data, resource of the proces : 똑같은 쓰레드가 여러개 있는데 그거를 별도의 프로세스로 만드는 것보다는 하나의 프로세스에서 쓰레드만 여러개 두개 되면 코드 데이터, 각종 자원을 공유하게 되면서 자원을 효율적으로 사용할 수 있다.
  • Economy (경제성)
    • 프로세스를 만들고 CPU Context switching 하는것은 비용이 많이 듭니다. 그래서 쓰레드를 만들고 쓰레드내에 Context switching 더 쉽기 때문에 여러 쓰레드를 사용합니다.
  • Ultiization of MP Architecture : CPU가 여러개일때
    • 서로 다른 CPU를 쓰레드가 사용하므로 속도가 더 빠르다.

쓰레드 구현 방법

커널을 이용하면 - 커널 쓰레드

라이브러리를 이용하면 - 유저 쓰레드

728x90

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

CPU Scheduling  (1) 2023.10.20
프로세스 관리  (0) 2023.08.27
컴퓨터 시스템 구조  (0) 2023.08.02
운영체제란 무엇인가?  (0) 2023.08.02

댓글