[Pintos] project 4 -WIL

DoHee·2023년 5월 29일

SW정글_6기

목록 보기
7/7

project 4. File system
1) Indexed and Extensible Files

[현재 핀토스의 파일 시스템]

  • 현재 핀토스의 파일 시스템은 하나의 chunk로 할당(외부단편화에 취약)
  • On-disk inode 구조를 수정해서 이 문제를 수정

[기본 개념]

  • 어떤 파일을 저장하기 위해 디스크 내에 10개의 섹터가 필요하다 가정.
  • 이 때 10개의 섹터를 연결리스트로 저장하는 것은 부적절
    • 외부단편화 문제
    • ex) 9번째 데이터를 읽기 위해 비효율적으로 연결리스트를 타고 이동
  • 따라서 10개의 섹터를 분산시켜 저장하고, 위치(섹터번호)를 저장한 테이블 생성.
    여기서 섹터 번호를 모아둔 것이 FAT 임. (File Allocation Table)
  • 즉, FAT이란, 현재 섹터와 다음 섹터를 적어둔 테이블. 이 테이블을 이용해 파일의 섹터를
    찾아가는 방식으로 작동.

File system

1. File system이란?

: 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체계

2. File system component

  • CPU를 가상화한 것은 프로세스이고 메모리를 가상화한 것은 주소 공간.
  • 다양한 저장 장치들에 정보를 저장하기 위해서는 정보를 읽고 쓸 수 있는 방법이 정리되어 있어야하고, 이를 파일 시스템이라 함!
  • 파일과 디렉토리라는 두 개의 개념으로 저장 장치를 추상화. 즉, 저장 장치에 접근하기 위해 파일과 디렉토리라는 개념을 이용.

3. File system의 종류

  • 파일시스템에는 매우 많은 종류가 있음
  • 아래 표는 현재 대표적인 컴퓨터 제조 회사들이 채택하고 있는 파일 시스템들임
  • 저널링 Journaling(Write-Ahead Logging)
    - 디스크 내용을 갱신할 때, 해당 자료구조를 갱신하기 전에 변경 사항을 요약해서 디스크의 로그(혹은 저널)라는 특수한 자료구조에 저장. 이렇게 앞으로 할 일을 미리 저장해 놓는 것을 write-ahead라고 함.

Inode

1. inode란?

  • inode는 index node의 줄임말로, 파일이나 디렉토리의 메타데이터를 갖는 고유 식별자
  • 파일과 디렉토리는 모두 inode를 하나씩 가리키는 inode 포인터를 가지고 있는데, 이전 프로젝트에서 다뤘던 struct file과, struct dir 구조체에 이 inode 포인터가 포함되어 있음
  • 파일이나 디렉토리를 열 때 inode_open 함수가 실행됨과 동시에 inode 구조체가 생성

2. incore inode와 disk inode

  • 파일을 열 때마다 파일에 해당하는 inode가 디스크에서 메인 메모리에 복사 됨
  • 이 때, 디스크에 있는 아이노드를 디스크 아이노드, 메인메모리에 있는 아이노드를 인코어 아이노드라고 함

3. inode sturcture

  • inode 구조체 안에 메타데이터 정보를 담고 있는 inode_disk가 포함되어 있고, inode_disk에는 실제 파일에 대한 데이터가 들어있음

  • inode_disk는 파일이 열리지 않았을 땐 디스크 영역 섹터에 저장되어 있다가, inode_open 함수가 실행될 때 디스크에서 복사되어 인코어(incore) inode로 메인 메모리에 올라감

4. inode_open 작동방식

  • 핀토스에서 열려있는 inode들을 리스트로 관리

  • 반복문으로 이 리스트를 돌면서 inode가 열려있는지 확인. 열려있다면 inode_reopen 함수로, 해당 inode를 open한 횟수를 1 늘려 줌.

  • incore inode를 위한 메모리 공간을을 할당(malloc)

  • 리스트에 inode를 삽입하고, 해당 inode의 구조체 필드를 초기화. 이 후 디스크에서 disk_inode 정보를 읽어옴

  • disk_read : select_sector로

profile
정글_6기_b반

0개의 댓글