혼공컴운_6주차_CH14_CH15 가상 메모리, 파일 시스템

빡커·2025년 2월 23일
0

CH14 가상 메모리



14-1 연속 메모리 할당

스와핑 swapping

실행 중이지 않은 프로세스를 보조기억장치로 옮겨 놓았다가 필요할때 다시 불러오는 동작을 스와핑이라고 함.

swap-out: 현재 필요없는 프로세스가 보조기억장치로 가는거

swap-in: 다시 메모리로 돌아오는거

메모리 할당 memory allocation

  1. 최초 적합 first fit: 할당 가능한 빈공간을 최초로 발견한 곳에 할당
  2. 최적 적합 best fit: 메모리를 전부 탐색하며 할당 가능한 공간 중 가장 작은 곳에 딱 맞게 할당
  3. 최악 적합 worst fit: 메모리를 전부 탐색하고 할당 가능한 공산 중 가장 큰 곳에 쓸데 없이 할당

단편화 fragmentation

정의: 여러 개의 조각으로 나뉘는 현상. 대상은 일반적으로 공간 혹은 자료이다.

외부 단편화 external fragmentation

커다란 메모리가 프로세스의 스와핑 결과 중간 중간 뻥뻥 뚫리게 된다. 이는 아무리 큰 메모리라 하더라도 결국 이전에 할당 된 크기 만큼의 메모리 여러개로 나눠 진거나 마찬가지다.

외부라는 의미는 프로세스 밖에 단편화된 메모리 조각들이 생기기에 외부 단편화라고 한다

내부 단편화 internal fragmentation

프로세스에 필요한 메모리 조각은 운영체제가 관리하는 최소 단위의 배수로 딱딱 떨어지지 않을 수 있다. 그럴 경우 운영체제가 할당하는 블록 내부에 빈공간이 생길 수 밖에 없는데 이는 곧 메모리의 단편화라고 할 수 있다.

프로세스의 내부에 생기기에 내부 단편화라고 한다. 당연히 앞서 본 외부 단편화의 크기 보다는 훨씬 작을 수 밖에 없긴하다

연속할당에서 단편화 문제

특히 외부 단편화에 있어 치명적이다.

왜냐하면, 프로세스가 한 뭉태기로 메모리에 실려 있어야 되는데, 스와핑의 결과 불가능한 단위 크기만큼 무수히 많은 외부 단편화가 일어나 있다면, 그 공간을 전부 다 못쓰게 되기 때문이다.

이를 극복하기 위해 페이징 개념이 등장하게 된다. 혹은 외부 단편화를 해결하기위해 적재된 프로세스들을 차곡히 정렬하는 메모리 압축memory compaction 도 방법이지만, 주소를 하나하나 옮기는 과정에서 무수히 많은 오버헤드가 발생하고 스와핑이 일어날때마다 해줘야되면 감당이 안됨

확인 문제

1️⃣ 메모리 할당 방식에 대한 설명으로 올바른 것 매칭

  • 최초로 발견한 적재 가능한 빈 공간에 프로세스 배치: ( )
  • 프로세스가 적재될 수 잇는 가장 큰 공간에 프로세스 배치: ( )
  • 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스 배치:( )
더 보기
최초 적합, 최악 적합, 최적 적합


2️⃣ 외부 단편화 설명 옳지 않은 것

  1. 외부 단편화가 발생하면 메모리가 낭비됨
  2. 가상 메모리 기법 주 페이징을 사용하면 외부 단편화 해결 가능
  3. 메모리 압축을 통해 외부 단편화를 해결할 수 있음
  4. 외부 단편화가 발생한 공간에 모든 프로세스 배치할 수 있음
더 보기
4번 외부 단편화가 발생하면 배치 할 수 없는 프로세스들이 발생할 수 있음. 연속할당이라면


3️⃣ 메모리 스와핑에 대한 설명으로 옳은 것은?

  1. 메모리에서 보조기억장치로 가는게 스왑 인
  2. 보조기억장치에서 메모리로 오는게 스왑 아웃
  3. CPU 관리 기법
  4. 메모리에서 사용되지 않는 일부 프로세스를 보조기억장치로 내보내고 실행할 프로세스는 메모리에 적재하는 기법
더 보기
4번 그냥 정의


4️⃣ 연속 메모리 할당에 대한 설명 중 옳지 않은것

  1. 외부 단편화가 발생하지 않는다
  2. 프로세스를 메모리에 연속적으로 할당한다
  3. 메모리 스와핑을 이용할 수 있다
  4. 최초 적합, 최적 적합, 최악 적합으로 프로세스를 적재할 수 있다.
더 보기
1번. 스와핑이 일어난다는 조건이면 외부 단편화가 일어나는거고, 이때 연속할당 시스템이면 특히 외부 단편화에 취약하다.


14-2 페이징을 통한 가상 메모리 관리

페이징, 프레임

페이징 paging: 프로세스의 근본은 연속된 논리 주소를 가져야 한다. 그러나 이렇게 되면 너무 나도 좋겠지만, 현실적으로 메모리 외부 단편화에 너무 취약하기 때문에 연속된 공간이 아닌 분산된 공간에 저장하더라도 마치 연속으로 저장되어 있는 거 마냥 사용 할 수 있다면 좋을거 같아서 만들어진 개념이 페이징

프레임 frame: 논리주소는 그렇다치고 실제 물리 주소가 있을거 아닌가. 이때 메모리를 관리하는 운영체제 및 하드웨어 입장에서 유동적으로 1byte 단위까지 유연하게 처리할 수 있게 해버리면 설계가 너무 어려워진다. 그래서 설계 용이한 단위로다가 메모리를 나눈것이다. 메모리의 총 공간을 일정 크기 단위로 나눌때 그 단위가 프레임이다.

페이지 인, 페이지 아웃, 내부 단편화

페이지 인: 스왑 인이 프로세스 통짜로 메모리에 적재하는 거면, 페이지 인은 그 바라보면 대상이 페이지로 바뀐 것이다.

페이지 아웃: 사용 안하는 페이지는 보조기억장치로 옮겨지는 현상

내부 단편화: 프레임으로 메모리를 관리하는 개념이 도입되는 순간, 사용하지 못하는 공간이 발생하게 된다. 땅을 일정 건물로 다 나눠놓았는데 누구는 그 공간을 다 쓰고 누구는 그 공간을 낭비할 수도 있는 거다. 그런 개념이 발생할 수 밖에 없다, 원인은 프레임

페이지 테이블

페이지를 분산된 프레임 속에 적절하게 배치한다고 할때 CPU 입장에서는 당황스럽다. 명령어 자체는 그냥 바로 다음 주소인데 실제 논리주소와 물리 주소간 차이 발생하기 때문이다. 이 모든걸 해결해 주는게 페이지 테이블이다.

논리 주소에 매칭되어 실제 프레임 주소를 반환해주는 테이블을 이용해 오류 없이 계산한다.

각 프로세스 마다 페이지 테이블이 존재하고, 이 페이지 테이블은 메모리에 따로 적재되어 있으며, 해당 페이지 테이블의 주소는 CPU의 레지스터에 저장되어 있는데 그게 바로 페이지 테이블 베이스 레지스터 PTBR; Page Table Base Register이다. 레지스터에 주소를 올려 놓은 것만으로도 메모리에 연속적으로 접근해야되는 수고를 덜어준다.

그런데 이렇게 주소만 가지고 있어도 어차피 메모리를 한 번 이상 접근해야되는건 똑같다. 그래서 이를 극복하기 위해 MMU 안에 TLB; Translation Lookaside Buffer라는 캐시메모리를 두어 메모리 접근 없이도 바로 메모리 주소 참조할 수 있게하는 방식으로 성능을 향상시킨다.

페이징 주소 변환

핵심은. 명령어는 결국 페이지+ 변위이다.

더 구체적으로 만약 페이지의 단위가 4096이라 했을때, 논리주소 10000은 4096으로 나누면 페이지 번호이다. 그리고 논리주소를 4096으로 나눈 나머지가 변위가 되게 된다. 이게 페이지번호와 변위로 이루어져 있다는 의미이다.

페이지 번호로 찾아간 뒤 변위를 더해 필요한 주소값에 접근한다. 이때 페이지 번호와 매칭되는 값은 프레임 번호이고, 그것이 저장된 테이블이 페이지 테이블임.

페이지 테이블 엔트리

페이지 테이블 한 행 한 행을 페이지 테이블 엔트리라고 한다.
페이지 테이블 엔트리의 핵심은 페이지 주소를 실제 프레임주소로 매칭시키는것. 그 외 여러 정보들이 저장되어 있다. 유효 비트 부호 비트 참조 비트 수정 비트

유효 비트 valid bit

페이지도 스와핑을 한다. 막 실행중인 프로세스라고 하더라도, 페이지 단위로 페이지 아웃이 되어 있을 수 있다. 페이지 아웃이 일어나 잇는 상태면 유효비트 == 0, 페이지 인 되어 있는 상태면 유효 비트 == 1

존재 이유: 메모리에 없으면 참조 명령어가 일어날 때 페이지 폴트 예외를 발생시키고 폴트 처리 루틴을 수행한 뒤에 돌아와서 에러 없게 한다.

보호 비트 protection bit

이진 보호 비트 : 읽기만 가능한 상태면 0 쓰기도 가능한 상태면 1

복잡한 보호 비트: r, w, x 등의 구체적인 보호 비트를 두고서 true면 1 false면 0을 두는 방식

존재 이유: 보호 비트가 없는 채로 읽기 쓰기 명령이 막 일어나면 데이터 무결성을 해친다.

참조 비트 reference bit

cpu가 참조한 적있는지 아직 사용안했는지를 구별하는 비트

존재 이유: 페이지 교체 알고리즘에서 사용됨. LRU; Least Recently Used 페이지 교체 알고리즘은 참조비트 값을 비교하여 어떤 녀석을 페이지 아웃 시킬지 결정하기 때문

수정 비트 modified bit

변경된 적이 있는지 없는지를 구별하는 비트

존재 이유: 디스크 저장 하드웨어 사용 자원 효율 향상에 필요함. 한번도 수정된 적이 없는 페이지는 디스크에 저장할 필요가 없기에 그냥 날려버리면 됨.

확인문제

1️⃣ 페이징에 대한 설명으로 옳지 않은 것을 골라보세요.

  1. 페이징은 가상 메모리 관리 기법
  2. 페이징을 이용하면 물리 메모리보다 큰 프로세스도 실행 할 수 있음
  3. PTBR은 각 프로세스가 적재된 페이지 테이블을 가리킵니다.
  4. TLB 히트가 발생하면 CPU는 메모리에 두 번 접근해야한다.
더 보기
4. 반대이다. TLB 히트가 메모리에서 TLB에 가져올 필요가 없는 거다.


2️⃣ 3️⃣ 4️⃣

CH15 파일 시스템

profile
난민

0개의 댓글