파일과 디렉터리
파일 시스템은 파일과 디렉터리를 관리한다.
해당 게시글에서는 파일 시스템의 개념을 잡기 이전에,
파일과 디렉터리가 무엇인지 알아보고자 한다.
파일
일상적으로 컴퓨터를 이용할 때는 파일 단위로 이용한다.
파일이란 하드 디스크의 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합을 의미한다.
달리 표현하자면 파일은 의미 있고 관련 있는 정보를 모은 논리적 단위를 의미한다.
그렇다면 파일을 이루는 정보는 어떤 것들이 있을까?
모든 파일에는 이름과 파일을 실행하기 위한 정보, 그리고 파일 관련의 부가 정보가 있다.
이 부가 정보를 속성 도는 메타데이터라고 부른다.
윈도우 운영체제를 사용한다면 파일 속성을 한 번쯤 접해 본 경험이 있을 것이다.
임의의 파일에서 마우스 오른쪽 버튼을 클릭한 뒤 [속성]을 선택해보면,
파일의 형식, 위치, 크기 등 파일과 관련된 정보가 나타난다.
이러한 정보가 파일 속성이다.
파일 속성과 유형
운영체제마다 유지하는 파일 속성은 조금씩 차이가 있지만,
대표적인 속성의 종류는 다음과 같다.
운영체제, 그중에서 파일 시스템은 파일별로 다음과 같은 속성을 유지하고 관리한다.
속성 이름 | 의미 |
유형 | 운영체제가 인지하는 파일의 종류를 나타낸다. |
크기 | 파일의 현재 크기와 허용 가능한 최대 크기를 나타낸다. |
보호 | 어떤 사용자가 해당 파일을 읽고, 쓰고, 실행할 수 있는지를 나타낸다. |
생성 날짜 | 파일이 생성된 날짜를 나타낸다. |
마지막 접근 날짜 | 파일에 마지막으로 접근한 날짜를 나타낸다. |
마지막 수정 날짜 | 파일이 마지막으로 수정된 날짜를 나타낸다. |
생성자 | 파일을 생성한 사용자를 나타낸다. |
소유자 | 파일을 소유한 사용자를 나타낸다. |
위치 | 파일의 보조기억장치상의 현재 위치를 나타낸다. |
파일 속성 중 파일 유형은 운영체제가 인식하는 파일 종류를 나타낸다.
같은 이름의 파일일지라도 텍스트 파일, 실행 파일, 음악 파일 등 유형이 다르면 실행 양상도 달라진다.
그래서 파일을 실행할 운영체제에 파일 유형을 알려줘야한다.
파일 유형을 알리기 위해 가장 흔히 사용하는 방식은 파일 이름 뒤에 붙는 확장자를 이용하는 것이다.
확장자는 파일 종류가 무엇인지 운영체제에 알려주는 힌트와도 같다.
예를 들어 myfile.o는 o라는 확장자를 통해
운영체제에 목적 코드를 담고 있는 목적 파일임을 알려주는 셈이고,
myfile.exe는 exe라는 확장자를 통해 운영체제에 실행 파일임을 알려주는 셈이다.
파일 유형 | 대표적인 확장자 |
실행 파일 | 없는 경우, exe, com, bin |
목적 파일 | obj, o |
소스 코드 파일 | c, cpp, cc, java, asm, py |
워드 프로세서 파일 | zml, rtf, doc, docx |
라이브러리 파일 | lib, a, so, dll |
멀티미디어 파일 | mpeg, mov, mp3, mp4, avi |
백업/보관 파일 | rar, zip, tar |
파일 연산을 위한 시스템 호출
파일을 다루는 모든 작업은 운영체제에 의해 이뤄진다.
어떤 응용 프로그램도 임의로 파일을 조작할 수 없으며 파일을 다루려면 운영체제에 부탁해야 한다.
이를 위해 운영체제는 다음과 같은 파일 연산을 위한 시스템 호출을 제공한다.
- 파일 생성
- 파일 삭제
- 파일 열기
- 파일 닫기
- 파일 읽기
- 파일 쓰기
디렉터리
파일들을 일목요연하게 관리하기 위해 디렉터리를 이용할 수 있다.
원도우 운영체제에서는 디렉터리를 폴더라고 부른다.
옛날 운영체제에서는 하나의 디렉터리만 존재했다.
모든 파일이 하나의 디렉터리 아래에 있었다.
이와 같은 디렉터리 구조를 1단계 디렉터리라고 부른다.
하지만 실제로 이렇게 사용하는 컴퓨터는 거의 없다.
컴퓨터 용량이 커지다 보니 저장할 수 있는 파일도 많아지고,
1단계 디렉터리로는 많은 파일을 관리하기가 어렵기 때문에 다음과 같이 여러 계층을 가진
트리 구조 디렉터르가 생겨나게 되었다.
트리 구조 디렉터리는 최상위 디렉터리가 있고
그 아래에 여러 서브 디렉터리(자식 디렉터리)가 있을 수 있다.
서브 디렉터리도 도 다른 서브 디렉터리를 가질 수 있다.
최상위 디렉터리는 흔히 루트 디렉터리라고 부르고 슬래시(/)로 표현한다.
그러다 보니 자연스럽게 생긴 개념이 경로이다.
경로는 디렉터리를 이용해 파일 위치, 나아가 파일 이름을 특정 짓는 정보이다.
절대 경로와 상대 경로
많은 사람들이 경험을 통해 알고 있듯
같은 디렉터리에는 동일한 이름의 파일이 존재할 수 없지만,
서로 다른 디렉터리에는 동일한 이름의 파일이 존재할 수 있다.
위 그림을 다시 한 번 보자면 a.sh라는 파일은 minchul 디렉터리에도 있고, ect디렉터리에도 있다.
이 루트 디렉터리부터 파일까지 경로가 다르기 때문에 동일한 이름임에도 공존할 수 있는 것이다.
그래서 모든 파일은 루트 디렉터리에서 자기 자신까지 이르는 고유 경로를 가지고 있고,
이러한 경로를 절대 경로라고 부른다.
경로를 나타내는 또 다른 대중적인 방식으로는 상대 경로가 있다.
절대 경로가 루트 디렉터리부터 시작하는 경로라면 상대 경로는 현재 디렉터리부터 시작하는 경로다.
가령 트리 구조 디렉터리 그림에서
현재 디렉터리 경로가 /home이라면 d.jpg파일의 상대 경로는 guest/d.jpg가 된다.
디렉터리 연산을 위한 시스템 호출
운영체제가 파일 연산을 위한 시스템 호출을 제공하는 것처럼
운영체제는 디렉터리 연산을 위한 시스템 호출도 제공한다.
대표적인 종류는 다음과 같다.
- 디렉터리 생성
- 디렉터리 삭제
- 디렉터리 열기
- 디렉터리 닫기
- 디렉터리 읽기
디렉터리 엔트리
디렉터리와 파일은 엄연히 다른 별개의 것이라고 받아들이기 쉬우나
많은 운영체제에서는 디렉터리를 그저 '특별한 형태의 파일'로 간주한다.
즉, 디렉터리도 파일이다. 단지 포함된 정보가 조금 특별할 뿐이다.
파일이 내부에 해당 파일과 관련된 정보를 담고 있다면,
디렉터리는 내부에 해당 디렉터리에 담겨 있는 대상과 관련된 정보를 담고 있다.
그리고 이 정보는 보통 테이블(표) 형태로 구성된다.
즉, 디렉터리는 보조기억장치에 테이블 형태의 정보로 저장된다.
각각의 엔트리 (행)에 담기는 정보는 파일 시스템마다 차이가 있으며,
파일 시스템별 디렉터리 엔트리는 나중에 좀 더 알아보자.
다만 파일 시스템을 막론하고 디렉터리 엔트리가 공통으로 포함하는 정보가 있다면
그것은 디렉터리에 포함된 대상의 이름과
그 대상이 보조기억장치 내에 저장된 위치를 유추할 수 있는 정보가 담긴다는 점이다.
다시 말해 디렉터리 엔트리만 보아도 해당 디렉터리에 무엇이 담겨 있는지,
그리고 그것들은 보조기억장치의 어디에 있는지를 직간접적으로 알 수 있다.
파일 시스템에 따라 디렉터리 엔트리에 다음과 같이 파일 속성을 명시하는 경우도 있다.
예를 들어 보겠다.
다음과 같은 구조의 디렉터리와 파일이 있다고 가정해보자.
home 디렉터리에는 minchul 디렉터리와 guest 디렉터리가 있다.
따라서 home 디렉터리는 대략 다음과 같이 구성된다.
여기서 ..은 상위 디렉터리, .은 현재 디렉터리를 가리킨다.
디렉터리 엔트리를 통해 보조기억장치에 저장된 위치를 알 수 있기 때문에
home 디렉터리에서 minchul 디렉터리가 저장된 곳을 알 수 있고 따라서 그곳으로 이동할 수도 있다.
마찬가지로 minchul 디렉터리 엔트리에는 디렉터리에 속한 파일의 이름 (a.sh, b.c, c.tar)과
이들의 위치를 알 수 있는 정보 등이 포함되어 있기 때문에
이 파일들이 보조기억장치 내에 저장된 위치를 알 수 있고 실행할 수 있는 것이다.
'컴퓨터 프로그래밍 공부 > 컴퓨터 구조 + 운영체제' 카테고리의 다른 글
에러 처리와 스레드의 상관 관계와 커널 개체 (0) | 2024.05.16 |
---|---|
파일 시스템 (0) | 2024.04.21 |
페이지 교체와 프레임 할당 (1) | 2024.04.18 |
가상 메모리 - 연속 메모리 할당 (1) | 2024.04.18 |
주소 바인딩 (0) | 2024.04.16 |