[Pintos-threads] 1주차 중요 개념 정리

developer_jennifer·2023년 6월 1일
0

크래프톤 정글

목록 보기
17/29

Reference
프로세스의 생성과정 및 상태 전이
프로세스vs 스레드 개념
스케줄링의 종류
스케줄링 muti-level

1. 쓰레드 상태 (무엇이 있는지, 어떤 함수 또는 인터럽트 등이 불려지면 어떤 상태로 전환되는지)

프로그램 vs 프로세스

  • 프로그램

    어떤 작업을 하기 위해 실행할 수 있는 파일

  • 프로세스

    실행되어 작업 중인 컴퓨터 프로그램

프로세스 vs 스레드

  • 프로세스

    운영체제로부터 자원을 할당받은 작업의 단위

  • 스레드

    프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

  • 스레드의 분류
    • 사용자 수준의 쓰레드 :
      -사용자가 만든 라이브러리를 사용하여 스레드를 운용
      -속도는 빠르지만 구현이 어려움
    • 커널 수준의 쓰레드 :
      -운영체제의 커널에 의해 스레드를 운용
      -구현은 쉽지만 속도가 느림

쓰레드는 프로세스의 한계로 인해 생성된 개념이다. 과거에는 하나의 프로세스만을 사용했지만 기술이 발전하면서 프로세스 하나만으로는 작업이 어려워 졌다. 그렇기에 프로세스 내에서 여러 작업을 할 수 있는 스레드라는 개념이 생기게 되었다.

그렇다면 프로세스를 여러개 사용하는 것은 안되는 것인가? 라고 생각할 수 있지만 프로세스 하나를 사용하기 위해서는 CPU 자원을 할당받아야 하는데 할당받는 자원이 중복되고 큰 메모리를 차지하게 되어 비효율적이게 될 것이다.

쉽게 말해 크롬 브라우저를 생성하는 것이 프로세스이고 그 안에서 블로그를 작성하면서 노래를 동시에 들을 수 있는 작업이 쓰레드 라고 이해하면 쉬울 것이다.

이때 다중 작업을 진행 할 경우 다중(멀티) 쓰레드라고 부른다.

프로세스 & 스레드의 메모리

프로세스의 자원 구조

💡 STACK 영역
: 지역 변수와 같은 함수가 호출이 종료되면 되돌아올 임시적인 자료를 저장하는 독립적인 공간이다. STACK은 함수의 호출과 함께 할당되며, 호출이 완료되면 소멸한다. 만일 STACK의 영역을 초과하면 Stack overflow 가 발생한다.

💡 HEAP 영역
: 생성자, 인스턴스와 같은 동적으로 할당되는 데이터들을 위해 존재하는 공간이다. 사용자의 의해 메모리 공간이 동적으로 할당되고 해제된다.

💡 DATA 영역
: 코드가 실행되면서 사용하는 전역 변수나 각종 데이터들이 모여있다. 데이터영역은 .data,.rodata,.bss 영역으로 세분화된다.

  • .data : 전역변수 또는 static 변수 등 프로그램이 사용하는 데이터 저장
  • .bss : 초기값 없는 전역변수, static 변수가 저장
  • .rodata : const같은 상수 키워드 선언된 변수나 문자열 상수가 저장

💡 TEXT 영역
: 프로그래머가 작성한 프로그램 함수들의 코드가 CPU가 해석 가능한 기계어 형태로 저장되어 있다.

정적변수 vs 지역변수 vs 전역변수 알아보기!

Data 영역과 Text 영역은 선언할 때 크기가 정해지는 정적 영역이지만, Stack영역과 Heap영역은 크기가 줄었다 늘었다 하는 동적 영역이다. 그렇기 때문에 위 그림에서 stack과 heap 영역 사이에 화살표가 쳐 있는 것을 볼 수 있다.

스레드의 자원 공유

스레드끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 때문에 동시 작업이 가능하다. 이때 프로세스 4가지 메모리 영역(Code,Data,Heap,Stack) 중 스레드는 Stack만 할당받아 각자 스레드에 복사하고 Code(text), Heap, Data는 프로세스내의 다른 스레드들과 공유된다.

이렇게 공유자원을 공유하도록 구성된 이유는 하나의 프로세스를 다수 의 실행 단위인 스레드로 구분하여 자원을 공유하고, 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 올리기 위해서이다.

쓰레드와 프로세스 상태 전이

  1. 수행 -> 대기 interrupt
    실행 프로세스가 지정 시간 전에 입출력 연산 등이 필요하거나 새로운 자원 요청과 같은 문제가 발생하면 스스로 프로세스를 양도하고 대기 상태가된다.
  2. 수행 -> 준비 time-out
    특정 프로세스가 프로세스를 독점하는 것을 막기 위해 인터럽트 클록을 두어 프로세서 점유 시간을 지정한다.
    프로세스가 일정 시간이 지나도 프로세서를 반환하지 않으면 클록이 인터럽트를 발생시켜 운영체제가 제어권을 갖게 한다.
    운영체제가 제어권을 가지면 실행 중인 프로세스는 준비 상태로 전환된다.
  3. 대기 -> 준비 wake-up
    입출력이 끝나고 Wake-up이 발생하면 준비상태로 전환한다.
  4. 수행 -> 종료
    프로세스가 마지막 명령의 실행을 마치면 종료되고 운영체제에 프로세스 삭제를 요청한다.
    자식 프로세스가 할당된 자원을 초과해서 사용하거나 자식 프로세스에 할당된 작업이 없으면 부모 프로세스가 자식 프로세스를 종료시킬 수 있다.

2. 스케줄링

프로세스 스케줄링

운영체제에서 CPU를 사용할 수 있는 프로세스를 선택하고, CPU를 할당하는 작업을 말한다. 프로세스 스케줄링은 프로세스의 우선순위, 작업량 등을 고려하여 효율적으로 배치하여, 이를 통해 운영체제는 CPU를 효율적으로 사용하며 시스템 전반적인 성능을 향상시킨다.

  • 스케줄링 알고리즘의 종류
    💜 FCFS(First-Come, First-Served)
    💜 SJF(Shortest-Job-First)
    💜 Priority
    💜 RR(Round-Robin)
    💜 Multilevel Queue

스레드 스케줄링

운영체제에서 다중 스레드를 관리하며, CPU를 사용할 수 있는 스레드를 선택하고, CPU를 할당하는 작업

  • 스레드 스케줄링 종류

    • Round-Robin : 선점형 스케줄링 방식, 현대적인 CPU 스케줄링

    • Priority-based Scheduling :
      ⚡ 선점과 비선점 두가지 방식 모두 적용 가능 , 우선순위가 높은 프로세스에 CPU를 먼저 할당
      ⚡ 기아 현상과 무기한 봉쇄가 발생할 수 있으며 에이징 기법을 통해 해결

    • Multi-level Queue scheduling
      ⚡ Ready Queue를 여러 개로 분할하고, 각각의 queue의 우선순위를 정하고, 각각의 프로세스는 해당 프로세스의 우선 순위에 따라 각각의 queue에 배치되고, queue 간 경쟁을 통해 하나의 queue가 cpu를 점유하는 형태.

    • Multi-level Feedback Queue
      ⚡ Multilevel queue의 경우 queue와 프로세스에 대한 우선순위를 정해야 하고, queue의 time slice를 하는 등, 구현 방법이 복잡하다

  • 프로세스 스케줄링과 스레드 스케줄링의 차이점
    프로세스 스케줄링과는 다르게, 하나의 프로세스 내에서 다수의 스레드가 동작하는 형태이브로, 스레드 간의 상호작용과 동기화 문제를 고려해야 한다.

3. 컨택스트 스위칭

CPU가 한 프로세스에서 다른 프로세스로 전환할 때 발생하는 일련의 과정

CPU는 한번에 하나의 프로세스만 실행 할 수 있으므로 여러개의 프로세스를 번갈아가며 실행하며 CPU 활용률을 높이기 위해 컨텍스트 스위칭이 필요하다.

4. PCB(프로세스 제어 블록)

운영체제에서 프로세스를 관리하기 위해 해당 프로세스의 상태 정보를 담고 있는 자료구조

Context switching을 실행하면서 기존 프로세스의 상태를 어딘가 저장해둬야 다음에도 똑같은 작업을 이어서 할 수 있고, 새로운 작업의 상태도 저장해놔야 어디서 부터 시작할 수 있을 지 알 수 있을 것이다.

즉, PCB는 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 저장하는 임시 저장소 이다.

💡 이때 프로세서 제어블록은 중요한 정보를 포함하고 있기 때문에, 일반사용자가 접근하지 못하도록 각각의 프로세스 안의 커널 스택(커널 내의 주소)에 위치

따라서 운영체제는 PCB에 담신 프로세스 고유 정보를 통해 프로세스를 관리하고, 실행 상태를 파악하고, 우선순위를 조정하며, 스케줄링을 수행하고 다른 프로세스와의 동기화를 제어한다.

PCB 메모리 구조

  • Point (포인터) : 프로세스의 현재 위치를 저장하는 포인터 정보
  • Process state (프로세스 상태) : 프로세스의 각 상태- 생성(New), 준비(Ready), 실행(Running), 대기(Waiting), 종료(Terminated)
  • Process ID,PID (프로세스 아이디) : 프로세스 식별자를 지정하는 고유한 ID
  • Program count (프로그램 카운터) : 프로세스를 위해 실행될 다음 명령의 주소를 포함하는 카운터를 저장
  • Register (레지스터) : 누산기, 베이스, 레지스터 및 범용 레지스터를 포함하는 CPU 레지스터에 있는 정보
  • Memory Limits (메모리 제한) : 운영체제에서 사용하는 메모리 관리 시스템에 대한 정보
  • List of open file (열린 파일 목록) : 프로세스를 위해 열린 파일 목록

Process identifier(PID)

운영체제의 커널이 프로세스들을 구분하기 위해 사용하는 프로세스 식별자(이름)

  • PID 0
    Swapper 프로세스, 커널 모드 프로세스, 물리 메모리 공간을 효율적으로 활용하기 위해, 가장 오랫동안 사용하지 않은 프로세스를 메모리에서 디스크로 잠시 swap한다.
  • PID 1
    Init 프로세스, 시스템을 시작하고 종료하는 역할을 하는 프로세스이다.

PEB(Process Environment block)

PCB가 각 프로세스 안의 커널 주소 공간에 존재해 오직 커널에서만 사용될 수 있는 구조체라고 한다면, PEB는 어플리케이션이 접근해 사용할 수 있는 사용자 모드 주소 공간에 위치한, 프로세스의 정보를 담고 있는 데이터 구조체이다.

PEB의 주요 필드들 정리

Context Switching Overhead

컨텍스트 스위칭을 함으로써 빠른 반응성과 동시성을 제공하지만, 실행되는 프로세스의 변경 과정에서 프로세스의 상태, 레지스터의 값이 저장되고 불러오는 등의 작업이 수행되기 때문에 시스템에 많은 부담을 준다.

컨텍스트 스위칭 과정에서 Process A가 Process B로 컨텍스트 스위칭 될 때 Process B가 바로 idle->excute 되는 것이 아니라 idle 상태에서 조금 있다가 excute 되는 것을 확인할 수 있다.

  • 컨텍스트 스위칭 오버헤드가 발생하는 행위
    • PCB 저장 및 복원 비용
    • CPU 캐시 메모리 무효화에 따른 비용
    • 프로세스 스케줄링 비용
profile
블로그 이전합니다 -> https://heekyoung2000.tistory.com/

0개의 댓글

관련 채용 정보