서론
왜 알아야 할까?
지극히 주관적인 생각
알고 있으면 좋다. 왜냐하면 가장 베이직하게 시작되는 개념이고, 모든 컴퓨터의 시작이 되는 개념인 것 같다.
현실에서도 사람은 모든 것을 다 기억할 수 없다. 그렇기에 기록이라는 것을 만든다. 그러다 보니 기록이 많아지고, 관리할 필요성이 생긴다. 그럼 당연히 관리 체계를 갖출 수 밖에 없다. 그러한 관리 체계는 전반적인 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와 비슷하다. 벤더가 다르니 추상화 시킬 수 밖에 없겠지