일단 이것부터 알아야 한다.
공장에서 갓 만들어진 저장장치에는 그냥 판때기다(아니면 반도체 셀의 집합이거나).
저장장치에 데이터가 저장되려면 컨트롤러가 읽거나 쓸 수 있도록 섹터 sector로 나눠져 있어야 한다.
여기서 컨트롤러 controller는 시스템 버스 system bus에서의 데이터 전송을 수행하는 특수 전자 프로세서다.
NVM 페이지는 초기화되어야 하고 FTL이 생성되어야 한다.
이 과정을 저수준 포매팅 low-level formatting 또는 물리적 포매팅이라 한다.
라는데 NVM도 뭔지 모르겠고 FTL이 뭔지도 모르겠고 하여간 뭔 말인지 모르겠어서 좀 찾아보니 다음과 같다.
비휘발성 메모리는 ROM, 플래시 메모리, 디스크 등을 말한다.
여기서는 디스크 얘기를 하고 있으니까 NVM 페이지라는 건 Paging의 단위를 말하는 듯 함.
그럼 또 페이징도 봐야지...
물리적 메모리는 프레임 frame 단위로, 논리적 메모리는 페이지 page 단위로 분할된다.
두 단위는 같은 크기의 블록이다.
프로세스가 실행되면 그 프로세스의 페이지는 가용한 main memory의 frame으로 적재 load된다.
이 때 프로세스의 크기가 4frame이라면 실제 메모리에는 4개의 연속된 frame이 있어야 한다.
...는 너무 불편하고 비효율적(외부 단편화 external fragmentation)이라서 페이징이 쓰인다.
근데 페이징도 내부 단편화 internal fragmentation이 발생하긴 한다.
(10KB가 필요한데 page가 4KB라면 2KB의 internal fragmentation이 발생한다.)
꼭 물리적 메모리에 연속된 공간이 있을 필요가 없다.
실제로는 띄엄띄엄 저장되지만 논리적으로는 연속된 메모리에 저장된 걸로 치는 것이다.
그러니까 다음과 같은 구조가 가능해진다(왼쪽은 logical address space, 오른쪽은 physical address space).
이런 식으로의 접근이 가능한 건 페이지 테이블 page table 덕분.
NAND 반도체는 overwrite가 불가능하다. 한 번 쓰면 끝이라는 얘기.
때문에 일반적으로 invalid data가 포함된 페이지가 존재하며,
이를 위해 valid data가 포함된 페이지를 추적할 수단이 필요하다.
여기에 쓰이는 게 FTL; Flash Translation Layer이다.
FTL은 현재 valid page를 포함하는 물리적 페이지를 mapping하며, invalid data만 포함된 페이지만 포함되어 삭제할 수 있는 블록을 추적한다.
대충 쓸데없는 건 삭제하고 필요한 부분에만 접근하기 위한 table로 보면 될 듯 하다.
각 저장장치 위치마다 특별한 자료구조로 장치를 채우는 작업.
섹터, 페이지에 쓰이는 자료구조는 보통 헤더 header, 자료 구역 data area, 트레일러 trailer로 구성된다.
이 중 헤더와 트레일러에는 섹터/페이지 번호, 오류 탐지 및 수정 코드 등 컨트롤러가 사용하는 정보가 포함된다.
대부분의 하드 디스크가 공장에서 이 절차를 거친다. 일단 이게 돼 있어야 디스크 품질도 검사하고, 손상되지 않은 섹터를 골라내 논리적 주소를 할당할 수 있다.
운영체제는 파일을 저장하는 운영체제 자체적인 자료구조를 장치에 기록해야 한다.
이는 다음의 세 단계로 나뉜다.
이 작업이 파티션 partition이다.
Ex) 한 파티션에는 사용자 파일을 포함하는 파일 시스템을 포함하고, 다른 파티션에는 memory swap을 위한 공간을 포함한다.
볼륨은 mount할 수 있는 모든 파일 시스템일 수도 있고 파일 시스템을 포함하는 파일일 수도 있다.
이 작업은 논리적 포매팅 logical formatting이라고도 한다.
묵시적으로 수행된다.
운영체제는 이 단계에서 초기 파일 시스템 자료구조를 장치에 저장한다.
이 자료구조에는 다음이 포함된다.
내가 쓴 운영체제 강의노트(Notion이라 많이 느릴 수 있음)
운영체제 - 제10판_Abraham Silberschatz, Peter Baer Galvin, Greg Gagne (지은이), 박민규 (옮긴이)