일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 핀토스 프로젝트 4
- botw
- 파란 장미
- 글리치
- 가테
- multi-oom
- 셋업
- 바빠지나?
- 노가다
- 자 이제 시작이야
- alarm clock
- 핀토스 프로젝트 2
- 제발흰박
- PINTOS
- 핀토스 프로젝트 1
- 황금 장미
- 내일부터
- 아직도 실험 중
- 일지 시작한 지 얼마나 됐다고
- Project 1
- 끝
- 핀토스 프로젝트 3
- 마일섬
- 핀토스 프로젝트
- 글루민
- Today
- Total
목록핀토스 프로젝트 4 (7)
거북이의 쉼터
이 기능도 분명 원래 핀토스에는 없었던 것 같은데 이번에 새로 생긴 것 같다. 일단 soft link, 또는 symbolic link라고 불리는 이 기능이 대체 무슨 기능인지 알아보자. 다음의 그림이 link와 관련된 사항을 가장 잘 표현한다고 생각해서 가져왔다. 디렉토리 내에서 가지고 있는 inode는 분리되어 있되, 해당 링크 파일을 따라가면 원본 파일의 경로를 가지고 있게 된다. 이를 이용해서 링크된 원본 파일을 결국 찾을 수 있다는 것이며, 유저는 해당 파일이 symbolic 링크인지 아닌지의 여부와 상관 없이 쓸 수 있어야 한다. 리눅스에서는 soft link를 만들게 되면 일반 파일, 디렉토리와는 취급을 달리 하게 된다. 이를 참조하여 OS에서는 열려는 파일이 soft link 파일인지 알 수..
이젠 구체적으로 어떤 기능 및 함수를 구현해야 할 것인지를 살펴보자. 각 프로세스의 cwd를 위해서는 thread 구조체에 또 다시 인자를 추가해야 할 것 같다. 각 thread에 대해 directory를 하나 열어두고, 열린 디렉토리를 cwd로 취급한다. 가장 처음에 시작되는 프로세스의 경우는 root directory를 열어서 cwd로 삼을 것이다. fork 할 때 해당 cwd를 한 번 더 열어서 새롭게 생성되는 프로세스에게 이전할 수 있으며, chdir 함수를 이용해서 cwd를 변경할 수 있을 것이다. 다음으로는 파일 경로로 들어오는 이름을 파싱할 함수를 구현해야 한다. 파싱할 함수를 두 개 만드는 것이 적절해보이는데, 하나는 해당 파일이 최종적으로 위치한 디렉토리를 여는 함수, 다른 하나는 해당 ..
다음으로 진행할 것은 subdirectory이다. 지금까지의 핀토스 파일 작업은 모두 단일 root 디렉토리 아래에서만 이루어졌다. 어떻게 버텼냐... 이제 드디어 단일 root directory에서 벗어나, 하위 디렉토리를 생성하고, 해당 디렉토리로 이동하여 작업을 진행할 수 있다. 각 프로세스는 해당 프로세스가 진행되는 고유한 디렉토리인 current working directory, 줄여서 cwd를 가지고 있어야 한다. 이를 가져야만 상대 주소로 파일을 열거나, 닫거나, 지울 때 어떤 파일이 참조되는지를 알 수가 있다. 지금까지는 디렉토리가 루트 디렉토리 하나 뿐이라 어떤 프로세스에서 상대 주소로, 또는 절대 주소로 파일을 사용하더라도 티가 안 났으나, 이제는 상황이 달라졌다. 이제 입력으로 들어오..
이번에는 File Growth를 살펴볼 것이다. 분량은 짧긴 한데 지난 포스팅에 이어서 계속 작성하기에는 FAT에서 급작스럽게 파일 extension으로 넘어가는 것이라 흐름이 애매했다. 지금까지 핀토스에서 사용된 코드를 보면 파일을 생성할 때부터 어느 정도를 사용할 지 미리 지정해서 생성한 뒤, 할당된 부분만을 사용하였다. 현실에서는 전혀 그렇지 않다. 우리가 메모장을 열 때 얼마를 사용할지 지정하고 쓰지 않듯이, 핀토스에서도 파일을 생성할 때는 크기 0으로 생성한 뒤, 필요한 만큼 크기를 키우는 과정을 구현해야 한다. 파일이 자랄 수 있는데에는 크기 한계가 마땅히 없다. 메타 데이터를 제외하고 파일 시스템이 허용하는 만큼 커질 수 있으며, 루트 디렉토리에도 같은 논리에 의해 16개보다 많은 파일이 저..