본문 바로가기
개발일지/PintOS

pintos - THREADS(1)

by Peter.JH 2023. 11. 28.
728x90

목표:

Priority Scheduling 이해

 

운영 체제(Operating System, OS)는 컴퓨터 시스템의 자원을 관리하고, 사용자와 컴퓨터 사이의 인터페이스 역할을 하는 소프트웨어입니다. 그 주요 기능은 다음과 같습니다.
Processor management , Memony management , File management , User interface, Management of hardware and peripherals, Running of software, interrupt and error handling, Security, Network communication

(참 많은 일을 하는군요 ㅎㅎ..)

 

OS의 핵심기능은 3가지가 있습니다.

가상화(Virtualization), 병행성(Concurrency), 그리고 영속성(Persistence)



가상화와 병행성을 먼저 살펴보겠습니다.  

프로그램 사용자들은 하나 이상의 프로그램을 동시에 실행시키시를 원합니다. 검색을 하며 음악을 듣고 싶고 게임을 하며 유튜브 영상을 틀어 놓기도 하죠. 컴퓨터는 동시에 하나 이상의 프로세스를 실행하는 것처럼 보입니다. 사용자들은 사용 가능한 CPU가 있는지 신경쓰지 않죠. 따라서 프로그램을 동시에 실행하여 많은 수의 CPU가 있는 것같은 환상을 어떻게 제공할 수 있을까요?

 

하드웨어의 도움을 받아 운영체제가 CPU 또는 소규모 CPU 집합을 수많은 CPU가 존재하는 것처럼 변환하여 동시에 많은 수의 프로그램을 실행시키는 것을 CPU 가상화라고 합니다. 

 

병행성이란 무엇일까요?

 

사용자는 웹 브라우저를 열어 인터넷 서핑을 하면서, 동시에 워드 프로세서를 이용해 문서를 작성할 수 있습니다. 이는 운영체제의 병행성 관리 덕분에 가능한 일입니다. 사용자에게는 두 프로그램이 동시에 실행되는 것처럼 보이지만, 실제로는 운영체제가 두 프로세스 사이를 빠르게 전환하며 각각을 조금씩 실행합니다.

 

가상화와 병행성이 비슷해보입니다.

 

하지만 이 둘은 목표와 사용 방법이 다릅니다. 

 

병행성은 여러 작업이 동시에 실행되는 것처럼 보이도록 하는 것입니다. 이는 프로세스나 스레드의 스케줄링을 통해 이루어집니다. 병행성은 여러 작업이 동시에 실행되는 것처럼 보이게 하여 시스템의 성능을 향상시키고, 사용자에게 더 나은 경험을 제공하는데 목표가 있습니다.
가상화는 물리적인 하드웨어 자원을 추상화하여 가상의 자원으로 만드는 것입니다. 이를 통해 하나의 물리적 시스템에서 여러 가상 시스템을 실행할 수 있습니다. 가상화의 목표는 자원을 효율적으로 사용하고, 시스템의 격리와 보안을 강화하는 것입니다.
병행성과 가상화는 서로 다른 목표를 가지고 있지만, 서로 보완적으로 작용할 수 있습니다. 예를 들어, 가상화를 통해 생성된 여러 가상 시스템은 병행성을 통해 동시에 실행될 수 있습니다. 또한, 병행성은 가상화된 환경에서도 적용되어, 하나의 가상 시스템에서 여러 작업이 동시에 실행될 수 있도록 합니다.

 

그럼 어떻게 병행성, 가상화의 목표에 맞게 할 수 있을까요?

 

이러한 병행성과 가상화의 목표를 달성하기 위한 핵심 메커니즘이 바로 CPU 스케줄링입니다. CPU 스케줄링은 운영체제가 어떤 프로세스에게 CPU를 언제 할당할지 결정하는 방법입니다. 이를 통해 운영체제는 여러 프로세스를 동시에 실행하는 것처럼 보이게 하고, CPU 자원을 효율적으로 활용할 수 있습니다.

저희는 CPU 스케줄링 중 우선순위 스케줄링(Priority Scheduling)을 구현할려고합니다. 

우선순위 스케줄링은 각 프로세스에 우선순위를 부여하고, 이 우선순위에 따라 CPU를 할당하는 방법입니다. 이렇게 함으로써, 중요한 작업을 먼저 처리할 수 있습니다. 예를 들어, 사용자 대화형 애플리케이션의 경우 빠른 응답 시간이 중요하므로 높은 우선순위를 부여받을 수 있습니다.

이렇게 CPU 스케줄링을 통해 운영체제는 가상화와 병행성을 실현하고, 시스템의 효율성과 사용자의 경험을 최적화합니다. 여기서 중요한 점은, CPU 스케줄링은 운영체제의 핵심 기능이며, 이를 통해 우리는 여러 프로그램을 동시에 실행하는 것처럼 느낄 수 있다는 것입니다.

 

 

 

* Process, Thread에 대한 참고 글

더보기

 

 

프로세스(Process): 

일반적으로 프로세스는 실행 중인 프로그램으로 정의합니다. 프로그램은 디스크 상에 존재하는 명령어와 정적 데이터의 묶음입니다. 명령어와 데이터 묶음을 읽고 실행하여 프로그램을 실행합니다. 

 

프로세스는 시스템 자원(CPU, 메모리 등)과 작업의 실행 상태를 관리하는 구조로, 각 프로세스는 독립된 메모리 공간을 가지고 실행됩니다. 프로세스는 운영 체제로부터 자원을 할당 받아 실행되며, 프로세스 스케줄러에 의해 프로세스 간의 CPU 사용 시간이 조절됩니다.

 


스레드(Thread): 

스레드는 프로세스 내에서 실행되는 가장 작은 실행 단위입니다. 한 프로세스 내의 모든 스레드는 해당 프로세스의 자원을 공유하므로, 스레드 간의 데이터 공유와 통신이 수월합니다. 각 스레드는 별도의 레지스터와 스택을 가지지만, 힙 메모리는 다른 스레드와 공유합니다. 이렇게 스레드를 사용하면 멀티태스킹을 효율적으로 수행할 수 있습니다.
따라서, 운영 체제에게 프로세스는 독립적으로 실행되는 작업의 단위이며, 스레드는 프로세스 내에서 실행되는 작업의 단위라고 할 수 있습니다.

 

 

 

 

CPU Scheduling 알고리즘

CPU 스케줄링은 여러 프로세스나 스레드가 CPU를 공유하도록 관리하는 역할을 합니다. 이를 통해 CPU 사용 시간을 효율적으로 분배하고, 프로세스의 실행 순서를 결정하며, 시스템의 전반적인 성능과 효율성을 향상시킵니다.

CPU 스케줄링 알고리즘에는 여러 종류가 있습니다.

 

시스템에서 실행 중인 프로세스 혹은 작업에 대해 다음과 같은 가정을 합니다.

1. 작업 실행 기산이 모두 같지 않다. 

2. 모든 작업은 임의의 시간에 도착한다. 

3. 작업은 실행 도중에 중단될 수 있다. 

4. 모든 프로그램은 입출력 작업을 수행한다. 

5. 스케줄러가 각 작업의 실행 시간을 알 수 없다.

 

FCFS (First Come First Served): 

이 알고리즘은 먼저 도착한 프로세스를 먼저 처리하는 방식입니다. 가장 간단한 CPU 스케줄링 방식입니다. 하지만, 짧은 작업이 긴 작업 뒤에 대기하고 있는 상황에서는 비효율적일 수 있습니다. 이를 convoy effect라고 부릅니다.


SJF (Shortest Job First): 

이 알고리즘은 가장 짧은 실행 시간을 가진 프로세스를 먼저 실행하는 방식입니다. 평균 대기 시간을 최소화하는 것이 목표입니다. 하지만, 실행 시간을 미리 알 수 없는 상황에서는 적용하기 어렵습니다.


SRTF (Shortest Remaining Time First): 

이 알고리즘은 남은 실행 시간이 가장 짧은 프로세스를 먼저 실행하는 선점형 방식입니다. SJF의 선점형 버전이라고 할 수 있습니다.


Round Robin: 

각 프로세스는 동일한 크기의 할당 시간(time quantum)을 가지고, 이 시간 동안만 CPU를 사용할 수 있습니다. 할당 시간이 끝나면, CPU는 다음 프로세스에게 넘어갑니다. 모든 프로세스에 대해 공평하게 CPU 시간을 분배합니다.


Multilevel Queue Scheduling: 

프로세스를 여러 개의 큐에 나누어 스케줄링하는 방식입니다. 각 큐는 별도의 스케줄링 알고리즘(예: FCFS, SJF 등)을 가질 수 있으며, 우선순위에 따라 다른 큐보다 높은 CPU 시간을 할당받을 수 있습니다.

728x90

'개발일지 > PintOS' 카테고리의 다른 글

pintos - virtual memory(3)  (0) 2023.12.19
pintos - Virtual Memory(1)  (0) 2023.12.14
pintos (부끄러운)실수 기록  (0) 2023.12.14
pintos - USER PROGRAMS (1)  (0) 2023.12.05
pintos - USER PROGRAMS (intro)  (0) 2023.12.04