///
Search
🗄️

File System

태그
OS
CS

서론

왜 알아야 할까?

지극히 주관적인 생각 알고 있으면 좋다. 왜냐하면 가장 베이직하게 시작되는 개념이고, 모든 컴퓨터의 시작이 되는 개념인 것 같다. 현실에서도 사람은 모든 것을 다 기억할 수 없다. 그렇기에 기록이라는 것을 만든다. 그러다 보니 기록이 많아지고, 관리할 필요성이 생긴다. 그럼 당연히 관리 체계를 갖출 수 밖에 없다. 그러한 관리 체계는 전반적인 CS지식에 영향을 주고 있다. 한 예로 “소켓은 파일이다.”라고 말해주신 분이 계신다. 근데 공부하다 보니 어느 정도 공감은 간다. 결국 통신도 어떠한 공간에 쓰고, 읽는 작업인 것을 비유하여 말씀하셨던 것 같다.

본론

concept

필자는 앞서 “가상 메모리”를 공부했다. 근데 이런 생각이 들었다. 가상 메모리 파트에서는 다음과 같은 플로우로 크게 나누어 정리할 수 있었다. 그 중에서 2~4번과 유사하다는 생각이 들었다.
1.
메모리 공간은 한정되어 있다.
2.
그럼 어떻게 더 크게 쓸까? (= 자르자)
3.
어떻게 자를래? (= 일정 크기로?)
4.
그럼 저장은 어떻게 할래?(=연속적으로? 아니다. 하나의 테이블을 만들어서 다음에 들고 올 데이터를 가르키자.)
가만 생각 해보자. 왜 저렇게 만들었을까? (=효율적이라서)
그럼 다음 플로우에서 생각해볼 수 있는 개념들이 뭐가 있을까?(=단위, 단위 별 실제 할당, 빈 공간, 보호)
너무 당연하게 생각할 수 있는 것 들이다. 이 컨셉을 기준으로 이해했다. 그러니 너무 쉽게 다가왔다99

그림으로 보자

난 어려운 이야기 싫다. 알아야 할 것만 알자.

1.
모든 것은 파일이다. file = 01이 연속되는 내용이 존재하는 문서 folder, directory = 파일을 모아 놓은 파일 즉, 얘도 파일
2.
파일을 구분하려면 태그가 있어야한다. File Attribute(=Metadata) = 옷에 붙은 태그이다. 파일도 태그가 있다. 여기서 확장해보자. 당연하게 Metadata는 뭘 가질까? 이름, 날짜, 위치, 타입, 사이즈, 보호권한, 출고시간, 소유자

그래서 뭘 말하고 싶은데?

그 개념이 그 개념이다. 라는 걸 말하고 싶다. 파일 시스템에서의 “관리” 라는 관점이 어디서든 다 비슷비슷하게 쓰인다. 결국 하나다. 폴더(=디렉터리)도 결국 파일이라 했다. 위의 그림을 기준으로 설명하면 한 파티션안에 또 다른 파티션이 있는 거다.

이걸 알면 뭐가 이해되는데?

이 그림이 이해되지 않을까?

결론

이것만 알면 된다.

파일은 연속적이다. 그래서 연속적으로 올리면 낭비가 심하다. 그래서 가상메모리에서 사용하는 기법처럼 잘라서 저장했다. 그러다 보니 데이터라는 것이 디스크에 흩어져서 저장된다. 이 때문에 inode list를 이용하여 inode를 찾아가고, 이를 이용하여 파일의 연속성을 보장 시킨다.

(번외) 솔직히 이걸 왜 정리하려고 했는가?

빡쳐서 찾았다. 난 독학으로 운영체제를 공부한다. 그 만큼 정확한 정보를 찾는 것에 되게 예민하다. 왜냐하면 지금까지 땔감처럼 공부했기 때문이다. 그래서 카카오톡 개발자 오픈 챗에 물어봤다.
나 :
질문 계기:
1.
파일 시스템의 주목적이 파일이라는 데이터를 관리하기 위한 것이다.
2.
자세히 보니 이것이 블록이라는 단위로 관리되고 있다.
3.
그래서 이걸 관리하기 위하여 블록에 번호를 붙인다.
4.
이걸 inode라고 부르기로 했다.
여기서 사고가 정지했습니다. 운영체제에서 가상메모리 관리랑 엄청 유사하게 관리(=paging table)되고 있는 것 같은데, 이게 맞는 것인가?
궁금한 점
1.
개념상으로 같은건가요??
2.
바라보는 주체가 다른점이라고 한다면 프로세스에서 메모리를 바라보는것(=가상 메모리), 운영체제(=커널)에서 디스크로 바라보는 것(=파일 시스템) 이렇게 이해하면 될까요?
어떤 분의 답장
??? : 일단 가상메모리를 어떤 의미로 쓰셨는지 부터…..ㅎ ??? : 스왑과 가상메모리는 좀 다릅니다.
여기서 빡침이 몰려왔다. 저분에게 빡친게 아니다. 내가 모르는 걸 설명 못해서 빡친거다.

(번외) 그래서 해결했는가?

내가 가진 의문인 가상 메모리와 파일 시스템의 관통 개념은 비슷한 것 인가? 맞다. 단지 관점이 다르다. 아래는 고려대학교 운영체제 연구실(File System)의 강의이다. 여기서 찾았다. 25분 ~ 27분 30초에서 내가 원했던 정보가 정확하게 나온다.
번외로 여기 교수님?이 말씀하신 내용 중에 내가 지금 고민했던 것들이 헛된 것이 아니라는 걸 느낄 수 있었다. 56분 27초 ~57분 30초 교수님 : 조금 더 공부하면 파일시스템과 가상메모리가 붙어버릴 거예요. 내 생각 : 나처럼 똑같은거 아니야? 이런 생각을 가지게 될 것이다. 라는 생각을 가지게 될 것이다라는 늬앙스의 말이신 것 같다. 내가 고민했던 거다. 똑같은 것 같은데? 라는 생각이 드는데 왜 이렇게 다들 어렵게 설명할까? 이런 생각과 컴퓨터 공학 지식의 전반적인 개념들은 거의 관통되는 개념들이 존재하는 것 같은데? 라는 것이 한방에 해결 되었다.
여기서 더 깊게 이건 개략적인 키워드만 아는 거다.
1.
inode의 개략적 구조 - boot, super, inode list, data block
2.
Allocation- 연속, 링크, 인덱스 (가상 메모리 관리에서와 비슷하구나 정도로만 이해 중)
3.
Free Space Management - 비트맵, 연결리스트, 그룹핑(링크드 청크), 카운팅(내뒤로 몇개까지 빈거다) (이정도로만)
4.
디렉토리 파일 - Linear list, Hash Table(이건 다른 곳도 비슷하더라, 리스트로 만들든지, 테이블로 만들든지)
5.
가상 파일 시스템 - 이건 자바의 jdbcTemplate와 비슷하다. 벤더가 다르니 추상화 시킬 수 밖에 없겠지

참고