프로세스와 스케줄링 정리

JACKJACK·2022년 10월 30일
1
post-custom-banner

📝프로세스란?

프로그램이 메모리에 적재되어 CPU을 할당받아 실행되는 순간 프로세스라고 불린다. 즉 실행중인 프로그램 이다. 프로세스는 하나 이상의 스레드를 가지고있으며 스레드 단위로 스케줄링을 한다.

📝프로그램의 메모리 할당

스케줄링의 설명에 앞서 프로그램은 메모리에 적재되어야 CPU에서 접근이 가능하며 메모리 공간은 Code, Data, Stack, Heap 4개 영역으로 이루어져 각 프로세스마다 독립적으로 할당을 받는다.

  • Code : 실행파일(프로그램)의 코드를 저장
  • Data : 프로그램의 전역변수와 정적인 변수들을 저장
  • Heap : 동적으로 할당되는 메모리 영역 으로 프로그래머가 공간을 할당, 해제한다.(c, c++,java에 따라 다름 java는 new할당/가비지컬렉터가 해제)
  • Stack : 지역변수와 함수 호출 시 생성되는 파라미터가 저장되는 임시 메모리 영역

할당받은 메모리의 프로그램 코드를 토대로 CPU가 연산을 수행해하면 프로세스가 생기는데 이 때 어떤 코드를 읽을지 PC(ProgramCounter) register가 실행할 코드의 주소값의 목록을 저장하며 순차적으로 가리켜준다.

📝스케줄링이란?

CPU가 프로세스의 할당 순서 및 방법을 결정해 일정한 기준으로 실행하는 것

스케줄링 방법에는 크게 선점, 비선점 스케줄링 두가지가 있고 대부분의 OS는 선점의 라운드로빈 알고리즘, 비선점의 우선순위 알고리즘 두가지를 번갈아 쓴다.

  • 선점 스케줄링
    어느 프로세스가 CPU를 점유할 때 우선순위에 따라 다른 프로세스가 CPU를 점유를 가져올 수(선점) 있는 장점이 있다. 반면에 선점이 일어나면 프로세스에 오버헤드가 발생해 처리시간을 예측하기가 힘들다는 단점도 있다.

    우선순위 알고리즘 : Priority 값에 맞게 우선순위가 높은 순으로 스케줄링을 진행해줌. 프로세스의 우선순위가 낮을 때 새로운 프로세스가 자꾸 들어오면 starvation(굶주림) 발생 -> aging(시간이 지날수록 우선순위를 높여줌)방법으로 해결이 가능하다.
    라운드로빈 알고리즘: 프로세스간에 우선순위를 두지않고 시간단위로 CPU를 할당하는 스케줄링 방식, 각 프로세스에 사용시간을 할당하고 사용시간이 지나면 다른 프로세스의 실행으로 넘어가는 방식. context switch의 오버헤드는 크지만 응답시간은 짧은 장점이 있어 실시간 시스템에 유리

  • 비선점 스케줄링
    어느 프로세스가 CPU를 점유하고 있다면 다른 프로세스가 CPU를 강제로 점유할 수 없으며 기존 프로세스의 실행이 완료된 후에 스케줄링이 가능하다.

💡결론

- 프로세스는 실행중인 프로그램이며 프로세스는 하나이상의 스레드를 가지고 있다.

- 메모리에 적재된 프로세스는 CPU가 스케줄링을 통해 실행한다.

profile
러닝커브를 빠르게 높이자🎢
post-custom-banner

0개의 댓글