봉황대 in CS

[Chapter 10. 파일 시스템] 파일과 디렉터리 본문

Computer Science & Engineering/Operating System

[Chapter 10. 파일 시스템] 파일과 디렉터리

등 긁는 봉황대 2022. 8. 6. 21:59

* 본 글은 '운영체제(Operating System: Concepts) 9th edition'의 내용과 2021학년도 1학기에 수강한 '운영체제' 과목 강의 내용을 함께 정리하여 작성하였습니다.

 

파일 (File)


운영체제는 컴퓨터 시스템을 편리하게 사용하기 위해

1. 저장된 정보에 대한 일관된 논리적 관점으로 제공하고 2. 저장 장치의 물리적 특성을 추상화하여

논리적 저장 단위, 파일을 정의한다.

 

파일은 보조 저장 장치에 저장되어 있는 관련 정보의 집합체이다.

= 작성자와 사용자에 의해서 그 의미가 정의된 비트, 바이트, 행 또는 레코드들의 연속체

 

하나의 파일은 디스크 내 여러 개의 섹터로 구성되어 있다. (섹터 : PC용 하드 디스크의 경우 512 B)

메모리와 디스크 간의 입출력 전송은 블록 단위로 수행되며, 각 블록은 하나 이상의 섹터이다.

→ 파일 = 섹터 단위로 저장되는 정보의 집합체

 

파일 연산 (File Operations)

운영체제는 파일 생성, 쓰기, 읽기, 위치 재설정, 삭제, 절단 등을 하기 위한 시스템 호출들을 제공한다.

 

1. 파일 생성 (Create)

파일을 생성하기 위한 2단계

(1) 파일을 저장할 수 있는 공간을 파일 시스템 내에서 찾아서 할당한다.

(2) 새로 생성된 파일에 대한 항목을 디렉터리에 생성한다.

      이 디렉터리 항목은 파일 이름과 파일 시스템 내의 위치를 기록해야 한다.

 

 

2. 파일 열기 (Open)

파일에 대한 입출력을 위해서 준비를 하는 단계이다.

파일명을 변수로 주어야 한다.

 

기본적으로 파일 디스크립터에 있는 내용을 메모리에 있는 테이블에 복사, 이후 파일 참조는 해당 값을 사용한다.

 

* 파일 디스크립터(File Descriptor) : UNIX 시스템에서 시스템으로부터 할당받은 파일을 대표하는 정수

1. 프로세스가 파일을 열면 커널은 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당해줌

2. 그다음 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 때 파일 디스크립터 값을 이용해서 파일을 지칭할 수 있음

 

 

3. 파일 읽기 (Read)

파일명과 기억 장소의 위치(그 파일의 해당 블록이 옮겨져야 할 주 메모리 주소)를 명시하는 시스템 호출을 사용한다.

해당 항목을 찾기 위해서 디렉터리를 탐색한다.

 

시스템은 읽기 포인터(read pointer)를 유지하고 있어야 하며, 읽기가 일어날 때마다 갱신되어야 한다.

* 읽기 포인터 : 파일 내의 다음 읽기가 일어날 위치를 가리킴

 

 

4. 파일 쓰기 (Write)

파일명과 파일에 기록될 정보를 명시하는 시스템 호출을 사용한다.

파일명이 주어지면 시스템은 파일의 위치를 알기 위해 디렉터리를 탐색한다.

 

시스템은 쓰기 포인터(write pointer)를 유지하고 있어야 하며, 쓰기가 일어날 때마다 갱신되어야 한다.

* 쓰기 포인터 : 파일 내의 다음 쓰기가 일어날 위치를 가리킴

 

 

대부분의 시스템은 하나의 현재 파일 위치 포인터(current file position pointer)를 가져,

읽기와 쓰기 연산 모두 이 포인터를 사용한다.

 

 

5. 파일 삭제 (Delete)

지명된 파일을 디렉터리에서 찾는다.

해당 디렉터리 항목을 발견하면 해당 파일이 차지한 모든 공간을 해제시키고, 그 파일이 있는 디렉터리 항목을 무효화한다.

 

 

6. 파일 절단

사용자가 파일의 내용은 지우지만 그 파일의 속성을 그대로 남기기를 원할 때 사용한다.

파일의 길이가 0으로 재설정되며 파일이 가지고 있던 공간은 해제된다.

 

디렉터리 (Directory)


디렉터리(Directory)는 자신에게 속하는 모든 파일과 부 디렉터리의 목록을 가진 자료구조의 파일이다. (폴더라고도 부름)

즉, '디렉터리 파일'이라는 파일을 통해서 디렉터리 기능을 제공하는 것이다.

 

1단계 디렉터리 (Single-Level Directory)

가장 간단한 디렉터리 구조이다.

모든 파일이 한 디렉터리 내에 있기 때문에 모두 유일한 파일명을 가져야 한다는 제약 조건이 존재한다.

 

 

일반 그래프 디렉터리 (General Graph Directory)

임의 파일이나 디렉터리가 서로 다른 두 개 이상의 디렉터리를 부모로 가질 수 있으며, 사이클을 형성할 수도 있다.

만약 사이클이 없다면 비순환 그래프가 되어서 트리 구조의 일반화된 유형이다.

 

하나의 파일이 여러 개의 완전한 경로 이름을 갖고 있으므로, 서로 다른 경로 이름이 같은 파일을 가리키는 경우도 있다.

 

파일의 삭제 과정에서 고아가 된 포인터(dangling pointer) 문제가 발생할 수 있다.

 

 

트리 구조 디렉터리 (Tree-Structured Directory)

가장 일반적인 디렉터리 구조로, 계층 구조 디렉터리의 가장 간단한 예이다.

* 계층 구조 디렉터리 : 하나의 루트(root) 디렉터리가 다른 디렉터리나 파일을 포인팅

   → 한 디렉터리는 부 디렉터리를 포인트 하면서 계층이 내려가기를 반복한다.

 

최상위에 하나의 루트(root) 디렉터리가 존재한다.

모든 디렉터리나 파일은 단지 한 개의 상위 디렉터리에 의해서 포인트 되나, 루트 디렉터리는 부모 디렉터리가 없다.

 

 

* 경로명

절대 경로명(absolute path name) : 루트에서 지정된 파일까지의 경로가 명시된 것

상대 경로명(relative path name) :  현재 디렉터리를 기준으로 목적하는 파일까지의 경로를 지정하는 것

 

 

반응형
Comments