[include(틀:운영 체제)] [[분류:오픈 소스 소프트웨어]] [[분류:운영 체제]] [목차] == 개요 == [[파일:cosmosos.png]] C#으로 운영체제를 만들수 있게 해주는 키트이다. IDE는 최신버전 기준 [[Visual Studio]] 2022를 사용한다. == 설치 방법 == [[https://www.gocosmos.org/download/]]에서 확인 할수 있다. 유저 킷과 데브 킷으로 나뉘는데 데브 킷이 좀 더 많은 기능을 지원한다.[* 유저킷은 안정적이고 데브킷이 업데이트를 많이 한다. 깃에서 다운받아 빌드하는 형식이다.] 기본적으로 .NET Core 6.0 및 .NET 프레임워크 4.0가 필요하다. 유저 킷은 일반적인 프로그램 개발자용인데에 비해 데브킷은 좀 더 섬세한 개발자에게 권장된다. == 코딩 == 프로젝트를 만들면 Kernel.cs라는 파일이 생기고 기본적인 코드가 입력되어 있다. 위에 초록색 삼각형 버튼을 누르면 빌드가 시작된다.[* [[VMWare Player]]를 지원한다. 다만 [[VirtualBox]]를 사용해도 초반에는 별로 상관 없다.] 기본적으로는 CLI 기반이다. 그 외는 깃허브[* 자세히는 [[https://cosmosos.github.io]]이다.], 디스코드[* 기존 Gitter.im을 사용하였다.], 유튜브 등에서 다양한 강좌들이 있다. 코딩시 유의할 점은 Plug이다. 자세한 내용은 [[IL2CPU]] 참고. == 특징 == 파일시스템은 [[FAT32]]를 사용하며, 사용하기 전에 초기화[* 윈도우 등 다른 운영체제에서 포맷한것은 작동하지 않고, CosmosOS에서 직접 초기화해서 사용해야 하는데 초기화시 절반의 확률로 디스크가 손상된다...]를 해줘야 한다. 그리고 C#으로 코딩을 하면 IL2CPU[* C#을 어셈블리어로 바꿔주는 프로그램. 코스모스를 만든 곳에서 만들었다.]를 통해 어셈블리어로 바뀐다. [* Plugs라는 기능을 사용하는데, 이 기능은 시스템 라이브러리를 어셈블리어로 바꿔준다. 하지만 Plugs는 어셈블리어로 바꾸는 코드가 필요하기에 몇몇 기능이 지원되지 않는다.] CGS라는 코스모스 그래픽 인터페이스도 있다. CAI 코스모스 사운드 인터페이스도 있고 (AC97, 사운드블레스터16 호환기기만), 기본적인 DNS/IPv4 인터페이스도 있다. [* 현재 CosmosHTTP를 사용해 Http 연결을 할수 있다. 브라우저 엔진은 만들거나 디스코드에서 다운로드해야한다.] 디버깅이 가능한데, 디버그용 메시지를 보내거나, 충돌 알림, [[커널 패닉]] 알림, 심지어는 코드 실행 중간에 멈추는 것까지 가능하다.[* 디버깅 기능은 VMWare를 사용하고 디버깅 옵션이 켜져있어야 가능하다.] == 드라이버 == 기본 드라이버로는 그래픽 드라이버 (VBE 드라이버[* VBE 3.0 지원하지 않음.], VGA 드라이버[* 몇몇개의 해상도 지원하지 않음.]) ATA 드라이버 VFS 드라이버 (CD/DVD 파일시스템[* [[ISO9660]]], FAT32/16/12 파일시스템[* 실질적으로는 [[FAT32]]만 지원된다.]) USB1 드라이버[* 거의 Cosmos 출시했을때 부터 같이 있었는데 현재는 비활성화 되있다.] PS2 드라이버 등등이 있고 CosmosOS를 사용하는 개발자가 더 만들수 있다. == XSharp == [include(틀:상세 내용, 문서명=XSharp)] XSharp은 CosmosOS에서 만들고 사용하는 어셈블러이다. XSharp은 C#처럼 다루기 쉽다. == IL2CPU == [include(틀:상세 내용, 문서명=IL2CPU)] IL2CPU는 C#/VB.NET 코드를 XSharp으로 바꿔주는 툴이다. CosmosOS에서 만들고 사용한다. == 장점 == 코딩하기 쉽다. C#[* X#도 지원한다. X#은 쓰기 쉬운 어셈블리 (하이레벨 어셈블러)이다.]을 기본 언어로 사용하여 기존 C나 어셈블리로 코딩하는것보다 훨씬 쉬우며 GUI나 네트워크 드라이버도 지원하기 때문에 웬만한건 다 만들수 있다. 심지어는 멀티테스킹도 지원하는 라이브러리가 있다. SATA도 라이브러리가 있고, 무려 [[유니코드]]도 전용 라이브러리가 있다. == 단점 == 실제 하드웨어에서 구동하는데 한계가 있다. 또한 많은 버그를 일으킬수 있다. 특히 VFS, 파일 시스템 같은 경우 옛날 기기 (IDE 하드디스크)만 지원해 SATA로 실행은 힘든데 나머지 USB/NVME/SSD는 안된다로 보면 된다.[* 특정 라이브러리를 사용하여 사용까진 가능하다.] C#으로 코딩을 하다 보니 저수준 코딩이 어렵다. Plugs로 대충 할수는 있지만 세세하게는 못한다. 따라서 바이너리 프로그램 실행을 만드는것도 어렵다.[* 어렵긴 하지만 elf파일을 구동하는 구현이 있긴 있다.][* IL2CPU 설정을 조금 건들이면 C, C++ 코드도 사용가능하다.][* 사실 이건 X#을 사용하면 해결되는 문제다. 자세한 내용은 [[XSharp]]에서.] == 정말 운영체제를 만들고 싶다면 == 사실 이 킷은 운영체제 개발을 진지하게 고민하고 공부하고 싶다면 쓰지 않아도 된다. 제한이 너무 많고, 실제로 운영 체제 이론 (Paging, GDT 등등)을 배우기도 힘들기 때문이다. 따라서 정말로 OS를 제대로 만들고 싶다면 어셈블리어랑 C에 대한 지식을 완전히 쌓은다음 책 등을 통해서 개발을 해야 한다.