본문 바로가기
# Programming/- Embedded 관련 지식

임베디드 시스템의 핵심 기술, RTOS란? - Part.2 (CPU 동작 단계, CPU Scheduling, Process, Task vs Thread)

by Graffitio 2023. 9. 4.
임베디드 시스템의 핵심 기술, RTOS란? - Part.2 (CPU 동작 단계, CPU Scheduling, Process, Task vs Thread)
728x90
반응형
[CPU 동작 단계]

 

📌 Fetch(인출)

    CPU가 메모리에서 다음 실행할 명령어를 인출하는 단계이다.

    인출 단계에서는 다음 실행할 명령어의 메모리 주소가

    프로그램 카운터(PC) 레지스터에 저장되어 있다.

    CPU는 PC에 저장된 주소를 사용하여 메모리에서 해당 명령어를

    검색하고 인출한다. 이때, 메모리의 데이터는 명령어로 해석되어

    CPU 내부로 가져온다.

 

📌 Decode(해석)

    안출한 명령어를 해석하는 단계이다.

    CPU는 명령어를 해석하여 해당 명령어의 유형과

    실행에 필요한 추가 정보를 추출한다.

    명령어 해석은 명령어 집합 아키텍쳐(ISA)에 정의된 명령어 형식을 기반으로 수행된다.

    이 단계에서 CPU는 명령어가 어떤 연산을 수행해야 하는지 결정하고

    필요한 레지스터나 데이터를 결정한다.

 

📌 Execute(실행)

    해석한 명령어를 실행하는 단계이다.

    CPU는 명령어의 유형과 해석된 정보를 기반으로 명령어를 실행한다.

    이때, CPU는 필요한 데이터를 메모리나 레지스터에서 가져와 계산을 수행하거나

    필요한 제어 신호를 생성하고, 명령어의 유형에 따라 다양한 연산이 수행된다.

    예를 들어 산술연산, 논리연산, 분기(조건부 점프), 메모리 읽기/쓰기 등이

    여기에 포함된다.    

 

📌 Writhback

    실행된 명령어에서 변경된 결과를 메모리나 레지스터에 기록하는 단계이다.

    명령어 실행 결고는 메모리나 레지스터에 저장될 수 있으며,

    이 결과는 앞으로의 명령어 실행에 영향을 미칠 수 있다.

    즉, 이전 단계에서 수행된 연산 결과를 적절한 위치에 저장하여

    프로그램의 상태를 업데이트한다.

 

위와 같은 단계가 반복되면서 CPU는 프로그램을 실행하고 명령어를 순차적으로 처리한다.

CPU의 내부 동작은 복잡하지만 이러한 단계를 통해 명령어를 실행하고 프로그램을 수행할 수 있다.

 


 

[CPU Scheduling]

 

📌 CPU Scheduling

    : 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을

      해당 프로세스에 할당하는 작업이다.

      즉, 프로세스의 CPU 할당 순서 및 방법을 결정짓는 것을 의미한다.

 


 

📌 CPU Scheduling의 목적

    : 공정한 스케쥴링, 처리량의 극대화, 빠른 응답시간, 기한(Deadline) 준수

 


 

📌 CPU Scheduling의 종류(방법에 따른 분류)

 

비선점 스케쥴링(Non-Preemptibe)

    ⊙ 프로세스 종료 또는 입출력 등의 이벤트가 있을 때까지 실행을 보장

        - 장점 : 모든 프로세스들에게 공평함, 응답시간 예측 가능

        - 단점 : 짧은 작업을 수행하는 프로세스라도 긴 자겁이 종료될 때까지 기다려야됨.

 

    ⊙ FCFS(First Come, First Served)

        - 큐에 도착한 순서대로 CPU에 할당

        - 실행 시간이 짧은 것이 뒤로, 뒤로 가면 평균 대기 시간이 길어짐.

 

    ⊙ SJF(Shortest Job First)

        - 수행 시간이 가장 짧다고 판단되는 작업을 먼저 수행

        - FCFS보다 평균 대기 시간이 감소, 짧은 작업에 유리

 

    ⊙ HRN(Highest Response-ratio Next)

        - 우선 순위를 계산하여 점유 불평등을 보완한 방법(SJF의 단점 보완)

        - 우선 순위 = (대기 시간 + 실행 시간) / (실행 시간)

 

선점 스케쥴링(Preemptive)

    ⊙ OS가 CPU의 사용권을 선점할 수 있는 경우에 강제로 회수 가능

        - 장점 : 높은 우선순위 처리 가능, 빠른 응답시간을 요구하는 시분할 시스템에 적합

        - 단점 : 높은 우선순위를 가진 프로세스들만 들어오는 경우 Overhead 발생.

 

    ⊙ Priority Scheduling

        - 정적/동적으로 우선순위를 부여하여 우선 순위가 높은 순서대로 처리

        - 우선순위가 낮은 프로세스가 무한정 기다리는 Starvation이 생길 수 있다.

        - Aging 방법으로 Starvetion 문제 해결 가능

 

    ⊙ Round-Robin

        - FCFS에 의해 프로세스들이 보내지면, 각 프로세스는 동일한 시간의

          Time Quantum(할당 시간, = Time Slice)만큼 CPU 할당을 받는다.

        - 할당 시간이 크면 FCFS와 같게 되고,

          작으면 Context Switching이 잦아져 Overhead 증가

 

    ⊙ Multilevel-Queue(다단계 큐)

        - 작업들을 여러 종류의 그룹으로 나누어 여러 개의 큐를 이용하는 방법 

        - 우선 순위가 낮은 큐들이 실행 못하는 걸 방지하고자,

          각 큐마다 다른 Time Quantum을 설정

        - 우선 순위가 높은 큐는 작은 Time Quantum을 할당

        - 우선 순위가 낮은 큐는 큰 Time Quantum을 할당

 

    ⊙ Multilevel-Feedback-Queue(다단계 피드백 큐)

        - 다단계 큐에서 자신에게 할당된 Time Quantum을 다 사용한 프로세스는

          밑으로 내려가고 Time Quantum을 다 채우지 못한 프로세스는

          원래 큐 위치 그대로 둔다.

          (Time Quantum을 다 채운 프로세스는 CPU burst 프로세스로 판단하기 때문)

        - 짧은 작업에 유리하며 입출력 위주의 작업에 우선권을 준다.

        - 처리 시간이 짧은 프로세스를 먼저 처리하기 때문에 Turn around 평균 시간을 줄여준다.

 


 

[Process]

 

📌 Process란?

 

Process

    컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램

    스케쥴링의 대상이 되는 작업(Task)과 같은 의미로 쓰인다.

 

Process vs Program

    ⊙ Process

         : 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가

          메모리 상에서 실행되는 작업 단위

          즉, 실행 중인 프로그램 = 프로세스

 

    ⊙ Program

        : 프로그램은 일반적으로 하드 디스크 등에 저장되어 있는 실행 코드

 


 

📌 Process State

 

 

New(생성)

    : 사용자가 프로그램을 실행하면, 프로세스 생성 상태 돌입

 

Ready(준비)

    : 프로세스가 대기 큐에서 CPU가 할당되기를 기다리는 상태

 

Running(실행)

    : CPU가 할당되어서 프로세스가 실행되는 상태

 

Waiting(대기)

    : 프로세스가 입출력이나 이벤트를 기다리는 상태

 

Terminated(종료)

    : 프로세스 종료 상태

 


 

📌 Process State Transition

 

Aditted(승인)

    : 프로세스 생성이 가능하여 승인됨.

 

Scheduler Dispatch

    : 준비 상태에 있는 프로세스 중 하나를 선택하여 실행

 

Interrupt

    : 예외, 입출력, 이벤트 등이 발생하여 현재 실행 중인 프로세스를

      준비 상태로 바꾸고, 해당 작업을 먼저 처리하는 것.

 

I/O or Event wait

    : 실행 중인 프로세스가 입출력이나 이벤트를 처리해야 하는 경우,

      입출력/이벤트가 모두 끝날 때까지 대기 상태로 만드는 것,

 

I/O or Event Completion

    : 입출력/이벤트가 끝난 프로세스를 준비 상태로 전환하여 스케쥴러에 의해

      선택될 수 있도록 만드는 것.

 


 

📌 Process Burst

 

Burst

    : 특정 기준에 따라 한 단위로서 취급되는 연속된 신호나 데이터의 모임.

      즉, 입출력 요청을 위해 CPU 사용을 했다가 쉬었다를 반복함.

 

CPU Burst

    : 프로세스가 CPU를 사용하여 계산이나 연산을 수행하는 시간.

      이때, CPU는 프로세스를 실행하는 작업을 수행한다.

 

I/O Burst

    : 프로세스가 입출력 작업을 수행하는 시간(CPU가 입출력을 기다릴 때)

      이때, CPU는 프로세스의 대기 상태를 기다리거나 다른 작업을 처리할 수 있다.

 

✅ 입출력 중심의 프로그램은 CPU Burst 시간이 짧을 것이다.

✅ CPU 지향 프로그램은 CPU Burst 시간이 길 것이다.

✅ 이러한 분포는 적절한 CPU 스케쥴링 알고리즘을 선택하는데 매우 중요할 수 있다.

 


 

[Task vs Thread]

 

📌 Task

    ✅ Task는 Service의 단위(작업)

         Embedded System(RTOS)에서는 Task = Process

 

📌 Process

    ✅ 메모리에 적재되어 실행되는 프로그램

    운영체제로부터 자원을 할당받아 수행되는 작업의 단위

    Code, Data, Heap, Stack 메모리 공간을 독립적으로 갖는다.

 

📌 Thread

    ✅ 프로세스의 자원을 사용하는 실행 흐름의 단위

     프로세스의 Code, Data, Heap 영역을 공유

     각 Thread마다 Stack 영역만 독립적으로 갖는다.

     Context Switching이 발생할 때, Stack 정보를 비롯해 간단한 정보만 저장하기 때문에

         프로세스의 Context Switching보다 빠르다.

 


 

 

728x90
반응형