[OS] 프로세스 2

정의정·2023년 8월 31일
0

OS

목록 보기
5/6
post-thumbnail

💡 프로세스 2

지난 시간에 이어 프로세스에 대해 알아보자. 이번엔 프로세스 스케줄링을 위한 큐, 스케줄러, 스레드에 대한 내용을 다뤄보도록 하겠다.

📌 순서

  1. 프로세스 스케줄링을 위한 큐
  2. 스케줄러
  3. 스레드(Thread)

🌟프로세스 스케줄링을 위한 큐

여러 프로세스는 각 상황에 맞게 queue에 줄을 서게 된다.
프로세스들은 각 큐들을 오가며 수행된다.

Job queue✔️

현재 시스템 내에 있는 모든 프로세스의 집합이다.

Ready queue✔️

현재 메모리 내에 있으면서 CPU를 잡아 실행되기를 기다리는 프로세스의 집합이다.

Device queue✔️

I/O device의 처리를 기다리는 프로세스의 집합이다.

Resource queue✔️

👉🏻 공유데이터에 대한 접근 대기 큐이다.


🌟 스케줄러(Scheduler)

Long-term scheduler(장기 스케줄러 or Job scheduler)✔️

👉🏻 시작 프로세스 중 어떤 것들을 Ready queue로 보낼 지 결정한다.
👉🏻 프로세스에 Memory(및 각종 자원)을 주는 문제를 다룬다.
👉🏻 Degree of Multiprogramming을 제어한다.
👉🏻 Time sharing system(현재 범용 운영체제들)에는 보통 장기 스케줄러가 없고 무조건 Ready queue로 들어가도록 한다.

Short-term scheduler(단기 스케줄러 or CPU scheduler)✔️

👉🏻 어떤 프로세스를 다음 번에 Running 시킬 지 결정한다.
👉🏻 프로세스에 CPU를 주는 문제를 다룬다.
👉🏻 충분히 빨라야 한다. (millisecond 단위)

Medium-term scheduler(중기 스케줄러 or Swapper)✔️

👉🏻 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아낸다.
프로세스에게서 Memory를 뺏는 문제를 다룬다.
Degree of Multiprogramming을 제어한다.
Time sharing system에서 장기 스케줄러를 안 쓰는 대신 중기 스케줄러를 써서 제어한다.
이에 따라 프로세스 상태에 Suspended(Stopped)가 추가된다.


🌟 스레드(Thread)

스레드(Thread)는 CPU의 수행단위이다. 가벼운 프로세스(Lightweight process)라고 한다.

스레드는 동일한 프로그램을 여러 개 띄우더라도 프로세스가 하나만 만들어지도록 한다.

1. 스레드의 PCB 공유

같은 프로세스 내의 스레드는 CPU 관련 정보인 Program counter, register를 제외한 모든 PCB 구성 요소를 공유한다.

주소 공간 중에서는 Stack 부분만 별도로 가지도록 하며 Data, Code 공간은 공유한다.

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

2. 스레드의 장점

Responsiveness✔️

👉🏻 응답성이 빠르다.
👉🏻 다중 스레드로 구성된 task 구조에서는 하나의 Server 스레드가 blocked(waiting) 상태인 동안에도 동일한 task 내의 다른 스레드가 실행(Running)되어 빠른 처리를 할 수 있다.

Resource Sharing✔️

👉🏻 동일한 프로세스 안의 스레드들 간 CPU 수행과 관련된 정보를 제외하고는 PCB를 공유하고 있다.
👉🏻 Stack을 제외한 메모리도 공유하고 있다.

Economy✔️

👉🏻 똑같은 일을 프로세스를 여러 개 두는 방법과 스레드를 여러 개 두는 방법으로 처리를 하면, 스레드를 여러 개 두는 방법이 훨씬 효율적이다.
👉🏻 Solaris의 경우 프로세스를 하나 더 두는 경우 30배의 오버헤드가 발생하지만, 스레드를 하나 더 두는 경우는 5배의 오버헤드가 발생한다.

Utilization of MP Architecture✔️

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

3. 스레드 구현 방법

스레드를 구현하는 방법으로는 두 가지가 있다.

운영체제가 스레드를 알고 있는 경우: Kernel Thread✔️

👉🏻 Window 95/98/NT, Solaris, Digital UNIX, Mach

운영체제가 스레드의 존재를 모르는 경우: User Thread✔️

👉🏻 사용자가 여러 스레드로 프로그램을 만들었지만, 스레드가 한 개인 것처럼 포장한 경우이다.
👉🏻 내부적으로 비동기 작업이 가능하다.
👉🏻 POSIX P thread, Mach C-thread, Solaris threads

📖 교재 및 출처

  • A. Silberschatz et al., Operating System Concepts, 9th Edition, John Wiley & Sons, Inc. 2013.
  • A. Silberschatz et al., Operating System Principles, Wiley Asia Student Edition
  • 반효경님, 운영체제와 정보기술의 원리
profile
배움 기록

0개의 댓글