운영체제 (Operating Systems) 파일 시스템 (File System) 문양세 강원대학교 IT대학 컴퓨터과학전공
강의 목표 파일 시스템의 기능을 설명한다. 파일 시스템 인터페이스의 특징을 기술한다. 접근 방법, 파일 공유, 파일 잠금, 디렉터리 구조를 포함한 파일 시스템 설계의 트레이드-오프에 관해 논의한다. 파일 시스템 보호(protection)에 대해 논의한다.
강의 목차 파일 시스템 파일 개념 접근 방법 디렉터리와 디스크 구조 파일 시스템 마운팅 파일 공유와 파일 보호 요약
파일 개념(File Concept) 파일 시스템 파일이란? 연속적인 논리적 주소 공간(contiguous logical address space) 파일 타입 데이터 파일: 숫자, 문자, 바이너리, 레코드 등 프로그램 파일: 소스 프로그램, 실행 프로그램 등 파일 구조 None: sequence of words, bytes 단순 레코드 구조 라인(lines) 고정 길이(fixed length) 가변길이(variable length) 복잡한 구조(complex structure): 포맷을 갖춘 문서(formatted document) 재배치 가능 로드 파일(relocatable load file)
파일 속성(File Attributes) 파일 시스템 파일은 운영체제마다 다른 속성을 가질 수 있음 전형적으로 가지는 속성 이름(name): 사람이 읽을 수 있는 형태로 제공되는 정보 식별자(identifier): 파일 시스템 내에서 해당 파일을 유일하게 식별하는 식별자 (식별자는 사람이 읽을 수 없는 형태의 파일 이름임) 타입(type): 여러 파일 타입을 제공하는 시스템에서 필요(실행, 텍스트, 프로그램 등) 위치(location): 파일이 존재하는 장치와 장치 내 해당 파일에 대한 포인터 크기(size): 현재 파일의 크기 보호(protection): 누가 읽기, 쓰기, 실행이 가능한가 시간(time), 날짜(date), 사용자 식별(user identification)
파일 연산(File Operations) (1/2) 파일 시스템 파일 생성(create) 파일 시스템 내 공간을 찾아 할당하고, 이를 디렉터리에 등록한다. C언어에서, open(…, O_CREAT)에 해당 파일 쓰기(write) 주어진 버퍼의 내용을 파일 포인터(file pointer)가 가리키는 위치에 쓴다. C언어에서, write()에 해당 파일 읽기(read) 파일 포인터(file pointer)가 가리키는 위치의 내용을 버퍼에 읽는다. C언어에서, read()에 해당
파일 연산(File Operations) (2/2) 파일 시스템 파일 내 위치 재설정(reposition) 파일 포인터(file pointer)가 가리키는 위치를 변경한다. C언어에서, seek()에 해당 파일 삭제(delete) 해당 파일이 차지한 공간을 방출하고, 정보를 디렉터리에서 삭제한다. C언어에서, unlink()에 해당 (관련 명령어는 rm) 파일 절단(truncate) 파일의 속성은 유지한 상태에서, 해당 파일의 일부 내용을 지운다. C언어에서, truncate()에 해당
오픈 파일 테이블(Open File Table) 파일 시스템 프로세스에 의해 열린 파일을 관리하기 위해, 운영체제는 오픈 파일 테 이블을 관리한다. 오픈 파일 테이블의 주요 항목 파일 포인터: 가장 최근에 읽기/쓰기를 한 위치를 가리킨다. 파일 오픈 개수: 몇 개의 프로세스가 해당 파일을 열었는지를 나타낸다. (0이 되면 모두 닫은 것이고, 그렇게 되어야 제거를 할 수 있다.) 파일의 디스크 위치: 디스크 상에 해당 파일의 위치(들)를 가리킨다. 접근 권한: 각 프로세스가 어떤 모드(쓰기/읽기/실행)로 파일을 사용하는지 나타낸다.
파일 타입(File Types) 파일 시스템
강의 목차 파일 시스템 파일 개념 접근 방법 디렉터리와 디스크 구조 파일 시스템 마운팅 파일 공유와 파일 보호 요약
접근 방법(Access Methods) (디스크에 있는) 파일에 접근하는 방법을 일컫는다. 파일 시스템 (디스크에 있는) 파일에 접근하는 방법을 일컫는다. 접근 방법은 크게 (1) 순차 접근(sequential access)과 (2) 직접 접근(direct access)으로 나뉜다.
순차 접근(Sequential Access) 파일 시스템 파일의 정보가 레코드 순서대로 차례차례 처리된다. 주요 연산 read next: 다음 부분(레코드)을 읽고, 파일 포인터가 자동으로 증가한다. write next: 다음 부분(레코드)에 쓰고, 파일 포인터가 자동으로 증가한다. rewind, seek: 파일 포인터를 되돌리거나, 지정된 위치로 이동시킨다. 참조: C언어에서, 파일 관련 시스템 호출은 순차 접근을 가정한다.
직접 접근(Direct Access) (1/2) 파일 시스템 상대 접근이라고도 불리며, 파일에 저장된 논리 레코드들을 특별한 순서 없이 빠르게 읽고 쓸 수 있다. 일반적으로 디스크 모델에 기반을 두는데, 이는 디스크가 무작위 파일 블록에 임의적 접근을 허용하기 때문이다. 예를 들어, n이 블록 번호라 할 때, read n, write n을 제공한다.
직접 접근(Direct Access) (2/2) 파일 시스템 직접 접근 기반의 색인 기반 파일 예제
강의 목차 파일 시스템 파일 개념 접근 방법 디렉터리와 디스크 구조 파일 시스템 마운팅 파일 공유와 파일 보호 요약
디렉터리 구조(Directory Structure) 파일 시스템 수 많은 파일들을 flat하게 관리할 수는 없다! 디렉터리란 파일들에 관한 정보를 담은 노드들의 모임이다. (A collection of nodes containing information about all files.) F1 F2 F3 F4 Fn Directory Files
디스크 구조(Disk Structure) 파일 시스템 디스크는 파티션(partition)으로 분할될 수 있다. 파티션은 미니디스크(minidisk) 혹은 슬라이스(slice)라고도 불린다. 디스크(혹은 파티션)는 장애에 대비해 RAID로 사용될 수 있다. 디스크(혹은 파티션)는 파일 시스템 구성없이 원시(raw) 파일로도 사용될 수 있다. 파일 시스템을 가진 개체(entity)를 볼륨(volume)이라 부르며, 하나의 볼 륨은 하나 이상의 디스크(혹은 파티션)으로 구성될 수 있다. 볼륨은 논리적인 가상 디스크(virtual disk)로 취급되며, 시스템에 존재하 는 파일에 대한 정보를 가진다.
전형적인 파일 시스템의 구조 파일 시스템
디렉터리에 대한 연산 파일 찾기(search for a file): 디렉터리 구조를 탐색하여 파일을 찾는다. 파일 시스템 파일 찾기(search for a file): 디렉터리 구조를 탐색하여 파일을 찾는다. 파일 생성(create a file): 새로운 파일을 생성하여 디렉터리에 추가한다. 파일 삭제(delete a file): 필요치 않은 파일을 디렉터리에서 삭제한다. 디렉터리 나열(list a directory): 디렉터리 내 파일들을 나열하고, 각 파일 에 대한 디렉터리 항목 내용을 보여준다. 파일 재명명(rename a file): 파일 이름을 변경하며, 경우에 따라 디렉터 리 구조 내에서 항목의 위치가 변경될 수 있다. 파일 시스템 순회(traverse the file system): 백업 등의 목적으로 전체 파 일 시스템의 모든 디렉터리를 순회한다.
디렉터리 조직으로 얻을 수 있는 점 탐색 효율성(efficiency): 파일을 빠르게 찾을 수 있다. 파일 시스템 탐색 효율성(efficiency): 파일을 빠르게 찾을 수 있다. 네이밍(naming): 사용자에게 편리하다. 두 사용자가 다른 파일에 대해 같은 이름을 부여할 수 있다. 하나의 파일에 서로 다른 여러 이름을 가질 수 있다. (eg: 바로가기) 그룹핑(grouping): 파일들을 그 성질에 따라 논리적으로 그룹핑할 수 있다. 이 디렉터리에는 Java 소스 파일들을 모아둔다. 저 디렉터리에는 작년에 작업한 이미지 파일들을 모아둔다.
1단계 디렉터리(Single-Level Directory) 파일 시스템 모든 사용자에 대해 1단계 디렉터리를 제공한다. 네이밍 문제: 여러 사용자가 있어도 같은 이름의 파일을 쓸 수 없다. 그룹핑 문제: 논리적 그룹핑이 어렵다.
2단계 디렉터리(Two-Level Directory) 파일 시스템 각 사용자 별로 디렉터리를 분리하여 제공한다. 파일 식별은 “사용자/파일명”으로 이루어진다. 사용자가 다르다면 같은 이름의 파일을 가질 수 있다. 1단계에 비해, 효율적 탐색이 가능하다. 1단계와 마찬가지로, 논리적 그룹핑이 어렵다.
트리 구조 디렉터리(Tree-Structured Directory) (1/2) 파일 시스템 다단계 트리 형태로, 사용자는 자신의 서브디렉터리(subdirectory)를 만 들어 파일을 구성할 수 있다.
트리 구조 디렉터리(Tree-Structured Directory) (2/2) 파일 시스템 효율적 탐색을 수행할 수 있다. 논리적 그룹핑이 가능하다. 현재 디렉터리(current directory, working directory) 개념을 제공한다. 절대 경로(absolute path)와 상대 경로(relative path) 이름을 제공한다. cd /spell/mail/prog cd /spell cd ./mail/prog 파일의 삭제 rm <file names> 새로운 서브디렉터리는 현재 디렉터리에 생성된다. 만일, 현재 디렉터리가 /mail이고, mkdir count를 수행한다면 오른쪽 같이 생성된다. 여기서, mail 디렉터리를 지운다면? mail prog copy prt exp count
비순환 그래프 디렉터리(Acyclic-Graph Directory) (1/2) 파일 시스템 합동 프로젝트를 수행하는 두 프로그래머는 공동의 서브디렉터리를 갖 고자 한다. 복사하여 유지하는 것 보다는 서브디렉터리를 공유하는 것이 효율적이다. 비순환 그래프 구조를 채택하여 서브디렉터리나 파일을 공유할 수 있다.
비순환 그래프 디렉터리(Acyclic-Graph Directory) (2/2) 파일 시스템 하나의 디렉터리(파일)에 대해 두 개의 다른 이름을 갖는다(aliasing). 오늘날 Linux, Windows에서는 심볼릭 링크 혹은 바로가기로 유사 기능 을 제공한다. Dangling pointer 문제: 심볼릭 링크나 바로가기는 있는데, 실제 해당 파일은 삭제되는 현상을 일컫는다. UNIX에서는 하드 링크(hard link) 기능을 제공하기도 한다.
일반 그래프 디렉터리(General Graph Directory) 파일 시스템 트리 구조에 새로운 링크를 추가 일반 그래프 구조 사이클이 생성될 수 있으며, 이를 방지하기 위해 파일에만 링크를 허용하고 디렉터리에는 허용하지 않거나, 가비지 컬렉션을 사욯하거나, 매 링크 추가시 사이클 추가 여부를 검사한다.
강의 목차 파일 시스템 파일 개념 접근 방법 디렉터리와 디스크 구조 파일 시스템 마운팅 파일 공유와 파일 보호 요약
파일 시스템 마운팅 파일 시스템 운영체제는 디바이스 이름과 마운트 포인트(mount point)를 전달받아 해당 디바이스를 주어진 포인트에 마운트한다. 예제: /disk/rsd0를 /home/users에 마운트 한다. Linux에서는 df 명령을 사용해 마운트 상황을 알 수 있다. 마운트 과정에서, 운영체제는 디바이스가 유효한 파일 시스템을 포함하 는지 검증한다.
마운트 예제 (1/2) 파일 시스템 그림 (a): 파일 시스템의 기존 상태 그림 (b): 마운트되지 않은 파티션
마운트 예제 (2/2) 파일 시스템 앞서 그림 (b)의 파티션이 마운트 포인트 /users에 마운트 된 경우
강의 목차 파일 시스템 파일 개념 접근 방법 디렉터리와 디스크 구조 파일 시스템 마운팅 파일 공유와 파일 보호 요약
파일 공유(File Sharing) 다수 사용자(Multiple Users) 시스템에서 파일 공유는 필수적 요소이다. 파일 시스템 다수 사용자(Multiple Users) 시스템에서 파일 공유는 필수적 요소이다. 파일 공유는 보호 기법(protection scheme)을 통해 이루어진다. 단일 사용자에서 다수 사용자 환경으로 변하며, 소유자(owner)와 그룹 사용자 개념이 도입된다. User ID: 사용자를 식별하며, 각 사용자별로 접근 권한(permission)을 부여한다. Group ID: 그룹에 포함된 사용자들에게 대한 그룹별 접근 권한을 부여한다. 분산 시스템(distributed system)에서는 파일이 네트워크를 통해 공유되 어야 한다. Network File System (NFS)가 일반적인 분산 파일 공유 방법이다. 최근에는 클라우드 기반의 HDFS(Hadoop Distributed File System)가 널리 쓰인다.
파일 보호(File Protection) 파일 시스템 파일 소유자/생성자는 각 파일에 대해 누가 해당 파일을 사용할 수 있으며, 어떤 기능을 수행할 수 있는지를 제어(control)할 수 있다. 파일에 대한 접근 종류 읽기(read) 쓰기(write) 실행(execute) 추가(append) 삭제(delete) 리스트(list)
Windows XP Access Control List Management 파일 시스템
A Sample UNIX Directory Listing 파일 시스템
강의 목차 파일 시스템 파일 개념 접근 방법 디렉터리와 디스크 구조 파일 시스템 마운팅 파일 공유와 파일 보호 요약
요약 파일이란? 연속적인 논리적 주소 공간 파일 속성: 이름, 식별자, 타입, 위치, 크기, 보호, 시간, 날짜 등 파일 시스템 파일이란? 연속적인 논리적 주소 공간 파일 속성: 이름, 식별자, 타입, 위치, 크기, 보호, 시간, 날짜 등 파일 연산: 생성, 쓰기, 읽기, 위치 재설정, 삭제, 절단 파일 접근 방법: 순차 접근, 직접 접근 디렉터리와 파일 시스템 구조 1단계 디렉터리, 2단계 디렉터리 트리 구조 디렉터리, 비순환 그래프 디렉터리, 일반 그래프 디렉터리 파일 시스템 마운팅 파일 공유: 다수 사용자 환경에서 파일 공유, NFS 파일 보호: 접근 제어 목록(access control list) 관리