[TIL]리눅스 메모리 관리

김희산·2022년 12월 12일
0

TIL

목록 보기
9/23

운영체제 메모리 관리

메모리는 쉽게 설명하면 주소로 인덱싱을 하는 커다란 배열이라고 볼 수 있다.
컴퓨터가 부팅되면 운영체제와 사용자프로그램이 메모리에 차곡차곡 채워지면서 CPU를 점유할 기회를 노리고 있다.

CPU는 프로그래밍언어로 작성된 코드를 읽을 수가 없다. 그래서 바이너리 형태로 바꿔줘야 한다. 이 코드를 이진수로 바꿔주는 장치가 컴파일러이다.
각각 프로그램마다 중복되는 논리 주소(가상주소라고도 함) 를 가지고 있는데 같은 논리 주소를 가진다면 메모리에서 이걸 어떻게 구분할까?

논리주소에다가 하나의 주소값이 더 더해진다. 이것을 물리주소라고한다.
왜 곧장 물리주소로 변환하지 않고 굳이 논리주소로 한번 더 분리하는가?
CPU가 논리주소만 읽기 때문이다.
CPU는 논리주소만으로 물리 메모리에 올라와있는 프로세스들의 정보를 읽고 있다.

MMU

어떤 프로세스 인지도 모르는데 정보를 읽는게 어떻게 가능할까?
운영체제도 메모리에 올라와있는 프로세스 중 하나이기 때문에 소프트웨어적으로는 물리주소를 찾도록 도와줄 방법이 없다. 그래서 하드웨어적인 도움이 필요한데, 그 도움을 주는 장치가 MMU(Memory Management Unit) 이다.
MMU는 프로그램의 시작주소를 가진 Base register와 마지막 주소를 가진 Limit register와 간단한 산술연산기로 이루어져 있다. 이 mmu는 cpu를 사용중인 프로세스가 요청하는 논리주소에다가 Base register에 들어있는 시작주소를 더해서 물리주소로 변환시킨다.

이렇게 완성된 물리주소로 메모리에서 프로세스가 가진 정보를 찾아서 읽어올 수 있게 되는 것이다.

Swaping 기법

하지만 물리메모리에 프로세스의 정보들이 쌓일 때 이쁜 모양으로 차곡차곡 쌓이지 않고 다른 프로세스 요청이왔을 때 메모리에 더이상 공간이 없다면 어떻게 할까?
이 때 다른 프로세스의 데이터를 내려버리고 요청이 온 프로세스를 올려버린다.
이것을 스와핑기법이라고 한다.

Paging 기법

하지만 스와핑할 프로세스를 고르는 것도 일이다. ( 프로세스를 하나씩 다 검사하면 시간이 오래 걸린다.)
그래서 당장 필요한 페이지만 올리고 나머지는 스왑공간에 보관하는 페이징 기법이 사용된다.
여러 프로세스의 페이지들이 섞여져서 물리메모리의 프레임에 올라간다.
덕분에 메모리 낭비는 줄었지만 서로 다른 프로세스들의 페이지들이 여기저기 도포되있어서 페이지들의 순서를 보장 할 수가 없기 때문에 mmu의 계산이 복잡해진다.

Page table

이러한 페이지들을 조회하기 위해서 논리주소-물리주소 변환을 위한 별도의 페이지테이블을 사용하기 시작한다.
그에 따라서 mmu 레지스터들의 이름과 용도도 조금 달라진다.
cpu가 mmu한테 논리적인 주소로 요청을 하게 되면, 페이지 테이블을 참조해서 찾아낸 frame 주소로 이동해 해당 page의 정보를 읽어온다.
그런데 이 페이지 테이블도 물리메모리에 올라간다. 또 물리메모리 공간이 부족해진다. 그래서 프로세스끼리 공통되게 사용하는 부분을 shared page 라고 정하고 Read-only 권한을 부여한다. (서로 동일한 논리 주소 가져야 함)

TLB

이제 page table을 메모리에 저장한 만큼 공간은 다시 확보했는데 페이지테이블도 메모리에 위치하기 때문에 cpu가 정보 요청을 한 번 할 때마다 메모리를 2번씩 접근해야함. ( 메모리접근 + 페이지테이블 접근 )

추가적인 하드웨어의 지원이 필요한데 이때 TLB(Translation look-aside buffers) 를 이용한다. 페이지 테이블을 보기전 mmu가 먼저 확인하는 캐시메모리 라고 생각하면 된다.
병렬적으로 한꺼번에 자신이 가진 정보를 조회해주는 역할을 한다.
cpu가 논리 주소로 정보를 요청하면, page table에 접근하기 전, 우선 TLB부터 확인하고 TLB에 매칭되는 주소가 있으면 프레임주소로 바로 변환을 진행하고 메인 메모리에서 가져온다.(메모리 한번 접근)

메모리 관리 방법 정리

  1. 현대 메모리는 paging 기법을 베이스로 채택

  2. 하드디스크를 Swap area(스왑공간) 으로 활용한다.

  3. MMU,TLB 같은 하드웨어들의 지원을 받아 Page Table을 확인하고 메모리를 참조한다.

출처 : https://www.youtube.com/watch?v=qxmdX449z1U

profile
성공은 제로섬 게임이 아니라 주변인들과 함께 나아가는 것이다.

0개의 댓글