오늘은 TEST DIRECTORY 에 있는 코드들을 이해해 정리해보고자 한다. 금일 (1.9.25) 기준 코드입니다! 오픈소스다 보니 나중에 들어갔을때 코드가 변경 되있을수 있음!
TEST DIRECTORY
- Cosmos.Common.Tests : 공통 모듈의 테스트를 위한 폴더로 보임
- Cosmos.Core.Memory.Test : Cosmos 프로젝트의 메모리 관련 테스트를 수행하는 폴더
- Cosmos.Core.Tests : Core 기능에 대한 테스트를 포함한 폴더
- Cosmos.System.Tests : 시스템 관련 테스트 기능
- Cosmos.TestRunner.Core : 테스트 러너의 코어 부분에 대한 폴더
- Cosmos.TestRunner.Full : 전체 테스트 러너를 포함하는 폴더
- Cosmos.TestRunner.TestAdapter : 테스트 어댑터와 관련된 폴더
- Cosmos.TestRunner.TestController : 테스트 컨트롤러 관련 폴더
- Cosmos.TestRunner.UI : 테스트 러너의 사용자 인터페이스(UI)를 담당하는 폴더
- Cosmos.TestRunner.UnitTest : 유닛 테스트 관련 폴더
- Cosmos.TestRunner : 테스트 러너의 주요 코드 베이스로 보임.
- Cosmos.VS.Windows.Test : 윈도우 환경에서의 테스트를 포함하는 폴더
- Data : 데이터 관련 폴더
- Kernels : 커널 관련 파일 및 테스트를 포함하는 폴더
- Dockerfile
확실히 이 테스트 폴더에서 모듈의 이름을 통해 유추했을때, Kernel, 메모리관리, 파일 시스템 테스트 러너등의 컴포넌트가 명시되어 있고 운영체제의 핵심 기능을 테스트하고 개발하는 프로젝트임을 보여준다. 아무래도 Cosmos.Commom.Tests 즉 공통 모듈을 통해 여러 모듈에서 공통적으로 사용하는 유칠리티 또는 라이브러리를 테스트하고, Core 모듈(Cosmos.Core.Tests 및 Cosmos.Corre.Memory.Test) 등 운영체제의 기본기능(코어)와 메모리 관리 기능을 테스트 하며 시스템 관련 테스트 (Cosmos.System.Tests) 즉 시스템 수준의 기능을 테스트 에서 패키지 잠금 파일 활성화는 의존성 관리 그리고 일관성 유지하기 위한것 같다. 그리고 테스트 러너 관련 (Cosmos.TestRunnner...) 에서는 테스트 관련된 다양한 모듈(UI, Core, Adapter, Unittest 등) 과 같이 세분화 되어 있고 네트워크 테스트 비 활성화, ISO 생성 로깅 개선, 빌드및 CI 문제 해결등 할수 잇는것 같다 즉 테스트 자동화에 대한 CICD 완경의 중요한 역할을 하며, 윈도우 관견 테스트(Cosmos.VS.Windows.Test) 즉 윈도우 환경에서 테스트가 실행되며, 빌스시 분석기는 제거하는등 의 여럿 테스트 가 있는것 같다. 그리고 커널관련 폴더가 있는것으로 보아 운영체제의 핵심 부분인 커널 관련 테스트와 그레픽 테스트 추가등 그와 같은 기능을 지원한다고 유추된다. Docker 는 이 프로젝트 테스팅을 할때 필요한 환경설정이 필요하다라는걸 유추할수 있다.
물론 이 안에 있는 코드를 보며 더 알아보아야하겠지만 일단 얼추 보았을때, 테스트 중심의 개발 즉 다양한 테스트 모듈들이 잘 분리되어 있어 (TDD Test-Driven Development)가 중요한 개발 방법으로 사용되고 있는듯하고 CI/CD 및 자동화가 잘되어 있으며 모듈화되 있는 구조를 보니 유지보수성과 확장성을 고려한 설계를 한듯 하다.
또한 커널, 파일 시스템(FAT), 메모리 관리, 블록장치, 네트워크등 운영체제의 주요 구성요소를 테스트를 하니 Nvidia 가 정말 이갈고 운영체제를 만들려고 할꺼 같다라는 생각이 들고 FAT 파일 시스템을 사용하는것 같다. 최근 까지 패키지 의존성 관리 강화, 빌드와 테스트 안정화, 네트워크 테스트 개선, 그래픽 관련 테스트 추가등 하나하나 사람들이 같이 구축해나아나는것 같다. 아직 개발단계이긴한데 이 것을 위해 운영체제에 대해 좀더 알아보고 어떻게 기여를 할수 있을지를 생각해보고 파일들을 보며 더 이해를 해보아야겠다.
FAT 파일 시스템이란?
FAT (File Allocation Table)은 마이크로소프트에서 개발한 파일 시스템으로써, 파일 데이터를 저장, 관리하는데 사용되며, 이 시스템은 컴퓨터 저장장치와 컴퓨터에서 파일의 물리적 위치를 추적하기 위한 구조 알고리즘을 제공함.
FAT 구성 요소
- 부트 섹터 (Boot Sector)
- 볼륨(디스크)의 파일 시스템 정보를 저장합니다.
- 파일 시스템 종류(FAT12, FAT16, FAT32 등), 디스크 용량, 클러스터 크기 등의 정보를 포함합니다.
- 파일 할당 테이블 (FAT: File Allocation Table)
- 파일이 저장된 클러스터(Cluster)의 체인을 관리합니다.
- 각 클러스터는 다음 클러스터의 번호를 저장하며, 파일의 연속 데이터를 추적합니다.
- 파일 끝을 나타내는 EOF(End of File) 값과 사용되지 않는 클러스터를 나타내는 Free 값이 포함됩니다.
- 루트 디렉터리 (Root Directory)
- 최상위 디렉터리로, 디렉터리와 파일의 메타데이터(파일 이름, 확장자, 속성 등)를 저장합니다.
- FAT12 및 FAT16에서는 고정된 크기를 가지며, FAT32에서는 클러스터 기반으로 확장됩니다.
- 영역 (Data Area)
- 파일 데이터가 실제로 저장되는 클러스터 공간입니다.
- FAT 테이블을 통해 파일이 데이터 영역에서 저장된 위치를 추적합니다.
FAT 파일 시스템의 특징
장점
- 광범위한 호환성
- 거의 모든 운영 체제(Windows, Linux, macOS 등)에서 지원됩니다.
- 카메라, 게임 콘솔, 임베디드 시스템 등 다양한 기기에서 사용됩니다.
- 구조 단순성
- 파일 시스템 구조가 단순하여 구현 및 이해가 쉽습니다.
- 작은 디스크나 임베디드 환경에 적합합니다.
- 속도
- 디스크 용량이 작을 때 빠른 성능을 제공합니다
단점
- 용량 제한
- FAT16: 최대 2GB, FAT32: 최대 2TB.
- 이는 현대 대용량 스토리지에서는 한계로 작용합니다.
- 파일 크기 제한
- FAT32는 단일 파일 크기를 4GB로 제한합니다.
- 조각화 문제
- 파일 데이터를 물리적으로 연속된 공간에 저장하지 않으므로, 시간이 지남에 따라 디스크 조각화(Fragmentation)가 발생합니다.
- 보안 기능 부족
- 사용자 권한 관리와 암호화 등의 기능이 없으며, 현대 파일 시스템(NTFS 등)에 비해 보안성이 떨어집니다.
FAT 파일시스템은 디스크 저장 공간을 효율적으로 관리가 가능하며, 다양한 플랫폼에서 호환성ㅇ르 제공하는 파일 시스템이다보니 이를 고려한거 같다.
'[Project를 위한 공부]' 카테고리의 다른 글
[Project 를 위한 공부] Serializer 와 Deserializer (3) | 2025.01.16 |
---|---|
[Project를 위한 공부] github.io 로 블로그 정검하기 (3) | 2025.01.14 |
[Project를 위한 공부] Meta data 정리 (2) | 2025.01.13 |
[Project를 위한 공부] COSMOS 읽어보기 (2) (1) | 2025.01.10 |
[Project 를 위한 공부] Open Source 이해보기(Feat. CosMosOS)(1) (2) | 2025.01.08 |