본문 바로가기
Lecture/OS

디렉터리의 구조

by YUNZEE 2023. 12. 5.
728x90
디렉터리의 개념

디렉터리는  관련 있는 파일을 하나로 모아놓은 곳으로 1개 이상의 자식 디렉터리와 1개 이상의 파일을 가질 수 있다. 즉, 하나의 디렉터리에는 여러 개의 파일과 자식 디렉터리가 존재한다.

 

디렉터리 파일

디렉터리도 파일이다. 일반 파일에는 데이터가 담겨 있고 디렉터리에는 파일 정보가 담겨있다. 디렉터리에도 일반 파일과 마찬가지로 헤더가 있다. 디렉터리 헤더에는 디렉터리 이름, 만든 시간, 접근 권한 등의 정보가 기록되어 있다.

디렉터리에는 마침표(.) 파일과 2개 마침표(..) 파일이 있다. 마침표 파일은 자기 자신의 디렉터리를 가리키고, 2개 마침표 파일은 상위 디렉터리를 가리킨다. 루트 디렉터리의 마침표 파일은 자기 자신인 5번 블록을 가리킨다. 2개의 마침표 파일은 상위 디렉터리를 가리켜야 하지만 루트 디렉터리가 맨 위에 있기 때문에 자기 자신을 가리킨다.

 

경로

경로는 파일이 전체 디렉터리 중 어디에 있는지를 나타내는 정보다. 한 디렉터리에는 같은 이름을 가진 파일이 존재할 수 없지만, 서로 다른 디렉터리에는 같은 이름의 파일이 존재할 수 있다.

/user/exm.c 파일의 경로는 /program/data/exm.c, 오른쪽 exm.c파일의 경로는 /user/exm.c로 표시할 수 있다. 이렇게 루트 디렉터리를 기준으로 파일의 위치를 나타내는 방식을 절대 경로 absolute path라고 하는데, 이는 루트 디렉터리에서 시작하는 절대적인 위치를 의미한다.

 

이와 달리 현재 위치를 기준으로 파일의 위치를 표시할 수 있는데 이를 상대 결로 relative path라고 한다. 만약 사용자가 현재 program디렉터리에 있다면 exm.c파일은 data/exam.c로 오른쪽 exm.c파일은../user/exm.c로 표시할 수 있다. 여기서 마침표는 바로 위의 상위 디렉터리를 가리킨다. 상대 경로는 절대 경로와 달라 문자로 시작하며, 언제 나 자신이 위치한 디렉터리를 기준으로 한다.

 

디렉터리를 이동할 때는 cd change directory명령을 사용한다. cd에는 절대 경로와 상대 경로를 모두 사용할 수 있는데, 현재 위치보다 아래에 있는 데이터에 접근할 때는 상대 경로를 사용하고 다른 디렉터리로 이동할 때는 절대 경로를 사용한다.

 

마운트

파티션은 논리적인 디스크 분할로, 하나 또는 여러 개의 디스크를 파티션으로 나누어 사용할 수 있다. 

유닉스의 경우 서버용으로 만들어진 운영체제이므로 파일 데이터의 크기에 제한이 없다. 또한 하나의 파일 테이블로 여러 개의 디스크 혹은 파티션을 통합하여 관리할 수 있다. 유닉스에서는 하나의 파일 테이블에 여러 개의 파티션을 붙여서 사용하는데 이렇게 여러 개의 파티션을 통합하는 명령어가 마운트다.

 

디스크 파일 할당

할당 방식

파일 시스템은 기본적으로 메인메모리 시스템과 유사하다. 전체 대스크 공간을 같은 크기로 나누고 각 공간에 주소를 붙여서 관리한다. 이때 같은 크기로 나뉜 공간 하나를 블록이라고 하는데 한 블록의 크기는 1~8KB 정도다

 

연결 할당

연결할당 linked allocation은 파일에 속한 데이터를 연결 리스트로 관리하는 방식이다. 파일 테이블에는 시작 블록에 대한 정보만 저장하고, 나머지 데이터는 시작 블록부터 연결하여 저장한다. 파일의 맨 끝에 해당하는 블록에는 링크 대신 널 삽입한다. 연결 할당 방식은 체인으로 연결한 것처럼 보여서 체인 할당chained allocation이라고도 한다.

 

인덱스 할당

연결 리스트를 이용한 불연속 할당 방식은 구현하기 쉽지만 최대 할당 크기에 제한이 있다는 것이 문제다. FAT16은 32GB가 최대 할당 크기이고 FAT32는 8TB가 최대 할당 크기다. 이러한 문제를 해결하기 위해 인덱스를 이용한 인덱스 할당 indexed allocation 방식이 사용된다. 

인덱스 할당 방식에서는 테이블이 꽉 차 더 이상 데이터를 연결할 수 없을 때 인덱스 불록을 연결하는 간접 인덱스 블록 indirect index block을 만들면 테이블을 무한히 확장할 수 있다. 이러한 방식을 사용하는 파일 시스템이 유닉스 운영체제의 아이노드 I-node다.

 

빈 공간 관리

디스크 파일을 저장할 때마다 모든 테이블을 뒤져서 빈 공간을 찾는 것은 비효율적이다. 디스크 내부 단편화를 줄이고 빈 공간을 효율적으로 관리하기 위해 파일 시스템은 빈 블록의 정보만 모아놓은 빈 공간 리스트 free block list를 유지한다. 빈 공간 리스트는 블록의 내용을 지우지 않고 빈 공간 리스트에 삽입하는 것은 해당 블록에 새로운 데이터를 덮어쓰지 않는 한 원래 데이터를 복구할 수 있는 여지를 남긴다. 또한 빈 공간 리스트를 보고 새로운 블록을 할당할 때는 리스트에 먼저 들어온 블록부터 할당한다.

 

 

퀴즈

1. 자기 자신의 디렉터리를 가리키는 것을 나타내보아라

2. 상위 디렉터리를 가리리는 것을 나타내보아라 

3. 이렇게 루트 디렉터리를 기준으로 파일의 위치를 나타내는 방식을'무엇'이라 하는데 이는 루트 디렉터리에서 시작하는 절대적인 위치를 의미한다. '무엇'이 의미하는 것은?

4. 현재 위치를 기준으로 파일의 위치를 표시할 수 있는데 이를 어떤 경로라고 하는가?

5. 디렉터리를 이동할 때는 어떤 명령어를 사용하는가?   

6. 파일에 속한 데이터를 연결 리스트로 관리하는 방식을 어떤 할당이라고 하는가?

7. 파일의 맨 끝에 해당하는 블록에는 링크 대신 무엇을 삽입하는가?

8. 문제를 해결하기 위해 인덱스를 이용한 어떤 방식이 사용되는가? 

9. 인덱스 할당 방식에서는 테이블이 꽉 차 더 이상 데이터를 연결할 수 없을 때 인덱스 불록을 연결하는 간접 인덱스 블록 indirect index block을 만들면 테이블을 무한히 확장할 수 있다. 이러한 방식을 사용하는 유닉스 운영체제의 어떤 것인?

10. 디스크 내부 단편화를 줄이고 빈 공간을 효율적으로 괸리하기 위해 파일 시스템은 빈 블록의 정보만 모아놓은 어떤 리스트를 만들어두는가?

728x90

'Lecture > OS' 카테고리의 다른 글

네트워크 저장장치와 고가용성  (8) 2023.12.06
파일과 파일 시스템  (2) 2023.12.04
RAID  (0) 2023.12.02
디스크 스케줄링  (2) 2023.11.30
저장장치  (0) 2023.11.29