TIL

[운영체제 14~15강] 프로세스 메모리 할당 그리고 파일 상태

qbinee 2022. 9. 20. 22:58

14장 메모리 할당

당신의 노트북 메모리가 몇인가

나는 16기가 이다.

그렇다면 나는 얼마나 쓰고있을까

11기가를 쓰고있다.

 

근데 만약 프로그램을 전체 다 올린다고 생각했을때 카카오톡만 해도 약 1.3기가 이다.

 

정작 위 그림을 보았을떄는 700메가 정도만 사용중이다

 

이것이 어떻게 가능한 것일까

 

그리고 내가 많은 어플을 틀었는데도, 16기가에 모두 담을수 있던 이유는 뭘까

스와핑

이를 가능케 하는것중 하나는 스와핑이라는 기능이다

메모리에 적재할 프로세스는 모두 필요한것이 다니다

안쓰는건 보조 기억장치에 넣으면 된다.

 

즉 쓰는건 스왑 인

안쓰는건 스왑 아웃

 

메모리 할당 방법

할당방법은 여러가지가 있는데

1. 순서대로 넣는 최초 적합

2. 빈공간을 찾아서 넣는 최적 적합

3. 빈공간을 찾아서 가장 큰 공간을 찾아 넣는 최악 적합

 

자 딱 생각나는 문제점이 무엇일까

그것은 바로 20/30/40/10 이였다가 30 과 10 이 나갔는데  40짜리 프로세스가 들어오는 경우를 생각하면 쉽다

20 / (30) / 40 / (10 ) 

쪼개 넣을수도 없고,, 우선은 40이 나가길 기다려야겠지?

이것이 문제가 된것이 바로 외부 단편화이다

 

문제점1: 외부 단편화 

우리의 프로그램이 돌아갈 메모리 공간은 별로 없기때문에 알뜰살뜰 잘써야 한다.

왜냐면 위 같은 경우는 30을 손해보지 않는가?

이러한 문제점을 외부 단편화 라고 한다.

 

문제점2: 물리 메모리의 한계

나는 돈이 없다고 가정하자 그래서 램이 4기가 짜리밖에 못써서 노트북에 카톡 하나밖에 못까는 것이다.

근데 노트북인데,, 카톡만 있으면 안된다.

 

즉 물리적 한계를 부딪칠수도있다는 것이다.

이런 물리적 한계를 넘어 이보다 더 큰 프로세스를 사용할 수 있어야한다

 

위에서 실제 카톡은 1.3기가인데, 사용램은 700이다.

이를 어떻게 해결하는 것일까

 

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

문제점 2의 물리적 한계를 넘고싶다,, 를 떠올리게 한게 가상 메모리이다.

문제점 1의 쪼개버리고 싶다.. 를 실행시킨게 가상 메모리를 이용하여 쪼개버린 기법중 하나인 페이징

 

해당 방법을 이용하면 외부 단편화와 한계점을 극복할 수 있다.

 

가상 메모리

실행하고자 하는 프로그램의 일부만 메모리에 적재하여 실제 물리 메모리보다 더 큰 프로세스를 실행할 수 있게 하는 것이다 .

 

기법은 2가지

1. 페이징

2. 세그맨테이션

 

책에서는 페이징만 다룬다

 

페이징

컴퓨터가 메인 메모리에서 사용하기 위해 2차 기억 장치로부터 데이터를 저장하고 검색하는 메모리 관리 기법이다.

 

즉 물리 주소 공간을 쪼개서 사용하고 싶다는 생각에서 나온 개념이다.

페이지와 프레임이라는 개념으로 나눈다.

 

쪼개서 넣는다고 해도 해당 프로그램이 어느 물리 주소에 할당되어있는지 알기 위해 가상 주소 공간을 사용한다.

 

1. 논리 주소 공간 = 페이지 

2. 물리 주소 공간  = 프레임

 

두 주소 공간의 페이지와 프레임의 크기를 같다

 

이때 프레임( 물리 주소 공간) 을 할당 받지 못하면 외부 저장장치에 저장된다,

 

논리 주소 공간

가상 주소를 이용한다. (p, d)의 순서쌍으로 나타낼 수 있다.

이는 메모리 관리 장치 (MMU)에 의하여 물리 주소로 변환된다.

 

즉 프로그래머가 신경써야할 부분은 해당 논리 주소 공간을 가진 가상 주소 공간만 신경쓰고 물리적 주소는 신경쓰지 않아도 된다는 뜻이다.

 

물리 주소와 가상 주소를 관리하는 법 : 페이지 테이블

페이지 테이블: 가상 메모리와 물리 주소를 순서쌍으로 정리해 짝지어 놓은 페이지 테이블이다.

해당 페이지 테이블을 이용하여 페이지를 관리한다.

 

그러나 페이지 테이블은

  • 페이지 테이블에 2^20개(2^32/2^12)의 정보가 저장되어야 하고, 항목 당 4바이트가 사용된다면 각 프로세스는 2의 22승, 즉 4MB의 페이지 테이블 공간을 물리메모리에 필요로 하게 된다.
  • 애초에 페이징이라는 것이 연속된 메모리에 공간을 할당하는 것이 불합리해서 그 문제를 해결하기 위해 고안된 것인데, 페이지 테이블 때문에 4MB라는 공간을 연속해서 사용해야 한다는 모순이 발생한다.

따라서 해결하기 위해 고안한 방법이 페이지 테이블에도 여러가지 기법이 있다.

1. 계층적 페이징

2. 해싱 페이지 테이블

3. 역 페이지 테이블

https://inuplace.tistory.com/352

 

[운영체제] 페이지 테이블

페이지 테이블의 구조 32비트 주소체계를 사용하는 경우 컴퓨터가 있다고 할 때, 주소 공간의 크기는 2의 32승이다. 페이지 하나의 크기가 4KB라면 이는 약 2^12이다. 페이지 테이블에 2^20개(2^32/2^12)

inuplace.tistory.com

 

페이지 테이블 엔트리

페이지 테이블의 레코드 이다. 아래와 같은 구조로 페이지 엔트리 즉 PTE 필드의 레코드는 아래와 같이 이루어져 있다.

  • 페이지 기본주소(Page base address)
  • 플래그 비트
    • 접근 비트(Accessed bit) : 페이지에 대한 접근이 있었는지를 나타낸다.
    • 변경 비트(Dirty bit) : 페이지 내용의 변경이 있었는지를 나타낸다.
    • 존재 비트(Present bit) : 현재 페이지에 할당된 프레임이 있는지를 나타낸다.
    • 읽기/쓰기 비트(Read/Write bit) : 읽기/쓰기에 대한 권한을 표시한다.

페이지 교체 알고리즘 

  1. OPT: Optimal : 앞으로 가장 오랫동안 사용되지 않을 페이지 교체
  2. FIFO: First In First Out: 
  3. LRU: Least Recently Used : 가장 오랫동안 사용되지 않은 페이지 교체
  4. LFU: Least Frequently Used : 참조 횟수가 가장 작은 페이지 교체
  5. MFU: Most Frequently Used : 참조 횟수가 가장 많은 페이지 교체
  6. NUR : Not Used Recently : 최근에 사용하지 않은 페이지 교체

프레임 할당

일반적으로 메모리에 올라가는 프로세스가 올라갈수록 CPU의 이용률이 올라간다 생각하지만, 특정 범위를 넘는경우 CPU 이용률이 감소하는 현상이 발생한다.

 

이유는, 프로세스가 증가할 수록 메인 메모리의 비어있는 프레임 개수는 줄어들게 되고, 모든 프레임이 가득차고 그 이후에도 계속 많아진다면

메모리와 backing store 사이에 page in/out 작업이 발생한다. 즉 디스크 I/O 작업을 하느라 CPU 가 할일을 멈추게 되는 일이 발생

이를 쓰레씽이라고 한다.

 

이것을 막기 위하여 프레임 할당에 기법이 여러가지가 있는데 해결 방법은 크게 2가지 이다

  • Global Replacement보다 Local Replacement를 사용하는 것이다. 하지만 이 경우에는 메모리 사용 효율이 떨어지는 단점이 있다.
  • 프로세스당 충분한/적절한 수의 프레임(메모리)을 할당한다.

기법의 대표적인 방식에는

- 균등 할당

- 비례 할당: 페이지 부재 비율의 상한선과 하한점을 설정하여 할당의 개수를 조절한다

- 작업 집합 모델 기반과 페이지 폴트율 기반 프레임 할당 방식:  특정 시간에 따라 사용하는 페이지 개수만큼의 프레임을 확인하여 할당한다.

 


15장 파일

파티셔닝

저장 장치의 논리적인 영역을 나누는 것

 

포매팅

파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지 결정하고, 새로운 데이터를 쓸 준비를 하는 작업

 

즉 파일 포매팅시 파일 시스템이 결정된다.

 

파일 할당 방법

파티셔닝을 통해 논리적 저장 구획을 나누고

포매팅을 통하여 어떤 파일 시스템을 사용할 것인지 확인한 후에

파일을 할당해야한다.

 

이 할당 기준을 블록으로 둔다.

 

연속 할당

각 파일에 대해 디스크 상의 연속된 블록을 할당하는 방법이다.

순서대로하면 이동 경로가 최소 그리고 빠른 I/O 성능을 가진다.

이는 동영상, 음악, VOD 같은 경우 사용된다.

 

단점은 페이징 할당시 단점과 동일하다

 

연결 할당

파일을 linked list의 형태로 저장을 하는 것을 말한다. 파일은 각자 디랙토리를 가지고 있는데 여기에는 어떤 block에 할당되어 있는지를 기억한다. 디렉토리에 제일 처음 저장되는 block을 가리키게 되고 각 block은 포인터를 저장을 위한 4바이트 이상을 가지고 있어서 다음 block을 지칭하게 된다.

이는 포인터를 사용하는데 해당 포인터가 끊어지면 접근이 불가하여 낮은 신뢰성 그리고 포인터를 이용함으로써 느려지는 속도가 단점이다.

 

 

색인 할당

파일 당 인덱스 block을 사용하여 파일을 할당하는 방법이다.

인덱스 block은 각 파일에 할당된 포인터를 저장하는 모음이다.

연결 할당과 같은 방식으로 할당을 하지만 인덱스 block을 둔다

 

순서대로 읽기 가능, 외부 단편화 없어지는 장점이 있다

 

그러나 페이징 테이블과 마찬가지고 인덱스 블록 할당에 의한 저장공간 손실이 발생한다.