Julie의 Tech 블로그

리눅스 - (3) 파일 시스템과 저장장치 본문

Tech

리눅스 - (3) 파일 시스템과 저장장치

Julie's tech 2021. 5. 12. 23:38
728x90

파일 시스템

컴퓨터에 파일 시스템이 있다는 것은 어쩌면 당연한 이야기로 와닿는다.

파일 시스템이 왜 필요할까? 에 대한 해답을 오늘 찾을 수 있다.

파일 시스템이 없다고 가정해보자.

모든 데이터에 대해서 각 사이즈와 보관한 주소를 기록하고 있어야하는 불편함이 생긴다.

파일 시스템은 이름, 위치, 사이즈 등의 정보를 기록하여 파일이란 단위로 관리해준다.

사용자가 사용자 모드에서 어떠한 파일에 접근하고자하는 프로세스를 만들면,

커널 모드에서 파일 시스템을 다루는 처리를 진행하여 하드웨어의 스토리지에 있는 파일 위치와 사이즈를 가져오게 된다.

파일을 읽고 쓰고, 삭제하고 이동하는 요청이 파일 시스템의 종류나 스토이지에 따른 디펜던시가 없도록 시스템 콜을 통해 처리하게 된다.

특정 파일이 파일 시스템에서 큰 용량을 차지하지 못하도록 쿼터를 설정하게 된다.


파일 시스템은 전원이 단절되었을 때를 대비하여 파일이 깨지지 않도록 저널링과 copy on write라는 두 방식을 운영한다.

저널링이란 파일 시스템 안에 저널 영역을 별도로 마련하여 처리 과정을 미리 사전에 기록해두고, 그에 따라 실제로 수행을 하게 된다.

예를 들어 파일을 업데이트해야할 경우, 트리 기반의 파일 시스템 구조에서 링크를 변경하는 과정을 저널 영역에 작성하게 된다.

전원이 단절될 경우 저널링 영역을 새로 생성하거나 생성된 저널링 영역을 바탕으로 다시 수행하게 된다.

Copy on write란 특정 파일을 업데이트시에 다른 장소에서 진행하고, 마무리가 될 때 연결만 바꾸는 식으로 진행된다.


리눅스는 디바이스 파일이라는 것을 운영한다.

하드웨어의 장치들을 모두 파일로 표현하여 open, read, write와 같은 시스템 콜을 사용한다.

파일로서 접근하는 디바이스를 두 가지로 표현하는데, 캐릭터 장치와 블록 장치이다.

캐릭터 장치는 읽기와 쓰기가 가능하지만, 탐색이 되지 않는다.

대표적인 장치로는 터미널, 키보드, 마우스가 있다.

블록 장치는 읽고 쓰는 것 이외의 랜덤 Access가 가능하다.

HDD나 SDD와 같은 저장장치가 이에 해당한다.

리눅스는 여러가지의 파일 시스템을 가지고 있다.

그 중 하나로는 tmpfs로, 저장장치 대신 메모리에 작성하는 파일 시스템이 있다.

전원이 단절되면 보존되지 않지만, 고속으로 사용할 수 있다는 장점이 있다.

가상 파일 시스템으로 커널이 사용하는 파일 시스템도 있다.

Procfs - 프로세스에 대한 정보를 얻기 위한 파일 시스템이며, proc/ 이하에 마운트된다.

/proc/pid/maps, /proc/pid/stat 등이 있다.

ps, sar, free와 같은 명령어를 수행하여 나온 결과는 이러한 곳에서부터 정보를 얻고 있다.


저장장치

우선 가장 대표적인 장치인 HDD에 대해 알아보자.

HDD, 즉 하드디스크는 플래터라고 하는 장치에 기록하여 저장하는 저장장치이다.

플래터는 여러 섹터로 나뉘어져 있고, 섹터는 중심에서 바깥 방향으로 분할되어 있으며, 각각 주소를 부여받는다.

각 섹터의 데이터는 헤드라는 부품에 의해서 읽혀지고, 쓰여진다.

디바이스 드라이버에서 HDD의 데이터를 읽고 쓰고 싶을 때 섹터 번호와 개수, 종류(읽기/쓰기)를 전달한다.

출처 : http://doc.kldp.org/Translations/html/SysAdminGuide-KLDP/x798.html

 

이 때 스윙암과 플래터가 회전하는 속도가 굉장히 느리기 때문에, 레이턴시가 발생하게 된다.

또한 위와 같은 구조 때문에 연속되지 않은 여러 개의 섹터를 접근해야하는 경우 소요시간이 길어진다.

이러한 특성을 반영하여 파일 시스템에서는 데이터를 연속된 영역에 배치하고자 했다.

허나 이마저도 한 번에 읽어올 수 있는 데이터의 상한선을 초과한 경우 블록 장치의 접근을 여러번 거치게 되면서 throughput이 하락하게 된다.

또한 위와 같은 섹터의 특성으로 인해 spatial locality를 살려 다음 번에 접근할 가능성이 높은 연속된 영역의 데이터를 미리 읽어두는 기능이 지원이 된다.

HDD의 이러한 단점으로 인해 데이터 접근 요청 -> 결과 전송까지 모두 전기적 신호로만 처리하는 고속 저장장치인 SDD가 등장하였다.

HDD는 sequential한 접근이 랜덤한 접근보다 더 성능이 좋았지만, SDD는 랜덤한 성능조차 고속으로 처리가 가능하다.


이렇게 총 3편에 걸쳐 리눅스의 구조에 대해 기본기를 다져보았다.


참고도서

https://book.naver.com/bookdb/book_detail.nhn?bid=14524977

 

실습과 그림으로 배우는 리눅스 구조

<개발자 레벨업 프로젝트> OS의 구조를 들여다 보자!스마트폰에서 클라우드까지, IT 산업 곳곳에서 리눅스가 보입니다. 이렇게 산업과 생활 전반에 걸쳐 사용하는 OS는 어떻게 움직일까요?이 책은 컴퓨터 시스템을 구성하는 운영체제를, 그중 가장 많이 사용하는 리눅스를 예로 들어 설명했습니다. 단순히 읽고 넘어가지 않고 스스로 실습해보며 동작 원리를 익힐 수 있으며, 프로그래머, 시스템 설계자 등 대부분의 개발자에게 꼭 필요한 지식을 담았습니다.이 책을 통해 소프트웨어와 하드웨어의 상호작용을 이해하세요. 그다음, 책에서 배운 운영체제 ...

book.naver.com

 

반응형