컴퓨터 두뇌라고도 할 수 있는 CPU가 어떻게 프로그램을 실행하는지에 대해 17세 엔지니어인 렉시 매틱이 독학으로 조사한 지식 해설 웹페이지를 공개해 눈길을 끈다.
프로그램을 실행하면 어떻게 되는지 의문을 품던 이 학생은 독학으로 학습을 시작했지만 운영체제나 CPU가 어떻게 작동하는지에 대해 자세하게 해설하는 사이트를 찾지 못했다고 한다. 직접 해설 페이지를 만들기로 결심하게 된 이유다.
PC에서 프로그램을 실행할 때 CPU는 명령을 차례로 실행해야 한다. 하지만 CPU 프로세서는 한 번에 여러 프로그램을 실행할 수 없다. 따라서 운영체제 핵심을 맡는 커널이 타이머를 이용해 다수 프로그램 주에서 프로세서에 할당해야 할 태스크를 선택한다. 그 결과 CPU 내에서 프로그램은 일관되고 고립된 유닛으로 실행되고 있는 것으로 간주되어 처리가 진행된다.
컴퓨터를 시작하면 커널은 ‘init’ 프로그램을 시작한다. 이 프로그램은 컴퓨터 그래픽 환경을 렌더링하는 프로그램을 시작한 다음 추가 소프트웨어를 시작하는 책임을 진다. 다른 프로그램을 시작하려면 ‘fork’ 시스템 호출을 이용해 프로세스 사본을 만들어야 한다. 작성된 복사본은 메모리 페이지가 모두 복사 온라이트 COW를 도입하고 있어 물리적 램 내 메모리를 복사할 필요가 없기 때문에 상당히 효율적이라고 여겨지고 있다.
‘init’ 프로그램이나 다른 프로그램 기동 프로세스에 있어서도 자신이 ‘fork’ 시스템 콜을 사용해 복제된 프로세스인지 어떤지를 체크한다. 복제된 프로세스라고 확인되면 ‘exec’라는 시스템 콜을 이용해 커널에 현재 실행 중인 프로세스를 새로운 프로그램으로 옮겨놓을 걸 요구한다.
대체된 새 프로그램은 ELF(Executable and Linkable Format)라는 실행 파일 포맷으로 변환되며 커널은 프로그램을 로딩하는 방법과 새 가상 메모리 어디에 코드와 데이터를 배치하는지에 대한 정보를 제공한다. 찾기 위해 ELF 파일을 구분 분석한다. 프로그램이 유동적으로 링크되어 있다면 커널은 ELF 파일을 적절하게 변환할 수도 있다고 한다.
이후 커널은 프로그램 가상 메모리 내를 로딩해 해당 프로그램을 실행한 채로 커널 이외 운영체제가 동작하는데 필요한 파일 시스템이나 파일 조작 커멘드를 실행하는 유저 랜드에 되돌릴 수 있게 된다. 이 동작은 CPU 명령 포인터를 가상 메모리의 새로운 프로그램에서 코드 시작 부분으로 설정한다고 한다.
이 설명 페이지를 만들 때에는 챗GPT도 이용했다고 한다. 관련 내용은 이곳에서 확인할 수 있다.