어제 대부분은 완성했지만 나머지 부분을 구현해봤습니다
문자열 target을 포함하는 linkpath라는 심볼릭 링크를 생성합니다. 성공하면 0이 반환됩니다. 그렇지 않으면 -1이 반환됩니다.
int symlink(const char *target, const char *linkpath)
{
char *copy_linkpath = (char *)malloc(strlen(linkpath) + 1);
strlcpy(copy_linkpath, linkpath, strlen(linkpath) + 1);
lock_acquire(&filesys_lock);
int result = filesys_create_link(target, copy_linkpath);
lock_release(&filesys_lock);
free(copy_linkpath);
return result;
}
위의 코드는 symlink 함수입니다.
심볼릭 링크를 생성하는 기능을 수행합니다.
링크 경로 복사: linkpath를 복사하여 동적 할당된 메모리 공간에 저장합니다. 이렇게 하는 이유는 파일 시스템 잠금(filesys_lock)을 획득하기 전에 문자열을 복사하여 안전성을 보장하기 위함입니다.
파일 시스템 잠금 획득: filesys_lock을 획득하여 파일 시스템 접근을 동기화합니다.
심볼릭 링크 생성: filesys_create_link 함수를 호출하여 target과 copy_linkpath를 전달하여 심볼릭 링크를 생성합니다. 이 함수는 주어진 target 파일에 대한 심볼릭 링크를 copy_linkpath로 생성합니다.
파일 시스템 잠금 해제: filesys_lock을 해제하여 다른 스레드에서 파일 시스템에 접근할 수 있도록 합니다.
메모리 해제 및 결과 반환: 복사한 copy_linkpath의 동적 할당된 메모리를 해제하고, filesys_create_link의 반환값을 반환합니다. 반환값은 심볼릭 링크 생성의 성공 여부를 나타냅니다. 일반적으로 성공 시 0을 반환하고, 실패 시 -1을 반환하는 관례가 있습니다.
이를 통해 symlink 함수는 주어진 target 파일에 대한 심볼릭 링크를 linkpath로 생성하고, 그 결과를 반환합니다.
이 파트에서는 파일 블록의 캐시를 유지하도록 파일 시스템을 수정해야합니다
블록을 읽거나 쓰라는 요청이 있을 때 캐시에 있는지 확인하고, 있다면 디스크로 가지 않고 캐시된 데이터를 사용하게됩니다. 그렇지 않으면 디스크에서 캐시로 블록을 가져오고 필요한 경우 이전 항목을 제거합니다.
64개의 섹터 크기로 제한된 캐시를 사용해야 합니다
오늘 개인 사정으로 집을 다녀오게 돼서 공부를 많이 하지 못했습니다...
내일부터 다시 열심히 공부를 시작해보겠습니다 :)