프로세스 (Process)

cho04322·2025년 5월 31일

운영체제

목록 보기
2/6

프로세스란

프로세스 : 실행 중인 프로그램

흔히 pc를 사용할 때 프로세스라는 말을 많이 들어봤을 것이다. 프로세스는 현재 pc에서 실행 중인 프로그램으로 현대의 컴퓨터에서는 많은 프로세스들이 실행되고 있다.

프로세스 context

프로세스 context : 프로세스의 현재 상태를 나타내는데 필요한 모든 요소

일반적으로 프로세스의 현재 상태를 나타내기 위해서는 많은 정보들이 필요하다. 현재 program counter가 어디를 가리키는지? 코드의 어느부분까지 실행되었는지? 프로세스의 메모리에 어떤 내용을 담고 있는지? 등의 모든 정보를 프로세스 context라고 한다.

프로세스 context 구성

  1. 운영체제 상태 정보
    프로세스의 위치나 상태, id값등 프로세스에 대한 일반적인 정보가 필요하다.
  • 프로세스의 상태
    Running : 프로세스가 CPU를 잡고 instruction을 실행 중인 상태
    Ready : 모든 게 준비되어 CPU만 잡으면 instruction을 실행 가능한 상태
    blocked : cpu를 줘도 instruction을 실행 불가능한 상태, 오래 걸리는 작업을 진행하고 있는 상태 (ex: i/o작업)
    suspended : 외부요인에 의해 대기되는 상태, blocked는 자기 자신이 i/o 작업등으로 인해 대기하는 상태라면 suspended는 외부요인에 의해 대기되는 차이점이 존재한다.
    New : 프로세스가 생성 중인 상태
    Terminated : 프로세스가 실행 완료된 상태
  1. cpu 관련 정보
    프로세스는 cpu를 잡고 매순간 instruction을 실행하게 되는데 현재 시점에 프로세스 instruction을 어디까지 실행했는가를 알기 위해서 register 정보와 program counter 정보가 필요하다.

  2. 메모리 관련 정보
    현재 메모리 주소 공간 내에 code, data, stack 영역에 어떤 내용이 들어있는지에 대한 정보가 필요하다.

  3. 파일 관련 정보
    해당 프로세스가 동작하면서 사용한 파일들에 대한 정보가 필요하다.

일반적으로 프로세스 마다 운영체제의 주소 공간내 data 영역에 pcb라는 자료구조가 존재하는데 이 pcb가 저 4가지 정보를 내부에 가져 프로세스 context 정보를 가진다.

Context Switch

일반적으로 pc에서는 여러 작업들이 수행되면서 프로세스에게 cpu를 할당했다가 뺐었다 하는 과정을 반복하게 된다. 이 때 프로세스가 i/o 작업으로 인해 cpu를 반환했다 i/o 작업 이후 재할당 받게 되면 처음부터 작업을 수행하는 것이 아니라 기존에 진행된 부분 이후부터 작업을 다시 진행하게 된다. 이때 기존의 프로세스 context를 통해 진행 상황을 파악하고 이후부터 작업을 진행할 수 있게 된다.

context switch를 하게 되면 기존에 작업중이던 프로세스의 정보를 운영체제가 해당 프로세스의 pcb에 저장을 하고 다음에 가져올 프로세스의 정보를 해당 프로세스의 pcb에서 가져와 프로세스가 작업하던 이후부터 이어서 작업하게 된다.

  • context switch의 주의할 점
    사용자 프로세스로부터 cpu가 운영체제에게 넘어가는 것을 항상 context switch라고 부르는 것은 아니다. 결국 운영체제가 이전과 동일한 사용자 프로세스에게 cpu를 넘기게 되면 context switch가 발생하는 것이 아니라 단수니 kernel 모드에 들어갔다 나오는 것을 의미하며 사용자 프로세스로부터 다른 사용자 프로세스로 넘어가는 것만을 context switch라고 부른다.

스케줄러

스케줄러 : 어떤 프로세스를 실행할지 결정하는 것

pc에는 많은 프로세스들이 존재한다. 그렇기에 어떤 순서로 프로세스들을 선택해 cpu를 할당해주어야 하는지는 중요한 포인트이다. 운영체제에서 사용하는 스케줄러는 대표적으로 3가지고 존재한다.

  1. short-term scheduler
    short-term scheduler는 빠른 시간내로 스케줄되는 것으로 cpu를 어떤 프로세스에 줄지, 다음번에 어떤 프로세스를 실행시킬지 결정하는데에 사용된다.

  2. long-term scheduler
    long-term scheduler는 메모리를 어떤 프로세스에 줄지 결정하는데 상용된다. 프로세스가 처음 생성되어 New 상태일 때 메모리에 올라가는 것을 허락받게 되면 Ready 상태가 되어 메모리에 올라가게 된다. 이 스케줄러는 메모리에 올라가 있는 프로세스의 수(degree of multiprogramming)을 제어하는데 사용되며 다른 말로 job scheduler라고도 부른다.

  1. mid-term scheduler
    일반적으로 현대 컴퓨터는 프로세스를 실행하면 무조건 메모리를 할당하도록 동작한다. 그렇기 때문에 long-term scheduler는 현대 컴퓨터에서는 사용되지 않는다. 대신 mid-term scheduler라는 것을 사용하게 된다.

mid-term scheduler는 메모리에 너무 많은 프로그램이 올라가 있는 것을 방지하기 위해 사용되며 일부 프로그램을 골라서 메모리에서 아예 쫓아내도록 동작한다. 이 때 쫓겨난 프로세스들의 상태가 Suspended상태가 된다.

스레드

스레드 : cpu를 실행하는 단위

어떤 프로세스를 생성하게 되면 code, data, stack으로 구성된 주소 공간이 생성되고 해당 프로세스별로 운영체제에 pcb가 구성된다. 만약 같은 일을 하는 프로세스가 여러개 있는 경우 그 프로세스별로 주소 공간과 pcb가 필요해 메모리 낭비가 발생하게 된다. 같은 일을 하는 프로세스에 대해 주소 공간을 하나만 만들고 프로세스마다 다른 공간의 code를 실행하게끔 하는 개념이 스레드이다.

스레드는 cpu 관련 정보(program counter, register set, stack space)들만 별도로 구성이되고 나머지 부분은 공유해서 사용하게 된다. 이런 특징으로 인해 스레드lightweigth process라고도 부른다.

스레드의 장점

  1. 응답성

스레드는 빠른 응답을 제공한다. 하나의 cpu를 사용하고 있을 때 웹 브라우저에서 어떤 페이지에 접속했다고 가정해보자. 이 때 스레드를 사용하게 되면 하나의 스레드가 서버에서 html 파일을 불러오는 동안 다른 스레드들이 html 파일 구성에 필요한 이미지나 텍스트 등의 파일들을 불러올 수 있다. 이를 통해 먼저 불러온 부분을 사용자에게 보여줄 수 있다. 만약 프로세스 하나로 웹 페이지를 불러오고 있다면 전체 모든 파일을 받아올 동안 페이지가 block될 것이다.

  1. 자원 공유

앞서 언급했듯이 같은 작업을 하는 프로세스를 별도의 프로세스로 만들게 되면 자원이 낭비가 되는데 스레드는 일부 필요한 공간을 공유함으로써 자원 낭비를 최소화 할 수 있다.

  1. 경제성

프로세스를 하나 만들고 process의 문맥 교환을 하는 것은 오버헤드가 대단히 많이 발생하게 된다. 이에 비해 스레드를 만드는 것은 프로세스에 비해 오버헤드가 크지 않다.

  1. 다중 cpu 환경
    cpu가 여러개 존재하는 환경이라면 각각의 스레드가 서로 다른 cpu를 잡고 동작하게 되어 더 빠른 연산을 진행 가능하다. 예를 들어 어떤 수학 연산을 진행한다고 할때 각각의 쓰레드가 각 부분에 대한 연산을 병렬로 처리하고 마지막에 각 부분의 연산을 합쳐주는 방식으로 빠르게 연산할 수 있다.
  • 스레드 구현 방식
  1. 커널 스레드 : 커널의 지원을 받는 스레드
    커널 스레드는 스레드가 여러개 구성되어 있다는 사실을 커널이 알고 있고 스레드의 문맥교환을 커널이 cpu 스케줄링 하듯이 지원해주는 스레드 구현 방식이다.
  2. 유저 스레드 : 라이브러리의 지원을 받는 스레드
    유저 스레드는 커널이 스레드가 여러 개로 구성되어 있다는 사실을 알지 못하고 라이브러리의 기능을 통해 유저 프로세스가 자체적으로 처리하는 스레드 구현방식이다. 커널 스레드에 비해 제약적인 사항들이 존재한다.

0개의 댓글