-
[SW 정글 87일차] File System 개념 공부 시작기타/SW 사관학교 정글 2021. 10. 29. 02:24
오늘은 새로운 주 차가 시작되는 날이고 project 4는 file system에 대한 부분을 구현하는 것이다.
항상 그랬듯이 구현하기 전에 개념을 먼저 공부했다.
참고 자료는 유튜브에서 볼 수 있는 한국기술교육대 김덕수 교수님의 강의다.
짧은 영상이지만 명확한 설명과 기본적으로 알아야 할 개념을 잘 전달해준다.
1. Disk에도 주소가 있겠지?
이전까지는 RAM 즉, 주 메모리에 포커스를 두고 공부와 project 구현을 했고 메모리를 주소를 통해 접근을 한다.
RAM은 단지 하드웨어인데 주소체계로 특정부분에 데이터를 실고 뺄 수 있었다.
그러면 우리가 흔히 아는 외장하드, 보조기억장치는 어떻게 접근하여 데이터를 저장하고 불러올까?
이것도 마찬가지로 주소체계를 기반으로 한다.
Disk address에는 2가지가 존재한다.
하나는 pyhsical disk address이고 다른 하나는 logical disk address이다.
먼저 physical disk address이다.
physical disk address는 disk의 일부분인 sector를 지정하는 것으로 아래와 같은 형식을 가진다.
| cyclinder number | surface number | sector number |
기본적으로 위 3가지 정보를 알아야하고 순서는 무조건 위와 같이 있어야되는 것은 아니다.
여기서 cyclinder, surface, sector가 무엇인지부터 알아야 한다.
disk는 아래와 같은 구조로 되어있다. (요즘 많이 사용하는 SSD는 아래와 같은 구조는 아니다.)
즉, cylinder number는 몇 번째 cylinder인지를 의미하고 surface number는 윗면인지 아랫면인지를 의미하고 sector는 몇 번째 sector인지를 의미한다.
하지만 사용자 입장에서 생각했을 때 우리가 file을 저장할 때 n번째 sector, 어느면 surface, n번 cyclinder에 저장해줘라고 하지는 않는다.
우리가 file을 저장해달라는 요청을하면 어디에 저장하는 것은 OS가 해줘야할 역할이다.
그러면 OS는 physcial disk address로 저장을 할까?
아니다. 그러면 왜 아닐까?
Disk에는 여러 종류, 여러 회사에서 만든 것이므로 각각은 드르고 이 모든 것을 통일화된 physical disk address로 접근을 할 수는 없다.
그러면 OS는 디스크의 physical적인 특징을 추상화한 개념을 사용하여 디스크에 접근해야한다.
그래서 나온 것이 아래에서 설명할 Logical disk address이다.
Logical disk address는 relative address라고도 하며 아래와 같은 매커니즘에 의해 이루어진다.
먼저, disk system의 데이터 전체를 block들의 나열로 취급한다.
그리고 각 block에 번호를 부여하고 해당 번호를 사용하여 임의의 block에 접근이 가능한 것이고 이 block number가 logical disk address가 되는 것이다.
그러면 block 번호를 어떻게 physical address로 바꾸고 이 일은 누가할까?
정답은 아래의 그림과 같다.
OS가 사용하는 추상적인 disk system의 주소인 block number는 disk driver가 받아 physical address로 변경한다.
그리고 변경한 physical address를 disk controller가 사용하여 disk에 접근하는 구조이다.
여기서 disk driver는 disk를 만든 각 회사가 만든 소프트웨어이고 한번쯤은 들어봤다.
disk driver는 내가 알 범위는 아닌 것같다.
나중에 시간이 있으면 유명한 회사의 driver를 봐보고 싶기는 하다.
[오늘의 나는 어땠을까?]
오늘은 협력사 중 한 곳에서 설명회를 왔다.
협력사 중 가장 가고싶은 기업 중 하나이다.
그래서 사전에 기업에 대한 정보를 수집하며 이 기업이 어떠한 곳인지 알 수 있는 질문들을 준비하고 설명회를 들으면서도 부족한 부분을 더 확실히 알고 싶어 질문을 여럿했다.
확실히 좋은 회사이다.
지금 좋은 회사이기도 하고 앞으로 더 기대되는 회사이다.
설명회가 끝나고 같이 야식을 먹는 자리를 가지면서도 여러 질문을 했다.
자리가 모두 끝나고 나서 느낀 감정은 현재 나의 위치에서는 가능보다는 불가능에 가깝다는 것이였다.
사실 정글에 들어오기 전에도 많은 개발자들의 영상을 보면서 5개월 안에 개발자가 되는 것은 가능하지만 흔히 우리가 말하는 공룡 IT기업은 불가능하다는 의견이 대다수였다.
하지만 나는 이를 깨트리고 5개월 만에 미친듯한 노력이 있으면 내가 이전에 누구였던간에 가능하다는 것을 증명하고 싶었다.
그리고 정글에서도 운영진님들이 희망과 응원을 불어 넣어주었다.
그래도 마음 한 편으로는 '어떻게 가능해..' 라는 생각이 있었고 오늘 다시 생각이 '가능해!'에서 '불가능한게 당연하겠지'로 가득 찼다.
그냥 현실을 인지하고 받아들여야했다.
나는 대학을 갓졸업하고 대학교에서도 특별한 경험없이 특별한 이유없이 개발자가 되겠다고 정글에 들어왔다.
그런 내가 누구나 아는 IT기업에 바로 합격을 한다는 것은 현실 상 불가능하다는 것이 더 옳은 말이다.
그래도 이제는 해보지도 않고 포기하지는 않을 것이다.
사례가 없는 일을 만들어 나와 같은 사람들에게 희망을 주고 싶고 많은 도움을 주고 싶다.
그러기 위해서는 내가 해내야한다.
얼마남지 않았다고 생각할 수 있지만 성장을 증명하기에는 충분한 시간이다.
불안하고 부정적인 생각을 전부 지워낼 수는 없지만 작은 희망의 실마리를 붙잡고 내가 계획한대로 갈 것이다.
'기타 > SW 사관학교 정글' 카테고리의 다른 글
[SW 정글 89일차] 난제, Project 4 (0) 2021.10.31 [SW 정글 88일차] File system 기초 개념 공부 마무리 (0) 2021.10.30 [SW 정글 86일차] mmap()과 read()/write() (0) 2021.10.28 [SW 정글 85일차] Page Replacement Algorithm (0) 2021.10.27 [SW 정글 84일차] Project 3 - Memory Mapped Files (0) 2021.10.26