본문 바로가기
Lecture/OS

파일과 파일 시스템

by YUNZEE 2023. 12. 4.
728x90
파일 시스템의 기능

운영체제마다 파일 시스템이 조금씩 다른데, 윈도우의 경우 XP 이전의 초기 버전에서는 FAT File Allocation Table를 사용했고, 현재는 NTFS New Technology File System를 사용한다. 유닉스는 아이노드Inode, Index node 파일 시스템을 이용한다.

 

파일 시스템은 파일과 파일의 집합체인 디렉터리(directory)를 관리한다.

파일 시스템은 파일 및 디렉터리의 생성, 수정, 삭제 등을 관리한다. 파일 및 디렉터리에 대한 접근 방법에 제공하고 권한이 없는 사용자의 접근을 차단하는 것도 파일 시스템의 중요한 역할이다.

블록과 파일 테이블

저장장치에서는 파일을 일정 크기로 묶어서 관리하는데 이를 블록이라고 한다. 메모리의 단위는 바이트이지만, 저장장치의 단위는 블록 block이다. 블록은 저장장치에서 사용하는 가장 작은 단위로, 한 블록에 주소 하나가 할당되며 운영체제와 저장장치 사이에서는 파일을 블록 단위로 전송한다.

 

파일 종류와 확장자

파일은 논리적인 데이터 집합으로 하드디스크 같은 제2 저장장치에 저장된다. 모든 파일은 0과 1의 비트패턴 bit pattern으로 이루어지며, 운영체제 입장에서는 크게 실행 파일과 데이터 파일로 나뉜다.

 

실행파일: 운영체제가 메모리로 가져와 CPU를 이용하여 작업하는 파일이다.

데이터파일: 실행 파일이 작업하는 데 필요한 데이터를 모아놓은 파일로 이미지 뷰어 프로그램의 사진 파일, 뮤직 플레이어의 음악 파일, 워드프로세서의 문서 파일 등을 예로 들 수 있다.

 

파일 이름에는 영문자, 숫자, 붙임표, 밑줄, 마침표를 주로 사용한다. 윈도우에서는 파일 이름에 스페이스바와 &,~ 등의 특수문자는 사용가능하지만 다른 것들은 안됨, 또한 대소문자를 구분하지 않으며, 유닉스에서는 파일 이름에 스페이스바를 포함하여 대부분의 특수문자를 사용할 수 없다.

 

파일 연결 프로그램

원도우에서 실행 파일을 더블클릭하면 프로세스가 생성되며 실행되고 데이터 파일을 더블클릭하면 해당 파일을 사용하는 응용 프로그램이 실행된다. 이러한 프로그램을 연결 프로그램이라고 한다.

 

파일 헤더

파일 속성과 달리 파일마다 자신에게 필요한 정보를 따로 정의하여 사용할 수 있는데, 이는 파일 헤더 header에 기록된다.

파일 헤더에는 파일 버전 번호, 크기, 특수 정보 등 응용 프로그램이 필요한 정보가 담겨 있다. 

파일 속성 정보와 헤더 정보의 관계를 나타낸다. 모든 파일에 공통으로 적용되는 정보인 파일 속성은 파일 테이블에 위치라고 해당 파일에 필요한 정보를 가지고 있는 파일헤더는 파일의 맨 앞에 위치한다. 

 

저장장치 관리 기법

파티션

하드디스크나 SSD와 같은 대용량 저장장치는 통째로 사용하기도 하지만, 대개 2개나 3개로 나눠서 사용한다. 저장장치를 2개 이상의 묶음으로 나누는 것을 파티션 나눈다고 하며 파티션은 디스크를 논리적으로 분할하는 작업이다.

 

하나의 논리적인 저장장치에는 하나의 파일 시스템이 탑재된다. 윈도우에서는 각 파티션에 이름을 부여하는데, 처음에 분할된 파티션은 C:드라이브, 그다음 파티션에는 D: 드라이브와 같이 알파벳순으로 이름을 부여하여 구분한다.

 

그런데 파티션을 나누어서 관리하는 것이 불편한 경우도 있다. 윈도우의 경우, C: 드라이브부터 Z: 드라이브까지 22개의 파티션을 처리한 다음 23번째 파티션부터 AA:, AB: 와 같이 처리해야 한다. 이렇게 되면 각 파티션을 외우기도 어려울뿐더러, 파티션을 관리하는 일이 복잡해진다. 

유닉스는 이러한 문제를 해결하기 위해 여러 개의 파티션을 통합하는 기능을 가지고 있다. 여러 개의 파티션을 하나로 통합한다는 것은 저장장치나 파티션의 개수와 상관없이 하나의 파일 시스템만 가진다는 의미다. 저장장치 100개라도 파일 시스템이 하나이기 때문에 1개의 저장장치처럼 보인다.

 

포맷 format은 저장장치의 파일 시스템을 초기화하는 작업이다. 파일 테이블이 없는 저장장치를 포맷하면 파일 테이블이 새로 탑재되고, 파일 테이블이 있는 저장장치를 포맷하면 파일 테이블이 초기화되어 아무것도 저장되지 처음 상태로 돌아간다. 포맷은 빠른 포맷과 느린 포맷으로 나뉜다. 빠른 포맷은 데이터는 그대로 둔 채 파일 테이블만 초기화하는 방식이다. 느린 포맷은 파일 테이블을 초기화할 뿐 아니라 블록의 모든 데이터를 0으로 만든다. 따라서 포맷하는데 시간이 많이 걸린다.

 

파일 구조

순차 파일 구조

일반 파일은 기본적으로 순차 파일 구조 sequential file structure다. 순차 파일 구조는 파일 내용이 하나의 긴 줄로 늘어선 형태로 카세트테이프가 대표적이다. 순차 파일 구조의 읽기, 쓰기 작업도 같은 방식으로 진행된다.

사용자가 read() 또는 write() 명령을 내리면 파일 디스크립터가 계속 전진한다. 작업을 하다가 특정 위치로 파일 디스크립터를 옮겨야 할 때는 lseek() 명령을 사용한다.

 

인덱스 파일 구조

순차 파일 구조에서 특정 데이터에 접근하려면 앞에서부터 순차적으로 이동해야 한다. 인덱스 파일 구조 index file structure는 이러한 단점을 해결한 것으로 순차 파일 구조에 인덱스 테이블을 추가하여 순차 접근과 직접 접근이 가능하다.

 

직접 파일 구조

직접 파일 구조는 direct file structure 저장하려는 데이터의 특정 값에 어떤 관계를 정의하여 물리적인 주소로 바로 변환하는 파일 구조다. 키 key를 학번으로 하여 대학생 정보를 저장한다고 가정해 보자. 직접 파일 구조에서 학번을 10으로 나눈 뒤 나머지로 주소를 바꾼다. 이 경우 끝자리가 0인 학생은 0번 저장장치, 1번 학생은 1번 저장장치에 저장된다. 데이터를 찾을 때도 끝자리 기준으로 찾는다. 이렇게 특정 함수로 직접 접근이 가능한 것이 직접 파일 구조이며, 이때 사용하는 함수를 해시 함수 hash function라고 한다. 

해시 함수를 잘 찾았다 해도 저장 공간이 낭비된다는 문제가 있다.  해시 테이터를 보면 모든 주소에 일정량의 데이터가 고르게 저장되지 않고 들쑥날쑥하다. 이런 경우 빈 공간이 생겨서 저장장치의 이용 효율이 떨어진다.

 

퀴즈

1. 운영체제마다 파일 시스템이 조금씩 다른데, 윈도우의 경우 XP 이전의 초기 버전에서는 FAT File Allocation Table를 사용했고, 현재는 무엇을 사용하는가?

2. 1번 질문에서 유닉스는 어떤 파일 시스템을 사용하는가?

3. 파일 시스템은 파일과 파일의 집합체인 어디를 관리하는데 그곳은 어디인가?

4. 저장장치에서는 파일을 일정 크기로 묶어서 관리하는데 이를 무엇이라고 하는가?

5. 메모리의 단위는 바이트이지만, 저장장치의 단위는 무엇이라고 하는가?

6. 파일 이름에 스페이스바를 포함하여 대부분의 특수문자를 사용할 수 없다. 해당하는 것은 윈도우인가 유닉스인가?

7. 파일 속성과 달리 파일마다 자신에게 필요한 정보를 따로 정의하여 사용할 수 있는데, 이는 파일 어디에 기록되는가?

8. 저장장치의 파일 시스템을 초기화하는 작업을 무엇이라 하는가? 

9. 이 포맷은 데이터는 그대로 둔 채 파일 테이블만 초기화하는 방식이 있다. 이 포맷은 무엇인가?

10. 이 포맷은 파일 테이블을 초기화할 뿐 아니라 블록의 모든 데이터를 0으로 만든다. 따라서 포맷하는데 시간이 많이 걸린다. 이 포맷은 무엇인가?

11. 파일 내용이 하나의 긴 줄로 늘어선 형태로 카세트테이프가 대표적이다. 그것을 어떤 구조라고 하는가?

12. 작업을 하다가 특정 위치로 파일 디스크립터를 옮겨야 할 때는 어떤 명령을 수행하는가?

13. 순차 파일 구조에 인덱스 테이블을 추가하여 순차 접근과 직접 접근이 가능하게 만드는 것을 어떤 구조라고 하는가?

14. 특정 함수로 직접 접근이 가능한 것이 직접 파일 구조이며, 이때 사용하는 함수를 무엇이라 하는가?

15. 하드디스크나 SSD와 같은 대용량 저장장치는 통째로 사용하기도 하지만, 대개 2개나 3개로 나눠서 사용한다. 저장장치를 2개 이상의 묶음으로 나누는 것을 무엇이라 하는가?

728x90

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

네트워크 저장장치와 고가용성  (8) 2023.12.06
디렉터리의 구조  (4) 2023.12.05
RAID  (0) 2023.12.02
디스크 스케줄링  (2) 2023.11.30
저장장치  (0) 2023.11.29