이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[Operating System] Thrasing

  • 2025.06.08 13:49
  • Computer Science/Operating System
반응형

 

 

 

Degree of Multiprogramming은 메모리에 들어온 프로세스의 수를 의미한다. (프로세스의 일부 포함)

당연히 가상 메모리 방식을 사용하면 Degree of Multiprogramming이 커진다. 

 

Demand Paging 방식을 사용하면 메모리에 프로세스가 더 많이 들어오면서 CPU의 활용도가 늘어난다. 

 

 

 

 

 

Degree of Multiprogramming이 어느정도 증가하면 CPU 활용도가 오히려 더 낮아진다.

 

CPU 활용도가 늘어나지 않으니 운영체제는 CPU가 할 일이 없다고 판단해 New 상태에 있는 프로세스를 메모리에 넣어준다.

메모리의 용량은 한정되어있는데, 프로세스의 수가 계속해서 증가하면 한 프로세스가 차지하는 Page 수가 줄어들게 된다. 

프로그램을 제대로 실행하려면 프로그램의 Locality에 해당하는 부분이 메모리에 모두 올라와 있어야 하는데, 메모리 공간이 부족해 모두 올라오지 못하는 경우가 발생한다. 

 

 

 

 

 

겹치는 부분을 실행할 때 마다 Page Fault가 발생해 성능이 매우 떨어진다. 

 

Degree of Multiprogramming이 너무 커서 발생한 문제니까 해당 값을 줄여서 해결해보자.

우측 그림에서는 프로세스 해당 값이 3인데, 2로 줄이면 Page Fault 없이 효과적으로 프로세스를 실행할 수 있다. 

 

프로세스를 보조기억장치로 잠시 보내 공간을 확보하자.

 

 

 

 


 

 

 

Resident Set은 프로세스에 올라온 메모리들에 대해, 그 메모리들을 구성하는 Page의 집합을 의미한다. 

Resident Set의 크기를 정하는 방식으로는 Fixed-Allocation과 Variable-Allocation 방식이 있다. 

 

 

Fixed-Allocation

Page Fault가 발생해 Page Replacement 수행 시 제거될 페이지는 이미 자신이 가지고 있는 페이지 중 하나를 선택하는 Local Scope를 가진다.

 

Variable-Allocation 

할당받는 Frame의 수가 변할 수 있다. 이 때 Local Scope, Global Scope 모두 가질 수 있다. 

처음에는 Local Scope로 수행하다가도, 운영체제는 특정 프로세스가 Page Fault를 많이 발생시키면 해당 프로세스에게 메모리 Frame을 좀 더 할당해준다. 

 

Global Scope는 Page Fault가 발생했을 때 해당 프로세스가 가진 Page 뿐만 아니라 메모리에 올라온 모든 프로세스들의 Page를 교체 후보에 추가한다. 

 

프로세스에게 배정되는 Memory Frame의 수가 상황에 따라 변한다.

다른 프로세스의 Page를 뺏어서 사용할 수 있기에 적당한 수를 유지해야 한다.

 

 

 

 

 

운영체제는 Page-Fault Frequency Scheme을 사용한다.

 

Page Fault를 너무 많이 당하면 Memory Frame 수를 늘려주고, Page Fault를 너무 적게 당하면 Memory Frame 수를 줄인다.

Upper Bound와 Lower Bound를 둬서 적당한 수를 맞춰준다. 

 

모든 프로세스가 상한선과 하한선 안쪽에 위치하도록 해야 프로세스를 효과적으로 관리할 수 있다.

 

int arr[][] = new int[1024][1024];

 

이 이차원 배열을 초기화한다고 생각해보자.

이중 for 문을 돌텐데.. 행 기준 순회 / 열 기준 순회 -> 각 경우마다 Page Fault를 당할 수도, 당하지 않을 수도 있다. 

열 기준 순회 시 Page Fault를 1024배 덜 걸리니, 열 기준 순회를 사용하는 편이 훨씬 합리적이다.

 

사실상 메모리 관리는 운영체제가 알아서 해주니 관련 지식을 공부하지 않아도 된다고 생각할 수 있지만 

위의 이차원배열 초기화 예시처럼 메모리 관리를 어떻게 하는지 알고 있어야 더 효과적인 코드를 작성할 수 있는 경우가 많다. 

 

 

반응형
저작자표시 (새창열림)

'Computer Science > Operating System' 카테고리의 다른 글

[Operating System] Process Scheduling  (0) 2025.06.09
[Operating System] Page Replacement  (0) 2025.06.05
[Operating System] Multi-Level Page Table  (1) 2025.06.04
[Operating System] Demand Paging  (0) 2025.06.03
[Operating System] Paging / Segmentation  (0) 2025.06.03

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Operating System] Process Scheduling

    [Operating System] Process Scheduling

    2025.06.09
  • [Operating System] Page Replacement

    [Operating System] Page Replacement

    2025.06.05
  • [Operating System] Multi-Level Page Table

    [Operating System] Multi-Level Page Table

    2025.06.04
  • [Operating System] Demand Paging

    [Operating System] Demand Paging

    2025.06.03
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (679) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (10)
    • 💬 기록 (8) N
    • 📚 공부 (6)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바