간만의 TIL..
화요일 부로 Pintos Project3가 시작되었다... 새로운 조에서 새로운 팀원과 새로운 방식으로 학습을 시작한다.
이번 프로젝트는 일단 금요일까지 과제설명서를 읽고 공부한 뒤에 토요일부터 같이 구현을 하는 방식으로 진행할 계획이다.
이번 3주 간의 나의 학습 방향은 다음과 같다.
1. Kaist-Pintos 과제설명서를 최대한 열심히 읽고 내용을 파악한다.
2. 핀토스 과제를 수행하는 것을 우선으로 하고 그때마다 필요한 만큼 지식을 습득한다.
3. 점차 지식을 구체화시키는 방식으로 학습을 한다.
일단 이해할 수 있는 쉬운 형태로 개념을 받아들여보자. 과제 계획서를 읽으면서 몰랐던 개념들에 대해 간략하게 공부해보면서 정리했다.
Provides sector-based read and write access to block device. You will use this interface to access the swap partition as a block device.
블록 디바이스로의 섹터 기반 읽기/쓰기를 제공합니다. 이 인터페이스는 블록 디바이스로 스왑 파티션에 접근할 때 사용하게 될 겁니다.
라는 부분을 읽고 스왑 파티션에 대해 정리해 보았다.
이번 주차의 주제가 가상 메모리인 만큼 가상 메모리에 대해 간략하게 정리해 보았다.
각 프로그램에 실제 메모리의 주소가 아닌 가상의 메모리의 주소를 주는 방식이다.
가상메모리를 이용하여 실제 물리 메모리가 가진 크기보다 논리적으로 확장하여 사용할 수 있다.
가상메모리 시스템에서는 각 프로그램은 가상 메모리의 주소를 가지고 CPU가 메모리 참조를 시도할 때에는 MMU를 통해 해당 가상주소를 실제 물리주소로 변환시켜서 메모리 참조가 이루어진다.
페이징에 대해서는 아직 개념 정도만 익혀서 이게 뭐구나 정도만 받아들일 수 있는 상태이다.
내일 조금 더 구체적으로 공부해봐야겠다.
운영체제에서 메모리 관리하는 방식 중 하나.
메모리의 가상 주소 공간을 가변 크기의 조각으로 분할하는 방식이 Segmentation이라고 한다면,
동일 크기의 조각으로 분할하는 것을 페이징이라고 한다.
가상 주소 공간을 고정된 크기로 나누는데 이 크기 단위를 page라고 한다. 이에 대응하는 실제 물리 메모리의 주소를 page frame이라고 한다.
1. 구현의 선택지 선택 - 배열 / 리스트 / 비트맵 / 해시
핀토스에서 보조페이지테이블, 프레임테이블, 스왑테이블을 구현해야한다.
이를 위해서 각각 다른 자료구조를 선택하여 구현해도 되고 같은 자료구조로 구현해도 된다.
일단 각 자료구조를 선택할 때 얻을 수 있는 장단점을 비교해보았다.
배열 : 단순한 구현이지만, 밀도가 희박한 배열은 오히려 메모리를 낭비시킨다. 예를 들어 실제로 크기는 1,000,000만큼 할당했지만 3만큼만 사용하는 경우 밀도가 희박하다고 하며 사용하는 크기에 비해 너무 큰 크기를 할당하여 메모리 낭비가 생길 수 있다.
리스트 :특정 위치를 찾기 위해 긴 리스트를 순회하면 시간이 오래 걸린다.. 선형 탐색이기 때문에... 그래도 중간 부분의 삽입과 삭제에서는 리스트가 효율적이다.
비트맵 : 동일한 자원 집합 내부의 사용현황을 확인할 수 있다. 자원 n이 사용중이라면 비트 n = true로 설정한다. Pintos의 비트맵은 크기가 고정적이다. 물론 가변적으로 추가적으로 구현할 수 있다.
해쉬맵 : 특정위치를 찾을 때 key를 활용하여 빠르게 탐색을 수행할 수 있다. 중간 부분의 삽입과 삭제가 가능하다. 또한 크기가 가변적이다.
이러한 특성들을 비교했을 때는 일단 해쉬맵이 적절한 판단으로 보여진다. 탐색, 삽입, 삭제 부분에서 key를 통해 빠르게 이뤄질 수 있다. 또한 이미 구현되어있는 해쉬맵 구조만으로도 가변적인 형태이기 때문에 비트맵보다 더 좋은 선택일 것으로 생각된다.