Chengcheng OS (CCO)는 취미 64 비트 운영 체제입니다. 나는 슬픔과 불행을 좋아하기 때문에 x86에 그것을 쓰고 있습니다. 이 프로젝트는 여전히 개발 중이 었습니다. 저는 운영 체제 설계의 초보자입니다. 내가 구현 한 많은 디자인 개념은 CCLDR (Chengcheng OS 용 OS 로더) 및 메모리 관리자와 같은 Windows NT에서 영감을 얻었습니다. 그리고 몇 달 동안 배워야 할 더 많은 과정이 있습니다. 따라서 프로젝트를 자주 업데이트하지 않을 것입니다.

uefi
CCOS는 UEFI를 사용하여 CCOSKRNL을 부트 스트랩합니다. UEFI는 OS 로더 개발을 크게 촉진합니다. 개발자는 UEFI가 제공하는 인터페이스를 직접 호출 할 수 있습니다 (어셈블리 대신 C 언어 사용). CCOS는 여전히 CCOSKRNL을로드하기 위해 CCLDR (다른 이진 실행 파일)이 여전히 필요하다는 점에 주목해야 할 사항이 있습니다. "두 번째 단계 부트 로더"와 비슷합니다. 그러나 실제로 Bootx64.efi는 단순히 커널 공간을 나누고 CCOSKRNL 이미지 로딩에 적합한 물리적 메모리 공간을 검색합니다. 그런 다음 CCLDR은 커널 공간을 가상 주소 공간의 높은 주소로 매핑하고 GDT를 설정합니다 (Global Descriptor Table, X86 아키텍처의 중요한 구조).
다중 프로세서
다중 프로세서 지원은 저에게 엄청난 도전입니다. 다중 프로세서 시스템의 좋은 구현을 보장하지는 않습니다. 현재 CCO는 다른 응용 프로그램 프로세서를 올바르게 활성화 할 수 있습니다. CCOS는 다른 운영 체제 데모와 마찬가지로 애플리케이션 프로세서 초기화 루틴을 격리 된 이진 파일에 넣고 첫 번째 물리적 메모리의 1 MIB에로드하고 메모리 공간의 페이지 테이블을 별도로 작성합니다. 응용 프로그램 프로세서가 실행되기 전에 CCO는 이진 프로그램의 상대 주소 인용을 수정합니다. 나는 인정해야한다. 이것은 어리석은 디자인이다.
APIC
APIC (Advanced Programmable 인터럽트 컨트롤러)는 최신 컴퓨터 시스템의 중요한 구성 요소입니다. 다중 프로세서 시스템의 가능성을 제공하고 하드웨어 수준에서 다단계 인터럽트 우선 순위를 지원합니다. 불행히도 APIC는 복잡합니다. APIC를 완전히 이해하려면 컴퓨터 시스템에 대한 건전한 지식이 필요하기 때문에 APIC의 기본 드라이버 만 구현합니다.
트루 타입
CCOS는 트루 타입 글꼴을 렌더링하여 화면에 문자를 표시합니다 (CCO의 기본 글꼴은 Adobe 소스 Han Sans SC VF ). TrueType 렌더링을 사용하여 문자를 출력하는 것은 가치가 없습니다. 초기 OS 개발의 경우 비트 맵 글꼴 사용이 더 권장되는 문자 출력 방법입니다.
아마도 문자를 윤곽선으로 저장하는 데있어 가장 큰 것은 아마도 캐릭터 당 하나의 개요 만 해당 캐릭터 OS의 모든 크기를 생산하기 위해 필요하다는 것입니다. 단일 개요는 거대한 다양한 크기로 확장 될 수 있으며, 그 중 일부는 아래에 설명되어 있습니다. 이를 통해 동일한 문자를 다른 해상도의 모니터에 표시하고 많은 크기로 인쇄 할 수 있습니다. 캐릭터 개요를 확장하는 것은 실제로 회전 및 반사와 같은 다른 변환과 마찬가지로 간단한 수학적 작업입니다.
TrueType의 구조는 복잡하며 TrueType의 힌트없이 글꼴 래스터 라이저 만 구현했습니다. 힌팅은 트루 타입의 핵심입니다. "올바른"유형의 유형에 대한 다양한 의견을 염두에두고 발명자들은 유형 개발자에게 부과 할 단일 힌트 패러다임이 없다고 결정했습니다. 대신, 그들은 비교적 간단한 레스터 라이저를 새로운 해석 프로그래밍 언어와 연결했습니다. 그러나 글꼴 이독성을 위해서는 충분합니다.
이것들은 여기에서 cirtical issus입니다. 이것은 CCO의 텍스트 출력의 사전 성이 매우 풀이라는 것입니다. 나쁜 성과는 CCO의 실행을 심각하게 느리게 할 것입니다. 글꼴 도면이 비교적 복잡한 프로세스이기 때문에 기능을 최적화하는 방법을 모르겠습니다. 또 다른 방법은 대신 Truetype 글꼴에 비트 맵 글꼴을 사용하는 것입니다.
넓은 숯
CCOS는 모든 문자를 저장하기 위해 "char"및 "wch_t"(넓은 숯, 4 바이트)의 두 가지 문자 유형을 제공합니다. 문자 유형에 관계없이 CCO는 항상 WCH_T를 먼저 변환 한 다음 넓은 문자열을 출력합니다. 실제로 CCO의 트루 타입 파서는 "유니 코드 2.0 및 이후 따라서 유니 코드 기본 다국어 평면 문자 (u+0000 ~ U+FFFF)를 독점적으로 지원합니다.
메모리 관리자
메모리 관리의 디자인 아이디어는 PFN 데이터베이스, 룩 사이드, 페이지-디렉토리 셀프 매핑 체계, 라미네이션 메모리 풀 관리 등을 포함하는 Window NT에서 영감을 얻었지만 전부는 아닙니다.
멀티 윈도우로 그래픽 출력
CCOS는 멀티 윈도를 지원하므로 화면의 다른 창에서 텍스트를 출력 할 수 있습니다. 각 프로세서에 텍스트 출력 창을 열어 다중 프로세서를 디버그하는 것이 좋습니다. 마우스 드라이버가 없더라도 사용자는 키보드를 사용하여 문자를 입력 해야하는 창을 선택할 수도 있습니다.
버그 수정 : 여러 Windows 출력의 충돌을 방지하기 위해 Spinlock 추가
메모리 누출 감지가있는 동적 메모리 관리자
시스템 PTE 관리
PCIE 관리
NVME 드라이버
키보드 드라이버 (긴급하지 않음)
gib ram 이상의 QEMU
나는 커널 공간이 availalbe ram의 1/4 만 사용하도록 메모리 공간을 대략적으로 나눕니다. 그러나 문제는 getMemoryMap () 루틴이 QEMU에 대해 더 높은 RAM (2 gib보다 큰)을 할당하려고 할 때 잘못된 메모리 맵 정보를 반환했다는 점을 알아야합니다. 다른 OVMF 펌웨어를 시도하지 않으므로 이러한 오류가 내 OVMF에서 비롯 될 수 있다고 생각합니다.
AVX 명령 세트가있는 X86_64 CPU (인텔 또는 AMD)
Intel 64와 AMD64 사이에는 X86_64 아키텍처 프로그래밍에는 약간의 차이가 있습니다. AMD CPU를 기반으로 CCO를 개발하고 있지만 Intel® 64 및 IA-32 Architectures 소프트웨어 개발자 매뉴얼을 X86_64 ArchiteChure Reference 매뉴얼로 사용합니다. 그러나 지금은 CPU 공급 업체가 무엇이든간에.
설치하려면 CCOSKRNL 빌드를 참조하십시오
수학 라이브러리 (refleibs/libm.a)는 @estrella에 의해 제공되었습니다
라이센스가 없습니다.
이메일 : [email protected]
Chengcheng OS : https://github.com/ccoskrnl/ccoskrnl
Intel® 64 및 IA-32 아키텍처 소프트웨어 개발자 매뉴얼
AMD64 아키텍처 프로그래머의 매뉴얼 볼륨 2 : 시스템 프로그래밍
C 프로그래밍 언어
Osdev Wiki
ACPI 사양
UEFI 사양