[SW정글 90일차] pintos p4 fat filesystem 세계관 재정립

rg.log·2022년 12월 17일
2

SW 사관학교 JUNGLE

목록 보기
25/31

우리가 코드로 구현해본 현재까지의 fat filesystem 세계관은 아래와 같다.

1. Inode

inode 구조체는 파일이나 디렉토리를 열 때 inode_open() 함수를 실행 하면 생성된다.
열리지 않았을 때는 inode_disk인 상태로 Disk에 저장되어 있다.

inode는 메타데이터 정보를 512byte의 inode_disk를 하나씩 가지고 있다.

/* In-memory inode. */
struct inode {
	struct list_elem elem;         /* inode 생성시 open_inodes라는 list에 추가 위한 요소 */
	disk_sector_t sector;          /* inode_disk가 저장된 디스크의 섹터 번호 */
	int open_cnt;                  /* inode 열려있으면 닫으면 안되기에, 관리해주기 위한 변수로 카운팅 */
	bool removed;                  /* 삭제하면 true, 아니면 false */
	int deny_write_cnt;            /* 0: writes ok, >0: deny writes. */
	struct inode_disk data;        /* 매번 disk에서 참조할 수 없기에 물리 메모리에 올려놓고 사용, inode_close()시에 다시 disk에 write back */
};

inode_disk는 매번 disk에서 참조할 수 없기에 물리 메모리에 올려놓고 사용, inode_close()시에 다시 disk에 write back한다.

struct inode_disk {
    disk_sector_t start;  /* 파일의 inode인 경우 파일의 실제 내용, 디렉토리의 inode면 directory entry들이 저장된 disk의 sector 번호 */
    off_t length;         /* 저장된 공간의 길이 */
    unsigned magic;       /* Magic number. */
    uint32_t unused[125]; /* ector size인 512byte를 맞춰주기 위해 넣어둔 데이터 */
};

2. File

struct file {
    struct inode *inode; 	/* 파일 데이터에 대한 정보(메타 데이터)를 포함 */
    off_t pos;           	/* 파일을 읽거나 쓸 때 위치 */
    bool deny_write;     	/* 읽기 전용 파일을 나타내기 위해 사용하는 변수 */
};

3. Directory

struct dir {
	struct inode *inode;   	/* 하위 dir_entry들을 저장하고 있는 sector를 찾아가기 위해 사용 */
	off_t pos;              /* 어디까지 읽었는지 확인 */
};
struct dir_entry {
	disk_sector_t inode_sector;         /* dir_entry의 정보를 담고있는 sector를 가리킴 */
	char name[NAME_MAX + 1];            /* 파일이나 디렉토리의 이름 */
	bool in_use;                        /* 이 위치에 dir_entry가 저장되어있는지에 대한 정보 */
};

추가적으로 디버깅하며 알게된 것은 filesys/extended 관련 테스트 케이스는 root_dir sector 가 33 에서 시작한다.

< tests/filesys/extended/grow-create >

Formatting file system...
[do_format] root_dir sector : 33
[dir_create] sector : 33
done.
Boot complete.
Putting 'grow-create' into the file system...
Putting 'tar' into the file system...
Executing 'grow-create':
(grow-create) begin
(grow-create) create "blargle"
(grow-create) open "blargle" for verification
(grow-create) verified contents of "blargle"
(grow-create) close "blargle"
(grow-create) end
grow-create: exit(0)


오늘의 나는

눈 내리는 문지캠 ☃️

1개의 댓글

comment-user-thumbnail
2022년 12월 24일

잘보고 갑니다

답글 달기