1. 파일 시스템이란?
- 이전에 운영체제 포스팅에서 파일 시스템에 배운적이 있다.
- 우선 파일 시스템이 무엇인지 복습을 해보자.
- 파일과 관련된 대표적인 명령어 4가지 (open, read, write, close)가 있다.
- 일반적으로 파일을 읽고(read) 쓰기(write) 위해 사용되는 경우가 많다.
- 하지만, 네트워크의 입장에서 파일을 읽고 쓴다는 것은 무슨 의미일까?
- 이는 네트워크를 통해 다른 서버로부터 데이터를 가져와 읽거나, 다른 서버로 데이터를 입력(쓰기)하는 것을 의미한다.
- 이러한 관점에서 생각해보면, 외부장치도 데이터를 읽거나 쓰는 과정을 공통적으로 필요로 한다.
ex) CD, USB, 마우스, 키보드, 모니터 etc.
- 이와 같은 이유로, 각 장치에 따른 별도의 인터페이스를 만드는 것이 아니라
- Virtual File System 이라는 공통 인터페이스를 통해, 각 형식에 맞는 파일 시스템을 제공하는 방식으로 발전해왔다.
a) 이런 개념은 어디서 파생된 것일까?
▶ 유닉스의 철학
- 모든것은 파일이다.
- 모든 연결(interaction), 모든 디바이스는 파일을 읽고 쓰는 것처럼 이루어져있다.
- 그러므로 모든 자원에 대한 추상(abstract) 인터페이스를 이용해 파일 인터페이스로 활용한다.
잠깐 쉬어가기!!!
- 지금 배우는 지식은 기본중의 기본 지식이기에 온전히 이해하고 소화하는 것이 중요하지만,
- 현업에서 개발자로 일하다 보면 계속해서 끊임없이 새로운 기술에 대한 이해를 필요로 할 것이다.
- 그때도 지금처럼 근본을 파고들어 기술에 대해서 세부적으로 이해한다면 참 좋겠지만,
- 매번 새로운 기술에 대해서 그렇게 공부하기는 힘들고 고통스러운 과정을 거칠 것이다.
- 그러므로 핵심에 대해서만 이해하고, 그 기술이 어떤 input을 받아서 어떤 output을 반환하는지에 대한 이해를 하려고 하자.
- 여기서 어떤 기술의 핵심이라 함은, input을 받아서 어떤 과정을 거쳐 output을 만드는지에 대한 것이다.
- 이 또한 깊게 이해하는 것이 아니라, 전반적으로 이해하면 된다.
- 이런 방식으로 새로운 기술을 익히는 과정을 추상화라고 한다.
2. 리눅스 파일 시스템
a) /dev
- dev는 device를 의미한다.
- dev 디렉토리는 여러가지 디바이스를 파일처럼 접근할 수 있도록, 파일형태로 보관하는 디렉토리다.
- 위의 사진에서 볼 수 있듯이 굉장히 많은 파일들이 있다.
- 대표적으로 net은 네트워크를 의미하고, tty는 터미널을 의미한다.
- 다른 파일들에 비해 tty로 시작하는 파일이 굉장히 많다. 왜 그럴까?
▶ 터미널에 접속할 때마다, 터미널 환경이 가상 디바이스처럼 생성된다.
▶ 그렇게 생성된 각각의 터미널 디바이스가 각 파일을 할당받게 되는 것이다.
- 그렇다면 tty 파일에는 무엇이 들어있을까?
- cat 명령어를 이용하여 tty 파일을 읽어보았는데, 아무런 내용도 담겨있지 않다. 왜그럴까?
▶ 그 이유는 현재 터미널과 tty파일이 연결되어 있기 때문이다.
▶ tty 폴더는 가상파일시스템 인터페이스를 통해 가상 터미널로서 동작을하고, 키보드로부터 입력을 받는다.
- 그럼 무언가를 입력한다면 어떻게 될까?
- 위의 사진처럼, 입력한 내용이 화면에 출력된다.
- 즉, 키보드로 입력한 내용이 가상파일시스템을 통해 tty파일에 저장이 되는 것이다.
- 그러므로 cat 이라는 명령어를 통해 실시간으로 화면에 출력되는 것이다. 이해가 되는가?
- 이처럼 터미널도 가상파일시스템을 통해 파일로서 다뤄지는 것을 확인할 수 있었다.
3. 슈퍼블록, inode와 파일
- 파일 시스템의 예시를 간단하게 만들어보자.
▶ 40GB짜리 SSD를 컴퓨터에 연결을 시킨다.
▶ 그리고 SSD의 공간을 20GB씩 나눠서 /A와 /B라는 디렉토리와 연결시켜서 파일시스템을 구성한다.
- 이렇게 구성된 파일시스템은 무엇으로 이루어져 있을까?
▶ 슈퍼블럭
- 파일시스템의 정보를 가지고 있다.
- 여기서 파일시스템의 정보란, 각각의 파일시스템의 용량, 파일 시스템의 구성방식, 파일시스템의 알고리즘 등을 의미한다.
▶ inode
- 파일시스템 내부에는 다양한 파일이 존재한다. 그렇다면 이 파일들은 무엇으로 처리할까?
- 파일을 처리하기위해 사용하는 것이 inode다.
- inode는 "파일이름 : inode번호"의 형태로 파일을 매핑한다.
- 여기서 inode는 pid와 같이 각 파일을 구분하기 위한 고유번호를 말한다
- 이를 기반으로 파일을 조작하고 처리할 수 있다.
▶ 메타데이터
- 프로세스도 PCB라는 프로세스의 상태정보를 저장하는 별도의 공간이 존재한다.
- 이처럼 inode도 파일의 상태정보를 저장하는 공간이 있는데, 이를 메타데이터 라고 부른다.
- 메타데이터에는 파일권한, 파일의 소유자 정보, 파일 사이즈, 생성시간, 데이터 위치 등 파일에 대한 정보를 가진다.
▶ disk 블럭
- 각 inode 파일이 가진 메타데이터를 구성하는 데이터를 일정한 크기로 분리하여 저장하는데, 이 단위를 말한다.
- 바로 위의 사진에서 data라고 분리되어 있는 것을 말한다.
'컴퓨터공학기초 개념 > 시스템 프로그래밍' 카테고리의 다른 글
13. shell - 하드링크 (0) | 2021.09.10 |
---|---|
12. shell - 리눅스 파일 시스템 탐색 (0) | 2021.09.10 |
10. shell - 프로세스 관리 및 제어 (0) | 2021.09.09 |
9. shell - foreground & background 프로세스 (0) | 2021.09.09 |
8. shell - 리다이렉트와 파이프 (0) | 2021.09.07 |
댓글