5 minute read

‘혼자 공부하는 컴퓨터구조+운영체제 - 강민철’ 책을 참고하여 작성한 포스트입니다.


파일(file)

  • 파일이란 보조기억장치에 저장된 관련 정보의 집합이다. 의미 있고 관련 있는 정보를 모은 논리적 단위를 의미한다.
  • 모든 파일에는 1. 이름, 2. 파일을 실행하기 위한 정보, 3. 파일 관련 부가 정보 가 있다.
  • 부가 정보를 속성(attribute) 또는 메타 데이터(meta data)라고 한다.
  • 부가 정보에 파일 형식, 위치, 크기 등 파일과 관련한 다양한 정보가 포함된다.

파일 속성과 유형

  • 대표적인 속성의 종류는 다음과 같다
    1. 유형
      • 운영체제가 인지하는 파일의 종류
    2. 크기
    3. 보호
      • 어떤 사용자가 해당 파일을 읽고, 쓰고, 실행할 수 있는 지
    4. 생성 날짜
    5. 마지막 접근 날짜
    6. 마지막 수정 날짜
    7. 생성자
    8. 소유자
    9. 위치
  • 파일 유형을 알리기 위해 가장 흔히 사용하는 방식은 파일 이름 뒤에 붙는 확장자(extension)를 이용하는 것이다.
파일 유형 대표적인 확장자
실행 파일 없는 경우, exe, com, bin
목적 파일 obj, o
소스 코드 파일 c, cpp, cc, java, asm, py
라이브러리 파일 lib, a, so, dll

파일 연산을 위한 시스템 호출

  • 파일을 다루는 모든 작업은 운영체제에 의해 이뤄진다.
  • 응용 프로그램이 임의로 파일 조작할 수 없다.
  • 그래서 파일을 다루려면 운영체제에 부탁해야 하므로 시스템 호출을 한다.



디렉터리

  • 파일들을 관리하기 위해 디렉터리(directory)를 사용한다. 윈도우는 폴더!
  • 디렉터리가 하나면 1단계 디렉터리, 디렉터리가 여러 계층으로 이루어져 있으면 트리 구조 디렉터리(tree-structured directory)
  • 트리 자료구조 처럼 최상위 디렉터리를 루트 디렉터리(root directory)라고 함. 슬래시(/)로 표현함. 윈도우는 보통 C://
  • 디렉터리를 따라 경로(path)라는 개념이 생겼음

절대 경로와 상대 경로

  • 모든 파일은 루트 디렉터리에서 자기 자신까지 이르는 고유한 경로인 절대 경로(absolute path)를 가지고 있다.
  • 상대 경로(relative path)는 현재 디렉터리부터 시작하는 경로이다.

디렉터리 연산을 위한 시스템 호출

  • 디렉터리도 파일이므로 연산을 하려면 시스템 호출을 해야 한다.

디렉터리 엔트리

  • 파일이 내부에 해당 파일과 관련된 정보를 담고 있다면, 디렉터리는 내부에 해당 디렉터리에 담겨 있는 대상과 관련된 정보를 담고 있다.
  • 보통 테이블(표) 형태로 구성된다. 즉, 디렉터리는 보조기억장치에 테이블 형태의 정보로 저장된다.



상대 경로를 나타내는 다른 방법

  • 대부분의 운영체제는 현재 작업 디렉터리를 (.), 상위 디렉터리를 (..) 으로 나타낸다.



파일 시스템

  • 파일 시스템은 파일과 디렉터리를 보조기억장치에 저장하고 접근할 수 있는 운영체제 내부 프로그램이다.
  • 파일 시스템은 다양한 종류가 있고, 하나의 컴퓨터에서 여러 파일 시스템을 사용할 수 있다.



파티셔닝과 포매팅

  • 보조기억장치를 처음 사용하려면 파티션을 나누는 작업(파티셔닝)과 포맷 작업(포매팅)을 거쳐야 한다.
  • 파티셔닝(partitioning)은 저장 장치의 논리적인 영역을 구획하는 작업이다.
  • 파티셔닝은 저장 장치를 하나 이상의 논리적인 단위로 구획하는 것이고, 이렇게 나누어진 영역 하나하나를 파티션(partition) 이라고 한다.
  • 포매팅(formatting)은 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업.
  • 포매팅할 때 파일 시스템을 결정한다.
  • 파일 시스템에는 여러 종류가 있고, 파티션마다 다른 파일 시스템을 설정할 수도 있다.



파일 할당 방법

  • 운영체제는 파일과 디렉터리를 블록(block) 단위로 읽고 쓴다. 즉, 하나의 파일이 저장될 때 하나 이상의 블록에 걸쳐 저장된다.
  • 파일을 보조기억장치에 할다앟는 방법에 크게 연속 할당과 불연속 할당이 있으며, 불연속 할당은 크게 연결 할당, 색인 할당으로 나눌 수 있다.
  • 오늘날은 대부분 불연속 할당이다.

연속 할당(contiguous allocation)

  • 연속적인 블록에 파일을 할당하는 방식.
  • 외부 단편화를 야기하겠죠!

연결 할당(linked allocation)

  • 각 블록의 일부에 다음 블록의 주소를 저장하여 다음 블록을 가리키는 형태로 할당하는 방식으로, 연속 할당의 문제를 해결한다.
  • 즉, 파일을 이루는 데이터를 연결 리스트로 관리한다. 불연속 할당이죠.
  • 임의 접근(random access) 속도가 느리겠지.
  • 하드웨어 고장이나 오류 등으로 연결이 한번 끊기면 해당 블록 이후 블록은 접근이 불가능해진다.
  • 연결 할당을 변형한 방식이 FAT 파일 시스템이며, 추후 서술

색인 할당(indexed allocation)

  • 파일의 모든 블록 주소를 색인 블록(index block)이라는 하나의 블록에 모아 관리하는 방식
  • 예를 들어 한 파일의 데이터가 1, 3, 5번 블록에 저장되어 있고, 이 파일의 색인 블록이 7번 블록이라면,
  • 7번 블록 안에는 1, 3, 5번 블록들의 주소가 적혀 있다. 이 블록 안에서 임의 접근이 가능하다!!!
  • 색인 할당을 사용하는 파일 시스템에서는 디렉터리 엔트리에 파일 이름과 더불어 색인 블록 주소를 명시한다.
  • 색인 할당을 기반으로 만든 파일 시스템이 유닉스 파일 시스템이다. 후술!



파일 시스템 살펴보기

  • 다양한 파일 시스템이 있겠지만 가장 중요한 두 파일 시스템은
    1. 저용량 저장 장치에 사용되는 FAT 파일 시스템,
    2. 유닉스 계열 운영체제에서 사용되는 유닉스 파일 시스템

FAT 파일 시스템

  • 연결 할당 방식에서 각 블록에 포함된 다음 블록의 주소들을 한데 모아 테이블 형태로 관리하는 방식.
  • 이 테이블을 파일 할당 테이블(FAT, file allocation table) 이라고 한다.
  • FAT뒤에 오는 숫자는 블록을 표현하는 비트 수이다.
  • 윈도우에서는 블록이라는 용어 대신 클러스터라는 용어를 사용한다.
  • FAT12 파일 시스템에서 파티션은 다음과 같이 구성된다.
    1. 예약 영역
    2. FAT 영역
    3. 루트 디렉터리 영역
    4. 데이터 영역
  • FAT는 하드 디스크 파티션의 시작 부분에 있지만, 실행 도중 FAT가 메모리에 캐시되면 기존 연결 할당보다 다음 블록을 찾는 속도가 매우 빨라져 임의 접근에도 유리해진다.
  • 루트 디렉터리 영역에 루트 디렉터리가 있으며, 데이터 영역에 서브 디렉터리와 파일들이 있다.

유닉스 파일 시스템

  • 유닉스 파일 시스템에서는 색인 블록을 i-node(index-node)라고 부른다.
  • i-node에는 파일 속성 정보와 열다섯 개의 블록 주소가 저장될 수 있다.
  • 파티션은 다음과 같이 구성된다.
    1. 예약 영역
    2. i-node 영역
    3. 데이터 영역
  • i-node 영역에 i-node들이 모여 있고, 데이터 영역에 디렉터리와 파일들이 있다.
  • 열다섯 개의 블록 주소가 적어 보인다.
  • 블록 주소 중 12개는 파일 데이터가 저장된 블록인 직접 블록(direct block)을 가리킨다.
  • 12개의 블록 주소로 파일의 모든 블록을 가리킬 수 없다면, 열세 번째 블록 주소는 단일 간접 블록의 주소를 저장하게 된다.
  • 단일 간접 블록(single indirect block)이란 파일 데이터가 저장된 블록이 아닌 파일 데이터를 저장한 블록 주소가 저장된 블록이다.
  • 이거로도 부족하다면 열네 번째 블록 주소는 이중 간접 블록 주소를 저장한다.
  • 이중 간접 블록(double indirect block)은 단일 간접 블록들의 주소를 저장하는 블록이다.
  • 이로도 부족하다면 열다섯 번째 블록 주소는 삼중 간접 블록 주소를 저장한다.
  • 삼중 간접 블록(triple indirect block)은 이중 간접 블록들의 주소를 저장하는 블록이다.
  • 이렇게 i-node만으로 파일 속성(?)뿐 아니라 파일 데이터를 모두 가리킬 수 있다.
  • 그래서 유닉스 파일 시스템의 디렉터리 엔트리는 i-node 번호와 파일 이름으로만 구성된다.
  • 루트 디렉터리 위치는 루트 디렉터리의 i-node를 보면 알 수 있는데, 유닉스 파일 시스템은 루트 디렉터리의 i-node를 항상 기억하고 있다.

이외

  • 윈도우에서는 NT 파일 시스템(NTFS)
  • 리눅스 운영체제에서는 ext 파일 시스템이 사용된다.

다른 파일 시스템들 - 혼공컴운 깃헙



저널링 파일 시스템

  • 파일 시스템을 변경하는 도중에 컴퓨터 강제 종료 등으로 시스템 크래시가 발생하면 파일 시스템이 훼손될 수 있다.
  • 이전에는 부팅 직후 파일 시스템을 검사하고 복구하는 프로그램인 fsck(유닉스, 리눅스)나 scandisk(윈도우)를 실행시켰ㄷ다.
  • 이 프로그램들은 파일 시스템 내의 모든 블록에 대해 파일 시스템을 검사하므로 시간이 매우 오래 걸렸다.
  • 그래서 등장한 것이 저널링 파일 시스템이다.
  • 저널링(journaling) 기법은 작업 로그를 통해 빠르게 복구하는 방법이다.
    1. 작업 직전 파티션의 로그 영역에 수행하는 작업(변경 사항)에 대한 로그를 남긴다.
    2. 로그를 남긴 후 작업을 수행한다.
    3. 작업이 끝나면 로그를 삭제한다.
  • 시스템 크래시 발생한 직후 로그 영역을 읽어 해당 작업을 완료한다.



마운트

  • 유닉스, 리눅스 등의 운영체제에서 한 저장 장치의 파일 시스템에서 다른 저장 장치의 파일 시스템에 접근할 수 있도록 파일 시스템을 편입 시키는 작업을 마운트 라고 한다.



정리

  • 파일은 의미 있고 관련 있는 정보를 모은 논리적인 단위이다
  • 운영체제는 파일의 확장자를 통해 파일의 유형을 파악할 수 있다.
  • 파일의 속성에는 파일과 관련된 다양한 부가 정보들이 있다.
  • 디렉터리를 이용하면 여러 개의 파일 또는 디렉터리를 묶어 관리할 수 있다.
  • 경로는 디렉터리를 이용해 위치를 특정 짓는 정보이다.
  • 절대 경로는 루트 디렉터리로부터 시작하는 경로이고, 상대 경로는 현재 디렉터리로부터 시작하는 경로
  • 파티셔닝은 저장 장치를 하나 이상의 논리적인 여러 단위로 구획하는 작업
  • 포매팅이란 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 수 있게 하는 작업
  • 연속 할당은 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식
  • 연결 할당은 각 블록 일부에 다음 블록의 주소를 저장하여 블록들을 연결 리스트 형태로 관리하는 방식
  • 색인 할당은 파일의 모든 블록 주소를 색인 블록에 모아 관리하는 방식
  • FAT 파일 시스템은 FAT를 이용하는 연결 할당 기반의 파일 시스템
  • 유닉스 파일 시스템은 i-node를 이용하는 색인 할당 기반의 파일 시스템

Leave a comment