파일과 디렉터리
파일
파일이란?
- 하드 디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합
- 의미 있고 관련 있는 정보를 모은 논리적 단위
- 모든 파일에는 이름과 파일을 실행하기 위한 정보, 그리고 파일 관련 부가 정보가 있다.
- 이 부가 정보를 속성 또는 메타데이터라고 한다.
파일 속성
파일 형식, 위치, 크기 등 파일과 관련된 다양한 정보
파일 속성과 유형
속성 이름 의미
유형 | 운영체제가 인지하는 파일의 종류를 나타낸다. |
크기 | 파일의 현재 크기와 허용 가능한 최대 크기를 나타낸다. |
보호 | 어떤 사용자가 해당 파일을 읽고, 쓰고, 실행할 수 있는지를 나타낸다. |
생성 날짜 | 파일이 생성된 날짜를 나타낸다. |
마지막 접근 날짜 | 파일에 마지막으로 접근한 날짜를 나타낸다. |
마지막 수정 날짜 | 파일이 마지막으로 수정된 날짜를 나타낸다. |
생성자 | 파일을 생성한 사용자를 나타낸다. |
소유자 | 파일을 소유한 사용자를 나타낸다. |
위치 | 파일의 보조기억장치상의 현재 위치를 나타낸다. |
- 파일 유형을 알리기 위해 가장 흔히 사용하는 방식은 파일 이름 뒤에 붙는 확장자를 이용하는 것이다.
파일 유형 대표적인 확장자
실행 파일 | 없는 경우, exe, com, bin |
목적 파일 | obj, o |
소스 코드 파일 | c, cpp, cc, java, asm, py |
워드 프로세서 파일 | xml, rtf, doc, docx |
라이브러리 파일 | lib, a, so, dll |
멀티미디어 파일 | mpeg, mov, mp3, mp4, avi |
백업/보관 파일 | rar, zip, tar |
파일 연산을 위한 시스템 호출
- 파일을 다루는 모든 작업은 운영체제에 의해 이루어진다.
- 이를 위해 운영체제는 다음과 같은 파일 연산을 위한 시스템 호출을 제공한다.
- 파일 생성
- 파일 삭제
- 파일 열기
- 파일 닫기
- 파일 읽기
- 파일 쓰기
디렉터리
- 파일들을 일목요연하게 관리하기 위해 디렉터리를 이용할 수 있다.
- 윈도우 운영체제에서는 디렉터리를 폴더라고 부른다.
- 옛날 운영체제에서는 하나의 디렉터리만 존재했다.
- 즉 모든 파일이 하나의 디렉터리 아래에 있었다. (이러한 구조를 1단계 디렉터리라고 부른다.)
- 점점 컴퓨터 용량이 커지다 보니 저장할 수 있는 파일도 많아지고, 1단계 디렉터리로는 많은 파일을 관리하기 어려워 여러 계층을 가진 트리 구조 디렉터리가 생겨났다.
트리 구조 디렉터리
- 최상위 디렉터리가 있고 그 아래에 여러 서브 디렉터리가 있을 수 잇다.
- 서브 디렉터리도 또 다른 서브 디렉터리를 가질 수 있다.
- 최상위 디렉터리를 흔히 루트 디렉터리라고 부르고 슬래시(/)로 표현한다.
- 따라서 경로라는 개념이 자연스럽게 생겨났다.
- 경로는 디렉터리를 이용해 파일 위치, 나아가 파일 이름을 특정 짓는 정보이다.
절대 경로와 상대 경로
- 같은 디렉터리에는 동일한 이름의 파일이 존재할 수 없지만, 서로 다른 디렉터리에는 동일한 이름의 파일이 존재할 수도 있다.
절대 경로
루트 디렉터리부터 파일까지 경로가 다르기 때문에 동일한 이름임에도 공존할 수 있다. 따라서 모든 파일은 루트 디렉터리에서 자기 자신까지 이르는 고유한 경로를 가지고 있고, 이러한 경로를 절대 경로라고 부른다.
상대 경로
절대 경로가 루트 디렉터리부터 시작하는 경로라면 상대 경로는 현재 디렉터리부터 시작하는 경로이다.
디렉터리 연산을 위한 시스템 호출
운영체제가 파일 연산을 위한 시스템 호출을 제공하는 것처럼 운영체제는 디렉터리 연산을 위한 시스템 호출도 제공한다.대표적인 종류는 다음과 같다.
- 디렉터리 생성
- 디렉터리 삭제
- 디렉터리 열기
- 디렉터리 닫기
- 디렉터리 읽기
디렉터리 엔트리
- 내부에 해당 파일과 관련된 정보를 담고 있다면, 디렉터리는 내부에 해당 디렉터리에 담겨 있는 대상과 관련된 정보를 담고 있다.
- 이 정보는 보조기억장치에 테이블 형태의 정보로 저장된다.
- 각각의 엔트리(행)에 담기는 정보는 파일 시스템마다 차이가 있다.
- 다만 파일 시스템을 막론하고 디렉터리 엔트리가 공통으로 포함하는 정보가 있다면 디렉터리에 포함된 대상의 이름과 그 대상이 보조기억장치 내에 저장된 위치를 유추할 수 있는 정보가 담긴다는 점이다.
15-2. 파일 시스템
- 파일 시스템: 파일과 디렉터리를 보조기억장치에 일목요연하게 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램
파티셔닝과 포매팅
- 한번도 사용된 적이 없는 하드 디스크, SSD는 파티셔닝과 포매팅을 하기 전에는 보조기억장치를 사용할 수 없다.
- 파티셔닝: 저장 장치의 논리적인 영역을 구획하는 작업
- 예를 들어, 서랍안에 칸막이를 설치하여 영역을 나누는 것과 같다.
- 하드 디스크나 SSD처럼 용량이 큰 저장 장치를 하나 이상의 논리적인 단위로 구획하는 것이다.
- 파티션: 파티셔닝 작업을 통해 나누어진 영역 하나하나
- 포매팅: 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업
- 저장 장치를 완전히 삭제하는 것이라고 보기는 어렵다.
- 포매팅까지 완료하여 파일 시스템을 설정했다면 파일과 디렉터리를 생성 할 수 있다.
파일 할당 방법
- 하드디스크이 포매팅까지 끝내고 사용할 파일을 저장한다고 가정해보자.
- 섹터: 하드 디스크의 가장 작은 저장 단위
- 운영체제는 하나 이상의 섹터를 블록이라는 단위로 묶은 뒤, 블록 단위로 파일과 디렉터리를 관리한다.
- 파일을 보조기억장치에 할당하는 방법
- 연속 할당
- 불연속 할당
- 연결 할당
- 색인 할당
연속 할당
- 가장 단순한 방식으로 보조기억 장치 내 연속적인 블록에 파일을 할당하는 방식이다.
- 연속 할당된 파일에 접근하기 위해서는 파일의 첫 번째 블록 주소와 길이만 알면 된다.
- 장점: 구현이 단순하다.
- 문제점: 외부 단편화를 야기한다.
- 예를 들어 중간에 블록 4개를 사용하는 파일이 삭제된다고 가정했을 때, 5개 이상의 블록을 사용하는 파일은 할당할 수 없다.
연결 할당
- 각 블록 일부에 다음 블록의 주소를 저장하여 가리키는 형태로 할당하는 방식이다.
- 즉, 파일을 이루는 데이터를 연결 리스트로 관리한다.
- 불연속 할당의 일종이기 때문에 파일이 여러 블록에 흩어져 저장되어도 무방하다.
- 장점: 외부 단편화 문제를 해결한다.
- 단점
- 반드시 첫 번째 블록부터 하나씩 차례대로 읽어야한다.
- 파일의 중간 부분부터 접근하고 싶어도 반드시 파일의 첫 번째 블록부터 접근하여 차례대로 읽어야 한다.
- 즉, 파일 내 임의의 위치에 접근하는 속도(임의 접근 속도)가 매우 느리다.
- 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근할 수 없다.
- 반드시 첫 번째 블록부터 하나씩 차례대로 읽어야한다.
색인 할당
- 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식이다.
- 연결 할당과는 달리 파일 내 임의의 위치에 접근하기 쉽다.
- 색인 할당을 기반으로 만든 파일 시스템이 유닉스 파일 시스템이다. (뒤에 설명)
파일 시스템 살펴보기
FAT 파일 시스템
- 연결 할당의 단점을 보완한 파일 시스템으로, 각 블록에 포함된 다음 블록의 주소들을 모아 테이블 형태로 관리하는 방식이다.
- 이러한 테이블을 파일 할당 테이블(FAT)이라고 부른다.
- 옛날 마이크로소프트의 운영체제인 MS-DOS, USB메모리, SD카드와 같은 저용량 저장 장치용 파일 시스템으로 이용된다.
- FAT 파일 시스템은 버전에 따라 FAT12, FAT16, FAT 32가 있으며, 숫자는 블록을 표현하는 비트 수를 의미한다.
- FAT 영역에 FAT가 저장되고, 그 뒤에 루트 디렉터리가 저장되는 영역이 있고, 그 뒤에 서브 디렉터리와 파일들을 위한 데이터 영역이 있다.
- FAT는 하드 디스크 파티션의 시작 부분에 있지만, 실행하는 도중 메모리에 캐시될 수 있다.
- FAT가 메모리에 적재된 채 실행되면 다음 블록을 찾는 속도가 매우 빨라지고, 임의 접근의 성능이 개선된다.
유닉스 파일 시스템
- 색인 할당 기반이며, 색인 블록을 i-node라고 부른다.
- i-node에는 파일 속성 정보와 열다섯 개의 블록 주소가 저장될 수 있다.
- 파일마다 i-node가 있고, 각 i-node마다 번호가 부여된다.
- i-node의 크기는 유한하다. 기본적으로 열다섯 개의 블록 주소를 저장할 수 있기 때문에 i-node 하나는 열다섯 개의 블록을 차지하는 파일까지 가리킬 수 있다.
- 열다섯 개 이상의 블록을 차지하는 파일은 어떻게 해야할까?
- 블록 주소 중 열두 개에는 직접 블록 주소를 저장한다.
- 직접 블록: 파일 데이터가 저장된 블록
- 블록 주소 중 열두 개에는 직접 블록 주소를 저장한다.
- 열두 개의 블록 주소로 파일의 모든 블록을 가리킬 수 없다면 열세 번째 주소에 단일 간접 블록 주소를 저장한다.
- 단일 간접 블록: 파일 데이터가 저장된 것이 아닌 파일 데이터를 저장한 블록 주소가 저장된 블록
- 열세 개의 블록 주소로 파일의 모든 블록을 가리킬 수 없다면 열네 번째 주소에 이중 간접 블록 주소를 저장한다.
- 이중 간접 블록: 블록 주소를 저장하는 블록 주소가 저장된 블록
- 열네 개의 블록 주소로 파일 블록을 가리킬 수 없다면 열다섯 번째 주소에 삼중 간접 블록 주소를 저장한다.
- 삼중 간접 블록: 이중 간접 블록 주소가 저장된 블록
'혼자 공부하는 컴퓨터 구조+운영체제' 카테고리의 다른 글
14장 가상 메모리 (1) | 2024.06.10 |
---|---|
13장 교착 상태 (1) | 2024.06.09 |
12장 프로세스 동기화 (0) | 2024.06.08 |
11장 CPU 스케줄링 (2) | 2024.06.07 |
10장 프로세스와 스레드 (1) | 2024.06.07 |