[운영체제] 6. Process2

이건회·2022년 3월 13일
0

운영체제

목록 보기
5/27

  • 프로세스가 입출력 요청을 하면 프로세스는 이를 직접 수행하는 것이 아니라 운영체제에게 요청을 한다. 입출력 수행이 되는 동안 입출력을 요청한 프로세스가 아무 일도 안하고 기다리면 동기식 입출력, 반대로 입출력 요청 프로세스가 입출력 수행 시작하자마자 곧바로 CPU를 잡아 무언가를 실행하면 비동기식 입출력이다.
  • 즉 동기식과 비동기식 입출력은 프로세스가 입출력이 진행하는 동안 CPU보유 여부와 상관없이 instruction을 실행하는지의 여부가 중요하다.

  • 동기식 입출력은 프로세스가 i/o요청이 완료될때까지 일을 못하는데 이 때 CPU를 가지고 있으면서 기다리면 위의 구현 방법 1이고, CPU를 당장 일 할 수 있는 다른 프로세스에게 넘겨준 상태면 구현 방법 2이다.

  • 스레드는 프로세스 내에서 CPU가 수행되는 여러 흐름의 단위를 말한다.
  • 스레드는 PC,레지스터 셋, 스택 공간으로 구성된다. 이는 CPU 수행과 관련된 독립적인 부분이다.
  • 각 스레드가 동료 스레드와 공유하는 부분을 task라 하는데 코드, 데이터, 각종 자원을 스레드끼리 공유한다.
  • 스레드는 프로세스를 가볍게 했다고 하여 lightweight 프로세스라고도 부른다. 따라서 전통적인 프로세스는 heavyweight 프로세스라고 부른다.

  • 다음처럼 프로세스가 하나 주어지면 코드,데이터,스택의 주소공간이 생기고 해당 프로세스를 제어하기 위해 운영체제에 PCB를 둔다.
  • 그러나 완전히 동일한 일을 하는 프로세스가 여러개면 그만큼 별도의 PCB가 계속 생기므로 메모리가 낭비된다. 따라서 같을 일을 하는 프로세스를 여러개 띄우고 싶으면 주소공간을 하나만 띄워놓고 각 코드마다 다른 부분을 수행할 수 있게 해주면 된다. 이것이 스레드의 개념이다.
  • 따라서 스레드는 하나의 프로세스만 띄워 놓고 현재 CPU가 어느 부분을 실행하고 있는지 가리키는 프로그램 카운터(PC)와 레지스터에 어떤 값을 넣었는지를 여러 부분으로 두는 것이다.
  • 궁극적으로 프로세스 하나의 CPU 수행 단위만 여러개 두고 있는 것을 스레드라 한다.
  • 함수 호출 및 리턴값에 대한 정보를 프로세스의 스택에 두는데 그림과 같이 각 스레드에 대한 스택을 별도로 두어야 한다.
  • 프로세스 하나에서 공유할 수 있는 것을 최대로 공유하는 개념이다

  • 하나의 프로세스 안에 스레드를 여러개 두면 한 스레드가 blocked(waiting)상태일 때 다른 스레드가 CPU를 잡고 running할 수 있어 응답시간이 빨라진다.
  • 예를 들어 전통적인 프로세스는 웹 페이지를 읽어올 때 까지 기다릴 때 까지 아무것도 할 수 없지만, 웹 브라우저를 여러개의 스레드를 통해 만들면 하나의 스레드가 웹 페이지를 불러오는 동안 또 다른 스레드가 이미 읽어온 텍스트 등을 디스플레이 할 수 있다.
  • 또한 동일한 일을 수행하는 스레드를 하나의 프로세스에 묶어두면 주소공간이 줄어들어 메모리가 줄어들고 처리율(throughput)이 높아진다.
profile
하마드

0개의 댓글