[혼자 공부하는] Process와 CPU Scheduling

AIRIMI·2025년 2월 4일
0

혼공컴운

목록 보기
4/7
post-thumbnail

위 썸네일은 제가 window 유저인데 전공수업에서 과제를 하고 공부하는데 사용하기 위해 virtual machine을 통해 linux 환경에서 실습한 사진입니다! 너무 신기했어요😳

!왜 운영체제를 배울까

대부분 오류 메세지의 발신자는 운영체제로 우리가 작성한 코드를 실행하는 과정에서 하드웨어 측면에서 문제가 생길 시에 오류 메세지가 출력된다. 이때 운영체제를 배우면 이 오류메세지를 이해하고 문제를 파악해 해결해나갈 수 있는 잠재력을 키울 수 있다.

📋Ch.09 운영체제 시작하기


운영체제는 실행 프로그램에 맞는 자원할당과 여러 지원을 관할하는 프로그램.
운영체제도 프로그램이기에 메모리에 적재되는데 특히 커널 영역에 해당한다.
이외 일반적인 응용 프로그램은 사용자 영역에 적재된다.
이때 사용자 영역의 메모리를 관리하는 것이 윤영체제이고 메모리 외에 CPU 사용이나 프로세스, 파일시스템 등 여러 자원을 관리해준다.

**UI(User Interface)/GUI(Graphical User Interface)/CLI(Command Line Interface)

따라서 운영체제는 하드웨어와 응용프로그램들 사이에서 관리를 하는 프로그램이며 이는 이중모드(Dual Mode)로써 구현된다.
*CPU가 명령어를 실행하는 모드를 사용자 모드(OS서비스를 받을 수 없는 실행모드)와 커널 모드(커널영역의 코드를 실행할 수 있는 모드=>자원에 접근할 수 있음)로 구분하는 방식.

이때 사용자영역의 응용 프로그램이 OS서비스를 받기 위해 운영체제에 커널모드로 전환해달라는 요청을 하는데 이를 시스템 호출(System Call)이라 한다.

즉, system call을 통해 사용자에서 커널모드로 전환이 가능.

*System call은 일종의 인터럽트로 특히 명령어에 의해 발생하는 소프트웨어 인터럽트이다.

📇Ch.10 프로세스와 스레드


*프로세스 : 실행 중인 프로그램으로 ps -ef 명령어나 여러 옵션들의 조합으로 이를 확인할 수 있다.

*프로세스 제어블록(PCB) : 운영체제가 프로세스에 CPU등의 자원을 배분하는데 이용하는 것. (프로세스 관련 정보를 저장하는 자료구조)

=> PCB에는 PID, Reg값, 프로세스 상태, CPU 스케줄링 정보, 메모리 관리 정보, 파일, 입출력장치 존재

*문맥 교환 : 프로세스 수행을 재개하기 위해 기억해야할 정보를 문맥이라 함. 문맥 교환은 기존 프로세스의 문맥을 PCB에 백업해두고 새 프로세스를 실행하기 위해 PCB로부터 복구해 실행하는 것.

Process


프로세스 상태의 종류:

  • 생성
  • 준비
  • 실행
  • 대기
  • 종료

위를 다이어그램으로 간단히 표현하면 다음과 같다.

프로세스는 부모 프로세스와 자식 프로세스가 존재하며 모든 프로세스들은 고유한 PID를 가진다. 이때 부모 프로세스의 PID는 PPID이다.
PID가 작을 수록 프로세스 계층 구조에서 트리의 root에 가까운 프로세스라고 생각할 수 있다.

**또한 프로세스는 그룹을 가질 수 있으며 이 관계는 아래 그림과 같다.

프로세스 생성 기법과 관련해서는 주로 fork 명령어로 부모 프로세스에서 복사본의 형식으로 자식 프로세스를 생성할 수 있다.

fork와 달리 exec 함수군을 사용하면 인자로 받은 프로그램을 자신이 호출한 프로세스의 메모리에 덮어쓸 수 있다.
fork와 exec는 모두 시스템 호출로 이 둘을 응용해 fork를 통해 복사본을 만들고 자식프로세스가 exec 함수를 통해 새로운 프로그램으로 실행 가능하다.

아래의 프로세스 구조 사진에서 exec를 사용하면 기존의 스택, 힙, 데이터, 텍스트 영역이 새로운 영역들로 채워진다.

Thread


thread는 실행 단위로, 한 프로세스가 여러 스레드를 가질 수 있다.

스레드라는 개념 이전에는 한 프로세스가 한 번에 하나의 일만 처리했다면 멀티 스레드를 통해 한 프로세스가 한 번에 여러 일을 동시에 처리할 수 있게 되었다.

*이때 멀티스레드에서 스레드들은 PC를 포함한 Reg나 스택과 같은 실행에 필요한 '최소 정보'를 유지한 채 프로세스 자원을 공유하며 실행된다.

=> 이에 여러 프로세스를 병행 실행한 것보다 메모리를 효율적으로 사용 가능하고 자원을 공유하기에 상호간의 통산에 유리하다. 그러나 이런 특성때문에 하나의 스레드에 문제가 생기면 전체가 문제 발생의 위험에 노출된다.

🧮Ch.11 CPU 스케줄링


Process Priority

CPU Scheduling : OS가 프로세스들에 CPU 자원을 배분하는 것
=> '어떻게'? : '우선순위'에 따라

우선순위가 높은 프로세스 : 입출력 작업이 많은 프로세스
=> '왜'? : 입출력 집중 프로세스CPU 집중 프로세스로 나눌 때, 입출력 집중 프로세스보다 CPU 집중 프로세스가 CPU 사용량이 더 많으므로 먼저 입출력 집중 프로세스를 실행시켜주고 이후 CPU 집중 프로세스를 실행시켜 효율적으로 조율.

이에 OS는 프로세스마다 우선순위(Priority)를 PCB에 명시하고 이에 따라 실행시킨다.

*ps -el 명령으로 확인 가능.

Scheduling Queue

따라서 OS는 PCB에 적힌 우선순위를 다 열어보고 줄을 세워 실행시키는데 이게 여간 일이 아니기에 스케줄링 큐를 사용한다.

스케줄링 큐 : 기존 큐와 달리 반드시 LIFO일 필요는 없으며 사용을 원하는 부품에 따른 줄을 서서 관리하는 자료구조.

  • 선점형 스케줄링(Preemptive) : 매직패스처럼 합법적 새치기 가능 (강제로 자원을 빼앗아 모든 프로세스들은 독점적 자원사용이 불가능) => 효율이 극대화 but 오버헤드 발생
  • 비선점형 스케줄링(Non-preemptive) : 중간 끼어들기가 불가능한 스케줄링 방식. 종료나 대기상태에 들어가야 다른 프로세스가 자원을 사용 가능. => 효율이 떨어질 수 있음.

CPU Scheduling Algorithm

관련 알고리즘은 다음과 같이 다양하다.

선입선처리 (FCFS)

First Come First Served

  • queue에 쌓인 순서대로 프로세스를 처리
  • 비선점형 스케줄링 방식
  • 단점
    • Convoy effect (호위 효과) : 간혹 대기 시간이 매우 길어질 수 있음

최단 작업 우선 (SJF)

Shortest Job First

  • CPU 사용시간이 가장 짧은 프로세스 우선 실행
  • 기본적으론 비선점형 스케줄링 / 선점형으로도 구현 가능

라운드 로빈 (RR)

round robin

  • FCFS에 타임 슬라이스 개념을 합친 방식
    • : 프로세스의 CPU 사용시간을 정해두는 것
  • 선점형 스케줄링

따라서 FCFS와 달리 정해진 타임슬라이스가 지나면 문맥 교환이 일어나고 해당 시간에 다 수행되지 못한 프로세스는 큐의 꼬리에 다시 삽입된다. (적절한 타임슬라이스 값이 중요!)

** 추가공부)
책에서는 time slice로 설명하는데 Time Quantum이 더 전문용어로 사용되는 것 같습니다.
추가적으로 RR 알고리즘의 Time Quantum 값 결정 관련하여 Time Quantum = tq라고 했을 때,

  • tq가 작아질수록
    • Context Switching(문맥교환)이 자주 발생해 오버헤드 증가
  • tq가 커질수록
    • FCFS에 가까워짐
    • 프로세스가 오래 실행되며 응답시간이 증가

따라서 적절한 Time Quantum 값을 찾기 위해서

  • 일반적으로 Time Quantum은 문맥교환 시간보다 충분히 크게 설정하는게 좋다.
  • 위 문맥교환(Time Switching)의 평균시간을 구해 그보다 큰 값으로 tq를 설정하면 오버헤드를 줄일 수 있다.

최소 잔여 시간 우선 (SRT)

Shortest Remaining Time

  • SJF + Round robin
  • 정해진 타임 슬라이스 대로 수행하지만 CPU를 사용할 다음 프로세스를 정하는 것은 최단 작업을 우선으로 하도록 한다.
  • 선점형 스케줄링

우선순위 (Priority)

  • 우선순위대로 실행
  • Starvation 문제 발생 가능(우선순위가 낮은 프로세스는 계속 실행이 밀리기에 발생)
  • Aging 기법을 사용(대기를 오래한 프로세스의 우선순위를 점차 높이기)

다단계 피드백 큐 (MLFQ)

Multi_level Feedback Queue

  • 우선순위별로 준비 큐를 여럿 사용
  • 우선순위가 높은 큐의 프로세스를 먼저 실행시키고 우선순위 0 큐가 비어있으면 우선순위 1의 프로세스들을 순차 실행
  • 이또한 Starvation 문제 발생 가능하므로 프로세스가 큐 사이를 이동 가능하게 함.

즉, 프로세스의 CPU 이용시간이 길면 우선순위가 낮은 큐로 이동시키고 Aging 기법을 사용해 다시 큐 사이로 이동시켜 Starvation 예방.

추가 탐구


위의 여러 알고리즘에 대해서 알아보다가 fair-share scheduling을 알게 되었고 탐구해보았습니다.

먼저 fair-share scheduling은 OS에서 CPU자원을 프로세스가 아닌 '사용자나 그룹 간에 공평하게 분배하는 스케줄링 알고리즘'입니다. 기존의 RR 같은 스케줄링은 프로세스 단위로 공정성을 보장하지만 사용자 간의 자원 분배는 고려하지 않는 개념이며 이에 Fair-Share Scheduling이 더 상위 개념입니다.

Fair-Share Scheduling의 주요 특징:

최근 Fair-Share Scheduling은 무엇이 있을까 보았더니 AWS Batch가 있었습니다.

https://aws.amazon.com/ko/blogs/hpc/deep-dive-on-fair-share-scheduling-in-aws-batch/?utm_source=chatgpt.com

후에 시간이 된다면 위 중의 MLFQ 구현을 해보고 싶네요!


HW

p. 304의 확인 문제 1번 풀고 인증하기 Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기

P.304 확인문제1

Q: 다음은 프로세스 상태를 보여주는 프로세스 상태 다이어그램입니다. 1부터 5까지 올바른 상태를적어보세요.
A:

Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기

답: 각 프로세스 A->B->C->D 순서대로 CPU를 할당받는다. 선입선처리 스케줄링 알고리즘은 준비 큐에 먼저 삽입된 프로세스를 먼저 처리해주기 때문이다.


ps.

컴퓨터구조를 공부하시는데 영어원문 lecture 책을 찾으시다면 다음을 추천🙃

https://product.kyobobook.co.kr/detail/S000002261883

한국어 교재를 찾으신다면 다음을 추천드립니다. 🙂

https://www.hanbit.co.kr/store/books/look.php?p_code=B9177037040

0개의 댓글

관련 채용 정보