Fabrice Bellard의 Javascript에서 Linux 에뮬레이터는 어떻게 작동합니까?
오늘 저는 자바 스크립트에서 Linux 에뮬레이터를 보았을 때 깜짝 놀랐습니다. http://bellard.org/jslinux/
C 프로그램을 컴파일하고 vi와 emacs를 가지고 있으며 모든 쉘 명령 등을 지원합니다.
어떻게 작동합니까?
처음에는 이것이 단지 VM에 연결하는 터미널 에뮬레이터라고 생각했지만 그렇지 않습니다. 네트워크 연결을 보면 부팅 후 더 이상 데이터가 전송되지 않음을 알 수 있습니다.
그래서 그것은 진짜입니다.
CPU는 마법이 아닙니다. 실제로 그것이하는 일은 메모리에서 바이트를 읽고 명령이 의미하는 바에 따라 RAM을 수정하는 것입니다.
이 경우 CPU 에뮬레이터는 qemu 코드를 기반으로합니다. 그가하는 일은 인덱스가 PC (프로그램 카운터)의 다음 바이트 인 함수 배열을 만드는 것입니다.
이제 필요한 것은 부동 소수점 산술이나 MMX 코드 및 짜잔 같은 이국적인 CPU 명령이 필요하지 않은 간단한 Linux 배포판입니다.
흥미로운 것은 짐승의 속도입니다. 모든 것이 약간 느리지 만 브라우저의 JavaScript입니다.
결론 : 인상적입니다. C64 에뮬레이터를 볼 때까지 기다릴 수 없습니다. :-)
참조 http://www.quora.com/CPU-Emulation/How-does-bellard-org-jslinux-work를
단순화 된 설명
jslinux는 본질적으로 소프트웨어, 특히 JavaScript로 구현 된 완전한 컴퓨터입니다. 이것은 물론 에뮬레이터로 알려져 있습니다. 이 특정 버전은 Linux를 실행하도록 설정되어 있지만 이론적으로는 다른 운영 체제를 대신 실행할 수 있습니다.
에뮬레이터 (JavaScript, ~ 90KB 축소, ~ 7000 줄 형식)가 브라우저에로드됩니다. Linux 버전은 이전에 x86 프로세서 용 기계 코드로 컴파일되어 에뮬레이트 된 컴퓨터의 RAM 역할을하는 큰 정수 배열로로드되고 복사됩니다. 그런 다음 에뮬레이터 CPU는 기계어 코드의 첫 번째 명령어를 가리키고 명령어 해석을 시작하도록 지시합니다 (예 : RAM 읽기 / 쓰기, 산술 및 논리 연산 수행, 다른 명령어로 건너 뛰기 등). 때로는 브라우저 DOM을 사용하여 직렬 포트와 터미널을 시뮬레이션하는 다른 JavaScript 코드를 통해 "터미널"에 데이터 (시스템 로그 또는 쉘 명령 프롬프트와 같은)를 기록합니다. 키 누름도이 시뮬레이션 된 직렬 포트를 통해 Linux로 다시 전송됩니다.
'Programing' 카테고리의 다른 글
Angular Material Angular Material 핵심 테마를 찾을 수 없습니다. (0) | 2020.11.10 |
---|---|
암호화없이 PHP 코드를 보호하는 최상의 솔루션 (0) | 2020.11.09 |
Scala에 적합한 GUI 프레임 워크? (0) | 2020.11.09 |
PL / SQL에서 함수와 프로 시저의 차이점은 무엇입니까? (0) | 2020.11.09 |
HTML에서 소수점 정렬 (0) | 2020.11.09 |