Tongji University CS "운영 체제"코스 설계 : 파일 시스템
이 프로젝트는 2021 년 Tongji University의 컴퓨터 과학 기술부의 운영 체제 과정을 위해 설계되었습니다. UNIX와 같은 파일 시스템 구현.

이번 학기 (주로 GUI가없는) 가장 쉬운 과제는 파일 시스템을 개발하는 데 10 일이 걸렸습니다.
이 창고가 당신을 도와 주면 별을 줘?
질문이 있으시면 다른 사람들이 함께 언급하거나 토론 할 수있는 문제에 대해서도 제기 할 수 있습니까?
저장소는 MIT 오픈 소스 프로토콜을 따릅니다
이 변수는 주로 현재 읽은 파일 길이를 기록하는 데 사용됩니다. 이 변수의 존재는 혼합 파일 인덱싱의 어려움을 줄입니다. 함수는 파일이 사용되는 인덱스 블록 수를 계산할 필요가 없으며 파일의 혼합 인덱스 구조가 무엇인지 알아야합니다. 인덱스 파일을 모든 인덱스 블록이 최대 크기에 도달하는 거대한 파일로 직접 간주합니다. 직접 인덱스에서 파일을 가로지고 첫 번째 수준 인덱스로 이동 한 다음 두 번째 레벨 인덱스로 이동하십시오. 길이가 파일 크기에 도달하면 모든 크기의 파일의 횡단을 직접 종료 할 수 있습니다. 그러나이 방법의 단점은 파일을 읽을 때마다 파일 헤더에서 시작하여 무작위 읽기 및 쓰기의 효율성을 줄이는 것입니다.
이 변수는 주로 편집기가 텍스트를 표시하기 시작하는 라인을 나타내는 데 사용됩니다. 이 변수는 파일 라인 수가 콘솔 높이를 초과 할 때 적용되기 시작합니다. 콘솔 커서의 실제 텍스트에 매핑 된 라인 수를 start_line 변수에 추가해야합니다. 커서가 결론으로 이동하면 화살표 키를 다시 누르면 start_line은 편집기에서 텍스트의 페이지 다운을 추가하고 그 반대도 마찬가지입니다.
이 변수는 명령 줄 사용자 인터페이스 클래스에 속하며 주로 파일 시스템에 사용자의 경로를 기록합니다. 파일 시스템에서 모든 작동 인터페이스는 절대 경로를 기반으로하며 명령 줄 인터페이스에서 사용자가 입력 한 명령은 상대 경로 CUR_DIR을 기반으로합니다. 따라서 사용자 인터페이스가 파일 시스템 인터페이스를 사용하는 경우 CUR_DIR은 사용자가 경로 입력으로 스 플린을 스 플라이싱해야하며 조용한 시스템의 인터페이스 함수로 매개 변수로 절대 경로를 전달해야합니다.


이 파일 시스템은 64 비트 Windows 운영 체제로 실행됩니다. 파일 시스템의 시뮬레이션 파일 볼륨 크기는 128MB입니다. 프로그램 디렉토리에 충분한 여유 공간이 있는지 확인하십시오.
프로그램을 종료 할 때 프로그램을 직접 닫는 것은 금지되어 있습니다. EXIT 명령을 사용하여 파일 시스템을 종료해야합니다. 그렇지 않으면 파일 시스템 오류 또는 충돌이 발생할 수 있습니다.
/etc/users.txt 및 /etc/groups.txt 파일을 조심스럽게 수정하십시오. 이 두 파일은 사용자 관리와 관련이 있습니다. 형식이 제대로 수정되지 않은 경우 파일 시스템이 로그인 할 수 없거나 다른 권한 문제가 발생할 수 있습니다.
위의 두 가지 문제가 발생하면 파일 시스템 포맷을 시도하십시오.
로그인하지 않을 때 사용 가능한 명령 :
| 주문하다 | 매개 변수 | 기능 |
|---|---|---|
| 로그인 | 사용자 이름 (문자열) | 사용자 로그인 |
| 출구 | 시스템을 종료하십시오 | |
| 체재 | 형식 파일 시스템 | |
| 돕다 | 명령 프롬프트 목록을 표시합니다 |
로그인 상태에서 사용 가능한 명령 :
| 주문하다 | 매개 변수 | 기능 |
|---|---|---|
| 로그 아웃 | 사용자 로그 아웃 | |
| 출구 | 시스템을 종료하십시오 | |
| mkdir | 디렉토리 이름 (문자열, 길이 28 바이트 미만, 다중 레벨 디렉토리가 될 수 없습니다) | 하위 디렉토리를 만듭니다 |
| CD | 디렉토리 이름 (문자열, 길이는 28 바이트 미만, 현재 디렉토리의 서브 디렉토리 이름은 다단계 디렉토리가 될 수 없습니다) | 서브 디렉토리로 이동하십시오 |
| LS | 현재 디렉토리 목록을 표시하십시오 | |
| rmdir | 디렉토리 이름 (문자열, 길이는 28 바이트 미만, 현재 디렉토리의 서브 디렉토리 이름은 다단계 디렉토리가 될 수 없습니다) | 하위 디렉터를 삭제합니다 |
| 만지다 | 파일 이름 (문자열, 길이 28 바이트 미만, 다단계 디렉토리가 될 수 없습니다) | 새 파일을 만듭니다 |
| CHMOD | 파일 이름 (문자열, 길이는 28 바이트 미만, 현재 디렉토리의 파일 이름은 멀티 레벨 디렉토리가 될 수 없음) 권한 (3 자리 옥탈 번호) | 파일 또는 디렉토리 권한을 수정하십시오 |
| Rm | 파일 이름 (문자열, 길이는 28 바이트 미만, 현재 디렉토리의 파일 이름은 다단계 디렉토리가 될 수 없습니다) | 파일 삭제 |
| userAdd | 사용자 이름 (문자열) 사용자 그룹 이름 (문자열, 사용자 그룹이 이미 존재해야 함) | 사용자를 추가하십시오 |
| userDel | 사용자 이름 (문자열, 사용자는 이미 존재해야 함) | 사용자 삭제 |
| GroupAdd | 사용자 그룹 이름 (문자열) | 사용자 그룹을 추가하십시오 |
| Groupdel | 사용자 그룹 이름 (문자열, 사용자 그룹이 이미 존재해야 함) | 사용자 그룹 삭제 |
| DF | 디스크 사용을 확인하십시오 | |
| 보여주다 | 파일 이름 (문자열, 길이는 28 바이트 미만, 현재 디렉토리의 파일 이름은 다단계 디렉토리가 될 수 없습니다) | 파일 내용을 인쇄하십시오. 파일이 문자 파일이 아닌 경우 오류가 발생할 수 있습니다. |
| VI | 파일 이름 (문자열, 길이는 28 바이트 미만, 현재 디렉토리의 파일 이름은 다단계 디렉토리가 될 수 없습니다) | 편집기와 함께 파일을 엽니 다 |
| 체재 | 형식 파일 시스템 | |
| win2fs | Windows 아래 파일 경로 (문자열, Windows 파일 경로 사양을 준수) FS 파일 시스템의 현재 디렉토리에서 파일 이름 (문자열, 28 바이트 미만의 길이, 현재 디렉토리의 파일 이름은 멀티 레벨 디렉토리가 될 수 없습니다). | Windows 파일 내용을 FS 파일 시스템 파일에 복사하십시오 |
| FS2WIN | 파일 이름 FS 파일 시스템의 현재 디렉토리의 파일 이름 (문자열, 28 바이트 미만의 길이, 현재 디렉토리의 파일 이름은 멀티 레벨 디렉토리가 될 수 없음) 파일 경로 (문자열, Windows 파일 파일 경로 사양을 준수) 파일 경로 | FS 파일 시스템의 내용을 Windows 파일에 복사합니다. |
| CLS | 화면을 지우십시오 | |
| 돕다 | 명령 프롬프트 목록을 표시합니다 |
편집기 지침 :
편집기에 들어가면 화살표 키를 통해 커서를 이동할 수 있습니다. 커서가 상단 및 하한에 있으면 커서를 다시 경계로 이동하여 텍스트 내용의 페이지를 완성하여 Enter 키를 입력하여 커서 전에 문자를 삭제하고 커서에 문자를 삽입하여 다른 문자를 입력하여 ESC 키를 눌러 텍스트를 저장할 수 있습니다. "□"편집기에서 Enter 키를 표시하고 "#"는 파일의 끝을 나타냅니다. 편집기는 ASCII 문자 만 처리 할 수 있습니다.
이 프로그램은 부적절한 명령 입력, 전체 파일 시스템 공간, 불법 권한 등으로 인해 다양한 예외를 유발할 수 있습니다. 예외가 발생하면 프로그램이 예외 정보를 콘솔에 출력합니다. 출력 정보에 따라 예외를 해결하십시오. 예외가 해결되지 않으면 파일 시스템을 작성하십시오.
조정 가능한 매개 변수의 매크로 정의는 FileSystem.h 파일에 있습니다.
| 매개 변수 | 설명 |
|---|---|
| 버전 | 파일 시스템 버전 |
| Disk_Name | 파일 볼륨 파일 이름을 시뮬레이션합니다 |
| 디스크 _size | 파일 볼륨 디스크 크기는 최소 1024*512 바이트보다 큽니다. (261120+1024) *512 바이트, 즉 128MB로 설정하는 것이 좋습니다. |
| 파일 이름 | 설명 |
|---|---|
| FileSystem.h | 파일 시스템 헤더 파일 |
| FileSystem.cpp | 파일 시스템 C ++ 파일 |
| main.cpp | 기본 프로그램 C ++ 파일 (명령 줄 사용자 인터페이스) |
| test.cpp | 파일 시스템 파일 인터페이스 테스트 파일은 최종 실행 프로그램으로 컴파일되지 않습니다. |
| fs.data | 디스크 파일 볼륨을 시뮬레이션합니다 |
| 파일 System.exe | 실행 프로그램 (명령 줄 사용자 인터페이스) |







