오늘도 심심하게 강화학습 코드를 짜던 도중, 갑자기 궁금한게 생겼다.
? 근데 컴퓨터는 도대체 어떻게 1+2를 계산하는걸까?
그래서 알아보기로 했다.
먼저 과정을 서술한 후 각 질문점마다 하나씩 글을 쓰려고 한다.
렛츠 꼬우
(1) 프로그램 로딩:
운영 체제(운영 체제?)는 파이썬 인터프리터를 메모리에 로드(메모리에 로드? 어떻게?)는하고 실행합니다.
파이썬 프로세스는 운영 체제로부터 별도의 주소 공간(주소공간?)는을 할당(어떻게 할당?)는받습니다.
(2) 코드 해석과 컴파일:
파이썬 인터프리터(파이썬 인터프리터? 왜?)는는 코드를 읽고 바이트 코드로 컴파일(컴파일? 어떤 형식으로? 왜?)는합니다.
바이트 코드는 파이썬의 가상 머신인 PVM(파이썬 가상 머신)(PVM? 다른 VM들은 종류가 뭐가있지?)는에서 실행됩니다.
(3) 스레드 스케줄링:
코드 실행은 일반적으로 메인 스레드(스레드?)는에서 발생합니다.
운영 체제의 스케줄러(운영체제의 스케줄러?)는는 CPU 시간(cpu 시간?)는을 프로세스와 스레드에 할당합니다.
(4) CPU에서 연산 실행:
1와 2의 덧셈 연산은 CPU의 ALU(Arithmetic Logic Unit)(ALU?)는에서 발생합니다.
32비트 또는 64비트 연산(32비트와 64비트는 뭐가 다르지?)는, 종속적인 시스템 아키텍처(종속적인? 안 종속적인것은 뭐지? 시스템 아키텍처란?)는에 따라 연산이 수행됩니다.
(5) 메모리 액세스:
상수 5와 8은 CPU 레지스터(CPU 레지스터?)는 또는 캐시(캐시?)는에 로드됩니다.
연산 결과는 레지스터에 저장되고 필요에 따라 메모리에 쓰일 수 있습니다.
(6) 함수 호출 메커니즘:
print 함수가 호출될 때, CPU는 함수의 주소로 점프(점프?)는하고, 인자를 스택(스택? 어떻게 푸시?)는에 푸시합니다.
(7) 시스템 호출 및 입출력:
print 함수는 최종적으로 표준 출력에 값을 쓰는 시스템 호출(시스템 호출?)는을 만듭니다.
운영 체제는 시스템 호출을 처리하고, 적절한 드라이버(적절한 드라이버?)는를 통해 출력을 화면에 표시합니다.
(8) 프로세스 종료 및 리소스 회수:
프로세스는 종료(프로세스 종료?)는되고, 운영 체제는 할당된 리소스를 회수(리소스 회수?)는합니다.
정리하면
- 운영 체제
- 스케줄러(운영체제의 스케줄러?)
- 메모리(메모리에 로드? 어떻게?)
- 주소공간(주소공간?), (어떻게 할당?)
- 파이썬 인터프리터(파이썬 인터프리터? 왜?)
- 컴파일(컴파일? 어떤 형식으로? 왜?)
- PVM(PVM? 다른 VM들은 종류가 뭐가있지?)
- 스레드(스레드?)
- ALU(ALU?)
- 32비트와 64비트(32비트와 64비트는 뭐가 다르지?)
- 종속적인 시스템 아키텍쳐(종속적인? 안 종속적인것은 뭐지? 시스템 아키텍처란?)
- CPU 레지스터(CPU 레지스터?)
- 캐시(캐시?)
- CPU는 함수의 주소로 점프(점프?)
- 인자를 스택(스택? 어떻게 푸시?)
- 시스템 호출(시스템 호출?)
- 적절한 드라이버(적절한 드라이버?)
- 프로세스는 종료(프로세스 종료?)
- (리소스 회수?)
로 총 19개의 질문에 답하는 서사를 쓰려고 한다.
물론 이 질문들에 답하는 것이 나의 개발 인생에 큰 도움이 되거나, 취업에 유리해지는가? 라는 질문에는 당연히 "아니요"일 것이라고 생각한다.
하지만 재밋잖아 ㅋㅋ 그래서 하나씩 하나씩 정리해보면서 공부하려고 한다.