Serena는 광범위한 선제 동시성 및 여러 사용자를 지원하는 현대적인 설계 원칙을 기반으로 한 실험적인 운영 체제입니다. 커널은 객체 지향적이며 크로스 플랫폼 및 향후 증거로 설계되었습니다. 68030 이상의 CPU가 설치된 Amiga 시스템에서 실행됩니다.
전통적인 스레딩 기반 OSS를 제외한 한 가지 측면은 애플의 그랜드 센트럴 파견과 다소 유사한 파견 대기열 주위에 순전히 제작된다는 것입니다. 사용자 공간이나 커널 공간에서 스레드 생성을 지원하지 않습니다. 대신 커널은 가상 프로세서 풀을 동적으로 관리하는 가상 프로세서 개념을 구현합니다. 풀의 크기는 디스패치 큐의 요구에 따라 자동으로 조정되며 가상 프로세서는 필요에 따라 프로세스에 할당됩니다. 모든 커널 및 사용자 공간 동시성은 디스패치 큐를 만들고 대기열을 파견하기 위해 작업 항목을 제출함으로써 달성됩니다. 작업 항목은 단순히 사용자의 관점에서 단순히 폐쇄 (관련 상태가있는 함수)입니다.
또 다른 흥미로운 측면은 인터럽트 처리입니다. 인터럽트에 반응하려는 코드는 처리하려는 인터럽트에 대한 인터럽트 컨트롤러와 계산 세마포어를 등록 할 수 있습니다. 인터럽트 컨트롤러는 인터럽트가 발생할 때마다 세마포어를 신호합니다. 카운팅 세마포어를 사용하면 인터럽트에 관심이있는 코드가 인터럽트 발생을 놓치지 않도록합니다. 세마포어에서 인터럽트를 신호로 변환하면 인터럽트 처리 코드가 다른 종류의 코드가 실행되는 것과 동일한 종류의 컨텍스트 인 인터럽트 처리 코드가 실행된다는 것입니다. 또한 인터럽트 처리 코드가 인터럽트에 즉시 반응 할 필요가 없기 때문에 더 많은 유연성을 제공합니다. 인터럽트 핸들러 코드가 인터럽트 당시 다른 것들로 바쁘게 발생했는지 여부에 관계없이 인터럽트가 발생한 정보는 절대 손실되지 않습니다.
커널은 일반적으로 재진입합니다. 이는 가상 프로세서가 CPU가 커널 내부에서 실행되는 동안에도 가상 프로세서가 계속 예약되고 컨텍스트를 선제 적으로 전환 함을 의미합니다. 또한 세마포르, 조건 변수 및 잠금 API를 계산한다는 전체 칭찬은 커널 내부에서 사용할 수 있습니다. 해당 객체의 API는 기존 OS의 사용자 공간 구현에서 찾을 수있는 것과 매우 유사합니다.
Serena는 Posix와 유사한 계층 적 프로세스 구조를 구현합니다. 프로세스는 여러 아동 프로세스를 생성 할 수 있으며 명령 줄 및 환경 변수를 어린이에게 전달할 수 있습니다. 프로세스는 POSIX의 파일 설명자와 유사한 I/O 채널을 통해 I/O 리소스에 액세스합니다.
그러나 Posix 스타일 프로세스 모델과 Serena 모델에는 두 가지 주목할만한 차이점이 있습니다. 먼저 Fork ()를 사용하는 대신 exec ()를 사용하여 새 프로세스를 생성하는 대신 Serena에서 Process_spawn ()이라는 단일 함수를 사용합니다. 이로 인해 프로세스가 훨씬 빠르고 오류가 발생하기 쉬운 프로세스가 훨씬 빠릅니다.
둘째, 아동 프로세스는 기본적으로 부모의 파일 설명자를 상속하지 않습니다. 유일한 예외는 단자 입력 및 출력 스트림을 나타내는 파일 설명자 0, 1 및 2입니다. 이 모델은 Posix 모델에 비해 오류가 훨씬 적습니다. Posix 모델에 비해 프로세스가 자식을 생성하기 전에 아동 프로세스에 전달하고 싶지 않은 파일 설명자를 닫으려면주의해야합니다. 이 작업을 수행하는 것은 응용 프로그램이 거의 자체적으로 포함되어 있고 동적 라이브러리에 대한 지원이 없었던 UNIX 초기에는 쉬웠습니다. 응용 프로그램이 훨씬 더 복잡하고 많은 타사 라이브러리에 의존하기 때문에 오늘날에는 반대입니다.
이 시점에서 실행 파일 형식은 AOUT 실행 파일 형식에 비해 가까운 ATARI ST GEMDOS 파일 형식입니다. 이 파일 형식은 결국 동적 라이브러리를 지원할 수있는 파일 형식으로 대체됩니다. 그러나 지금은 일을 끝내기에 충분합니다.
커널은 권한과 사용자 및 그룹 정보가 포함 된 계층 적 파일 시스템 인 Serenafs를 구현합니다. 파일 시스템은 파일 네임 스페이스를 확장하기 위해 다른 파일 시스템에있는 디렉토리 위에 장착 될 수 있습니다. 이 모든 것이 Posix 시스템에서 작동하는 방식과 유사합니다. 아동 프로세스를 생성하려는 프로세스는 아동 프로세스가 글로벌 파일 시스템 네임 스페이스의 하위 트리에 국한되어야한다고 지정할 수 있습니다.
부팅 파일 시스템은 현재 RAM 기반입니다. ROM에는 디스크 이미지가 포함되어 있으며 불분명 도구로 생성되고 Ram 디스크의 템플릿 역할을합니다. 이 ROM 디스크 이미지는 부팅 시간에 RAM에 복사됩니다.
사용자 공간에는 LIBC, LIBSYSTEM, LIBCLAP 및 LIBM의 시작을 지원합니다. Libsystem은 커널 인터페이스의 사용자 공간 측면을 구현하는 라이브러리입니다. LibClap은 명령 줄 인터페이스 프로그램에 대한 인수 구문 분석을 구현하는 라이브러리입니다.
Serena OS에는 공식적으로 정의 된 쉘 언어를 구현하는 쉘이 제공됩니다. 여기에서 쉘 문서를 찾을 수 있습니다.
현재 다음 커널 서비스가 구현됩니다.
현재 다음과 같은 사용자 우주 서비스를 사용할 수 있습니다.
현재 다음 사용자 공간 프로그램을 사용할 수 있습니다.
다양한 모듈의 완전성과 정확성 수준은 현재 매우 다릅니다. 상황은 일반적으로 시간이 지남에 따라 향상되도록 계획됩니다 :)
현재 다음 하드웨어가 지원됩니다.
개발 및 OS 실행을위한 프로젝트를 설정하는 것은 약간 관련이 있습니다. 아래 지침은 Windows 용이지만 Linux 및 MacOS에서 거의 동일하게 작동해야합니다.
가장 먼저 필요한 것은 Amiga 컴퓨터 에뮬레이터입니다. https://www.winuae.net/download에서 다운로드 할 수있는 Winuae를 사용하고 있습니다
Winuae 설치 프로그램을 다운로드하여 실행하십시오. 이렇게하면 에뮬레이터가 부트 드라이브에 '프로그램 파일'디렉토리 안에 배치됩니다.
다음으로 운영 체제를 구축하는 데 필요한 VBCC 컴파일러 및 어셈블러를 다운로드하여 설치하십시오. 프로젝트 홈페이지는 http://www.compilers.de/vbcc.html에 있고 http://sun.hasenbraten.de/vbcc의 도구에 대한 다운로드 페이지를 찾을 수 있습니다.
개발에 사용하는 버전과 Windows 11에서 올바르게 작동하는 버전은 0.9h입니다. 디스크의 VBCC 폴더를 가리키는 VBCC 라는 이름의 환경 변수를 추가하고 vbccbin 폴더를 PATH Environment 변수에 추가하십시오.
Windows에서 빌드 도구를 빌드하려면 Microsoft C 컴파일러가 필요하기 때문에 Microsoft Visual Studio 및 Command Line 도구가 설치되어 있어야합니다.
마지막으로 Windows에 GNU Make를 설치하고 PATH 환경 변수에 있는지 확인하십시오. 이 작업을 수행하는 간단한 방법은 쉘 창에서 다음 Winget 명령을 실행하는 것입니다. winget install GnuWin32.Make .
이 단계를 한 번만 실행하면 OS를 구축하려고하기 전에. 이 단계의 목적은 커널 및 사용자 공간 라이브러리를 구축하는 데 필요한 몇 가지 도구를 구축하는 것입니다. 이 도구에 대한 문서를 여기에서 찾을 수 있습니다.
먼저 Windows 터미널에서 개발자 명령 프롬프트를 열린 다음 CD를 Serena/Tools 폴더로 엽니 다. make and Hit Return을 입력하십시오. 이렇게하면 필요한 모든 도구를 구축하여 Serena/build/tools 폴더 내에 배치합니다. OS 프로젝트를 완전히 청소하더라도 도구는이 위치에 유지됩니다.
Visual Studio Code에서 Serena Project 폴더를 열고 Run Build Task... 메뉴에서 Build All 선택하십시오. 이렇게하면 커널, libsystem, libc, libm 및 shell을 만들고 Serena/product/Kernel/ 폴더 내에 단일 Serena.rom 파일을 생성합니다. 이 ROM 파일에는 커널, 사용자 공간 라이브러리 및 쉘이 포함되어 있습니다.
먼저, 아직 48030 CPU (예 : Amiga 3000 또는 4000) 이상의 Amiga 구성을 만들어야합니다. 이를 수행하는 가장 쉬운 방법은 QuickStart로 가서 A4000을 모델로 선택하는 것입니다. 그런 다음 하드웨어/ROM 페이지로 이동하여 디스크의 Serena/build/product/ Folder 내부의 Serena.rom 파일을 가리킬 수 있도록 "Main ROM 파일"텍스트 필드를 업데이트하십시오. 마지막으로 하드웨어/RAM 페이지로 가서 "느린"항목을 1MB로 설정하여 가상 Amiga를 최소 1MB의 빠른 RAM에 제공하십시오. 다음에 OS를 실행할 때 재현 할 필요가 없도록이 구성을 저장하십시오.
구성을로드 한 다음 시작 버튼을 누르거나 구성 페이지에서 구성을 두 번 클릭하여 OS를 실행하십시오. 에뮬레이터는 부팅 메시지와 쉘 프롬프트를 표시하는 화면을 열어야합니다. 쉘에서 지원하는 명령 목록은 쉘 페이지를 참조하십시오.
MIT 라이센스에 따라 배포됩니다. 자세한 내용은 LICENSE.txt 참조하십시오.
Dietmar Planitzer- @linkedin
프로젝트 링크 : https://github.com/dplanitzer/serena