CS/운영 체제

[OS] 파일 시스템 (부제 : 익숙함에 속아 소중함을 잊지 말자)

장아장 2023. 8. 8. 11:26

파일 시스템이 딱 그렇다. 알고보니 매우 신박하다.

파일 시스템이 무엇일까?

 

우리가 흔하게 쓰는 폴더 안에 폴더 안에 파일 몇개, 그리고 폴더 몇개, 그 폴더 안에 파일 몇개 폴더 몇개.... 끝도없이 구조를 만들 수 있다. 

이런 구조를 어떻게 생각해냈고, 어떻게 접근하는걸까?

 

이거에 대해서 간단하게 공부해보았다. 

 

일단, 폴더를 '디렉토리' 라는 명칭으로 파일 시스템이 이루어져 있다. 

폴더는, 파일 시스템에서 부르는 디렉토리, 그 이상의 의미를 가진다. 

파일 시스템에서, 파일들을 담으면서, 파일의 경로를 알려주는 디렉토리 이상으로 폴더는 역할을 가지고 있다. 

폴더는 파일 시스템에서 다루지 않는 네트워크 환경등을 담고 있기 때문이다. 

 

이를 알고, 디렉토리 & 파일로 파일 시스템을 이해해 보자. 

 

파일 시스템은 디렉토리가 계층적으로 구조를 가지고 있다.

쉽게 말하면 디렉토리가 트리의 구조를 가지고 있다. 

디렉토리 안에는 다수의 디렉토리가 존재할 수 있고, 그 속에 또 디렉토리고 다수 존재할 수 있다. 

 

이런 구조속에서, 각 디렉토리는 파일을 가질 수 있다. 

즉, 하나의 파일을 위해서는 하나 또는 다수의 디렉토리를 거치게 된다. 

이들을 나열해두는 것이 경로이다. 

  • 윈도우 : '\'로 경로들을 구분한다. 
  • 리눅스(+맥) : '/'로 경로들을 구분한다. 

 

우리가 사용하는 컴퓨터는, 하드디스크를 가지고 있다. 

이 공간에 파일 시스템이 하나씩 들어간다. 

그러면 공간을 나누면 어떻게 될까?

우리가 케이크를 한 덩이씩 팔지 않고, 조각케이크를 판다고 생각해보자. 

케이크 한판을 사서, 모든 조각이 똑같은 맛을 먹을 수 있다. 

조각 케이크 여러 개로 한 판을 만들면? 각 조각이 모두 맛이 다른 케이크가 될 수 있다. 

 

이렇게, 하드디스크를 조각내서, 각 조각이 다른 파일 시스템을 가지게 할 수 있다. 

이렇게, 디스크을 잘라서 각 조각이 다른 파일 시스템을 가지게 하는 것을, 디스크 파티션이라고 한다.

 

이렇게 하면 무슨 이점이 있을까?

  1. 각 파티션마다 다른 운영체제를 사용할 수 있다
  2. 시스템 파일, 개인 데이터를 분리해 관리를 수월하게 할 수 있다. 
  3. 파티션이 하나 망가져도, 다른 파티션을 쓰면 된다!!
  4. 파일 시스템의 루트 노드(최상위 노드)가 여러개가 된다. 즉, a -> A, B, C, D를 a, b, c, d->로 더 짧게 경로수정을 할 수 있다. 
  5. 민감한 데이터를 다루는 파일 시스템을 분리해, 데이터를 안전하게 관리할 수 있다. 

이런 이점들이 있다. 

 

그러면 디스크 파티션을 두건, 그렇지 않건 어쨌건!!!

파일 시스템이 어떻게 생겼는지 공부해야겠다. 

 

        • 파일 시스템의 구조
          • 루트 노드가 존재하며, 그 안에 디렉토리와, 파일 시스템이 있다(여기에서 파일 시스템과 디렉토리는 운영체제 설치 배당된다) (해당 디렉토리명을 보고 생각나는 대로 적어봤다.)
            • 디렉토리
              • /bin : /usr/bin을 위해 사용하는 기호에 대한 링크들이 들어있다.
              • /dev : 로 장치를 위한 특수 파일용 장치 노드를 포함합니다. /dev 디렉토리는 테이프 장치, 프린터, 디스크 파티션 터미널에 대한 특수 파일
              • /etc : 장치에 대한 다양한 구성 파일이 들어있다.
              • /lib : 이름과 형식이 lib*.a인 구조 독립형 라이브러리가 있는 /usr/lib 디렉토리에 대한 기호 링크
            • 파일 시스템
              • /usr : 변경되지 않고 시스템에서 공유될 있는 파일(실행 가능한 프로그램 ASCII 문서) 포함하는 파일 시스템을 위한 마운트 위치의 역할
              • /tmp : 작성 임시 파일을 포함하는 파일 시스템에 대한 마운트 위치
              • /var : 각각의 기계를 연결 변환하는 다양한 파일에 대한 마운트 위치
              • /home : 사용자 디렉토리를 포함하는 파일 시스템에 대한 마운트 위치

겁나 복잡하다.

실제로 사용해보면서 경로 탐색, 경로에 대해서 파일인지 디렉토리인지 검증, 해당 파일에 대한 데이터 조회 및 추가/수정을 주로 사용했던 것 같다. 

 

막 쓰던 구조인데, 공부해보니 되게 딥한 내용들이었다. 

조금씩 살을 더 붙여봐야겠따. 

 

그럼...twenty thousand...🔥