Project4 file system
을 시작하고 문지에는 많은 눈이 왔다.
강의실로 멍하게 걸어가다가 문득 핀토스놈이 얄밉다는 생각이 들어서 소심한 복수를 했다.
이 글의 pintos는 kaist의 CS330 과정의 pintos이며, 작성하는 부분 중 제가 잘못 이해한 부분도 있을 수 있음에 유의해 주시길 바란다.
우리 조는 기본적으로 git book
을 참고해서 진행했고, part2
인Subdirectories and Soft Links
부터는 한토스(한양대 핀토스)를 참고했다.
코드에 관해서는 올리지 않을 생각이고, 보지 않는 걸 추천하지만 깃허브 링크를 첨부한다.
지난번 vm에서는 각 Part 별로 why(왜 해야 하는지)
, do(뭘 했는지)
, Problem(문제와 해결 과정)
을 다뤘지만 이번에는 why
만 다룰 생각이다. 그 이유는 가장 중요하다는 생각이 들어 비중을 두고 작성하고 싶었다. 절대 시간 없어서가 아님..
악명이 자자했던 Project2 userprog
와 Project3 VM
을 마친 후의 나의 모습이다.
하지만..
아무것도 모르겠다. 심지어 주어진 시간도 일주일도 채 안 된다. 진짜 진짜 미친놈이다..
파일, 디렉터리 등의 다루는 것이라 뭔가 친숙한 느낌인데 잘 안돼서 더 열받는다.
구글에 정보도 많이 없는데다가 심지어 재밌어서 더더 열받는다.
먼저 Indexed
는 쉽게 설명하기 위해 솜씨 발휘를 했다. 똥손입니다만.
기존의 pintos는 파일이 연결되어 있다.
그렇기 때문에 디스크에 외부 단편화가 생길 수 밖에 없고, disk를 더 효율적으로 사용하고 접근하기 위해서 File Allocation Table(fat)
를 구현하는 것이다.
위의 그림처럼 file D는 3 sector의 크기이고, 기존의 pintos disk에는 넣을 수 없다.
하지만 fat
를 활용한다면 아래처럼 2 sector, 1 secter 만큼 나누어서 disk에 넣을 수 있다.
즉, 아래의 그림처럼 fat
는 sector 단위로 나누어진 file이 disk의 어디에 있는지(indexed)를 기록한다.
위의 과정을 위해 Fat
를 구현했다면 이제는 Extensible Files == file growth
이다.
기존의 pintos는 write
할 때 offset(작성하려는 위치)와 size(작성하려는 크기)가 주어지는데 file의 크기보다 큰 offset이 들어왔을때의 작업이나 주어진 offset에서 size를 작성했을때 파일의 크기보다 크다면 exit
해주었다.
즉, 기존의 파일에서 파일을 크게 만들 수 없었다.
하지만 이번 file growth
를 통해서 위의 제한을 해제하고, fat
를 통해서 공간을 찾아 파일을 늘려주게끔 만든다.
아래의 그림처럼 빈 섹터 공간에 추가된 크기 만큼 섹터단위로 작성된다.
구현으로 들어가면 세세한 부분이 더 있겠지만 part1가 Pintos에 왜 필요한지에 대한 답이 되었다고 생각한다.
나는 살면서 대체적으로 모든 것에 대해 자신감이 있었고, 이상하게 큰 역경도 없었다.
하지만 처음에 핀토스를 만났을 때는 정말 어지러웠고, 좌절감을 주었다.
핀토스가 마지막 발표가 끝나고 코치님께서 말씀하셨다.
"지금 Project1인 thread를 구현한다면 어떨 것 같아요?"
위의 대답으로 동기 모두가 이구동성으로 쉽게 만들 수 있을 것 같다고 답했다.
이 글을 보는 당신이 처음 스레드와 만났다면 한마디만 해주고 싶다. 중요한 건 꺾이지..
절대 포기하지 말고, 끝까지 핀토스 바지 끄덩이를 잡아라.. 한 시간, 두 시간, 하루 차이가 엄청난 격차를 낸다.