002▲ 154 · 댓글 39x86 'ud2' 명령어의 이름 유래, 정의되지 않은 명령어의 역사ud2는 x86 아키텍처에서 공식적으로 정의된 '항상 예외를 발생시키는' 명령어로, 컴파일러가 실행 불가능한 코드를 표시하거나 [[noreturn]] 함수가 반환되는 것을 감지하기 위해 생성합니다.
하드웨어 · 시스템 · Why is the x86 undefined instruction called ud2? Why 2?
x86 'ud2' 명령어의 이름 유래, 정의되지 않은 명령어의 역사
Key Point
x86 명령어 세트의 규격이 어떻게 역사적 사건과 호환성 문제로 인해 진화했는지 보여주며, 저수준 프로그래밍과 디버깅을 다루는 개발자에게 실제 명령어 동작의 배경을 이해하는 데 도움이 됩니다.
핵심 요약
ud2는 x86 아키텍처에서 공식적으로 정의된 '항상 예외를 발생시키는' 명령어로, 컴파일러가 실행 불가능한 코드를 표시하거나 [[noreturn]] 함수가 반환되는 것을 감지하기 위해 생성합니다.
원래 x86에는 공식적인 정의되지 않은 명령어가 없어서 프로그래머들이 0F FF와 0F B9 같은 바이트 시퀀스를 찾아 비공식적으로 무효 명령어 예외를 트리거했습니다.
인텔이 새 프로세서를 출시했을 때 이런 바이트 시퀀스들이 더 이상 예외를 발생시키지 않거나 다른 동작을 하면서 기존 소프트웨어가 깨지는 현상(Hyrum's Law)이 발생했습니다.
인텔은 결과적으로 0F FF를 ud0, 0F B9를 ud1로 소급 명명하고, 새로운 공식 표준 명령어 ud2를 만들어 제공했습니다.
ud2의 장점은 2바이트 명령어로 파라미터가 없어서, 메모리 접근 오류 발생 시 기존의 ud0/ud1처럼 일관되지 않은 예외(invalid opcode vs access violation) 문제가 없습니다.
005▲ 422 · 댓글 122BZip2를 잇는 고성능 압축 도구 BZip3 공개BZip3는 context mixing 엔트로피 코더, suffix array 기반 버로우스-휠러 변환, LZ77/PPM 스타일 문자열 매칭으로 더 높은 압축률을 제공하는 BZip2의 후속작이다.
오픈소스 · 도구 · bzip3
BZip2를 잇는 고성능 압축 도구 BZip3 공개
Key Point
BZip2 대비 우수한 압축률과 속도를 제시한 새 도구인 만큼, 대용량 텍스트/코드 압축이 필요한 개발 환경에서 즉각 검토할 가치가 있다.
핵심 요약
BZip3는 context mixing 엔트로피 코더, suffix array 기반 버로우스-휠러 변환, LZ77/PPM 스타일 문자열 매칭으로 더 높은 압축률을 제공하는 BZip2의 후속작이다.
Perl 소스 코드 전체(262개 파일)를 압축한 테스트에서 BZip3 -b 256은 546MB로 xz의 2GB, bzip2의 3.4GB보다 훨씬 작게 압축했다.
동일 데이터 압축 해제 시간은 4분 6초로 xz의 4분 40초보다 빠르고, 병렬 처리로 여러 쓰레드 활용이 가능하다.
lrzip과 함께 사용하면 60MB까지 압축되어 lrzip+lzma의 64MB, lrzip+bzip2의 75MB보다 우수한 결과를 보였다.
x64 Linux에서 clang 컴파일 시 초당 17MB 압축, 23MB 해제 속도를 달성하며, x86, ARM, PowerPC 등 다양한 아키텍처를 지원한다.
LGPLv3 라이선스로 배포되며 macOS는 Homebrew로, 소스는 표준 configure/make/install 절차로 설치 가능하다.